
Bane Photography — Full-Stack Portfolio & Custom CMS
A Next.js photography portfolio with an authenticated CMS, responsive galleries and automated image processing. Deployed; final artist content pending.
The brief
Build a photography website that gives the images room to breathe and allows the artist to maintain the portfolio without editing code. The public site and its content tools needed to work as one application.
My role
Full-stack development of the photography portfolio and custom Studio admin, including the responsive interface, server-side content workflows, media processing and Railway deployment. Completed during my independent freelance work.
A quiet, editorial viewing experience
The interface combines oversized serif typography, a dark palette and generous spacing. Photography can be arranged into editorial, grid or stacked series. A keyboard-accessible lightbox supports focused viewing, with restrained scroll and reveal interactions and reduced-motion handling.
Content management built around the artist
Studio provides authenticated workflows for photographs, series, exhibitions, site copy and incoming enquiries. The artist can upload images, add descriptive text, select featured work and update the public site without changing its source code. Exhibition dates determine whether a programme is upcoming, current or past.
From upload to responsive gallery
The Sharp pipeline generates responsive AVIF, WebP and JPEG renditions plus small preview placeholders. Content-addressed media storage supports deduplication, while metadata handling keeps GPS information out of the public image output. This connects an ordinary admin upload to the formats and sizes needed by the gallery.
Engineering decisions
Built with Next.js App Router, React, strict TypeScript, Tailwind CSS and Zod. Server-side session checks guard admin actions. JSON content uses validation, per-file locking and atomic writes. This intentionally suits a single-instance deployment with persistent storage; a larger multi-instance service would need a different storage layer.
Delivery and handoff
The application is deployed on Railway. The latest main-branch commit reviewed was 843572484d5f9299ceceba5d9c48304e3ea5a5b1; its lint, type, unit-test and end-to-end CI checks passed. Final photographs, biography and exhibition details are awaiting the artist's input through Studio.
The staged portfolio uses licensed Pexels photographs and clearly identified sample writing. Stock photographs are credited to their respective creators and are not presented as photographs made by Bane. The project demonstrates my website and CMS work; it does not claim ownership of the photographs, audience growth, revenue or conversion results.
Live application: https://banephotography-production.up.railway.app/
Skills: Fullstack Engineer · Frontend Engineer · Backend Engineer
Tools: Next.js · React · TypeScript
GitHub repository: https://github.com/stefanbrkkk/bane.photography
0 likes · 0 views · Oct 9, 2026
A Next.js photography portfolio with an authenticated CMS, responsive galleries and automated image processing. Deployed; final artist content pending.