sent here for Bellows
photography portfolio template nextjs · React and HTML source
Bellowsphotography portfolio template Next.js
A photography portfolio template nextjs and Tailwind v4 developers can hand to a working photographer, built on the half of the category that every other template omits: what the client receives, and what they may do with it.



- 63 / 63
- light / dark tokens
- 2
- modes, both designed
- 1
- DOM, rendered twice
- unlimited projects, client work included
- 12 months of updates
- 14 days, no questions
AGENTS.md and 4 skills ship in the zip, so your own agent keeps changing it after you buy.
docs: install, use, customizepages, composed from 24 sections
Every page is a real render from the publish gate, in the mode on show. Open any of them in the live preview.
Commissioned photography, licensed by the frame/- masthead
- hero-cut
- deliverable
- usage-forms
- commission-index
- +2
The frame sheet/work- masthead
- frame-sheet
- commission-index
- site-footer
One commission, end to end/commission- masthead
- commission-head
- plate-run
- shoot-record
- grants-table
- +2
The frame register/frames- masthead
- frame-register
- site-footer
Usage and fees/licensing- masthead
- three-cuts
- tier-table
- fee-bands
- exclusions
- +2
The practice/studio- masthead
- studio-statement
- method-rail
- turnaround-record
- credits
- +1
Brief a shoot/enquire- masthead
- brief-form
- terms-summary
- site-footer
The parts/components- masthead
- site-footer
Colorlib's own round-up of twenty-four photography templates has one that mentions session pricing, none that mention usage or licensing, and an FAQ that sends readers to a third-party service for proofing. This ships the commercial surface instead of the gallery. Eight routes: a home page that opens on the signature at full size, a frame sheet of fourteen delivered crops at equal optical area, one commission followed end to end to a fee that is a sum of its own lines, a filterable and sortable register of every frame and every licence issued against it, a licensing page that prices four usage forms and states plainly what a licence does not grant, a studio page whose delivery record shows all six of its inputs, an enquiry form that redraws the crop as the usage changes, and a living component styleguide. The signature is the cut. Every photograph is shown as the whole frame it came out of, veiled, with the delivered licensed rectangle drawn on it at full strength, and the amount the negative overhangs the page is not a design choice but sensor divided by crop. Every figure in the margin is that function's output: sixteen point six megapixels, four by five, thirty-six point six per cent of the frame, three hundred and eighty-six millimetres at 300 dpi. The build refuses a page opener whose crop is not interior on all four edges, so the drawing can never collapse into two rules on a grey field. One chromatic token, an aniline stamp plum, carries the crop mark, the corner ticks, every hairline, every figure, every link and the filled button. Everything else is achromatic. There is no status colour anywhere: a licence reads live, expiring or expired from a solid, dashed or cancelled rule and the word beside it, so the distinction survives greyscale and a colour-blind reader. The board sits at L 0.92 rather than white, because a print on white reads as a blown highlight, and the card sits above it. Radius zero, one language, no exceptions. Fourteen photographs ship uncropped at 2400 by 1600, one per delivered frame, because the crop is performed in code and a register where two frames shared a photograph would be a lie the drawing itself exposes. Sixty-three design tokens, every one re-authored for dark, all derived in OKLCH and every pair computed against its contrast tier. Self-hosted Zilla Slab, Commissioner and Inconsolata. Built for Tailwind v4, Next.js 15 and React 19, and shipped with an independently authored HTML and vanilla JavaScript edition; every colour lives in theme.css.
sections and primitives
You get the parts, not just the demo site. Every frame is a real capture from the theme's own styleguide page, and the source path under it is where the file lands in your project. 34 frames cover them, with 12 primitives sharing the ui/* frame.
tokens, both modes
Change one variable and every part follows. Each badge is one token split down the middle: its light value on the left, its dark value on the right, with the theme's own paired ink on both halves.
hover or tab a badge for its name and both values, enter copies
The cut: every photograph shown as the whole frame it came out of, veiled, with the delivered licensed rectangle drawn on it at full strength and the overhang computed as sensor divided by cut.
every token
typefaces, self-hosted
Real woff2 files in src/fonts/, wired through next/font and licensed under OFL. Nothing is fetched from Google at build time, so the zip renders these letterforms offline. Scale ratio 1.333.
Bellows
A photography portfolio template nextjs and Tailwind v4 developers can hand to a working photographer, built on the half of the category that every other template omits: what the client receives, and what they may do with it.
const { open, close } = useLedger("2026-03") // 0123456789
- display
- Zilla Slab
- text
- Commissioner
- mono
- Inconsolata
- captionAg
- smallAg
- bodyAg
- leadAg
- d1Ag
- d2Ag
- d3Ag
- d4Ag
every width is a real render from the publish gate
Four viewports, each one a render the gate produced and checked. Switch between them: the frame narrows exactly as a window does, because that is what it is.

every token and every part on one page
The styleguide route is not documentation about the theme. It is a page in the zip that renders the real components from the real tokens, so it stays true the day you change one.
files in the zip
Two independently authored editions: React for applications, plus ready HTML, CSS and vanilla JavaScript for static hosts.
- AGENTS.mdthe theme's own rules, written for an agent
- .claude/skills/4 skills, each one job
- add-page/SKILL.mdAdd a route to Bellows
- add-section/SKILL.mdAdd a section component to Bellows that matches the theme's idiom and cannot disagree with the register
- check-quality/SKILL.mdRun Bellows' own quality gate
- rebrand/SKILL.mdRepaint Bellows for a different photographer
- src/
- theme.css63 tokens, light and dark
- fonts.tsthe faces, wired to the type tokens
- app/8 files
- components/24 files
- ui/23 files
- fonts/4 font files, 3 licenses
- app/8 routes, plus layout.tsx and globals.css
- theme.jsonthe manifest: tokens, components, pages
- html/the framework-free edition
- dist/8 compiled routes, deploy-ready — no build step
- src/the Nunjucks source the routes compile from
- scripts/build-html.ts · serve-html.ts — `bun run build:html` / `preview:html`
- README.mdquickstart
- 6 project filespackage.json · tsconfig.json · next.config.ts · postcss.config.mjs · env.d.ts · .gitignore
Your key goes in TAILTHEMES_LICENSE_KEY, and the registry entry goes in components.json. The snippet is on the docs page.
skills your agent can run
Your agent reads AGENTS.md before it edits, then runs the skill that fits the change. The skills are the theme's own, and the publish gate makes an agent complete every one of them in a scratch copy before the theme goes live.
45 components, 8 pages and 63 tokens, as a Next.js project.
AGENTS.md carries the design spec. Each skill is one job written against it.
Claude Code, Codex, or any agent that reads AGENTS.md. It runs on your machine, on your own account.
Built from the theme's own sections, on the same tokens and the same rhythm.
The source is yours to run, edit and deploy.
The spec ships inside the folder, so the page your agent adds next month is built by the same rules as the ten it came with. Nothing calls back here.
What the standard license coversWhat do I actually get?
Does it include the pages I'd otherwise have to build?
Will it work with my stack?
How long before it stops looking like a template?
Can I use it for client work?
activity
- v1.0.0 — eight-route commissioned-photography site built on the cut: every frame shown whole and veiled with the licensed rectangle drawn on it, the overhang computed as sensor divided by cut, and a fourteen-row register where a licence's state is a texture and a word rather than a colour
- the second commission page, once a buyer asks for more than one worked jobplanned
- a print-ready contact sheet export, if the register turns out to be what people useplanned
for agents
This listing is also a markdown document and a JSON endpoint. The theme's own agent kit is on the kit and agents plates above.


