Back to Home
I built a freelance client + invoice tracker in ~3 hours using Cursor — here's everything I shipped

I built a freelance client + invoice tracker in ~3 hours using Cursor — here's everything I shipped

B
Blizine Admin
·2 min read·0 views

Ibrahim Edhem Harbutlu Posted on May 31 I built a freelance client + invoice tracker in ~3 hours using Cursor — here's everything I shipped # webdev # react # javascript # opensource Three hours. That's roughly how long it took me to go from blank screen to a working full-stack app with a real database. I'm not a developer by background. I use Cursor as my main build tool and Supabase for the database. No local PostgreSQL setup, no fighting with configs — just a Transaction Pooler connection string and a prompt. Here's what came out: FreelanceFlow , a client and project tracker built specifically for freelancers who are tired of juggling invoices in spreadsheets. What it does Client management — add clients, track contact info, see all their projects in one place Project tracking — status (active, on hold, completed), deadlines, linked to a client Invoice generation — create invoices per project, mark them paid/unpaid, track totals Dashboard — monthly revenue, outstanding amount, active project count, recent activity 12-month revenue chart built with Recharts Dark/light mode, mobile responsive down to 375px No bank sync. No Stripe. No OAuth. You install it, you own it, you run it yourself. That was intentional — the simpler the setup, the more useful it actually is. The stack React 19 + Vite, Express 5, TypeScript, PostgreSQL via Drizzle ORM, Tailwind CSS v4 + shadcn/ui, Framer Motion, Recharts. pnpm workspaces monorepo. The full API contract is defined in OpenAPI 3.1 and Recharts handles the charts. What Cursor handled Honestly, most of it. The entire monorepo structure, all the API routes, the Drizzle schema, the React Query hooks, the dashboard layout. I wrote the initial prompt, reviewed the output, fixed two routing bugs, and that was it. The part I still had to think through: the invoice status logic and making sure the revenue chart was pulling from real data, not placeholder seed data. Those took an extra 20-30 minutes of iteration. What I'm doing with i

📰Dev.to — dev.to

Comments