Task Catalog

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.md and review sections for accuracy.
  • Assumptions: None.
  • Verification Notes: wc -l docs/style-guide.md; manual review of docs/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