InsightStack is a full-stack financial analytics platform built to production standards — not a demo. Real auth, real caching, real tests, real AI. Upload a CSV and get AI-generated spending insights in under 60 seconds.
0s
CSV to first AI insight
0
integration tests — zero mocks
0+
typed API endpoints
0k
char prompt cap for cost control
0%
TypeScript — strict mode
0hr
insight cache TTL per fingerprint
Data pipeline
Click any step to explore the implementation detail.
CSV Upload
Any bank or card export
PapaParse streams the file client-side, validates headers, and type-infers every column. Malformed rows are reported before a single row touches the database.
Architecture
Each independently designed and production-hardened.
Register, login, password reset via SendGrid, role-based access control. Bcrypt-hashed passwords, dual-auth via Bearer token and HttpOnly cookie.
Upload any bank export. PapaParse validates every row, rejected rows are reported, accepted rows inserted atomically via Prisma transactions.
Server-side computation of income, expenses, savings rate, category totals, and monthly breakdown. Cached as MetricSnapshot with a 1-hour TTL.
Custom-built: BM25 retrieval (Elasticsearch algorithm), linear regression for trend detection, Herfindahl-Hirschman Index for concentration, 10 expert rules, NLG composer. Zero external API.
Per-user and per-IP limits on every mutating endpoint, backed by a PostgreSQL RateLimitBucket table with serializable transactions.
Every significant action writes an immutable AuditLog row with IP, user-agent, and entity reference. Structured JSON logging in production.
Security
Every layer hardened before the first line of feature code was written.
Security scan
0 / 12 layers verified
Stack
Every dependency is a deliberate choice.
Framework
Styling
Backend
Database
AI
Auth
Security
Parsing
Testing
CI/CD
Monitoring
Engineering
Intentional choices at every layer — and the reasoning behind them.
01
Direct SSL control per environment via @prisma/adapter-pg — no certificate failures between local, CI, and Neon. Connection pooling is handled at the driver layer, not proxied through a third service.
02
NODE_ENV is 'production' in CI too, making it an unreliable signal. Checking the connection string hostname for 'localhost' is the precise signal — it's either a local socket or it isn't.
03
Building FinanceAI from scratch (BM25, linear regression, HHI, expert rules) took more work than calling OpenAI. The payoff: zero API cost, zero latency, zero vendor lock-in, and full explainability. For a portfolio, 'I built the AI' is a stronger signal than 'I called ChatGPT.'
04
Aggregation queries run once per hour per dataset, not on every page load. This keeps response times fast regardless of traffic spikes. Insight results are also cached 24 hours by data hash.
The full source — every API route, migration, test, and CI config — is public on GitHub. Clone it, audit it, deploy it.
MIT licensed · No credit card required · Deploy to Vercel in one click
Built by Anish Bhole
Full-stack software engineer. I built InsightStack because I wanted a finance tool that analysed my spending without asking for my bank credentials. This is the codebase I'd want to find if I were evaluating a candidate.