Short-term upgrades — preview
Scoped page: Tailwind arbitrary values + <style jsx> only. No global CSS touched.
Brand token swatches (must resolve to #DE1D8D)
First, third and fourth boxes use the canonical brand token; the second is the raw hex reference. They must look identical.
Status per area
- doneBrand token (brand scale) — brand-* added in tailwind.config.js, all #DE1D8D/pink-600 refs migrated
- doneSitemap (next-sitemap v3) — next-sitemap.config.js added; custom script unwired from build
- doneRSS feed — generateRss zero-post safe; feed rewrites every build via /blog with canonical domain
- doneDynamic OG image (/api/og) — dependency-free SVG endpoint; SEO.js falls back to it
- already-existedMDX pipeline — remark/rehype plugins + reading-time already wired; no changes
- doneCommand palette posts+tags — /api/palette index; select navigates to /blog/[slug] or /tags/[tag]
- needs-keysAnalytics / comments / newsletter / views — all code wired; only IDs/keys to fill (see checklist)
- doneDropMenu avatar (next/image) — raw <img> migrated to next/image (unoptimized remote)
Live endpoints
- /sitemap.xml (next-sitemap; posts + tags via additionalPaths)
- /feed.xml (RSS 200 even with zero posts — valid empty channel, canonical self-link; regenerates every build)
- /api/og?title=Hello (dynamic OG SVG, brand color + “Mere Musings”)
- /api/palette (command-palette index: 0 posts, 0 tags)
Domain note: canonical domain is https://harsh-shah.is-a.dev everywhere, including project subdomains (syntrak/short) — point DNS at *.harsh-shah.is-a.dev or revert those two links if they don't resolve.
Palette posts + tags demo
Press Ctrl/⌘ + K, then type a post title or tag. Keyboard select navigates to /blog/[slug] or /tags/[tag]. Sample index entries:
DropMenu avatar before / after
Before: raw <img src={session.user.image} … /> with an eslint-disable comment. After: <Image … width={24} height={24} unoptimized /> — same 24px rounded-full look, remote avatars (GitHub/Google) bypass the domain allowlist via unoptimized, eslint clean with no disable comment.
Analytics / comments / newsletter env-key checklist
- set
Google Analytics ID (G-F6V2QTJ628 in siteMetadata) - empty
siteMetadata.analytics.plausibleDataDomain - empty
siteMetadata.analytics.umamiWebsiteId (+ placeholder umami src) - set locally
NEXT_PUBLIC_GISCUS_REPO / REPOSITORY_ID / CATEGORY / CATEGORY_ID - set locally
EMAILOCTOPUS_API_URL / API_KEY / LIST_ID (provider: emailOctopus) - set locally
NEXTAUTH_SECRET (or SECRET) + OAuth client keys - set locally
NEXT_PUBLIC_LYKET_API_KEY + DATABASE_URL (views)