Version 2 – Intro
While Version 1 had done its job - proving that the product idea was useful, it had limitations that became more visible the deeper I went: slow API shipments load times, state management issues, clunky server routing, and lack of scalability. After reviewing users feedback, usage patterns, and the long-term needs of the product, I knew it was time to rebuild with a better foundation.
Making the Shift
For Version 2, I made the decision to move away from plain HTML/JS/Flask and transition into a modern JavaScript-based architecture. That meant:
- Using React + Next.js for the frontend — enabling dynamic routing, better component logic, and faster UI updates.
- Replacing Flask and SQLite with Supabase — which gave me built-in authentication, a scalable Postgres database, and a real-time API layer out of the box.
- Building with more structure, reusability, and scalability in mind from day one.
What Changed in Version 2?
The second version focused on modernizing both the stack and the user experience:
- A fully component-based UI with clean routing and stateful logic.
- Sessions and logins handled securely with Supabase Auth (JWT-based).
- Real-time read/write access to Postgres with automatic syncing to the frontend.
- Cleaner code separation — API logic, data fetching, and UI behavior are now isolated and easier to maintain.
- Added loading states, toasts, dynamic messages, and error handling to improve UX.
The result? A faster, more maintainable, and more modern version of the same core idea — but now one that could grow with real users.
In the upcoming sections, I’ll break down how the new frontend was built, how Supabase was integrated as the backend, and how deployment and hosting were handled differently in this version.