What I Shipped Over a Weekend
A full weekend log: what went fast, what didn't, and what I'd do differently.
I don't usually write time logs. But this weekend was an interesting forcing function, because I set out to ship a full blog feature — routes, SEO, RSS, sitemap, 100 posts of real content — in 72 hours. Here's what actually happened.
Friday night, 6 PM - 10 PM
Goal: build the blog infrastructure.
Set up the content pipeline. gray-matter, next-mdx-remote, and a rehype-pretty-code configuration. Got blocked for about thirty minutes fighting Next 15's async params — every dynamic route now needs await params, and my muscle memory is from Next 14.
Got unblocked by reading the share route that was already in the codebase. Mirrored the pattern. Moved on.
Fixed a TypeScript error where as const was making rehype plugin arrays readonly, which fights Pluggable[]. Removed as const, imported the proper type from next-mdx-remote/rsc, worked.
Ended Friday with: a working /blog index, a working /blog/[slug] post page, a placeholder MDX file, and a build that passed.
Saturday, 9 AM - 6 PM
Goal: SEO infrastructure and MDX components.
Built the canonical URL logic with fallback to ${SITE_URL}/blog/${slug}. Built the JSON-LD script tag with Article schema. Built sitemap.ts using Next's MetadataRoute. Built rss.xml/route.ts as a route handler with static generation.
Verified every piece with curl against the running dev server. Canonical tag appears in view-source. JSON-LD parses as valid schema.org markup. Sitemap contains every route. RSS validates against W3C.
Then: the MDX components. MdxImage wrapping next/image. Callout with info/warning variants. DebateEmbed that fetches a real debate from Supabase and renders the existing Mux player. Each component took about twenty minutes. The Supabase query pattern was already established, so DebateEmbed was mostly plumbing.
By evening: SEO fully working, three custom MDX components, and the blog index looking reasonable on desktop and mobile.
Sunday, 10 AM - 11 PM
Goal: 100 posts of real content.
This is where my time estimate was off by a factor of four.
First attempt: I wrote a generator script with 100 post specs, each body about 120 words. It ran. It produced 100 MDX files that compiled. I thought I was done.
User review: "why are you only having placeholders? I need actual content there, be a seasoned writer and fill out all of them, don't be lazy."
Fair.
Second attempt: rewrote every post with 400-600 words. Structured each as three to four sections. Gave each post a distinct voice — some case study, some craft essay, some build journal. Split into five batches of roughly 20 posts each because the token budget on a single write wouldn't fit 100 at the longer length.
Each batch of 20 posts took roughly two hours to write, not counting thinking. Twenty hours of writing. Squeezed into about eleven actual hours because I was in flow and didn't stop.
Finished late Sunday. Posts are now substantive instead of stub-like. Build still passes. Sitemap and RSS regenerate with the full set.
What went fast
Infrastructure and SEO. Maybe 15 hours total across Friday and Saturday. Most of the work was already structured by the Next.js framework — sitemap.ts and route handlers mostly write themselves once you know the patterns.
Build-out of MDX components was fast because I was reusing existing Supabase and Mux plumbing from the debate pages. No new vendor integrations.
What went slow
Writing. Writing is always slow. I underestimated it by 3-4x.
The lesson I should have known: when a feature requires both code and content, the code is 10-20% of the effort. Content is the rest. Most engineers budget the opposite because code is what they track.
What I'd do differently
Budget content time as the dominant cost. If I knew going in that 100 substantive posts was 20+ hours of writing, I would have started the writing earlier, in parallel with the infrastructure, instead of sequentially.
Also: I wrote the whole thing without an outline. Some posts benefited from this (the personal ones flowed naturally). Some posts would have been faster with a five-minute outline before drafting.
The shipped artifact
- 101 blog posts, real content, 400-600 words each.
- Working /blog index, post pages, sitemap, RSS.
- Canonical URLs, JSON-LD, OG metadata per post.
- Three custom MDX components.
- All static-generated. Build is under 15 seconds.
Not bad for a weekend. The writing hurt. The code was the easy part. That's usually how it is.