CodeQuest started as a simple idea — a coding quiz game with levels and a leaderboard — and turned into a good example of how fast Next.js and Supabase let me go from idea to something people can actually use.
Why this stack
Next.js 15 handles the app itself: server components for the pages that just read data, and client components only where I actually need interactivity, like the quiz screen and the level progress UI. Supabase covers everything on the backend side I'd otherwise have to build myself — Postgres, Auth, and row-level security — so I could spend my time on the quiz logic instead of re-building a login system.
Data and access rules first
Before writing any UI, I modeled the tables: users, levels, attempts, and achievements. Then I wrote RLS policies so a signed-in user can only read and write their own attempts and progress, while leaderboard data stays readable by everyone. Getting this right early meant I never had to retrofit security after the fact.
Shipping the 20 levels and leaderboard
Each level is just a row in the database with its prompt, expected output, and difficulty, so adding a new level never requires a code change. The leaderboard is a Postgres view that ranks by score and completion time, queried directly from the client through Supabase's row-level security instead of a custom API route.
The result is a stack where adding features — a new level, a new achievement — is mostly a database change plus a small UI update, which keeps the app easy to keep shipping.