Skip to content
Bagtyyarfull-stack engineer

Personal engineering portfolio

Ongoing

This site: Next.js 16 on Railway, with GitHub Actions checks, 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

Every merge passes five CI jobs before it deploys to Railway.

Context

The code, tests and CI config are public on GitHub.

Decisions

  • Framework: Next.js 16 App Router with TypeScript strict mode. Server components by default, client boundaries only where needed.
  • Styling: Tailwind CSS v4 with OKLCH design tokens and shadcn/ui. Geist Sans and Geist Mono, dark only.
  • Database: PostgreSQL with Prisma 7. Content status and visibility are separate concerns (draft/published/archived × public/privateRoom/adminOnly).
  • Auth: Auth.js v5 beta with GitHub OAuth, owner-only access. No client accounts in v1.
  • Private Rooms: Signed, revocable, SHA256-hashed tokens for read-only client project views.
  • Testing: Vitest unit tests, Playwright end-to-end tests and axe 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 deploy before node server.js, keeping local, CI, and Railway schema evolution on the same path.
  • Custom domain: bagtyyar.dev is the canonical production URL, with Auth.js and SEO metadata configured through Railway variables.

Tests and deployment

GitHub Actions quality gate

CI/CD

Prisma validate, migration deploy, seed verification, typecheck, Vitest unit tests, production build, Docker image verification, smoke checks, private-room checks, and accessibility scans run before code reaches production.

Playwright tests in 4 CI jobs

Testing

Public navigation, admin guard, accessibility (axe-core), and private room flows tested across 4 dedicated CI gates.

Multi-stage production Dockerfile

Docker

Dockerfile uses deps, builder, and runner stages with Next.js standalone output. CI verifies the image, and the Railway container runs Prisma migrations before starting the Next.js server.

Railway deployment with custom domain

Deployment

Railway hosts the Dockerized Next.js app, manages PostgreSQL, stores production environment variables, and serves the canonical bagtyyar.dev domain.

Accessibility scans

Testing

Automated axe-core scans on every PR. prefers-reduced-motion support, semantic HTML, and keyboard-navigable private room fallbacks.

Private rooms with signed revocable tokens

Architecture

SHA256-hashed access tokens with explicit revocation. Invalid and revoked tokens fail safely without leaking project existence or content.