Task Catalog (Pinke)
Pick one task per run.
Completion rule: After you finish a task, append a β
Done: section directly below that task including:
- Summary
- Files changed
- Behavior changes
- How to test
- Assumptions (if any)
- Verification notes (commands + manual checks)
For agent workflow and operating principles, see: /docs/agent-guide.md.
Colors in Balancing
Complexity: 2
Standardize colors across the balancing visualization: - Use ONE color family for all inflow (money in) β with different shades/levels - Use ONE color family for all outflow (money out) β with different shades/levels
Color palette to use:
- Inflow (income/money in): Purple/Indigo #6366F1 (and shades)
- Outflow (expenses/money out): Pink/Magenta #EC4899 (and shades)
- Net: Teal/Cyan #14B8A6 (keep as is)
Files to check:
- Main gradient defined in /app/templates/static/css/visualize.css (line ~12)
- Look for balancing-related templates in /templates/
Rules System
80/20 Rule Analysis
Complexity: 3
Implement analytics to identify which 20% of rules are catching 80% of transactions.
Deliverables: - Rule effectiveness metrics (match count, percentage of total) - Surface top-performing rules in the UI - Consider suggesting rule consolidation opportunities
- copy rules in rules overview
- your rules contains: to be editable, but check if it match the dataset
- same representation of the rule as the other rules, add edit button htmx edit form!
-
your rules render same structure as system rules
-
in /me in Rules overview representation in text form < sentence
- move rules to top: Rules Overview and then Files Overview
-
Manage Icon is missing
-
link from ingest to rule overview, with rule opened
-
ml_taxonomy.yaml annotations has no group and is not listed in rules β (group support added)
- restaurant sucks, NEOTASTE, Gazzo, ... < adding full new entry just for restaurant needs to be simpler β (ml_taxonomy approach)
-
Show ml_taxonomy source on matched transactions (e.g., "source: ml" badge)
-
make rule match editable too and adjustable, what are possible operators, values, and conditions
- copy same rule multiple times, why not possible?
β
Done: Rule Match Form Interface
- Summary: Implemented a comprehensive match builder component supporting text/merchant/amount matching with multiple conditions and AND/OR logic.
- Files changed:
- app/templates/components/_match_builder.html - New visual match builder component
- app/users/rules.py - Added validate_match_structure() and upsert_user_rule_with_match()
- app/routes/rules_page.py - Updated to handle match_json parameter
- app/templates/rules/_user_rules.html - Integrated match builder into create/edit forms
- Behavior changes:
- Users can now create rules with text (contains/matches), merchant (exact), or amount (gt/gte/lt/lte/eq) conditions
- Multiple conditions can be combined with AND/OR logic
- Natural language preview displays the match in readable format
- How to test: Go to /rules, click "New rule", use the match builder to create a rule with different field types and multiple conditions.
- Verification: Tested via browser, all match types and logic combinations work correctly.
Transaction Modal UX
Complexity: 3
Improve the transaction detail modal in ingest view: - Show annotations in natural language string (like rule overview) - Add edit option for annotations - Review all buttons and toggles in modal for consistency - Ensure clear action hierarchy
Files to check:
- /app/templates/ingest/_rules_form.html
- /app/templates/ingest/table/
Pie Chart Improvements
Complexity: 2
Enhance the category pie chart (/visualize/pie):
- Add toggle to switch between money (β¬) and percentage display
- Add thin border to pie chart segments:
- Dark mode: thin black border
- Light mode: thin white border
- Improve segment visibility and separation
Files to check:
- /app/templates/visualize/pie.html
- Related JS/CSS for Chart.js
β
Done:
- Summary: Enhanced the pie chart with dynamic borders, β¬/% toggle, and guaranteed data consistency.
- Files changed:
- app/templates/static/js/pie.js - Dynamic borders, dual-mode labels, 100% rounding (largest-remainder), precise European tooltips.
- app/templates/visualize/pie.html - Added toggle switch and updated group buttons to show % and β¬.
- app/visualizer/numbers.py - Fixed 'none' group skip, added pre-rounded display values, and provided raw floats for tooltips.
- app/routes/ingest.py & docs/AGENTS.md - Added testing infrastructure for artifacts.
- Behavior changes:
- Labels show integer percentages that always sum to exactly 100%.
- Total amounts match exactly between buttons and labels (e.g., 261.92β¬ rounded to 262β¬).
- Tooltips show precise values in European format (261,92 β¬).
- "none" is consistently renamed to lowercase uncategorized.
- How to test: Load data, go to /visualize/pie. Verify buttons and chart show same 100%-consistent numbers. Hover for precise β¬ values.
- Verification: Verified via browser subagent with demo data; screenshots and recordings recorded in walkthrough.md.
Mobile Visualization Fixes
Complexity: 3
Audit and fix all visualization pages for mobile rendering:
- Check /visualize/numbers, /visualize/balance, /visualize/pie
- Ensure responsive layouts, readable text, touch-friendly controls
- Fix any overflow or clipping issues
- Test on various screen sizes
Visual styling
Complexity: 2
- in Pie Hard: Expense Edition pie-chart set border for the chart parts
- !!! not the font
- respect dark and light mode
Another task same place * and lets add costs in euro, percentage is not enough ...may add a toggle swith money percentage
β Done: Completed as part of "Pie Chart Improvements" above.
Pie Chart Drill-Down (Category β Subcategories)
Complexity: 4
Add drill-down interaction to the pie chart on /visualize/pie:
- Click on a category β category moves to inner ring, subcategories appear in outer ring
- Click inner ring or "back" button β return to category view
- Maintain β¬ / % toggle and border styling during drill-down
Implementation hints:
- Use ECharts nested pie series (two concentric rings)
- Track drill-down state: { category: null | string }
- Subcategory data already available in group_category_blocks[].categories[].subcategories
- Add smooth animation for transitions
- Reference: ECharts Sunburst Example
Files to modify:
- /app/templates/static/js/pie.js
Automatic Rule Suggestions
Complexity: 4
Analyze transaction data to detect patterns and suggest rules automatically.
User flow: 1. System detects unmatched patterns in data 2. Presents suggestions one by one: "Suggest β Check β Accept/Skip" 3. User reviews each suggestion, accepts or skips 4. Continue until all suggestions reviewed: "Done"
Implementation: - Detect patterns: recurring payees, similar descriptions, amount ranges, recurrence - Pre-fill rule fields based on detected pattern - Show preview: "This rule would match X transactions" - Allow user to edit before accepting - Track accepted/rejected suggestions to improve future detection
Improve Rule Workflow: Create β Apply β Feedback Loop
Complexity: 4
Streamline: new rule β apply β feedback β update analyzed table.
Implementation hints: - Instant preview: "Would match 27 past transactions β Apply to history?" - "Why?" link on transactions: explain which rule matched and why - Consider 3 rule modes in UI: 1. Always categorize this merchant asβ¦ (exact match) 2. Categorize payees containingβ¦ (safe contains) 3. Advanced regex (power users)
Info State / Warnings
Balance Column Empty Warning
Complexity: 2
After import, if the balance column is empty, display a prominent warning (red font) in the stats field. Explain user actions to fix: - provide amount at date X, or - correct missing data.
Enhancements
Create Style Guide Documentation
Complexity: 2
Create /docs/style-guide.md documenting the design system.
Required sections:
- Color Palette
- Purple/Indigo #6366f1 β inflow/income
- Pink/Magenta #EC4899 β outflow/expenses
- Teal #14b8a6 β net/balance
- Any additional shades used
- Typography: fonts, sizes, weights
- Gradients: linear-gradient(135deg, #a855f7, #6366f1 45%, #14b8a6)
- Components: buttons, cards, badges
- Dark Mode: adjustments
Reference files:
- /app/templates/static/css/visualize.css
- /app/templates/static/js/feedback.js
- β Done:
- Summary: Added a concise style guide covering palette, typography, gradients, components, dark mode, and visualization chart styling.
- Files changed:
docs/style-guide.md - Behavior changes: None (documentation only).
- How to test: Open
docs/style-guide.mdand review sections for accuracy. - Assumptions: None.
- Verification Notes:
wc -l docs/style-guide.md; manual review ofdocs/style-guide.md.
Table Improvements
Complexity: 2
Audit and improve tables across the app for consistency and usability.
Improve Test Data for Feature Presentation
Complexity: 3
Create better demo/test datasets showcasing: - varied transaction types - rule matching scenarios - edge cases
SEO Basics: Titles, Descriptions, Canonical, Sitemap
Complexity: 3
Add baseline SEO best practices (no Open Graph/Twitter cards).
Scope:
- Global title + meta description defaults in the base template
- Per-page overrides where needed
- Canonical URL support using https://pinke.agentrebel.net + request path
- robots.txt and sitemap.xml served via FastAPI
- Public pages in sitemap (exclude authenticated/app pages)
- noindex, nofollow for authenticated/app pages
Acceptance criteria:
- /sitemap.xml returns valid XML with public URLs only
- /robots.txt references the sitemap URL
- All public pages render title + description + canonical tags
- Authenticated/app pages render a noindex, nofollow robots meta tag
Files to check:
- /app/templates/base.html
- /app/routes/
β
Done:
- Summary: Implemented baseline SEO with sitemap.xml, robots.txt, meta descriptions, canonical URLs, and noindex for authenticated pages.
- Files changed:
- app/routes/seo.py - New routes for /sitemap.xml and /robots.txt
- app/routes/api.py - Registered seo router
- app/templates/base.html - Added title block, meta description, canonical URL, robots meta
- app/templates/ingest/ingest.html - Added noindex
- app/templates/report/report.html - Added noindex
- app/templates/me.html - Added noindex
- Behavior changes:
- /sitemap.xml returns valid XML with public pages only (/, /about, /visualize)
- /robots.txt allows all crawlers and references sitemap
- Public pages have index, follow robots meta
- Authenticated pages have noindex, nofollow robots meta
- How to test: curl http://localhost:8000/sitemap.xml and curl http://localhost:8000/robots.txt
- Verification: Both endpoints return expected content.
Taxable Transactions Collection
Complexity: 3
Mark transactions as "taxable" and collect all taxable items for tax reporting.
Scope:
- Add taxable boolean field to transaction annotations
- Filter/tag transactions as taxable (business expense, deductible, etc.)
- Create a "Taxable" view or filter preset
- Export taxable transactions as a tax summary report
UI considerations: - Toggle in transaction modal to mark as taxable - Badge or icon on taxable transactions in table - Quick filter: "Show taxable only"
Billing Report Preset
Complexity: 2
Create a pre-configured export preset optimized for billing/invoicing.
Features: - Pre-selected columns: date, description, amount - Professional formatting with company header - Subtotals and totals - Invoice-style layout for PDF export
Rewards Tracking
Complexity: 3
Track cashback, rewards, and bonuses from bank transactions.
Scope: - Detect reward transactions (cashback, bonuses, referral credits) - Separate rewards dashboard or widget - Track rewards over time - Show total rewards earned per bank/account
Multi-Language Support (i18n)
Complexity: 4
Add internationalization to support multiple languages.
Scope: - Extract all UI strings to translation files - Implement language switcher in UI - Initial languages: English, German - Store user language preference - Translate static content and dynamic messages
Implementation hints:
- Use Flask-Babel or similar i18n library
- Translation files in translations/ directory
- Jinja2 _() macro for template strings
- JavaScript strings via data attributes or API
Future Features (Backlog)
Quest Mode (Gamification)
Complexity: 5
Create an optional "quest mode" with gamification elements. Enable via global parameter.
Quest 1: Unlock the Rules
Mechanic:
1. Rules management in /me profile is locked by default
2. Display a lock symbol with keyhole + note: "You will find the key at the end..."
3. The key is placed on the last page of the user's first uploaded file
4. When user clicks the key β key is added to their artifacts list
5. User can then click the lock symbol to unlock rules management
Interactions: - Click lock without key β Show one of 3 random responses: - "The key is hidden somewhere in your journey..." - "Complete your first quest to find what you seek." - "Patience, explorer. The answer lies at the end." - Click lock with key β Unlock animation, rules now accessible
User artifacts system:
- Artifacts stored in user profile: key, code, sound (future)
- Visual artifact collection display in /me
Future Quests (Ideas)
Design Philosophy: Wisdom of the Money Monk β humor and adventure do no harm, it's just money. Embrace the playful spirit of Monkey Island.
Quest 2: The Three Trials of Budgeting (rough idea) - User must complete 3 challenges to become a "Mighty Budget Pirate" - Trials could involve: categorization milestones, visualization discovery, rule mastery - Reward: Special theme or badge unlock
Quest 3: The Safe Code 1. A modern safe appears somewhere in the UI (locked) 2. User needs to enter a 5-digit code to open it 3. The 5 digits are hidden throughout the app β in stats, charts, tooltips, dates... 4. Subtle hints guide the user: "The first digit hides where your balance began..." 5. Inside the safe: an old pipe and a parrot bone
Treasure Hunt Continuation: - The parrot bone + another item (found later) = unlocks next secret - Items combine like classic adventure game inventory puzzles - Each discovery reveals a piece of "Money Monk wisdom"
Quest Ideas Backlog: - Hidden easter eggs throughout the app - Witty dialogue when user tries certain actions - Achievement badges for milestones - Secret "Pirate Mode" theme
Screenshot Privacy Mode
Complexity: 3 Hide values on current page for screenshots; click-to-reveal in this mode.
Predictions Feature
Complexity: 4
Extend prediction logic; reference /visualize/balance patterns.
Infrastructure
S3 Storage Backend Migration
Complexity: 4
Support STORAGE_BACKEND=s3 in .env.
Planning: 1. Audit file access points 2. Document read/write/delete/list behavior 3. Identify rewrites for S3 compatibility 4. Plan migration path for existing data
Implementation:
- Add S3 client (boto3)
- Abstract storage layer: local vs S3
- Required .env when S3 enabled:
- STORAGE_BACKEND=s3
- S3_BUCKET
- S3_PREFIX (optional)
- AWS_REGION (optional)
File access audit checklist: - [ ] Upload handling - [ ] File retrieval/download - [ ] File deletion - [ ] Directory listing - [ ] Temp file management
Reference bucket: agentrebel-pinke-prod-eu-central-1-20251219