Personal Engineering Portfolio
Active buildThe portfolio you are viewing — a live meta case study in delivery discipline, Railway deployment, GitHub Actions gates, Docker, Prisma migrations, and private client rooms.
- Next.js 16
- TypeScript
- Tailwind CSS v4
- shadcn/ui
- Prisma 7
- PostgreSQL
- Auth.js
- Vitest
- Playwright
- Docker
- GitHub Actions
- Railway
Outcome
138 tests, GitHub Actions quality gates, WCAG 2.1 AA accessibility checks, Dockerized Railway deployment, startup Prisma migrations, custom domain configuration, and private client rooms. The portfolio proves the engineering system it describes.
Context
This portfolio is not just a website — it is a working demonstration of the engineering system it describes. Every claim on the homepage is backed by code, tests, deployment configuration, or public evidence. The build quality is part of the product.
Engineering Decisions
- Framework: Next.js App Router with TypeScript strict mode. Server components by default, client boundaries only where needed.
- Styling: Tailwind CSS v4 with OKLCH color space, custom design tokens, and shadcn/ui components. Editorial aesthetic — Instrument Serif headlines, IBM Plex Sans body, IBM Plex Mono metadata.
- Database: PostgreSQL with Prisma. Content status and visibility are separate concerns (draft/published/archived x public/privateRoom/adminOnly).
- Auth: Auth.js with GitHub OAuth, owner-only access. No client accounts in v1.
- Private Rooms: Signed, revocable, SHA256-hashed tokens for read-only client project views. No passwords, no registration friction.
- Testing: 138 Vitest unit tests, Playwright E2E smoke tests, WCAG 2.1 AA accessibility scans — all in CI.
- CI/CD: GitHub Actions validates Prisma, migrations, seed data, typechecking, unit tests, production build, Docker image creation, smoke flows, accessibility, and private-room access.
- Deployment: Multi-stage Dockerfile, Next.js standalone output, Railway container deployment, Railway-managed PostgreSQL, and runtime environment variables for secrets and canonical URLs.
- Migration discipline: Production starts with
prisma migrate deploybeforenode server.js, keeping local, CI, and Railway schema evolution on the same path. - Custom domain:
bagtyyar.devis the canonical production URL, with Auth.js and SEO metadata configured through Railway variables.
Outcomes
- 138 unit tests across 14 test files covering access tokens, publication policy, markdown safety, auth guards, validations, and design tokens.
- Railway production path — Dockerized Next.js app, managed PostgreSQL, startup migrations, custom domain, and runtime env contract.
- Accessibility-first — automated axe-core scans on every PR, prefers-reduced-motion support, semantic HTML.
- Transparent delivery — build log, milestone tracking, architecture decisions, and pipeline evidence all visible to visitors.