Project
README
Repository setup, architecture, and API overview. Rendered from the root README.md.
Tip
๐ฐ TrackIt: Your Personal Finance Command Center
Take control of your finances with intelligent expense tracking, learned categorization, and powerful analytics
๐ Table of Contents
- Why TrackIt?
- Features
- Tech Stack
- Quick Start
- How It Works
- RESTful Endpoints
- Architecture
- Project Structure
- Security
- Contributing
- License
๐ฏ Why TrackIt?
Managing personal finances shouldn't be complicated. TrackIt transforms the way you handle money by:
- โก Automating the Mundane: Import CSVs and categorize with learned rules, history, and patterns
- ๐ Revealing Insights: Discover spending patterns you never noticed
- ๐ค Asking Your Data: Chat with a finance agent grounded in your transactions
- ๐ Keeping Data Private: Per-user isolation; your data stays in your database
- ๐ฑ Working Everywhere: Access from any device with a modern browser
โจ Features
๐ฆ Core Financial Management
Multi-Account SupportConnect all your accounts in one place Bank Credit Savings |
Transaction ImportBulk CSV import with duplicate detection CSV Preview Confirm |
Finance AgentAsk natural-language questions about your spending Gemini Groq Tools |
Multi-InstitutionSupport for major banks and cards CIBC AMEX WS RBC BMO |
๐ง Intelligence & Automation
Smart CategorizationLearns from your corrections; no per-row LLM on import Exact History RULES Fuzzy |
Learned RulesPer-user merchant mappings with confidence Apply to Other Edit |
SuggestionsScored category recommendations for Other rows |
Grounded AgentTool-backed answers and category proposals Accept Dismiss |
๐ Analytics & Insights
Powerful AnalyticsMonthly, category, and trend analysis |
Beautiful ChartsInteractive Chart.js visualizations |
Real-time DashboardLive updates as you categorize |
Spending TrendsTrack patterns over time |
๐ Tech Stack
Backend Technologies
| Technology | Version | Purpose |
|---|---|---|
| 3.14+ | Core Language | |
| 0.139 | Web Framework | |
| 17 | Database | |
| 0.0.39 | ORM | |
| 0.51 | ASGI Server | |
| 0.16 | Lint (CI) |
Frontend Technologies
| Technology | Version | Purpose |
|---|---|---|
| 3.5 | UI Framework | |
| 6.0 | Type Safety | |
| 8 | Build Tool | |
| 4.3 | Styling | |
| 4.5 | Charts | |
| 10 | Packages |
DevOps & Tools
| Technology | Purpose |
|---|---|
| Containerization | |
| CI / deploy | |
| Version Control |
๐ Quick Start
Using Docker (Recommended)
# Clone and start
git clone https://github.com/Nandan-18/trackit.git
cd trackit
./nginx/generate-certs.sh # requires mkcert
docker compose up -d
Live demo: trackit-sigma-taupe.vercel.app ยท Product docs: trackit-sigma-taupe.vercel.app/docs
Prefer a new tab? Open on YouTube.
Open the live demo ยท Guest walkthrough
Authentication setup (required)
TrackIt uses Google OAuth and isolates data per user. Copy .env.example to .env in the repo root and fill in values:
cp .env.example .env
Required keys (see .env.example for the full template):
# Google OAuth credentials
GOOGLE_CLIENT_ID="YOUR_GOOGLE_OAUTH_CLIENT_ID"
VITE_GOOGLE_CLIENT_ID="YOUR_GOOGLE_OAUTH_CLIENT_ID"
# JWT secret
JWT_SECRET="CHANGE_ME_TO_A_LONG_RANDOM_SECRET"
# Finance agent keys and defaults
GEMINI_API_KEY=""
GROQ_API_KEY=""
AGENT_DEFAULT_PROVIDER="gemini"
GEMINI_MODEL="gemini-3.1-flash-lite"
GROQ_MODEL="llama-3.3-70b-versatile"
# DB import (optional)
PROD_DATABASE_URL=""
Add 127.0.0.1 local.trackit.com to /etc/hosts if needed, then open:
|
Frontend local.trackit.com |
API local.trackit.com/api |
Product Docs local.trackit.com/docs |
API Docs local.trackit.com/api/docs |
๐ How It Works
Import & categorization
CSV import does not call an LLM per row. Categories come from a deterministic pipeline (per user):
On confirm, if you change a category away from the auto suggestion, TrackIt learns a merchant mapping. Rules UI can Apply to Other to rewrite matching uncategorized rows. The Agent uses tools (and optional LLM) for Q&A - separate from import categorization.
RESTful Endpoints
POST /api/auth/google # Exchange Google ID token for TrackIt JWT
GET /api/accounts # List current user's accounts
POST /api/accounts # Create an account for current user
PATCH /api/accounts/{id} # Rename or archive an account
GET /api/mappings # List learned merchant rules
POST /api/mappings # Create a merchant rule
PATCH /api/mappings/{id} # Update pattern and/or category
DELETE /api/mappings/{id} # Delete a merchant rule
POST /api/mappings/{id}/apply-to-other # Rewrite matching Other transactions
POST /api/transactions/upload/preview # Preview CSV upload
POST /api/transactions/upload/confirm # Confirm CSV import (learns overrides)
GET /api/transactions/debit # Debit transactions
GET /api/transactions/credit # Credit transactions
PUT /api/transactions/{id}/category # Update category
POST /api/transactions/suggest-category # Get suggestions
GET /api/transactions/other-review # Proposed categories for Other txs
GET /api/transactions/categories # Categories list
GET /api/analytics/monthly-summary # Monthly overview
GET /api/analytics/category-breakdown # Category analysis
GET /api/analytics/spending-trends # Trend analysis
GET /api/analytics/month-details/{month} # Detailed month view
GET /api/analytics/available-months # Available months
GET /api/agent/providers # Configured LLM providers
GET /api/agent/conversations # List chats
POST /api/agent/conversations # Create chat
GET /api/agent/conversations/{id} # Chat + messages
DELETE /api/agent/conversations/{id} # Delete chat
POST /api/agent/conversations/{id}/messages # Send message
POST /api/agent/conversations/{id}/messages/{mid}/suggestions # Accept/dismiss suggestion
GET /api/health # Liveness probe
GET / # API root
๐ Architecture
System Architecture
Database Schema
๐ Project Structure
TrackIt/
โโโ backend/
โ โโโ api/
โ โ โโโ accounts.py # Account CRUD
โ โ โโโ agent.py # Finance agent conversations
โ โ โโโ analytics.py # Analytics and reporting
โ โ โโโ auth.py # Google OAuth โ JWT
โ โ โโโ mappings.py # Learned merchant rules
โ โ โโโ transactions.py # Import, list, suggestions
โ โโโ config/
โ โ โโโ constants.py # Categories, RULES, thresholds
โ โโโ core/
โ โ โโโ agent/ # Agent loop, tools, providers
โ โ โโโ auth.py # JWT / current user
โ โ โโโ categorizer.py # Categorization engine
โ โ โโโ utils.py # CSV parsers (cached categorizer)
โ โโโ db/
โ โ โโโ database.py
โ โ โโโ models.py
โ โ โโโ types.py
โ โโโ deploy/ # Dockerfile
โ โโโ tests/
โ โโโ main.py
โ โโโ requirements.txt # Runtime deps
โ โโโ requirements-dev.txt # Pytest, ruff, httpx2
โ
โโโ frontend/
โ โโโ src/
โ โ โโโ components/
โ โ โ โโโ agent/ # Agent chat UI
โ โ โ โโโ analytics/
โ โ โ โโโ charts/
โ โ โ โโโ monthly/
โ โ โ โโโ onboarding/
โ โ โ โโโ rules/ # Learned Rules UI
โ โ โ โโโ shared/
โ โ โ โโโ transactions/
โ โ โ โโโ widgets/ # Upload, create account
โ โ โโโ composables/
โ โ โโโ lib/ # API client, auth, guest mode
โ โ โโโ router/
โ โ โโโ types/ # Generated auto-import typings
โ โ โโโ views/ # Landing, Accounts, Transactions,
โ โ โ # Analytics, Monthly, Rules, Agent
โ โ โโโ App.vue
โ โ โโโ main.ts
โ โโโ config/ # Vite, ESLint, Prettier, Playwright
โ โโโ deploy/ # Dockerfile
โ โโโ tests/ # Vitest (unit/) + Playwright (e2e/)
โ โโโ scripts/
โ โโโ vercel.json
โ โโโ package.json
โ
โโโ .github/workflows/ # CI + backend deploy
โโโ nginx/ # Local TLS reverse proxy
โโโ docker-compose.yml
โโโ .env.example
โโโ LICENSE.md
โโโ README.md
๐ SEO and indexing
Public pages: / and /docs/*. App shell routes (/transactions, /analytics, /monthly, /agent, /rules, /account) are noindex and disallowed in frontend/public/robots.txt.
| Asset | URL |
|---|---|
| robots.txt | https://trackit-sigma-taupe.vercel.app/robots.txt |
| sitemap.xml | https://trackit-sigma-taupe.vercel.app/sitemap.xml |
| llms.txt | https://trackit-sigma-taupe.vercel.app/llms.txt |
| Open Graph image | https://trackit-sigma-taupe.vercel.app/og-image.jpg |
| Web app manifest | https://trackit-sigma-taupe.vercel.app/manifest.webmanifest |
After deploy, verify ownership in Google Search Console (HTML file upload into frontend/public/ or DNS), then submit the sitemap URL above. GitHub Actions builds and prerenders the frontend, then deploys that dist to Vercel (vercel deploy --prebuilt) and records the GitHub Production deployment. Vercel git auto-deploys are disabled so production always serves the CI prerendered HTML.
๐ Security
๐ค Contributing
PRs welcome. Fork the repo, use a feature branch, and open a pull request against main.
|
Fork Create your fork
|
Create Feature branch
|
Commit Conventional commits
|
PR Open PR
|