MİNE — CREATIVE DEVELOPER

CASE 02 · LIVE PRODUCT · 2025–2026

ehlisunnah.com

A Turkish Islamic-studies platform. Not a blog — a body of interactive modules spread across 189 routes, held together by one design language.

OPEN THE LIVE SITE

ehlisunnah.com homepage — eight-pointed medallion and the İlim ve Hakikat headline
01 — Homepage. Headline, medallion and the live inventory bar.

02 — THE PROBLEM

Make it navigable
without flattening it.

The content is both deep and heavily cross-linked: scholars, works, narrations, concepts, practice. A conventional menu either flattened it or drowned the reader.

The decision: move navigation into a spatial metaphor. Seven gates, rooms beneath them; a module earns its own screen to the extent it is genuinely different.

03 — APPROACH

System first,
then pages.

01

Colour, type and spacing defined as tokens in one place; five atmospheres built on top of them.

02

Every module started with a brief; no code before discovery and plan were signed off.

03

Content bound to schemas; a record without a source citation fails the build.

04

Each module accepted by measurement — screenshot and number, not "looks fine to me".

04 — DESIGN SYSTEM

Five atmospheres,
one language.

Paper & Ink, Navy Night, Emerald Silence, Rose Ash and Observatory. The reader chooses; all 189 routes draw from the same token set.

The scholarship transit map — classical works placed on five coloured lines
05 — The transit map. Five lines, interchange stations, a line key.

06 — GENERATIVE ENGINE

Same input,
same artwork. Always.

The reader types a name and picks mood, palette and composition. The engine draws a vector illumination plate in the browser — redrawn on every keystroke.

The engine is deliberately pure and deterministic: no network, storage, clock or DOM input. Identical text and choices always yield the identical plate — which makes the output testable, exportable and sharp independent of device pixel ratio.

Generated plate — ivory palette, medallion composition
Ivory · Classic
Plate generated from different text — star geometry has changed
Text changed
Plate with navy palette and framed composition
Navy · Framed
07 — Live capture: redraw while typing, then palette and composition change.
The lineage diagram — 109 scholar nodes radiating across eight branches
08 — 109 nodes, eight branches.

08 — DATA VISUALISATION

109 nodes,
eight branches.

The source sits at the centre; eight disciplines occupy sectors, generations occupy rings. The polar layout is drawn in hand-authored SVG — each node's angle and radius computed from the data.

Why not an off-the-shelf graph library: what must be read here isn't an arbitrary network, it's generational order. A radial layout gives that at a glance; force-directed layout did not.

09 — ASTROLABE

A working instrument,
not an ornament.

Rotate the rete, read the time, inspect the qibla direction. Everything is computed on-device; it does not call an external time or location service.

Plate and rete are drawn as SVG; the drag controller and the determinism of the drawing have their own unit tests.

The astrolabe — brass ring, celestial coordinate grid and star markers
09 — The instrument workspace.

10 — RESPONSIVE

Mobile is rebuilt,
not shrunk.

Homepage on mobile
Homepage
Transit map on mobile
Transit map
Astrolabe on mobile
Astrolabe

Designed from 320 to 1920px. The top bar collapses to an icon row, the hero restacks, the transit map reflows.

11 — TECHNICAL

As measured.

FrameworkNext.js 16 (App Router) · React 19 · TypeScript
StylingTailwind v4 · CSS Modules · styled-jsx
Motionframer-motion · GSAP (ScrollTrigger) · Lenis
GraphicsHand-authored SVG · Three.js / R3F (one live scene)
DataFile-based content · Zod schema validation
Scale189 page.tsx · 873 components
Tests2,080 (2,077 passing) · Vitest + Playwright
Type safetytsc --noEmit clean
SEO45 dynamic OG cards · JSON-LD in 76 files
DeliveryVercel

12 — QUALITY & ITERATION

Gates at build time.

More than 40 content validators run in a chain before the build. A record missing its source does not ship — content accuracy is a build condition, not a preference.

On the interface side acceptance is measured: screenshots, pixel measurement, overflow checks. This portfolio was produced the same way — a navigation collision measured across 13 viewport widths was found and fixed exactly like this.

I work with an AI-assisted development workflow. Direction, design decisions, acceptance criteria and quality control are mine.