Sid Jain's portfolio, writing archive, and GitHub commit timeline. The site is a Next.js application designed for Vercel.
Use Node 24 and Bun:
bun install --frozen-lockfile
bun run devThe website works without secrets; the persisted commit feed stays empty until
PostgreSQL is configured. Set DATABASE_URL for application queries and, when
using a runtime transaction pooler, DATABASE_URL_UNPOOLED to a direct or
session-pooler connection for migrations and cron setup. Supply these in
.env.local for local use and in Vercel environment settings for deployments;
the application does not provision a database or synchronize connection settings.
See the commit sync guide for Supabase Cron, account
polling, and webhook setup.
The separate Codex stats guide covers its encrypted
account snapshots and scheduled sync.
bun run format:check
bun run lint
bun run typecheck
bun test
bun run buildbun run build only builds the application. To use the existing production
migrations and Supabase scheduling, set Vercel's Build Command to:
bun scripts/migrate-production-database.ts && bun run build && bun scripts/configure-supabase-cron.ts --production-buildThose operational scripts act only on Vercel production deployments. The
migration runs before the build because pages may read the database while
building. Cron configuration follows a successful build; it is not a
post-deployment hook. Local operations remain bun run db:migrate and
bun run supabase:cron.
Move the existing per-account token values into one GITHUB_TOKENS JSON object,
keyed by the logins in src/content/site.ts. The same tokens can be reused; no
new tokens or account IDs are required. Set this variable in Vercel and set the
ACTIVITY_GITHUB_TOKENS repository secret for the manual backfill Action (GitHub
reserves secret names beginning with GITHUB_). Keep the old token
variables until the new deployment has been verified, then remove them.
Keep the existing database, webhook, cron, cursor-signing and OpenAI credentials.
To retain analytics, set NEXT_PUBLIC_POSTHOG_KEY to the existing project's public
capture key; NEXT_PUBLIC_POSTHOG_REGION defaults to us.
For the database-backed installation, set the Build Command above before deploying
this change. It applies migration 0022, builds against the updated schema, then
updates cron configuration. Migration 0022 only replaces seven username
allowlists with valid-login checks; it adds no tables or columns and rewrites no
stored history. Leave older applied migrations intact.
src/content/resume.ts: identity, social profiles, career, education and PDF paths.src/content/home.ts: introduction and featured work.src/content/site.ts: tracked GitHub authors, language and work-log timezone..env.example: every supported environment variable, with blank values.
Vercel's VERCEL_PROJECT_PRODUCTION_URL supplies the canonical domain, including
for preview metadata. Enable Automatically expose System Environment Variables
in the project settings. Local URLs use localhost and the configured port.
There is no separately maintained site URL or blog asset base URL: exported
Markdown uses the image URLs already emitted by the MDX compiler.
GitHub activity uses configured public authors and separate credentials. See the GitHub activity guide for token format and service setup, and the analytics guide for optional PostHog configuration.
Each installation needs its own database. Cron/Vault names are installation-wide;
sharing one database between independent sites is unsupported. Set vercel.json
regions to match your database location (the existing deployment uses Tokyo).
Personal content and the authoring defaults under .rulesync/ can remain or be
edited independently of the application configuration.
.worktreeinclude automatically copies .env.local into local worktrees. Use
only development-scoped credentials there; keep production credentials in the
deployment secret store. The copied file remains ignored by Git.
Docker is required for PostgreSQL integration tests; Bun reports those tests as
skipped when Docker is unavailable. Typst tooling is needed to regenerate the
résumé PDF. Versions are pinned in mise.toml, package.json and bun.lock;
CI installs with the frozen lockfile.
GitHub native secret scanning and push protection are enabled for this repository.
Enable those repository settings when creating a fork. The historical Firebase
project configuration still needs an owner-side restrictions/retirement review.
Report credential exposure privately through GitHub's security reporting feature
when enabled. Otherwise, use the maintainer contact in src/content/resume.ts;
never paste credentials into a public issue.
A code license and the reuse policy for personal writing/images still need to be chosen. Public source availability alone is not a grant of reuse rights. Preserve upstream copyright/license notices for vendored fonts, assets and authoring skills.