Skip to the content
Yaaza Ait Bah
All work

This portfolio

The site you are reading: a Next.js front end, an Express API and MongoDB, in English, French and Arabic, with an administration area that manages every word on it. Built, tested and deployed to a VPS end to end.

This portfolio — no screenshot yet

Built with

  • TypeScript
  • Next.js
  • React
  • Tailwind CSS
  • shadcn/ui
  • Radix UI
  • TanStack Query
  • React Hook Form
  • Zod
  • Node.js
  • Express
  • MongoDB
  • Mongoose
  • JSON Web Tokens
  • Docker
  • Docker Compose
  • Caddy
  • Vitest
  • Playwright
  • GitHub Actions
  • Linux

Role

Everything: the design, the frontend, the API, the database, the tests, the deployment.

The problem

Three languages, one of them read right to left, and every word on the page stored rather than written in the code — so that adding a language is content and configuration, never a schema change.

Approach

Every stored string is a map keyed by locale with only the default required, and the layout uses logical properties throughout rather than left and right. The alternative — a column per language — was rejected because it makes a fourth language a migration instead of a folder.

Outcome

Live on a VPS behind a reverse proxy with automatic TLS, the administration area on a host of its own, and a test suite of over 1,500 cases that runs on every push.