Skip to content
Nizar Abubaker

Colophon

How this site is made.

This site is a small, deliberately ordinary system — the kind I would recommend to a client with the same problem.

How a page gets to you

  1. Edge

    • Nginx

      TLS, routing, static media

  2. Experience

    • Next.js

      Server-rendered, cached pages

    • CMS

      Same app, /admin

  3. Services

    • NestJS API

      Validation, auth, search

  4. Data

    • PostgreSQL

      Content + full-text search

    • Media storage

      Disk or S3-compatible

  • NginxNext.js
  • Next.jsNestJS API
  • NestJS APIPostgreSQL
Pages are rendered by Next.js from content served by a NestJS API over PostgreSQL. Editing in the CMS invalidates the page cache.

Stack

  • Next.js (App Router) and React, TypeScript throughout
  • NestJS API with Zod validation and OpenAPI docs
  • PostgreSQL with Drizzle ORM; full-text search built in
  • Docker Compose and Nginx

Type & colour

  • Schibsted Grotesk, Newsreader and IBM Plex Mono
  • IBM Plex Sans Arabic and Noto Naskh Arabic
  • Paper and ink by day, graphite by night, one signal colour

No trackers, no cookies for visitors, no third-party scripts unless I choose an analytics provider in the CMS. If you are curious about the details, there is a longer write-up in the notes.