Lines Up
Website + custom CMS
- Role
- Sole developer, from requirements to production
- Context
- Dexaura · for an architecture studio
- Period
- 2026 — now

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
- InterfaceNext.js 16 UIAPI & logicWorkers (OpenNext)
- API & logicWorkers (OpenNext)DataD1 + Drizzle
- InterfaceWebP in browserCloud & deliveryR2
- Cloud & deliveryCron TriggersDataD1 + Drizzle
- ExternalBehanceAPI & logicWorkers (OpenNext)
- 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
- 01
Ran the project directly with the client: gathered and analysed needs, split the work into stages, estimated, planned, prioritised and documented it.
- 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.
- 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.
- 04
Cron-triggered scheduled publishing designed to be idempotent: a project can never be published twice.
- 05
Behance portfolio import with an image-rights check, and browser-side WebP conversion that strips EXIF/GPS data.
- 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
