Shorter than a blog post, no title required — the small things worth writing down before I forget them.
Next.js
Next.js 16 quietly renamed the middleware.ts file convention to proxy.ts — same job (runs before a route renders, gates auth, redirects), just a new filename and export name (export function proxy(...) instead of middleware). Every tutorial still says middleware.ts because it predates the rename. Found this the hard way wiring up auth for this site's admin panel — worth checking your Next.js version's own bundled docs instead of trusting a cached mental model.
GitHub API
GitHub's GraphQL contributionsCollection field (what powers the green-squares contribution graph) needs a classic personal access token with the read:user scope. Fine-grained PATs — the kind you'd normally reach for now, scoped to one repo — don't map cleanly onto this field. Learned this building this site's homepage contribution graph, right after using a fine-grained PAT for everything else; had to create a second, differently-shaped token just for this one query.
GitHub API
GitHub's simple Contents API (PUT /repos/.../contents/:path) has a practical ~1MB reliability ceiling for the base64-encoded content in a single request — not documented officially, but consistently reported. Bigger or binary files need the lower-level Git Data API instead: create a blob, then a tree (anchored to the current tree via base_tree, or it silently wipes every other file), then a commit, then move the branch ref forward. The one easy way to corrupt a binary upload: the blob's encoding field defaults to utf-8 if you don't set it to "base64" explicitly.