Skip to main content
home35 Designs
All workPlatform

Glenhouse Foundation Events

The Glenhouse Foundation's site runs its events as well as describing them. Behind the public pages is an event system: admins create events and import guest lists, guests register and RSVP on each event's own page, and the foundation emails its guests from the same place, with a log of every send.

Home page of Glenhouse Foundation Events

At a glance

Type
Platform
Industry
Nonprofit
Built with
Next.js 16, React 19, NextAuth, Postgres on Neon, Cloudinary, Resend
Codebase
About 15,800 lines of TypeScript, 26 pages and 25 route handlers
Hosting move
DreamHost to Vercel on October 7, 2026

Events, guests and email

Admins sign in to create and edit events, upload images to Cloudinary and import guest lists from a CSV file. Guests register or RSVP from the event's own page and can change their answer later.

Guest emails go out through Resend, from a template or written by hand, with replies directed to the foundation's inbox, and every send is logged.

  • Glenhouse Foundation home page hero
  • Glenhouse Foundation home page on a phone

Security and the move to Vercel

A security audit's fixes put an admin check in front of every route that manages events, guest lists and files, and validated file names wherever files are read or deleted.

During the move, event responses stopped carrying the guest list unless a signed-in admin asks, and the email log became admin-only.

Vercel's file system is read-only, so events, RSVPs and the email log moved from JSON files into Postgres. Each stored document, such as the full events list, carries a version number, and a save only lands if nothing changed in between, otherwise it re-reads and tries again, so two guests RSVPing at once can't overwrite each other. Local development still runs from the JSON files, which also seed a fresh database.

The same app serves the foundation's public pages, such as Grants.

  • Grants page

Highlights

  • Version-checked saves with retry, so simultaneous RSVPs never overwrite each other.
  • Event responses carry no guest list unless a signed-in admin asks.
  • Admin checks on every route that manages events, guest lists or files.

Let's talk.

Tell me what you're building. I read every message myself and usually reply within one business day.