Anjum Art & Craft

Anjum Art & Craft

The Brief

A gallery-grade store for one artist's handmade work

Handmade calligraphy is personal, slow and one-of-a-kind — but generic marketplace templates make it look like mass-produced stock. The artist needed a store that feels as considered as the work itself, that lets customers personalise a piece and see it before ordering, and that the artist can run alone without monthly SaaS fees or paid plug-ins.

Hard constraints: one-of-a-kind originals must never be sold twice, made-to-order pieces need honest lead times, and the whole stack must run on standard shared hosting with zero paid dependencies — no card gateway, no carrier API, no AI API.

Design Direction

Quiet luxury: ivory paper, deep green, a touch of gold

The visual system was built from a brand board before a single page was coded.

Palette
• Deep green #2F4A44 as the primary action colour
• Warm ink #2B2926 for type, ivory #FBF8F4 for paper and blush #F8E7E5 for soft surfaces
• Antique gold #C9A45C reserved for accents and highlights

Typography
• Cormorant Garamond for display — editorial, high-contrast serif
• Jost for body and interface — clean geometric sans
• Pinyon Script for personalisation previews — the customer sees their name lettered live

System
A tokenised design system (spacing scale 4–128px, radii, easing curves, durations and soft shadows) drives both the storefront and the admin, so every screen shares one rhythm. Generous whitespace, a 1440px max-width canvas, slow ease-out motion and photography-led layouts give it the calm of a gallery rather than the noise of a shop.

Tech Stack

Backend PHP 8.1+, custom MVC — no framework, no Composer packages
Database MySQL 8 / MariaDB 10.6 — 33 tables
Front-end Vanilla JS modules (cart, product, search, overlays) + hand-built CSS
Typography Cormorant Garamond · Jost · Pinyon Script (self-hosted WOFF2)
Imaging GD with WebP — every upload re-encoded server-side
Payments Cash on Delivery + Bank Transfer — zero paid gateways
SEO Auto sitemap.xml & robots.txt, Product/Article/Store JSON-LD, Open Graph

Architecture

Small, explicit layers — easy for one person to own

Front controller & router
index.php boots the app; a lightweight router maps 150+ storefront and admin routes to thin controllers, with the admin mounted on a private, configurable path.

Core
Router · Request/Response · PDO Database · Session · CSRF · Validator · View · Mailer · Store settings · Media & ImageProcessor · Cache · Icon set.

Models
Product · Cart · Order · CommissionRequest · Customer · DiscountCode · Review · JournalArticle · ShippingMethod — each a focused query object over the schema.

Views
90 plain-PHP templates split into storefront, admin, partials, emails and layouts.

Data model highlights
Products with variants, attributes, images and relations; orders with item lines, shipping snapshots and full status history; inventory movements; commission requests; reviews tied to verified purchases; store credits, returns, redirects; and admin roles, permissions and an audit log.

Customer Journey

From inspiration to a hand-lettered keepsake

  1. Discover

    Browse category pages, New Arrivals, Bestsellers and Sale, filtering by script, occasion, price, personalisable, in-stock and on-sale.

  2. Personalise

    Enter a name, date or verse and watch it render live in script on the product page; choose size, frame and other options.

  3. Checkout

    Cash on Delivery or Bank Transfer. Prices, stock and discount codes are re-read from the database at placement — the browser never sets a price.

  4. Made by hand

    The personalisation text is stored on the order line and printed on the packing slip; made-to-order pieces show their lead time.

  5. Track & receive

    Every status change emails the customer; guests can track an order by number and email without an account.

Storefront Experience

Brand-board Homepage

Announcement bar, hero, category rail, promo tiles, bestsellers, trust strip, Meet the Artist, commission banner, inspiration grid and newsletter.

Live Personalisation

Name, date or verse previewed in script in real time, then carried through to the order and packing slip.

One-of-a-kind Stock

Originals limited to one per order and decremented atomically, so the same piece can never be sold twice.

Commission Requests

Brief form with inspiration image upload, a reference number and a confirmation email.

Gallery & Zoom

Product pages with image gallery, zoom and selectable options for size, frame and finish.

Customer Accounts

Orders, wishlist, addresses and settings, plus guest order tracking.

Journal & Content

Editorial journal, About, FAQ, Shipping & Returns and full legal pages.

Privacy-first Analytics

Cookie consent; Google Analytics and Meta Pixel load only after the visitor accepts.

Admin & Operations

Orders

Mark cash collected or payment received, change status with automatic customer emails, add tracking, print packing slips; cancellations restock.

Commission Pipeline

New → Quoted → In progress → Completed, with recorded quotes and private notes.

Catalogue

Variants, personalisation settings, dimensions, materials, style and occasion tags, related products and CSV import.

Site Content

Edit homepage copy, replace any site photo, manage the journal, FAQ and legal pages without code.

Commerce Tools

Inventory, customers, moderated verified-buyer reviews, discount codes and newsletter export.

Roles & Audit

Admin users with roles and permissions; every change recorded in an audit log. Includes a pre-launch Opening Soon mode.

Engineering & Security

Premium on the surface, rigorous underneath

• CSRF protection on every POST; login, checkout, contact, newsletter and commission forms are rate-limited; session ID regenerated at login.

• Prices, stock and discount codes always re-read from the database at order placement.

• Uploaded images re-encoded to WebP; SVG logos rejected if they contain scripts; the uploads folder cannot execute code and is served with a sandboxed Content Security Policy.

• Strict CSP and security headers at the edge; proxy headers trusted only when explicitly enabled.

• Self-hosted fonts and assets, auto-generated sitemap and structured data for fast, search-friendly pages.

By the Numbers

33

Database tables

Variants, commissions, inventory movements, audit log

150+

Routes

Storefront and private-path admin

17k

Lines of code

13.6k PHP + 3.4k hand-written CSS & JS

90

View templates

Storefront, admin, emails and layouts

Paid dependencies

No framework, no gateway fees, no SaaS lock-in

3

Typefaces

Display serif, geometric sans, live script

Want something like this?

Let's talk about your project requirements.

Start a Project