Case Study — 01
The Brief
STILLS — A Y2K-inspired browser-based photo editor with filters reminiscent of the late 90s and early 2000s: the nu-metal grit, low-rise denim, over-accessorised digicams, and all the nostalgia that comes with them.
Named after the stillness of a memory, Stills runs entirely in the browser — no download, no account, just a URL. Filters named after cultural touchstones (KARWAI, SHOEGAZE, IWANTTOBEYOURS), a darkroom for storing developed edits, and tools for cropping, rotating, and distorting images. Built in React and deployed on Vercel, the interface draws from Windows 3.1 chrome, tattoo shop visual culture, and the emotional language of film photography — a tool designed as much to be felt as to be used.
Cultural References
The references behind the build — hover any print to pull it closer.
Key Design Decisions
Tension between an old interface language and a contemporary aesthetic — a deliberate anachronism. The bevel chrome, menu bar, and status ticker root the experience in the era Stills references, without pretending to be a real OS application.
A sign-off, not a slogan. It positions the app as a love letter — to memory, to imperfection, to the photographs you keep even though they're technically wrong. Not a product tagline, but an emotional disposition.
Photos are developed, not exported. Stored as negatives, not files. The language frames the entire experience: you're not editing an image, you're developing a moment. LocalStorage persistence means the darkroom actually holds your work across sessions.
SHOEGAZE, KARWAI, IWANTTOBEYOURS, SMITH, FIONA — each filter is named after a feeling or reference, not a visual description. You don't pick a black-and-white filter; you pick GHOST. The name shapes how you interpret the image.
The product lives at a URL. No App Store, no sign-up, no paywall. This is the web at its original proposition: instant access to something useful, beautiful, and shareable. The URL is the product.
The logo blinks on the splash screen — not a loading animation, but the glow of a neon sign in a tattoo shop. Typography as atmosphere. Pinyon Script is calligraphic but worn, elegant but not precious. It earns the emotional weight of the name.
The Interface
The editor — filter sidebar, Win95 menu bar, right-panel tools
The darkroom — developed negatives, sequential numbering
Crop — nine-grid overlay, aspect ratio presets
Iterations
The original landing page was minimal — a dark panel, the logo, a single button. The Win95 chrome came later, once it became clear the interface itself needed to feel like a found object, not a designed one. The title bar, menu bar, and status strip turned a splash screen into a software artefact.
The Win95 chrome positions Stills in its cultural moment without being nostalgic pastiche. The bevel border, title bar, and version number in the status strip are signals — to the right audience, they are immediately legible as a reference, not an accident. The application metaphor makes the browser feel like software.
Technical Implementation
Built in React (Vite), deployed on Vercel, connected to a Namecheap domain with custom DNS. The entire editor lives in a single JSX file — filters applied via CSS compositeFilter strings, cropping handled through canvas API with a two-step draw (rotate → crop), localStorage persistence for the darkroom, HEIC support via heic2any conversion before FileReader, and a ResizeObserver-powered crop display component for accurate preview rendering.