Bane Photography — Full-Stack Portfolio & Custom CMS by Stefan BrkljačićBane Photography — Full-Stack Portfolio & Custom CMS by Stefan Brkljačić

Bane Photography — Full-Stack Portfolio & Custom CMS

Portfolio project
Stefan Brkljačić

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.
Skills: Fullstack Engineer · Frontend Engineer · Backend Engineer
Tools: Next.js · React · TypeScript

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.

Tags