A wedding, family, and portrait photographer who wanted her work to do the talking.
The business
Maine Reason Photography does weddings, families, and portraits in Westbrook, Maine.
A photographer's site lives or dies on its galleries, and dozens of large photos can make a page slow, especially on a phone. She also needed a contact form that didn't fill up with spam.
What I built
A gallery that shows photos at their natural shape, without cropping, in one column on a phone and more on a computer
Photos that load quickly, with a soft preview while the full image arrives
A contact form that quietly filters out spam, with no puzzles for real visitors
An automatic confirmation email, so the client knows the message arrived
In her own words
Ryan helped me build my website and grow my business! … Quick responses, fast problem solving, and always helpful with advice. Wouldn't trust anyone else!
Brittany DiMarzioMaine Reason PhotographyWestbrook, ME
The details your web developer or IT person might ask about. You don't need any of this to work with me.
Next.js 16 with React 19 and server rendering.
shadcn/ui components on Radix UI primitives, and a react-masonry-css grid (1 to 4 columns) that keeps natural aspect ratios.
Image pipeline: Sharp compresses at build time (mozjpeg; PNG level 9), Next.js Image serves WebP with JPEG fallback, galleries lazy-load with blur placeholders, and a 1-year cache TTL.
Cloudflare Turnstile for invisible bot protection; Resend sends the inquiry and the confirmation email.
Start with a free website & Google checkup. I'll look at your site and Google profile and tell you, in plain English, what's working and what isn't. No charge, no pressure.