- What this is: Personal expense tracking app with AI-powered entry (text + receipt OCR), budgets, recurring expenses, analytics, and exports
- Who it's for: Personal finance users who want simplicity - people who track spending but don't want a banking app
- Space/industry: Personal finance, expense tracking. Peers: Monefy, Monarch Money, Expensify, Cashew
- Project type: Mobile app (iOS + Android via React Native/Expo) - migrating from Telegram bot
- AI backend: Groq (moonshotai/kimi-k2-instruct) for natural language queries, categorization, and receipt parsing
- Direction: Brutally Minimal - type and whitespace do all the work. Feels like a Braun calculator: precise, calm, beautiful.
- Decoration level: Minimal - no gradients, no illustrations, no patterns. Emoji category icons provide all the color and personality.
- Mood: Calm, focused, trustworthy. The app disappears so your data can speak. Light enough to feel fast, structured enough to feel reliable.
- Reference sites: Ramotion expense tracker concept, Monarch Money (warm editorial), Expensify (corporate baseline). ExpensesBot breaks from all three by going near-monochrome.
- Display/Hero: Satoshi (Variable, 700-900) - geometric with personality, gives the app a "designed object" quality without being playful. Not overused in fintech.
- Body: DM Sans (400, 500, 600, 700) - excellent readability, clean geometric forms, native tabular figures support.
- UI/Labels: DM Sans 500-600 - same as body for consistency.
- Data/Tables: DM Sans 700 (font-variant-numeric: tabular-nums) - perfect alignment for monetary values, columns of numbers stay vertically aligned.
- Code/Mono: JetBrains Mono 400-500 - for API keys, technical display, section labels.
- Loading: Satoshi via Fontshare CDN (api.fontshare.com), DM Sans + JetBrains Mono via Google Fonts.
- Scale:
- xs: 11px / 0.6875rem - timestamps, tertiary labels
- sm: 13px / 0.8125rem - secondary text, metadata
- base: 14px / 0.875rem - body text, list items (mobile)
- md: 16px / 1rem - body text (emphasis), input text
- lg: 18px / 1.125rem - large input, amount entry
- xl: 24px / 1.5rem - section titles
- 2xl: 28px / 1.75rem - page headings
- 3xl: 32px / 2rem - large data display (amounts)
- 4xl: 36px / 2.25rem - hero amounts
- 5xl: 48px / 3rem - display / hero text
- Approach: Restrained - near-monochrome with a single teal accent. Color is rare and meaningful. Emoji icons carry category identity.
- Primary/Accent: #0D9488 (teal) - says "clarity" and "fresh," not "bank." Used for active states, CTAs, progress bars, links.
- Accent hover: #0F766E (darker teal)
- Accent light: #CCFBF1 (pale teal) - chip backgrounds, subtle highlights, ghost button hover
- Accent text: #FFFFFF on accent backgrounds
- Neutrals (light mode):
- Background: #FFFFFF
- Surface: #F8FAFB (barely-there cool gray - cards, inputs, sections)
- Surface hover: #F1F3F5
- Border: #E5E7EB
- Text primary: #111827 (ink black)
- Text secondary: #6B7280 (cool gray)
- Text tertiary: #9CA3AF (muted)
- Semantic:
- Success: #059669 / light: #D1FAE5
- Warning: #D97706 / light: #FEF3C7
- Error: #DC2626 / light: #FEE2E2
- Info: #0284C7 / light: #E0F2FE
- Dark mode strategy: Redesign surfaces (not invert). Reduce accent saturation 10-20%. Use #2DD4BF as dark-mode accent.
- Background: #0F1114
- Surface: #1A1D23
- Surface hover: #22262E
- Border: #2D3139
- Text primary: #F0F1F3
- Text secondary: #9CA3AF
- Text tertiary: #6B7280
- Base unit: 4px
- Density: Comfortable - generous whitespace makes the app feel fresh, not cramped
- Scale: 2xs(2px) xs(4px) sm(8px) md(16px) lg(24px) xl(32px) 2xl(48px) 3xl(64px)
- Standard gaps: 16px between list items, 24px between sections, 32px between major blocks, 48-64px between page sections
- Approach: Grid-disciplined - strict alignment, predictable structure, consistent gutters
- Grid: Single column on mobile (320-428px), content padding 16px
- Max content width: 428px (largest phone width)
- Gutters: 16px horizontal padding
- Thumb zones: Primary actions in bottom third, navigation fixed at bottom
- Border radius:
- sm: 6px - inputs, small buttons, expense icons
- md: 12px - cards, modals, alert banners
- lg: 16px - bottom sheets, large cards, total card
- full: 9999px - pills, chips, avatars, round buttons
- Approach: Intentional - spring animations for touch feedback, subtle fades for transitions. Motion aids comprehension, never decorates.
- Easing: enter(ease-out) exit(ease-in) move(cubic-bezier(0.4, 0, 0.2, 1))
- Duration: micro(50-100ms) short(150-250ms) medium(250-400ms) long(400-700ms)
- Principles:
- Touch feedback: immediate (< 100ms), spring physics for press/release
- Screen transitions: 250-350ms slide or fade
- Data loading: skeleton screens with subtle pulse (1.5s loop)
- Success states: 200ms scale + fade for checkmarks
- No bounce, no overshoot, no playful animations. Precise and calm.
- Pattern: Bottom tab bar (4 tabs: Home, Add, Stats, Settings)
- Add action: Center tab opens quick-entry (text input). Long-press or menu for receipt camera.
- Stats sub-navigation: Budgets / Analytics / Recurring via horizontal tabs
- Settings: Flat list - Timezone, Currency, AI, Export, Reset
- Quick entry: Large text input at top. Type "20 coffee" → AI parses amount + category. Confirmation card below with edit option.
- Receipt flow: Camera → processing indicator → parsed result card → confirm/edit → saved.
- Budget bars: Horizontal progress bars. Teal < 70%, warning 70-90%, error > 90%.
- Expense list: Icon (emoji) + name/category + amount/date. Simple rows, no swipe actions on first version.
- AI chat: Bubble UI. User messages in accent color (right-aligned), bot responses in surface color (left-aligned).
| Date | Decision | Rationale |
|---|---|---|
| 2026-03-18 | Initial design system created | Created by /design-consultation based on competitive research (Expensify, Monarch Money, Cino) and product context. Brutally minimal aesthetic chosen to differentiate from corporate-clean and lifestyle-magazine patterns in the space. |
| 2026-03-18 | Satoshi + DM Sans typography | Satoshi gives "designed object" quality vs generic SF Pro/Inter. DM Sans has superior tabular figures for financial data. |
| 2026-03-18 | Single teal accent (#0D9488) | Deliberately not blue (too corporate) or green (too banking). Teal says "clarity" - appropriate for a personal tool about understanding your money. |
| 2026-03-18 | Groq (kimi-k2-instruct) for AI | Replacing DeepSeek from Telegram bot. Free tier, async streaming, tool calling. Matches .Asqav project setup. |
| 2026-03-18 | Near-monochrome color strategy | Emoji category icons provide all color/personality. UI stays calm. Radical in fintech space where everyone uses multiple bright colors. |