Lumen Photography

A photography portfolio site built with core Gutenberg blocks and a custom child theme — no page builder, no ACF.

Client
Photography studio (portrait & editorial)
Type
Concept build
Tools
WordPress, Gutenberg (block editor), Twenty Twenty-Five (parent theme), custom child theme, theme.json, PHP

My role: Designed and built the entire site solo: theme architecture, custom post type, template design, and a custom-registered block pattern.

Tools: WordPress, Gutenberg (block editor), Twenty Twenty-Five (parent theme), custom child theme, theme.json, PHP

The challenge:

The core challenge was working entirely within the block editor’s native systems instead of a page builder or custom meta boxes. That meant defining the site’s visual identity through theme.json design tokens rather than hand-written CSS, and building a real portfolio archive using the Query Loop block rather than a static, manually arranged page. A second challenge came from Query Loop’s block-nesting behavior: inserting a new block from inside a synced pattern instance repeatedly placed it outside the intended repeating template rather than nested within it, which required switching into the pattern’s dedicated edit mode to insert blocks correctly. Debugging also surfaced a recurring PHP issue — a missing closing brace in one function silently absorbed a second function into its body, which didn’t throw a parse error but did prevent the second function’s hook from registering correctly.

Solution:

Built a custom child theme of Twenty Twenty-Five, defining the site’s color palette and typography entirely through theme.json rather than CSS overrides. Registered a custom post type (photo_project) in code, then built a dedicated archive template using the Query Loop block, configured to pull and paginate that post type automatically. Added a homepage teaser section using a second, independently configured Query Loop instance (Custom query type, fixed to 3 items, no URL inheritance) to showcase recent work without duplicating the archive’s full pagination. Finally, hand-registered a reusable “Featured Project” block pattern via register_block_pattern() — a two-column layout combining an image, heading, blurb, and button — built visually first, then exported as block markup and stripped of any hardcoded image references so it could be inserted and reused with fresh content anywhere on the site.

Lumen Photography portfolio page screenshotLumen Photography VS Code screenshot
Visit the live site

This is a concept build, not a client engagement.

Back to all workGet in touch