Skip to content

Tag

#nextjs

8 posts across the garden · browse essays

EssaysApr 8, 2026Evergreen

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.

EssaysApr 7, 2026Evergreen

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.

EssaysJul 4, 2023Evergreen

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.

EssaysJun 26, 2023Evergreen

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.

EssaysJun 26, 2023Evergreen

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.

EssaysJun 25, 2023Evergreen

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.

EssaysJun 25, 2023Evergreen

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.

EssaysJun 25, 2023Evergreen

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.