Tag
#nextjs
8 posts across the garden · browse essays
The Tags Were There the Whole Time
Tags existed in every blog post since day one — I just never wired them up to actually appear on the page.
Removing orphan content/posts/ from an earlier broken sync (Contentlayer slug gotcha)
Four byte-identical duplicates left over from a rsync destination mistake, and the one-line Contentlayer slug regex that caused it.
Swapping Twitter for Substack and giving the sidebar logo a refresh
Retiring the Twitter CTA in favor of a Substack email list, adding a 'meet my family' link to ocampo.io, and replacing the sidebar logo with a new SVG pointing to the personal site.
Allowing Google Tag Manager through the Content-Security-Policy
The inevitable follow-up to adding GTM: the browser's CSP was blocking the script, so this PR adds googletagmanager.com to script-src and img-src in next.config.js.
Fixing a CSP typo: directive names don't take colons
The one-character follow-up to PR #4: removing the stray colons from the CSP directive names so the browser stops ignoring the whole header.
Adding Google Analytics to a Next.js blog the old-fashioned way
First instrumentation on the blog: a gtag wrapper in lib/ga.js, a custom pages/_document.js with the Global Site Tag, and no npm dependency.
A one-line whitespace fix on the gtag script tag
The shortest possible PR: collapsing a two-line JSX attribute into one. Shipping it anyway, because PRs are free and branch hygiene matters.
Migrating to GA4, swapping in Google Tag Manager, and renaming the site to steven.ocampo.io
Universal Analytics is on the way out, so this PR migrates to GA4 via Google Tag Manager loaded through next/script, and renames everything from stevieismagic.com to steven.ocampo.io.