I’m a frontend developer who’s still not comfortable with backend work. When I built my previous blog, I handled comments through giscus and mostly avoided anything requiring backend knowledge.
But I felt the need for my own space where I could present content freely, and that required a blog backend. I run a dev Instagram account where I occasionally post dev content, but being a media-first platform, text-heavy content was limited.
Just as this need was growing, AI editors like Cursor appeared, and I started seeing the possibility of building a full-stack blog. Now I had a backend developer right inside my editor.
So I went for it. Over two weekends I finished the blog, and here’s what I learned.
What struck me was how differently I used Cursor when writing familiar frontend code versus unfamiliar backend code.
For frontend work, I mostly delegated the tedious parts to Cursor. For example, it did a good job building straightforward components like a comment viewer. The biggest advantage was having Cursor handle tasks I already knew how to do — which let me focus on the details.
For instance, Cursor handled everyday error handling for network failures, freeing me to think more about what messages to show the user rather than writing error handling code.
Did you know that even a basic component like a modal is hard to build properly when you consider accessibility and focus management? I wanted to try radix-ui but didn’t feel like reading through the docs, so I asked Cursor. It built a nice delete-confirmation modal for me. If there’s a library you want to try in a side project but can’t muster the energy to read the docs, this is a great way to take the first step.
One thing to watch out for: when I made abstract, large requests like “implement the comment feature,” Cursor would often dump a ton of unintended code. So I had to break down requirements into component-level units. Smaller units also made code review much easier — and saved tokens on hallucinations.
Before, coding alone felt like writing code in isolation. With Cursor, even though it’s a solo side project, it felt like reviewing PRs.
Backend work was unfamiliar territory, so I described features to Cursor and asked it to write the corresponding queries and server action code. For example, when I said “I want to manage comments per user — create a table for that,” it generated an appropriate table schema and queries.
Sometimes it added unnecessary fields when creating tables — fields that would make sense for a production service, but since I wanted to keep things as simple as possible, I trimmed them out.
I roughly understood things like primary keys and foreign keys, so I could follow the table design. But I still don’t fully understand how DB functions and triggers work. As these gaps accumulate, they could turn the project into something I can’t maintain, so properly encapsulating, managing, and studying these areas is important.
Since I used Supabase, I also needed to set up security configurations like RLS (Row Level Security). Cursor handled this automatically, which was really convenient. I’d heard that “RLS setup is tedious” as a Supabase downside, but thanks to Cursor, I got through it without much stress.
Overall, for frontend work I played the role of polishing code details, while for backend work I focused on verifying that Cursor properly understood the requirements.
I realized how important it is to “know what’s possible.” Since I didn’t know backend well, there were times when Cursor wrote weird or inefficient code and I didn’t notice.
For example, the emoji reaction feature was initially implemented by fetching the count from a server action (request 1) and then adding 1 (request 2). Later I realized a DB function could do this in one request. I only caught and optimized this later. I think this happens because Cursor doesn’t understand the service requirements as well as I do, so it writes generically-good code.
I also learned that optimization requires both understanding the requirements and the technology. This time, I had the requirements knowledge and Cursor had the technical knowledge, but to use Cursor more effectively next time, I need to study backend properly.
Finally, troubleshooting environment setup — like Supabase configuration and GitHub Auth — was hard to solve with Cursor alone. I hope AI that understands the full development environment becomes available soon.