← WorkSC.01 / 09

Lines Up

Website + custom CMS

Role
Sole developer, from requirements to production
Context
Dexaura · for an architecture studio
Period
2026 — now
Lines Up website home page: large headline 'L'architecture, ligne après ligne.' on black with orange accents
Live site, captured Nov 2026. The studio's content is still being added.Fig. 01

01 — Overview

A multilingual (French / English / Arabic, RTL) website and custom CMS for an architecture and interior-design studio, serverless on Cloudflare Workers at $0 hosting cost.

The challenge

One developer, a real client, three languages including right-to-left Arabic, and editors who must never be able to publish a draft by mistake, all within free-tier hosting limits.

Stack

  • Next.js 16
  • TypeScript
  • Cloudflare Workers
  • D1
  • R2
  • Drizzle ORM
  • Zod
  • Tailwind CSS
  • Vitest

02 — Architecture

What I built, layer by layer.

  • ■ Interface
  • ■ API & logic
  • ■ Data
  • ■ Cloud & delivery
  • ■ Quality & security
  1. InterfaceNext.js 16 UIAPI & logicWorkers (OpenNext)
  2. API & logicWorkers (OpenNext)DataD1 + Drizzle
  3. InterfaceWebP in browserCloud & deliveryR2
  4. Cloud & deliveryCron TriggersDataD1 + Drizzle
  5. ExternalBehanceAPI & logicWorkers (OpenNext)
  6. Quality & securityCI · VitestAPI & logicWorkers (OpenNext)
Interface
Multilingual RTL site and admin CMS in Next.js 16; images converted to WebP in the browser.
API & logic
Server-enforced roles on every action, 2FA, Zod validation, approval workflow.
Data
Cloudflare D1 with Drizzle ORM; audit log of every change.
Cloud & delivery
Serverless on Cloudflare Workers via OpenNext, R2 media, Cron publishing; $0 hosting.
Quality & security
360+ automated tests (incl. Workers runtime), CI with preview deployments.

03 — What I did

  1. 01

    Ran the project directly with the client: gathered and analysed needs, split the work into stages, estimated, planned, prioritised and documented it.

  2. 02

    Next.js 16 (App Router) on Cloudflare Workers via OpenNext, with Cloudflare D1 + Drizzle ORM and R2 media storage, in strict TypeScript with Zod.

  3. 03

    Server-enforced roles (owner / admin / editor) on every action, two-factor authentication, an audit log and an approval workflow so drafts never reach the public site.

  4. 04

    Cron-triggered scheduled publishing designed to be idempotent: a project can never be published twice.

  5. 05

    Behance portfolio import with an image-rights check, and browser-side WebP conversion that strips EXIF/GPS data.

  6. 06

    SEO (hreflang, sitemap, structured data) and accessibility (keyboard navigation, reduced motion, contrast).

04 — Results

  • 360+ automated tests, some running inside the Workers runtime

  • CI with automatic preview deployments

  • $0 hosting within free-tier limits

On a phone · same build, live site

Lines Up, mobile
Next project · SC.02QRBase →