Freeframe
Portfolio9 pages · 2 downloads · Free

Lens

An image-led portfolio for wedding, portrait and travel photographers.

Stack
v1.0.4 changelog

About this template

A complete website for Ines Morrow, a fictional photographer in Lisbon: a full-bleed slideshow home page, filterable galleries with a masonry layout and an accessible lightbox, photo stories, packages with a live price calculator, a client proofing page for choosing album favourites, and an enquiry form. Minimal chrome so the photographs lead.

Features

  • Full-bleed home slideshow with captions, dot navigation and a pause button
  • Gallery index with a category filter, live counts and shareable links (portfolio.html#weddings)
  • Masonry gallery pages with lazy-loaded images, driven by one data object (gallery.html?g=…)
  • Accessible lightbox: keyboard arrows, swipe, Esc to close and focus returned to the photo
  • Package calculator with extra hours, add-ons, included extras, total and deposit
  • Client proofing page: choose up to 15 favourites, saved and validated in localStorage
  • Enquiry form with conditional date rules, inline validation and package prefill from the calculator
  • Long-form photo story layout with captions and a pull quote
  • 49 original SVG photo stand-ins with film grain, ready to swap for your own photographs
  • Back-to-top button, scroll reveals, reduced-motion support and SEO and Open Graph tags on every page

Pages included

Quick start

unzip lens.zip && cd lensopen index.html        # that's it # optional, after adding new Tailwind classes:npm install && npm run build
Read the Lens documentation →

Changelog

  1. v1.0.4

    Fixed

    • "Now booking 2027 weddings", "Now booking 2027", "A few 2027 dates are still open" and "2027 availability" now show next year, so the demo never advertises a season that has passed.
    • The footer copyright year is now this year in the browser; it was fixed at 2026.
  2. v1.0.3

    Changed

    • The CSS build no longer reads the documentation and metadata files (*.md, *.json), so words in the guides can no longer add unused rules to assets/css/style.css. No visible change.
  3. v1.0.2

    Fixed

    • contact.html?package= only preselects real package ids: inherited object keys such as ?package=constructor no longer clear the package select or set the occasion to Wedding.
  4. v1.0.1

    Added

    • Full documentation in DOCS.md.

    Fixed

    • Content is no longer hidden when JavaScript is off: the reveal animation only hides elements once a script in each page's <head> adds the js class.
    • The home slideshow caption is only announced to screen readers when the visitor picks a slide, not on every autoplay change.
    • The proofing confirmation hides when the selection changes after it was sent, instead of showing an out-of-date count.
  5. v1.0.0

    Added

    • Initial release: a portfolio website for a wedding, portrait and travel photographer.
    • Pages: home, portfolio, gallery, stories, story, packages, client proofing, contact and 404.
    • Full-bleed home slideshow with captions, dot navigation and a pause button.
    • Category filter for galleries with live counts and shareable links.
    • Masonry gallery pages rendered from one data object, with an accessible lightbox (keyboard, swipe, Esc, focus return).
    • Package calculator with extra hours, add-ons, included extras, total and deposit.
    • Client proofing page with a 15-photo limit, saved in localStorage and validated on every read.
    • Enquiry form with inline validation, conditional date rules and package prefill.
    • 49 original SVG photo stand-ins, a back-to-top button, scroll reveals with reduced-motion support, and SEO and Open Graph tags on every page.

More templates