Stills editor

Case Study — 01

Browser-Based Photo Editor Stills.

Role Design & Development
Stack React / Vite / Vercel
Year 2025–2026
Type Product Design
Live stillsyourstruly.com

The Brief

A photo editor built around feeling, not function.

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

01
Win95 Chrome on a Photo Editor

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.

02
yours, truly.

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.

03
The Darkroom Metaphor

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.

04
Filter Names as Cultural References

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.

05
No Account, No Download — Just a URL

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.

06
Pinyon Script Blinking Like Neon

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

Stills editor

The editor — filter sidebar, Win95 menu bar, right-panel tools

Stills darkroom

The darkroom — developed negatives, sequential numbering

Stills crop tool

Crop — nine-grid overlay, aspect ratio presets

Iterations

Early landing page UI
Landing Page — Before

A simpler splash. A darker mood.

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.

Landing Page — After

Windows 3.1 as aesthetic gesture.

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.

Current landing page with Win95 chrome

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.

React / ViteFront-End Framework
Canvas APIImage Processing & Export
LocalStorageDarkroom Persistence
VercelDeployment
heic2anyHEIC File Support
ResizeObserverCrop Preview Accuracy

What's
next.

← Back to Portfolio stillsyourstruly.com →