Global Frontiers Project Website
A full-stack website rebuild for a 501(c)(3) non-profit, with a custom CMS, a hand-built event calendar, and a role-based admin dashboard non-technical staff can actually use.
About the Project
Global Frontiers Project is a 501(c)(3) non-profit that brings resources and support to underserved communities around the world. I rebuilt their website from the ground up on the T3 Stack, turning a static site into a platform the team can run themselves, without calling a developer every time a blog post or event needs to go up.
How It's Built
The site is a Next.js 15 App Router project with end-to-end type safety from the database to the browser. tRPC (v11) defines the API, Prisma talks to Postgres (Vercel Postgres on Neon), and superjson plus Zod keep the types and validation honest across the wire. Because tRPC infers types straight from the Prisma models, there's no hand-written API layer to drift out of sync, which is a real gift when you're the only one maintaining it.
Authentication runs on NextAuth with email and password credentials (bcrypt-hashed) and JWT sessions. Access is tiered through composable tRPC procedures: public → protected → editor → admin. Editors can manage posts, events, and media; admins additionally manage the team, the countries section, and user accounts. There's no open sign-up by design, accounts are created by an admin.
What It Does
- Blog / Posts — A full publishing workflow (draft, published, archived) with categories, tags, featured images, and excerpts.
- Event Calendar — A month-grid calendar I built by hand with date-fns rather than pulling in a heavy calendar library, querying events by date range.
- Team Management — Member profiles with active/featured flags and drag-to-reorder display.
- Countries / Regions — Showcases the places the organization works, each with a flag, rich content, and a linked PDF.
- Newsletter — Subscribe and unsubscribe flows with a subscriber list staff can manage.
- Contact Inbox — Submissions land in an inbox with read and archive states.
- Media Library — Drag-and-drop uploads backed by Vercel Blob, reusable through a picker anywhere an image is needed.
The Content Pipeline
The editor is Tiptap. Staff write in a familiar rich-text view, but rather than store raw HTML, the content is converted to Markdown with turndown on the way in and rendered with react-markdown and remark-gfm on the way out. That keeps stored content clean and portable, and a small fallback path still renders the legacy HTML carried over from the old site, so nothing from the previous version was lost in the move.
Admin Dashboard
The dashboard is a server component that pulls its stats (post counts, upcoming events, subscriber activity, unread messages) through tRPC's server-side caller in a single batch, so the page arrives already rendered. The whole admin area is built mobile-first: a collapsible sidebar, tables that fold into cards on small screens, and touch-friendly controls, because the people updating the site are just as likely to be on a phone as a laptop.
Sweating the SEO
Replacing a site that already ranks is risky, so I treated the migration carefully. The app ships an NGO JSON-LD schema with the organization's details, a database-driven sitemap that revalidates hourly (and falls back gracefully if the database hiccups), and permanent 301 redirects from the old site's URLs to the new structure so the existing search rankings carried over instead of resetting to zero.
My Connection
Beyond the technical work, my connection to Global Frontiers runs deeper. In 2021 and 2022 I took a career break to serve as a Field Representative in Montenegro, where I led construction of a community center, taught English, and worked with cross-cultural teams in an underserved mountain community. That year stuck with me, and building this site was a way to keep supporting an organization whose mission I believe in.
Visit the site: globalfp.org