[{"data":1,"prerenderedAt":249},["ShallowReactive",2],{"\u002Fwritings\u002Froad-to-here":3},{"id":4,"title":5,"body":6,"date":237,"description":238,"extension":239,"meta":240,"navigation":242,"path":243,"seo":244,"stem":245,"tag":246,"ttr":247,"__hash__":248},"writing\u002Fwritings\u002Froad-to-here.md","I wanted to use Supabase as the backend for this site",{"type":7,"value":8,"toc":228},"minimark",[9,14,23,26,32,54,57,64,67,111,114,121,124,127,131,134,137,152,155,158,161,165,168,171,174,177,184,187,190,195,198,201,204,208,215,222,225],[10,11,13],"h2",{"id":12},"over-engineer-the-world","Over-engineer the World!",[15,16,17,18,22],"p",{},"The first thing that came to mind when I decided to start this site was: ",[19,20,21],"em",{},"\"I’m not going to build a static site.\""," I knew a static setup was probably the right choice for a project like this, but I simply didn’t want to go that route.",[15,24,25],{},"It felt too bland for my taste.",[15,27,28,31],{},[19,29,30],{},"\"Why would I use an SSG like every other sane human being? I want to over‑engineer my stack—otherwise, what’s the point of living? Live dangerously. Live on the edge.\""," That sort of thing.",[15,33,34,35,42,43,48,49,53],{},"I was already using ",[36,37,41],"a",{"href":38,"rel":39},"https:\u002F\u002Fwww.markdownguide.org\u002F",[40],"nofollow","Markdown"," with ",[36,44,47],{"href":45,"rel":46},"https:\u002F\u002Fobsidian.md\u002F",[40],"Obsidian"," for note‑taking, so I was very familiar with it. It’s also a joy to write in, so I ",[50,51,52],"strong",{},"obviously"," wanted to keep using it for blogging.",[15,55,56],{},"So I got to work. I chose Nuxt for the frontend simply because it’s a framework I somewhat know and genuinely enjoy working with. Then I jumped onto Supabase.",[15,58,59,60,63],{},"I’d had a tiny bit of experience with Supabase before. I knew it was a BaaS (Backend‑as‑a‑Service), meaning it was supposed to make backend work much easier. I knew it had solid documentation, and I knew it was cool to use. (It ",[19,61,62],{},"is"," cool to use, right?)",[15,65,66],{},"My thought process went something like this:",[68,69,70,85,98],"ul",{},[71,72,73,76],"li",{},[50,74,75],{},"On Supabase:",[77,78,79,82],"ol",{},[71,80,81],{},"Create a storage bucket for Markdown files.",[71,83,84],{},"Create a database table to store blog metadata—things like slugs and tags.",[71,86,87,90],{},[50,88,89],{},"With Nuxt:",[77,91,92,95],{},[71,93,94],{},"Build the frontend and connect it to Supabase.",[71,96,97],{},"Fetch Markdown files from Supabase and render them on demand. (Nuxt has excellent tooling for rendering Markdown.)",[71,99,100,103],{},[50,101,102],{},"For writing blogs:",[77,104,105,108],{},[71,106,107],{},"Upload the Markdown file to the Supabase storage bucket.",[71,109,110],{},"Add a metadata row to the database...",[15,112,113],{},"Wait.\nWhat?",[15,115,116,117,120],{},"You’re telling me I have to add or remove every blog post by logging into Supabase and doing it ",[50,118,119],{},"manually, every single time","?",[15,122,123],{},"Nope.",[15,125,126],{},"I’m making an app for that.",[10,128,130],{"id":129},"enter-hermes-md","Enter… hermes-md",[15,132,133],{},"There was no way I was letting go of the absolute overkill of a stack I had chosen.",[15,135,136],{},"No. Absolutely not.",[15,138,139,140,145,146,151],{},"Instead, I built a small CLI tool called ",[36,141,144],{"href":142,"rel":143},"https:\u002F\u002Fgithub.com\u002Frivethorn\u002Fhermes-md",[40],"hermes-md",". I initially tried writing it in Rust—let’s just say it didn’t go well. So I switched to TypeScript and used Supabase’s official ",[36,147,150],{"href":148,"rel":149},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Freference\u002Fjavascript",[40],"client library",".",[15,153,154],{},"And it turned out okay.",[15,156,157],{},"You give the tool your file, it extracts the metadata from the top, uploads the Markdown file to storage, and inserts the metadata into the database—all with a single command.",[15,159,160],{},"Nice.",[10,162,164],{"id":163},"time-for-some-action","Time for some action",[15,166,167],{},"Once everything was wired together, it was time to test.",[15,169,170],{},"I didn’t even deploy the site. I was running it locally, but in a production‑like environment.",[15,172,173],{},"I had high hopes.",[15,175,176],{},"They were completely crushed.",[15,178,179,180,183],{},"The data‑fetching was sloppy. You could say ",[19,181,182],{},"“skill issue,”"," and I’d agree—if I hadn’t already made sure the app only requested data when it actually needed to. I spent two full days analyzing the problem and trying to fix it.",[15,185,186],{},"It didn’t help.",[15,188,189],{},"Things improved, sure, but not nearly enough. This wasn’t how it was supposed to behave. You don’t expect to stare at a loading indicator for a full second while a blog post is fetched from a storage bucket and rendered.",[191,192,194],"h5",{"id":193},"so-i-started-digging-deeper","So I started digging deeper.",[15,196,197],{},"Most developer blogs I visited—both from people I knew and people I didn’t—were built with SSGs.",[15,199,200],{},"Every template I looked at—Next.js, Nuxt, Astro—used some form of static generation.",[15,202,203],{},"That’s when it hit me.",[10,205,207],{"id":206},"i-got-humbled","I got humbled",[15,209,210,211,214],{},"I finally made peace with the fact that not ",[50,212,213],{},"everything"," needs to be over‑engineered. Sure, pushing your limits is fun, and it helps you grow as a developer.",[15,216,217,218,221],{},"But when ",[50,219,220],{},"everyone"," is using a tool that has repeatedly proven itself, the problems will eventually catch up to you if you insist on swimming against the current.",[15,223,224],{},"As for what I did next—well, that’s a story for another time.",[15,226,227],{},"See you soon.",{"title":229,"searchDepth":230,"depth":231,"links":232},"",2,3,[233,234,235,236],{"id":12,"depth":230,"text":13},{"id":129,"depth":230,"text":130},{"id":163,"depth":230,"text":164},{"id":206,"depth":230,"text":207},"2025-12-22","I was wrong","md",{"author":241},"Hassan Qasemi",true,"\u002Fwritings\u002Froad-to-here",{"title":5,"description":238},"writings\u002Froad-to-here","Development","4 min read","B9EKWS4kcDAhrclsJjH_oDrV1Fb9iQfPJrhDwIyC4u0",1789387127310]