TypeScript + React + Tailwind app for collecting Oscar picks and sharing a ballot link.
pnpm install
pnpm devpnpm typecheck
pnpm build
pnpm previewBallot data is loaded from src/data/oscars-2026.json through src/data/oscars.ts.
Expected shape:
type Nominee = { id: string; title: string; subtitle?: string };
type Category = {
id: string;
title: string;
nominees: Nominee[];
};
type OscarEvent = { editionLabel: string; ceremonyDate: string; location: string };
type OscarsData = { event: OscarEvent; categories: Category[] };To publish live results for everyone, edit src/data/oscars-results.json so
each entry maps a category ID to a nominee ID, or to an array of nominee IDs
for ties, then redeploy.
- In Cloudflare Pages, set environment variables:
VITE_APP_BASE_URL=https://oscars.andy.wsNODE_VERSION=22
- Deploy from CLI (recommended for this project):
pnpm deploy:pages:main
- Or use Git-integrated Pages build:
- Build command:
pnpm build - Build output directory:
dist
- Build command:
- For preview deploys:
pnpm deploy:pages:preview
- Run smoke checks:
pnpm smoke:pages https://oscars.andy.ws
Share links are path-based (/<code>), and PDF routes are /<code>/pdf.
If you want reproducible installs, keep pnpm-lock.yaml committed and avoid enabling Ignore build cache unless debugging.