Skip to content
AeroLaunch

Aperture

Photography / Portfolio Pro

Gallery-grade photography portfolio. A semantic light/dark canvas, a cursor-follow work index, numbered series, a keyboard lightbox, and a persistent light/dark toggle.

$49 $39 launch sale
Read the Aperture docs Lifetime updates Personal & client use
A closer look

See Aperture in action

Every page and section is part of the download. Use these as launch-day templates - keep the structure, swap the copy.

Homepage hero - dark mode
Work index - hover a title and its photo follows the cursor
Commissioned work - shown on the black canvas
Journal - notes from the field
Editing live in the AeroLaunch visual builder
11
Page types
14
Sections
Light + Dark
Variants
White / Black
Semantic Canvas

Aperture is for photographers who want their site to feel like a gallery wall, not a marketing page. Its signature idea is a semantic dual canvas: personal work is shown on white, commissioned work on black, so the background itself means something. The work index is a quiet list of titles - hover one and its photograph follows your cursor. Series run as numbered sequences (01 / NN). A persistent light/dark toggle lets every visitor choose. No masonry, no price cards, no testimonials carousel - the photographs do the talking.

Best Fit For

  • Portrait, landscape, and editorial photographers
  • Commercial photographers and studios
  • Visual artists and image-led creatives
  • Studios shooting commissioned + personal work
  • Anyone who wants fine-art, not template

Full Page Set

Every page is real and editable - no placeholders, no "coming soon" stubs.

Home
Work
Series Detail
About
Journal
Journal Post
Contact
All Sections
Privacy
Terms
404

14 Sections Included

Every section is a ready-to-use Astro component. Add it to any page, customize via config, or remove what you don't need.

Header + Theme Toggle
Sticky hide-on-scroll header, up to four links, mobile drawer, and a sun/moon light/dark toggle that persists
Hero
Oversized serif name over a single full-bleed signature frame, with role · location + availability
Selected Frames
Strict gallery grid - wide frames span full width, portraits pair up, numbered captions, lightbox
Commissioned Band
Full-bleed dark band that demonstrates the semantic system - commissions 'shown on black'
Work Index (cursor-follow)
Signature: a text list of projects where hovering a title makes its photo follow the cursor
Featured In
Restrained client & press credits - publication names, not a testimonials carousel
About
Sticky portrait beside a short bio, italic lead, representation line, and four plain facts
Journal Grid
Three-column writing grid with graded thumbnails from astro:content
Page Header
Reusable interior header - small overline, large italic title, optional subtitle
Contact Form
Underline-only inquiry form, provider-switched (Formspree / FormSubmit / Netlify)
Series Sequence
Per-project layout: numbered full-width frames (01 / NN) with prev/next, on its mode's canvas
Lightbox
Keyboard-navigable image lightbox behind every gallery image
Light / Dark
Whole-site light/dark toggle, persists in localStorage, pre-paint script prevents FOUC
Footer
Always-dark footer with a large inquiry CTA, email, menu, and social

What's Included

Semantic dual canvas - mode: personal renders on white, commissioned on black; page, nav, and type all flip
Cursor-follow work index - hovering a project title reveals its cover trailing the cursor
Numbered series sequencing (01 / NN) with prev/next
Light / dark toggle - persists in localStorage, pre-paint script prevents FOUC
Keyboard-navigable lightbox (←/→/Esc)
'Selected clients & press' credits instead of a testimonials carousel
Two Astro Content Collections: series + journal, with a mode field
Contact form (Formspree / FormSubmit / Netlify) + All-Sections gallery

The Background Means Something

Set a series to mode: 'personal' and it renders on white; set it to 'commissioned' and the whole page, nav, and type flip to black. The background becomes a quiet system that tells the viewer what they're looking at - the signature move of the best photographer sites, built in.

Hover, and the Image Follows

The work index is a plain text list of project titles. Hover one and its photograph appears and trails your cursor across the screen. It's the single interaction that reads 'real photographer, not a template,' and on touch devices it falls back to clean inline thumbnails.

Light or Dark, Their Choice

A sun/moon toggle in the nav flips the entire site and remembers the choice per visitor, with a pre-paint script so there's never a flash. Personal work still defaults to white and commissions to black - but the viewer always has the final say.

Set up in minutes

Forms, newsletter, and analytics - pre-wired

Aperture is ready to connect to your preferred providers. Pick from the options below, drop in a single API key, and your contact form, newsletter signup, and analytics are live - no backend, no JavaScript, no glue code.

Contact form

The Contact section's <form> renders with no JS. Set one provider in site.ts; the form action wires automatically.

  • Formspree
    50 free submissions / month, no domain restriction
  • FormSubmit
    Free, no signup - just an email confirmation
  • Netlify Forms
    Free 100/month - Netlify hosting only
Setup guide

Newsletter

The Newsletter form sends subscribers directly to your ESP. The email input name auto-adjusts per provider.

  • Mailchimp
    Standard EMAIL field; honeypot supported
  • ConvertKit (Kit)
    email_address field; works with any form ID
  • Buttondown
    email field; lightest, indie-friendly
Setup guide

Analytics

Layout.astro injects the right script tag based on the provider you choose. No client-side branching.

  • Google Analytics 4
    Paste your G-XXXXXXXXXX measurement ID
  • Plausible
    Privacy-friendly, ~1 KB script, no cookies
  • Umami
    Self-hostable, also cookie-free
Setup guide

Tech Stack

Astro 6 Tailwind v4 TypeScript Responsive SEO Ready Blog Ready

Config-Driven Setup

Every theme uses a single src/config/site.ts file for customization. Change your brand, navigation, form providers, analytics, and section content without touching component code.

Full site.ts reference in the docs

site.ts
// src/config/site.ts
export const siteConfig = {
  name: "Your Company",
  tagline: "Your tagline here",
  url: "https://yourdomain.com",

  navigation: { sticky: true, links: [...], cta: {...} },
  social:     { twitter: "...", github: "...", linkedin: "..." },
  seo:        { title: "...", description: "...", ogImage: "/og.png" },

  // ── Provider switches ────────────────────────────────
  contactForm: { provider: "formspree",  formspreeId: "your-id" },
  newsletter:  { provider: "convertkit", actionUrl: "https://..." },
  analytics:   { provider: "plausible",  plausibleDomain: "you.com" },

  // ── Section data ─────────────────────────────────────
  team, video, timeline, comparison, gallery,
  carousel, tabs, appDownload, map, footer,
} as const;

Full documentation, ready before you buy

Browse the install guide, the site.ts reference, provider setup, deploy instructions, and the Aperture-specific page - all live now.