Premium

Photography Studio Portfolio

Every gallery tile’s click target was dead — a decorative SVG layer sat on top of the real link with no pointer-events rule, caught by Playwright naming the exact element intercepting the click.

  • Bootstrap 5
  • HTML
  • CSS
  • JavaScript

About this project

A five-page site for a fictional studio, "Aperture & Ash Studio." Like the other Bootstrap design templates in this catalogue, this is a pure visual-design product — no backend, no database. The register is minimalist and editorial: a near-black/near-white palette with one sparing "safelight red" accent, Libre Caslon Display paired with Jost, and generous negative space.

This template faces the hardest version of this catalogue’s "no stock photography" rule — a photography studio’s own portfolio, where the gallery pieces are the product. It’s solved with an honest creative direction rather than a workaround: all 20 gallery pieces (plus 6 reused on the homepage) are abstract/conceptual studies — diagonal light-gradient splits, a 9-frame "contact sheet" grid, radial chiaroscuro falloff, an 8-blade aperture-iris motif, overlapping-circle "wedding ring" studies, scattered bokeh, an SVG film-grain filter, lens-flare sunbursts, topographic light studies, mix-blend-mode double exposures and crop-mark "frame" treatments — every one a gradient, shape or hand-authored inline SVG. The About page frames this in-universe as the studio’s actual conceptual practice; the README discloses it honestly out-of-universe as a deliberate constraint-driven choice, with an explicit note that a real buyer swaps in their own photography.

The gallery’s interactivity was genuinely broken on the first pass, not just unstyled: every tile’s click target was dead because a decorative SVG visual layer sat as a sibling (not a child) on top of the real link trigger with no `z-index`/`pointer-events` rule — caught directly by Playwright’s own error naming the exact intercepting element, not by a visual check. A second, related bug sat right next to it: the hover-zoom CSS rule used a descendant combinator where the sibling markup needed a `~` combinator, so it could never have matched. Both are fixed; all 20 lightbox modals now open correctly with real clicks.

What you will learn

  • Build a minimalist, editorial five-page photography studio site on Bootstrap 5 without hand-editing the framework itself
  • Solve a "no stock photography allowed" constraint in the one niche where that constraint is hardest — a photography portfolio’s own gallery
  • Build a CSS Grid masonry gallery with a working filter and a real Bootstrap-modal lightbox, verified with real clicks, not just styled to look interactive
  • Diagnose a dead click target caused by a sibling element with no z-index/pointer-events, using the browser’s own "element intercepts pointer events" error
  • Run a real WCAG contrast check and a real multi-breakpoint overflow check instead of eyeballing either

Before you start

  • HTML and CSS fundamentals — this is a design product, not a framework tutorial
  • Any modern browser. No Node, no build step, no server required to use it
  • Comfortable editing raw HTML/CSS directly, since there is no CMS or config file

New to Bootstrap 5? The free Bootstrap 5 course covers everything this project assumes.

Academic integrity notice

These projects are provided for learning, experimentation and reference. Understand the code, modify it for your own requirements, and acknowledge external work according to your institution’s academic policies. Priodemy does not supply work to be submitted as your own.