You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ledgerly is a full-stack AI-powered financial ledger application that helps users track transactions, view balances, analyze monthly spending, and get smart AI-driven insights through a premium dark dashboard.
MongoDB Aggregation Pipeline for lifetime balance & monthly summaries
JWT middleware for route protection
Gemini AI proxy route (POST /api/ai-chat) — keeps API key secure
Core APIs
POST /api/auth/register
POST /api/auth/login
GET /api/auth/refresh
POST /api/transaction
GET /api/transaction-view
POST /api/transaction-del/:id
GET /api/balance
GET /api/balance-month?year=YYYY&month=MM
POST /api/ai-chat ← NEW: Gemini AI proxy
🛠️ Tech Stack
Frontend
Tech
Purpose
React 18
UI framework
React Router v6
Client-side routing + protected routes
Axios
HTTP client with JWT interceptors
CSS Custom Properties
Design system / theming
Outfit + JetBrains Mono
Typography (Google Fonts)
Backend
Tech
Purpose
Node.js + Express
Server + REST API
MongoDB + Mongoose
Database + ODM
JWT
Access + Refresh token auth
bcrypt
Password hashing
Axios
Gemini API calls (server-side proxy)
Google Gemini API
AI chat, categorization, insights
Deployment
Layer
Platform
Frontend
Vercel
Backend
Render
Database
MongoDB Atlas
🧩 Design Decisions
Soft delete instead of hard delete — isDeleted: true flag preserves data for audit trail
MongoDB Aggregation Pipeline for balance/summary — faster and more accurate than manual JS calculation
Single source of truth — DashboardPage fetches all data, passes as props to children (avoids auth timing issues)
Backend proxy for AI — Gemini API key stored in Render env variables, frontend never sees it
Promise.all for parallel API calls — 3x faster than sequential awaits
2-level category system — user picks main category + sub-category, stored as a single string
CSS Variables design system — change one variable, entire UI updates consistently
Monospace font for numbers — JetBrains Mono for amounts/dates, standard in fintech UIs