A privacy-first credit card expense tracker with smart NLP entry, multi-card billing cycle management, 6 color themes, and deep analytics β built entirely offline with no cloud dependencies.
Next.js TypeScript Tailwind CSS SQLite Recharts License: MIT Version
See CardPulse in action with sample data
π Your financial data never leaves your machine. No cloud. No API calls. No telemetry. Just you and your SQLite database.
- NLP Quick Add β type
"enoc 200 fab card yesterday"and the offline parser extracts amount, category, card, date, and labels - Manual Entry β full form with dropdowns for when you want control
- Self-Learning β correct a parse and it remembers for next time
- 91 pre-seeded keyword rules for popular merchants
- Track 5+ credit cards with real billing cycles
- Statement dates, due dates, credit limits
- Credit utilization tracking with color-coded thresholds
- Card aliases for NLP recognition
- Per-card spending breakdown
- Payment ticker with due date countdowns
- Category & label donuts with click-to-drill
- Credit utilization overview
- π Financial Health Card with 6-level mood face based on debt-to-income ratio
- Trends β overall, category, and label spending over time
- Compare β month-vs-month grouped bars and delta tables
- Monthly Drilldown β interactive donut charts
- Cycles β 3-cycle billing timeline per card
- Cards β per-card area charts and grouped bars
- EMIs β installment landscape view
- Budgets β budget vs. actual progress
- 6 themes β Sage, Midnight, Cyberpunk, Molten, Mono, Terminal
- Dark + Light modes β 12 visual combinations
- CSS variable architecture with instant switching
- Flash-prevention for seamless page loads
- Manage installment plans across cards
- Auto-generation prompts each billing cycle
- Progress tracking with completion dates
- EMI amounts reflected in card cycle estimates
- EMI-page tab: monthly cost-of-living floor
- EMI burden + fixed costs combined into one number
- 18-month projection chart as installments roll off
- Closure schedule of when each EMI ends
- Set monthly budgets per category or subcategory
- Visual progress bars (π’ green / π‘ gold / π΄ red)
- Dashboard strip + analytics tab
- Styled XLSX with blue headers, green amounts, label summaries
- Month selector + currency conversion rate
- Professional formatting ready for sharing
- Currency, date format, number format
- 6 color themes Γγ°γ€ 2 modes
- PIN security (enable/disable/change)
- Database backup & restore
- Keyword rules, labels, and categories management
The home view leads with a Financial Health Card that condenses your monthly commitments into a single survival figure, followed by the Monthly Hero and per-card breakdown.
Dashboard β Financial Health Card and Monthly Hero
Dashboard β Upcoming Payments, Top Transactions and EMI Status
More from Dashboard
Dashboard β Spend by Category and Label donuts, Recent Transactions
Dashboard β Budget Tracking strip and EMI burden summary
Dashboard β Credit Overview and Card Cycle Status
Add by typing β the offline NLP parser extracts amount, category, card, date, and labels. Switch to manual entry whenever you want full control.
Transactions list with Quick Add input and filters
Manual Entry form with amount, date, category, card, labels and notes
Cards page β billing cycles, credit limits, utilization per card
A two-tab page. Survival turns active installments and fixed costs into a monthly cost-of-living number and projects when each EMI rolls off. EMI Tracker manages the installments themselves.
EMIs β Monthly Cost of Living, EMI Burden by Card, Fixed Monthly Costs
EMIs β 18-month Burden Projection chart and Closure Schedule
More from EMIs
EMI Tracker tab β Generate transactions banner, Cycle Timeline, EMI by Card
EMI Tracker β Active Installments grid
Seven views over the same dataset: long-term trends, month-vs-month comparison, monthly drilldown donuts, billing-cycle timelines, per-card bars, EMI distribution, and budget vs actual.
Analytics β Trends tab with Overall Spending Trend chart
Analytics β Compare tab with month-vs-month bars and delta table
More from Analytics
Analytics β Monthly Drilldown with category and label donuts
Analytics β Cycles tab with three-cycle timeline per card
Analytics β Cards tab with card-wise spending bars
Analytics β EMIs tab with EMI Distribution by Card and Timeline Horizon
Analytics β Budgets tab with Budget vs Actual progress bars
Budgets page with Set Budget modal
Nine sections covering currency, fixed costs, appearance, security, cards, NLP keyword rules, labels, categories, and database export/import. Defaults are sensible; nothing leaves your machine.
Settings β General: currency, date format, number format, household income
Settings β Fixed Costs: add monthly obligations with icon and color
More from Settings
Settings β Labels manager
Settings β Categories tree (read-only)
Settings β Data Management: export, import, reset
A standalone view of the dashboard's signature card. Six mood faces map the ratio of monthly commitments to income, from Thriving to Underwater.
# Clone the repository git clone https://github.com/CmdShiftExecute/CardPulse.git cd CardPulse # Install dependencies npm install # Start the development server npm run dev
# Clone the repository git clone https://github.com/CmdShiftExecute/CardPulse.git cd CardPulse # Build and run docker build -t cardpulse . docker run -p 3000:3000 -v $(pwd)/data:/app/data cardpulse
Open http://localhost:3000 β you'll be guided through PIN setup on first launch.
The
-vflag mounts thedata/folder so your SQLite database persists across container restarts.
| Step | What Happens |
|---|---|
| 1οΈβ£ | Database auto-created with categories, labels, keyword rules |
| 2οΈβ£ | Create your PIN (4β6 digits, bcrypt-hashed) |
| 3οΈβ£ | Dashboard loads β add your first transaction via Quick Add |
| 4οΈβ£ | Explore Analytics once you have a few transactions |
π‘ Tip: The PIN can be disabled from Settings > Security if you're running locally. See the Getting Started guide for details.
For detailed information, refer to the guides in the docs/ folder:
| Document | Target Audience | Description |
|---|---|---|
| π Getting Started | New Users | Installation, first run, PIN setup, your first transaction |
| π Dashboard Guide | All Users | Every dashboard section explained with interactions |
| βοΈ Transaction Entry | All Users | NLP quick-add, manual entry, learning, bulk operations |
| π³ Card Management | All Users | Credit cards, billing cycles, aliases, utilization |
| π¦ EMI Tracker | All Users | Installment plans, auto-generation, progress tracking |
| π Analytics Deep Dive | All Users | All 7 analytics tabs in detail |
| π― Budgets | All Users | Setting and tracking monthly spending limits |
| βοΈ Settings Reference | All Users | All 8 settings sections (themes, currency, backup, etc.) |
| π₯ Export Reports | All Users | XLSX export format and options |
| ποΈ Architecture Overview | Developers | Tech stack, DB schema, API routes, system design |
| π’ Deployment Guide | Developers | Local dev, production, VPS, SQLite considerations |
| π± Survival Summary | All Users | Monthly cost-of-living floor + 18-month EMI closure projection |
| π Financial Health Card | All Users | Dashboard mood-face card based on debt-to-income ratio |
| Layer | Technology | Purpose |
|---|---|---|
| Framework | Next.js 14 (App Router) | Full-stack React with API routes |
| Language | TypeScript (strict mode) | Type safety for financial data |
| Styling | Tailwind CSS 3.4 | Utility-first with CSS variable themes |
| Database | SQLite via better-sqlite3 |
Zero config, local-first, single file |
| ORM | Drizzle ORM | Lightweight, type-safe, SQLite-native |
| Charts | Recharts | Composable React-native charting |
| NLP/Matching | Fuse.js + custom rules | Offline fuzzy matching, no LLM |
| Export | ExcelJS | Styled XLSX with formatting |
| Animations | Framer Motion | Subtle micro-interactions |
| Icons | Lucide React | Clean, consistent iconography |
| Fonts | Inter + JetBrains Mono | Via next/font/google |
cardpulse/
βββ π src/app/ # Pages + API routes
β βββ dashboard/ # Main dashboard
β βββ transactions/ # Transaction list + entry
β βββ cards/ # Card management
β βββ emis/ # EMI tracker
β βββ analytics/ # 7-tab analytics
β βββ budgets/ # Budget management
β βββ settings/ # 9-section settings (incl. Fixed Costs)
β βββ api/ # 20 API endpoints
β
βββ π src/components/ # React components
β βββ ui/ # Reusable primitives
β βββ layout/ # Sidebar, header, ticker
β βββ providers/ # Theme context
β βββ dashboard/ # Dashboard sections
β βββ analytics/ # Charts and insight cards
β βββ ... # Cards, EMIs, budgets, etc.
β
βββ π src/lib/ # Core logic
β βββ db/ # Schema, seed, queries
β βββ nlp/ # 4-stage NLP parser
β βββ export/ # XLSX generator
β βββ format.ts # Currency/date formatting
β βββ cycle-utils.ts # Billing cycle math
β βββ chart-utils.ts # Shared chart helpers
β
βββ π docs/ # Documentation (13 guides)
βββ π data/ # SQLite database (gitignored)
βββ π drizzle/ # Generated migrations
| Variable | Default | Description |
|---|---|---|
DB_PATH |
./data/cardpulse.db |
Path to the SQLite database file |
Set in .env.local:
DB_PATH=./data/cardpulse.db
No other environment variables needed. No API keys, no cloud services.
All settings are configurable from the Settings page:
| Setting | Default | Options |
|---|---|---|
| Currency | USD | USD, EUR, GBP, INR, AED, SAR, ... (or any custom 3-letter code) |
| Household Income (monthly) | β | Optional number used by the Financial Health Card to compute commitment ratio |
| Date Format | DD/MM | DD/MM, MM/DD |
| Number Format | 1,234.56 | comma_period, period_comma |
| Theme | Sage | Sage, Midnight, Cyberpunk, Molten, Mono, Terminal |
| Color Mode | Dark | Dark, Light |
| PIN | Enabled | Enable/Disable/Change |
| Metric | Count |
|---|---|
| π Pages | 9 (Dashboard, Transactions, Cards, EMIs, Analytics, Budgets, Settings, Lock, Setup) |
| π API Routes | 20 (CRUD + analytics + exports + NLP + auth + settings + fixed-costs) |
| π§© Components | 70+ (UI primitives, page sections, charts, forms) |
| ποΈ DB Tables | 12 (cards, transactions, categories, subcategories, labels, keyword_rules, emis, budgets, settings, cycle_payments, transaction_labels, fixed_costs) |
| π Keyword Rules | 91 pre-seeded (popular merchants, banks, services) |
| π·οΈ Labels | 25 system labels + unlimited custom |
| π Categories | 11 main β 68 subcategories |
| π¨ Themes | 6 themes Γγ°γ€ 2 modes = 12 combinations |
CardPulse is a personal project built as a portfolio piece. Contributions, suggestions, and bug reports are welcome! Feel free to open an issue or submit a pull request.
This project is licensed under the MIT License β see the LICENSE file for details.
CardPulse v2.1 β fueled by β and a healthy fear of π³ statements.