Basic Search, Patrons Leaderboard, Easy Removal, One-Time Donations
Hi! It’s Saturday morning and I’m having a cup of coffee. We’ve spent the past 2 weeks trying to grow the database with soooo many new contribution records. We’re almost at 500,000 contributions now.
But all this new data is messy. And we’ve spent a lot of time cleaning it up and figuring out how to import it better in the future.
A lot of our work is data normalization. Museums and cultural orgs each have different reporting structures, different file formats, and extremely different donor and patron categorization systems.
We end up reviewing every single file by hand. We focus mostly on the tier review. Tiers are what we call the different donor categories: membership levels, councils, boards, etc. I need to write about that some day.
But for now, here’s what’s new.
🔍 Patron Search is Live (Kind Of)
We rolled out a preliminary search feature on the Patrons page– and yes, I know it needs work! This has been the #1 most requested feature, and I’ve been hesitant to launch it because I’m still figuring out how to make it work efficiently on our database.
You can now search for patron names on the main patrons page. Try typing someone’s name and you’ll get instant results. The search works with partial names too, so “John Smith” should find “John and Jane Smith” or “Smith Family Foundation.”
Why is this exciting? Because we’re laying the groundwork for what will eventually be a premium feature for fundraising teams at museums. Imagine being able to search across 5,000,000+ contribution records instantly to find donor patterns and connections. You’ll be able to surface interesting patrons that could donate to your organization. For now, it’s basic name search only. But expect more engineering work on advanced features in the future.
⚡ Pages Load 50% Faster Now
I’m happy to report we’re seeing real results to make pages load faster. Our Time to First Byte (TTFB) has dropped 40%, from around 590ms to about 350ms.
What does this mean for you?
- Pages start loading almost instantly
- Better experience on slower connections
- Google can crawl our site more efficiently (better for SEO)
The technical magic behind this: We implemented Cloudflare Workers KV caching. KV (Key-Value) storage is faster and cheaper to read than our D1 database. Instead of running complex SQL queries with 10+ table joins that take 500-800ms, we now grab pre-computed patron data from KV in under 50ms. It’s the difference between searching through a filing cabinet (database) versus grabbing a single sheet from your desk (KV cache).
Some specifics for the nerds:
- Database query reduction: 95% (from 12,000/day to 600/day)
- Cache hit rate: >95% for popular patron pages, although I think we’re pre-warming all of the patron pages
- Cache payload size: 5-10KB per patron
- TTL (how long we keep cached data): 14 days
- Cost savings: KV reads are essentially free vs D1 database queries
The best part? Once a page is cached, it loads in under 50ms. That’s a lot faster than hitting the database. Page loads still take up to 300 or 400ms, which I don’t totally understand, but it’s so much better than before.
🏛️ Institutions Leaderboard
Check out the new patrons page. You’ll now see the top 15 institutions ranked by number of contributions, along with 10-30 featured patrons from each institution.
This creates more internal links on the site (good for SEO) but more importantly, it helps you discover patterns in giving. You can quickly see which museums have the most active donor bases and explore their top supporters.
For example, you might notice The Metropolitan Museum of Art dominates with thousands of patrons, while smaller institutions like The Frick Collection have a more concentrated group of major donors. These patterns tell interesting stories about fundraising strategies across New York’s cultural landscape.
🚫 Privacy & Patron Removal
This week I received my first two emails from donors requesting their information be removed from the website. Privacy is important and I want to respect it when people request it.
We built a robust blocking system that:
- Immediately removes the patron from all pages
- Removes them from leaderboards and search results
- Blocks their name from appearing in future data imports
- Returns a 404 page if someone tries to access their old URL
If you or someone you know wants their information removed, just email me at nick@patronview.com. The process is still manual, but it should be quick and permanent.
🎯 Cleaning Up One-Time Donations
Here’s an interesting data challenge we are getting closer to solving: Some museums report the same one-time donations year after year in their annual reports. For instance, someone might give $500,000 to a capital campaign in 2019, but it shows up in the 2019, 2020, 2021, and 2022 annual reports.
Previously, we would report each of those years and each of those donations as unique. That would incorrectly show the patron as donating millions of dollars, instead of that one-time $500,000 donation.
We implemented a preliminary system to identify and flag these as one-time donations, only counting them in the first year they appear. This cleanup affected hundreds of contributions and makes our data more accurate. You can see the results on fund pages like The Met’s Annual Fund where duplicate entries have been cleaned up.
🏛️ Museum of Western Art
I visited this museum in Kerrville, Texas to get an idea of what small museums are facing. See my writeup and more photos on my personal blog here.
What’s Next
I’m getting married in a small ceremony in 2 weeks so I don’t plan to lead too many new features in October.
I’ll be asking Mohamed and Alexis to focus on more database cleanup, especially around our various tiers (funds) that have 3 or less members. Once that’s done, I want to start adding back more institutions. You’ll know we’ve done that once we break 500,000 total contributions. We’re also testing summarizations for patron giving patterns, and I hope to roll out “Related Patrons” sections on individual patron pages.
Thanks for following along with these updates. If you’re still reading, connect with me on LinkedIn. I’d love to hear your thoughts on what features we should build next.
– Nick Gray