· 7 min read
Building a home online for Brittany Niemi Rescues
How I built bnrescues.com for a cat rescue near Regina that runs on one woman’s own money and donations — and why the only bill she’ll ever get is for the domain.

Brittany Niemi runs a cat rescue near Regina with more than thirty cats in her care. Food, litter and vet bills are paid out of her own pocket, along with donations from people who believe in what she does. She deserves a lot more attention than she gets, so this first post on our blog is about her.
How I found her
I came across Brittany Niemi Rescues while I was looking to foster cats myself. Her available cats were listed on Facebook, scrolling past between everything else in people’s feeds. If you wanted to adopt or foster, you had to dig through posts and send messages to find out who was still looking for a home.
My husband and I drove out to meet her and her kittens. We were surprised to find she rescues pigeons too. She takes in cats and kittens of every age and condition: bottle babies, seniors, and the ones who need extra care. She is completely overrun, and she still never says no to a cat in winter, because on the prairies in winter, no means death.
Why I had to help
I have been in her position. Back home in India, my husband and I took in cats, had them fixed, and either adopted them out or released them, in a country where a lot of people see cats as pests rather than pets. I know how much of yourself that takes, and how little time it leaves for anything else, like building a website.
Brittany had already bought her own domain, bnrescues.com. What she needed was a site that made it easy for adopters and fosters to find the right cat and reach her, without adding a single new bill.
What the site does
For adopters and fosters:
- Every adoptable cat in one place, filterable by age group (kittens to seniors and special needs), sex and status, with search and sorting.
- A page for each cat with a photo gallery, their story, personality tags, and whether they are good with kids and other cats.
- Bonded pairs are marked, so cats who have to go home together do, and one application covers both.
- Adoption and foster applications online. Adopters can apply for several cats at once; fosters can pick a cat or say they are open to any cat that needs them.
- Light and dark mode, and it works well on a phone, which is where most people will find it.
And a private admin for the rescue, so Brittany never has to ask me to update anything:
- Add and edit cats and upload their photos.
- Review adoption and foster applications, and choose which inbox they go to.
- Schedule meet & greets, with calendar invites that open in Outlook.
- Record adoptions, and keep a roster of fosters with every cat they have cared for.
- Edit the home page headline and intro herself.

The two kittens listed on the site right now, Tony and Rony, are my own foster kittens from Brittany. So when I tested the adoption pages, I was writing about two little troublemakers who were wrestling on my couch at the time, and I wanted their pages to do them justice.
Built to be fast
Most adopters will open the site from a Facebook or Instagram link on their phone, maybe on patchy mobile data, and a slow page is a page people close. I built it with Next.js, a modern way of building websites, so that:
- Pages load almost instantly. They are prepared ahead of time instead of being built from scratch every time someone visits.
- They stay up to date anyway. When Brittany edits a cat or one gets adopted, the site updates right away, with nothing extra for her to do.
- It works well on any phone. Visitors download very little, so it is quick even on a weak signal.
- People can find it on Google. Every page is set up so a search for cat adoption near Regina can lead to her, and links shared on social media show a proper preview.
- She can run it herself. Adding cats, uploading photos and handling applications all happen in her own admin, so she never has to wait on me.
The hardest part: where it lives
Building the site was the fun part. The real challenge was finding a home for it. A site like this is more than pages: it needs somewhere to keep the cats and applications, somewhere for photos to go, and a way to send email. Most hosting for that comes with a monthly bill, and every dollar of Brittany’s money or her donors’ that goes to hosting is a dollar that cannot go to food or a vet visit.
So I set everything up on free plans from Cloudflare and Brevo, two well-established services:
- the website and the rescue’s private admin
- the records of every cat, application, foster and adoption
- every cat photo
- emails, sent from her own bnrescues.com address
A small rescue uses only a tiny fraction of what those free plans allow, so there is plenty of room to grow before anything would ever cost money.
The only thing Brittany pays for is her domain. Everything else costs $0 a month.
For the technically curious: how it’s built
The site is a single Next.js app (App Router, React Server Components) that serves both the public pages and the rescue’s admin. It runs on Cloudflare Workers through OpenNext, and the whole Worker fits in about 2.3 MiB, under the free plan’s 3 MiB limit.
| Part | Runs on | Free allowance | What the rescue uses |
|---|---|---|---|
| Website + backend | Next.js on Cloudflare Workers | 100,000 requests a day | A few hundred a day |
| Database | Cloudflare D1 | 5 GB | A few MB |
| Cat photos | Cloudflare R2 | 10 GB, no download fees | About 300 KB a photo |
| Page cache | Cloudflare KV | 1,000 writes a day | Refreshes hourly to stay well under |
| Brevo | 300 emails a day | A handful |
- Supabase to D1. The first version used Supabase (Postgres, Auth and Storage). On launch day I moved it to Cloudflare so every piece sits on one free plan: D1 (SQLite) with the same tables, R2 for photos, and KV for the page cache.
- Fast pages that stay fresh. Public pages use incremental static regeneration: cached in KV, refreshed hourly, and invalidated immediately through a D1-backed tag cache when the rescue edits a cat. Refreshing hourly keeps cache writes well under KV’s 1,000 free writes a day.
- Logins without a paid auth service. Admin sign-in uses cookie sessions with PBKDF2 password hashes, and session and password-reset tokens are stored hashed.
- Photos. The admin uploads straight to R2, and photos are served from the site’s own domain with long-term caching, so there are no download fees.
- Email. Brevo sends from a verified bnrescues.com sender with the domain authenticated in Cloudflare DNS: application notifications and password resets.
- Deploys. A deploy script builds against an empty local database, so no sample data is ever baked into the pages, then marks them stale so the first visit renders from the live database.
If the site ever outgrows the free plan, Cloudflare’s paid Workers plan is $5 a month. For a rescue this size, that day is a long way off.
Launch day
I started building on October 14, 2026, and bnrescues.com went live on October 27, thirteen days and thirty commits later. Launch day itself was busy: moving everything onto the free hosting, connecting her domain and email, adding dark mode and bonded pairs, and fixing the last few things you only find on a live site.
I am so proud, as a developer, to be able to make a difference with what I know how to do. I cannot take in thirty cats. But I can make sure the people who want to adopt or foster one of Brittany’s cats can find them in a few taps, and that the rescue never pays a cent for it.
How you can help
- Meet the cats at bnrescues.com, and adopt or foster if you are near Regina.
- Follow Brittany Niemi Rescues on Facebook and share her posts.
- Donate if you can. The rescue runs on Brittany’s own money and donations, and every bit goes to food, litter and vet care.
- Share this story with someone who loves cats.
If you run a rescue, a non-profit or a small business and the cost of software has been holding you back, get in touch. Budget is something we can work around together.
— Ami