all work

~/work/kesefy

Kesefy

Six years of my Excel finance tracking, modernized into a dynamic web app, built on the exact rules I'd refined by hand.

role
Solo: full-stack + AI
timeframe
2026 → ongoing
status
● active · private repo
stack
Next.js · MongoDB · Tailwind · Auth.js · Vercel · Cloudflare R2
ai
LLM-driven statement/receipt import + in-app assistant

01The problem

I'd tracked my money in the same Excel workbook for six years. It worked, until it didn't: PowerQuery broke under cloud sync, every new month meant copying sheets by hand, and a static workbook has no room for automation, budgets, or anything AI could help with. I knew the domain cold; the problem was modernizing that Excel into a dynamic web app without losing the rules that made it work.

So Kesefy (from kesef, Hebrew for money) isn't a generic budgeting app. It encodes the rules I'd already proven on myself, the ones a spreadsheet couldn't enforce.

Kesefy dashboard: monthly summary, expected card charges, account balances, and spending by category
Monthly overview: balances always computed from the transaction ledger, never stored.

02Decisions that shaped it

  • Transactions are the single source of truth. Balances are always derived, never stored, so the numbers can never silently drift.
  • Money is integer agorot, never floats. No rounding ghosts in a finance app.
  • The financial month runs 10th → 10th (configurable), matching how my real budgeting cycle actually works, not the calendar's.
  • Bilingual by default. Hebrew and English data throughout, with direction handled automatically.

03Where the AI earns its place

The AI isn't a bolt-on chatbot; it removes the two chores that made the spreadsheet painful:

  • Import. Drop in a statement or a receipt photo and an LLM parses it into clean, categorized transactions, and the data-entry tax is gone.
  • Assistant. An in-app assistant answers questions over your own ledger: where the money went, what changed this month, what's trending.
Smart Import review: AI-drafted transactions from a statement, categorized and ready to approve
Smart Import: a raw statement becomes categorized, ledger-ready transactions, reviewed (and chat-refined) before anything is committed.

04Beyond the basics

Because it's mine and it's real, it grew the features a spreadsheet never could:

  • Subscription watchdog. Recurring charges detected and tracked so nothing renews unnoticed.
  • Multi-currency trips. Travel spend captured in local currency with conversion.
  • Monthly recap. An automatic narrative of the month's money.
  • Receipts vault. Attachments stored on Cloudflare R2, with a daily off-database backup.
  • PWA. Installable, offline-capable, and deployed on Vercel with scheduled cron jobs.

05Architecture

One Next.js codebase serves the PWA and ~35 API routes on Vercel, with MongoDB Atlas as the single source of truth. A service layer of "engines" turns standing rules into transactions on a daily cron, and Gemini powers the AI features. Clients reach it three ways, each with its own auth path:

Continue with Googlesession cookie (Auth.jsJWT)Bearer tokenBearer CRON_SECRETsigned webhookData & storage

MongoDB Atlas
~20 collections · integer agorot
secrets encrypted at rest

Cloudflare R2
receipts · daily JSON backups

Vercel · Next.js 16Service layer (src/lib)

ledger.ts · balances.ts
computed balances, JS ⇄ Mongo parity

recurrence.ts · recurring.ts
phase-locked schedules

card-settle.ts · installments.ts
debt-autopay.ts

crypto.ts AES-256-GCM
rate-limit.ts · signup-gate.ts

ai/* → Gemini
categorize · import · narrate

proxy.ts auth gate
session cookie check

API routes (~35) · zod · userId-scoped

CRUD: transactions · accounts · categories
trips · debts · budgets · goals · coupons…

quick-add
bearer-token auth

jobs: recurring-tick · backup
CRON_SECRET auth

assistant · import/ai · recap

billing/webhook
HMAC-verified

Clients

Browser / PWA
React 19 · Tailwind · React Query

iPhone Shortcut
offline queue → sync

Vercel Cron
05:00 tick · 05:30 backup

Lemon Squeezy
billing webhooks

Google OAuth
identity only, users live in Atlas

The full system, straight from the repo's ARCHITECTURE.md. Drag to pan, or use the +/− controls (⌘/Ctrl + scroll) to zoom.

06Where it stands

Kesefy is live and running my actual finances: deployed, hardened with automated backups, and past a full end-to-end audit. It's the clearest example of how I like to build: start from a real problem I understand deeply, then let AI remove the parts that were always chores.