DEV Community

Cover image for I'm Rebuilding My Old Invoice App and This Time I Actually Know What I'm Doing
Sidharth Sangelia
Sidharth Sangelia

Posted on

I'm Rebuilding My Old Invoice App and This Time I Actually Know What I'm Doing

Focusing on stability over feature creep

So I have this old project called Invoicepedia. Built it like 6 months ago when I was just starting to learn full stack. Next.js, Clerk, Neon, basic CRUD. The usual "I just learned how to connect a database" kind of project.

I opened it recently and honestly it was rough. Delete button crashed the app sometimes. You could submit an empty invoice form with no validation. The Stripe integration was half working. I had both Drizzle and Prisma installed at the same time for some reason. Classic.

I almost deleted it and moved on to something new.

Instead I decided to actually fix it and turn it into something real.


Why Not Just Start a New Project

Every time I start something new I spend like 3-4 days just on setup. Auth, database, environment variables, middleware, all that stuff before you even write a single line of actual product code. And by the time I'm done with setup I've already lost interest or I hit some weird error and just abandon the whole thing.

Invoicepedia already had all of that. It was broken but the foundation was there. Auth worked. Database was connected. Routes existed.

So I thought okay, why not just fix this one instead of starting from zero again. Worst case I learn something. Best case I actually ship something.


First Thing I Did Was Stop Adding Features

Old me would have immediately started adding new stuff. Charts. Dark mode. AI features. Whatever sounded cool.

This time I made a list of everything that was broken and fixed that first. No new features until the existing stuff actually worked properly.

Removed dead dependencies. Rewrote the schema. Added proper Zod validation to every server action. Changed hard deletes to soft deletes because you should never hard delete financial records. Fixed the middleware. Added actual error handling.

It took a week and nothing visually changed. The app looked the same. But after that week I wasn't scared to touch the codebase anymore and that felt different.


What I'm Actually Trying to Build

Yeah I know. Another invoice app. There's like 50 of them already.

But here's the thing — most of them are either too expensive or too complicated for a normal freelancer. FreshBooks charges you $19-30 a month and limits your clients on the cheaper plans. Wave was free and then slowly started charging for things that used to be free. Invoice Ninja has so many features that the UI looks like a cockpit, a normal person opens it and immediately closes the tab.

The people I want to use this are freelancers. Developers, designers, writers. People who just did some work, need to send an invoice, and want to get paid without learning accounting software.

So the whole idea is just — do the basic things really well. Don't try to be QuickBooks. Don't try to be FreshBooks. Just be the thing a freelancer needs to send professional invoices and track who's paid them and who hasn't.


What I'm Shipping First

I made a list of like 10 features I want to build eventually. AI invoice generation, automated payment reminders, client portal, recurring invoices, expense tracking. The full thing.

Then I looked at that list and realised if I wait until all of that is done I will never ship anything.

So the first version is going to have three things:

PDF generation — because an invoice app that can't produce a PDF is just a form.

Email sending — so you can actually send the invoice to your client from inside the app instead of downloading it and attaching it to Gmail manually.

A proper dashboard — right now it's just a table. I'm adding three metric cards at the top so when you open the app you see immediately how much you got paid this month, how much is still outstanding, and how many invoices are overdue. That's actually useful information.

That's it. Ship those three. Get some users. See what they actually want next.


The Goal is 5 Users

Not 500. Not 5000. Five real people who use it and tell me what's wrong with it.

I'll post updates as I build. What I'm adding, what's breaking, what people say when they actually try it. I don't have it all figured out, I'm figuring it out as I go.

If you're a freelancer who's annoyed at paying too much for invoicing software, keep an eye on this. If you're a dev learning full stack, hopefully this is useful to see what an actual messy in-progress project looks like compared to the clean tutorial versions.


Stack is Next.js 15, Prisma, NeonDB, Clerk, Tailwind, shadcn/ui.

Happy to answer questions in the comments if anything here was interesting or you want to know more about specific decisions I made.

Top comments (4)

Collapse
 
john_smith_e4067a855e0c61 profile image
john Smith

Honestly this hits way too close 😅

I had almost the same thing happen with one of my projects. Opened it months later and it was… yeah, not great. Stuff worked but kinda fragile. Random bugs, weird logic, things half done.

This part especially:

nothing visually changed but the codebase felt different

That’s real. Once you’re not scared to touch the code anymore, everything changes. Before that you’re just avoiding parts of your own app.

Also agree on not starting a new project.

Every time I start from scratch I spend days just wiring auth, db, env, etc… and by the time it’s ready I’m already a bit tired of it. Fixing something messy forces you to actually understand what you built.

And the “5 users” goal is solid. Way more realistic than chasing fake numbers.

Quick question though — when you added Zod validation, did it catch stuff you didn’t expect? I feel like that’s always where hidden bugs show up.

Collapse
 
sidharth_sangelia profile image
Sidharth Sangelia

Thankyou for sharing such detailed views of yours. Tbh honest for now in Zod I havent caught anything unexpected bcoz I haven't been able to test the app for different edge cases but I am sure that currently I am 90% covered. The idea of launching the app is for the same reason that atleast someone else could go on and catch some bug which got missed.

For now I am focusing on creating the base flow of the app right and then maybe add little micro interactions and a page where I tell about all the features I would be launching. If everything goes right then I can launch in the next 2-3 weeks

Collapse
 
iccb1013 profile image
Xusheng Cao

You have truly developed an engineer's mindset, and I look forward to seeing your work published.

Collapse
 
sidharth_sangelia profile image
Sidharth Sangelia

This shift was necessary as times have changed. Now you can't land an internship just by making a simple blog, e commerce website used to be god-level builds. Thank you for appreciating!!