Brittny Ann Photography
LiveA near-zero-cost website build for a Cache Valley client, with auto-generating galleries and private delivery
Built by Caden Sorenson · Launched June 2026
The project
Brittny Ann Photography is a client project, a website for a new, part-time business in the Logan, Utah area. The brief was two jobs on one site: a public, photo-forward front for the work, and a private place where clients view and download their finished galleries. It also had to cost almost nothing to run while the business is small. That cost constraint drove the whole architecture.
The Build
This is a Next.js 15 site running on Cloudflare, engineered around a single idea: keep the cost near zero by designing around $0 egress.
Key technical decisions:
- Private R2 bucket, no public URL. Original photos live in Cloudflare R2, which charges no egress fees. The bucket is never exposed directly; a single worker is the only public read path for images.
- On-the-fly resizing with Cloudflare Images. The worker resizes originals to web sizes on demand and edge-caches them, so full-resolution files never leave storage during normal browsing.
- Folder-as-gallery. Brittny drops photos into a folder in the bucket and a gallery appears. A scheduled worker reconciles the bucket with the database, creating galleries and, for private ones, an unguessable share code.
- Watermarked public galleries, private client delivery. Public galleries are watermarked and view-only. Private galleries are reached by share code and allow full-resolution downloads through short-lived presigned links.
- Portable by design. Storage and database are reached over Cloudflare’s HTTP APIs rather than runtime bindings, so the same code runs on any Node host.
Results
The client got a professional, fast site that delivers galleries to clients, running on infrastructure that costs almost nothing while the business is small and can scale up without re-architecting. The interesting part of this project was the build, not the storefront.
Build log: building a near-zero-cost photography site, and the bug that took it down.
Frequently Asked Questions
- Yes. Brittny Ann Photography is an example of Vient's client work for local businesses. Vient builds custom websites and web apps for small businesses around Logan and Cache Valley, Utah. The contact page is the fastest way to start a project.
- Photos are dropped into a Cloudflare R2 bucket, one folder per gallery. A scheduled worker reconciles the bucket with the database, so a new folder becomes a gallery automatically. A public/ prefix makes a gallery a watermarked, view-only public gallery; a private/ prefix makes it a private client gallery with an unguessable share code and full-resolution downloads.
- To keep the running cost near zero for a new, part-time business. Cloudflare R2 charges no egress fees, so serving images does not rack up bandwidth bills, and Cloudflare Images resizes originals on the fly so the site only ever ships web-sized photos. The original full-resolution files never leave the private bucket except through short-lived presigned download links.
- Private galleries are never indexed or linked publicly. Each one is reached by an unguessable share code (about 48 bits of entropy), and the image worker refuses to serve a private photo unless the request carries a valid, unexpired share code that owns that gallery. Full-resolution downloads use short-lived presigned URLs straight from storage.
Does Vient build websites for small businesses in Cache Valley?
How does the photo gallery system work?
Why was it built to run on Cloudflare R2 and Images?
How are private client galleries kept secure?
More about Brittny Ann Photography
- Behind the buildBuilding My Wife a Website for Almost $0 a MonthMy wife is starting a part-time business, so I built her a Next.js site on Cloudflare designed around $0 egress. Then a Next prefetch quietly tripped Cloudflare's CPU limit and took the gallery down.
- From the blogBuilding a Single-Page Client Site, Mostly by Prompting ClaudeA local client had an Instagram and no website. I gave Claude the right prompt, all the real details, and a styling direction, and it built the three files. The hard part was getting the content, not the code.
- From the blogBuilding a Local-SEO Site for an Age-Restricted Shop, in Code This TimeI tried an AI website builder on one client site and ended up rebuilding it in code. So this one I built in Astro with Claude from the first commit. Here's what it takes to build a clean local-SEO site for an age-restricted retailer.
- From the blogBuilding PackSmart: An AI Packing List With WeatherHow I built a free AI-powered packing list tool as part of the Travel Vient travel ecosystem, and what I learned about wrangling LLM output into reliable JSON.
Related projects
- Related projectCub River KratomA web design case study: how Vient built a fast, custom Astro 5 website for a Cache Valley retail client, with a single source of truth for business data, local and FAQ schema, programmatic nearby-city landing pages, and a static deploy.
- Related projectDiamond Pest ProA web design case study: how Vient built a fast, custom Astro 5 static site for a multi-location home-service client, with a dedicated page for every branch and every service, LocalBusiness and FAQPage schema, and an ongoing local-SEO engagement.
- Related projectDill the MenaceA web design case study: how Vient built a fast, custom Astro 5 site for a Cache Valley client, with a single source of truth for business data, local and FAQ schema, a lazy-loaded audio embed, and a static deploy.