A free photography portfolio website template built around the work
A filterable masonry gallery, a keyboard-accessible lightbox and a client proofing page — nothing competing with the photographs.
Photography portfolio templates tend to arrive full of someone else’s photographs and a design that competes with them. Lumen ships with zero image files on purpose: the layout, the masonry gallery and the lightbox are all built to disappear behind your work, and the demo you see is the design at its barest.
It also includes the page working photographers actually need: client proofing. Share a gallery from a shoot, let the client review and select, and keep that workflow on your own domain instead of a third-party service with a monthly fee.
Like all six of our templates, Lumen is MIT licensed and builds to a static export — free hosting on Cloudflare Pages or Netlify, with the bandwidth spent on full-resolution work rather than JavaScript.
What’s inside
Masonry gallery with filters
Work displays in a true masonry flow, filterable by category, so a mixed portfolio reads as curated collections.
Keyboard-accessible lightbox
The lightbox works with arrow keys and Escape, not just clicks — accessibility most gallery templates skip.
Client proofing page
A page for the working part of photography: sharing a shoot with a client for selection, not just showing a portfolio.
Your images stay yours
The template ships zero image files — no stock photos to strip out. Drop your photographs in and the design is built to carry them.
Fast under heavy media
Static export plus a design with no decoration means the bandwidth budget is spent on your photographs.
Single config file
Name, categories and contact details in config/site.ts — set up in minutes.
Get it running
Four commands from clone to a production build. The build outputs static files — host them anywhere, free.
git clone https://github.com/haider484991/lumen-nextjs-photography-template.git
cd lumen-nextjs-photography-template
npm install
npm run dev # develop at localhost:3000
npm run build # static site in out/ — deploy to any static host
Questions
Why does the template ship with no images?
Because every one would be a placeholder you have to remove. Lumen’s demo shows the structure honestly; your photographs complete it. That also keeps the repository small and the setup fast.
How does the client proofing page work?
It is a gallery page structured for review — a client opens a link, browses the shoot and notes selections. It runs as part of your static site, so there is no per-gallery fee like hosted proofing services charge.
Can I sell prints or use it commercially?
Yes — MIT licensed. Use it for your business, add a print-shop link, or build client sites on it if you design for other photographers.
Will you customize it to my brand?
Yes. Typography, layout variants, a booking flow — we adapt Lumen or design a fully custom portfolio. Send us your work and what you need.
More free templates
Restaurant website template
A real HTML menu instead of a PDF, reservations, live open/closed status, and Restaurant + Menu schema built in.
View Table & Fork →Next.js blog template
Write posts in Markdown, get a fast static site with RSS and dark mode. MIT licensed — use it for anything.
View Nova →React dashboard template
Auth shell, sortable tables and hand-drawn SVG charts in a colour-blind-safe palette — with zero chart-library lock-in.
View Pulse →While you're here
Why Is My Site Slow?
WordPress site slow? The 8 usual causes in plain words, with a free check for each: images…
Read more →Local AI VRAM Calculator
Pick a graphics card and a model. See the tokens-per-second ceiling, where context runs out and…
Read more →AI Chatbot Development
AI chatbot development company: bots trained on your content that book jobs and hand off…
Read more →Get a free homepage mockup
Tell us about your business and we'll design a custom homepage concept within 48 hours — free, no strings attached.