Skip to content
Omar Aldanaf

Case study

WebCMS

Phoenix Production Studio

Marketing website and purpose-built content management system for an Abu Dhabi photo and video production studio.

Client
Phoenix Production Studio (UAE)
Industry
Photo & video production
Status
Live
Home page.

Overview

Phoenix Production Studio creates photography and video for brands, creators, events and weddings in Abu Dhabi. The website presents its services, portfolios and studio rental packages, and turns visitors into enquiries through WhatsApp and callback requests. Every page runs on a custom, file-based CMS, so the studio team can edit content, pages, menus and media without touching code.

The problem

The studio needed a fast, visually rich website to showcase its photo and video work and publish its services and rental prices, and its team needed to keep that content current on its own.

What I built

  • A public site built around a service hub: photo production, video production, studio rental and content creation
  • A block-based CMS with a single-page admin app, storing content in JSON files with no database
  • A media library with large-file uploads for photography and video

Key features

  • 01Home page with a full-screen looping background video and a hero video playlist
  • 02Photo and video category pages (fashion, jewellery, product, e-commerce, perfumery, food, events, weddings and more), each with its own portfolio
  • 03Video portfolios where every card shows its own first frame, and video pages that suggest photos from the matching category
  • 04Studio rental with pricing cards, packages, add-ons and equipment lists
  • 05Client showcase, FAQ, callback request form and WhatsApp contact across the site
  • 06CMS with 20 block types: add, reorder, duplicate or hide blocks, with editing forms generated from each block schema
  • 07Live preview of unsaved drafts, automatic revisions with one-click restore, and edit-conflict detection between editors
  • 08Media library with chunked uploads of up to 2 GB per file and a usage scan that flags missing files
  • 09Per-page SEO: title, description, share image and indexing control

Architecture

  1. Browser
  2. Apache + PHP router
  3. Block renderer
  4. JSON content store
Architecture: Browser to Apache + PHP router to Block renderer to JSON content store

Screens

Mission and services overview.
Photo production categories, each with details and prices.
Custom quote and FAQ.
Home page on a phone.
Studio rental on a phone.

Decisions & challenges

Files instead of a database

Content lives in JSON files written atomically with file locking, which keeps hosting simple and makes every page easy to back up and restore.

Blocks defined once

Each block type is declared once with its fields and renderer, and the admin form is generated from that schema, so a new section type needs no admin UI work.

Performance & security

Performance

  • Static assets versioned for long-term browser caching
  • Video first frames used as covers, so no separate poster images are downloaded

Security

  • Login throttling with temporary lockouts, and hashed passwords that are rehashed automatically
  • Hardened admin sessions: HttpOnly, SameSite=Strict, bound to the browser and expiring after 12 hours of inactivity
  • CSRF tokens on every write and a strict Content Security Policy on the admin
  • Uploads checked by extension and real MIME type, and stored where scripts cannot execute

Inventory

Profile

Developer toolkit

  • GitHub

Systems toolkit

System

omar@world01

Client-side command palette. Type help to list commands.

WORLD_01 map

  1. SPAWN // OMAR Spawn Point / About
  2. CRAFTING // STACK Crafting Workshop / Skills
  3. MINE // PROJECTS Project Mine / Projects
  4. LAB // ARCHITECTURE Logic Lab / Architecture
  5. OPS // INFRASTRUCTURE Server Room / Infrastructure
  6. HALL // EXPERIENCE Achievement Hall / Experience
  7. PORTAL // CONTACT Portal / Contact