Personal portfolio of Oleh Vanin — live at exsesx.dev. Built with Next.js 16 and React 19, deployed on Vercel.
- Next.js 16.3 Preview — App Router, React Compiler, typed routes, and experimental React View Transitions
- React 19, Tailwind CSS 4, Base UI, and Lucide React
- Native CSS motion and a tiered glass system, with refractive effects progressively enhanced where supported
- TypeScript 7.0.2 through Next's CLI checker and Biome for linting and formatting
- Bun 1.4.1 for package management and scripts
bun install
bun run devThe CV endpoint (/api/resume/pdf) proxies a resume from RXResume and needs
RXRESUME_API_KEY set — copy .env.example to .env and fill it in.
bun run biome:check
bun run mdx:check
bun run typecheck
bun test
bun run buildCI uses Bun 1.4.1 to run a frozen install, verify dependency deduplication, run
Biome and MDX checks, typecheck, execute the Bun test suite, build for production,
and run the browser tests on every push to main and on pull requests. The
route-motion browser contract can also be run locally with bun run test:motion.
Production builds use Webpack while the 16.3 preview's Turbopack build path is avoided because it currently deadlocks during compilation in this project.
bun run build
bun run startsrc/app— App Router pages for/,/projects, and/project/[slug], plus the/api/resume/pdfendpointsrc/components— shared UI and interactive client boundariessrc/lib— project data and behavior contracts for routing, motion, themes, hotkeys, and security policysrc/styles— global design tokens, native motion, View Transition, and tiered glass rulesscripts— committed asset generators exposed asbun run generate:faviconsandbun run generate:social-images; Next.js serves native metadata routes fromsrc/app/robots.tsandsrc/app/sitemap.tstests/e2e— Playwright contracts for route motion, shared controls, media behavior, and metadata routesdocs— implementation invariants, Safari handoff notes, and postmortems
See AGENTS.md for pull-request conventions and Vercel identifiers used by agent workflows.