Inspiration

What it does

Inspiration

Every family has the same problem: birthdays get forgotten, gatherings go unplanned, and group chats become chaos. We wanted a private, invite-only space where a family could manage their own events without relying on public social platforms or messy spreadsheets.

What It Does

KinEvents is a full-stack family event management platform with:

  • Access control — Admins approve/reject join requests; users get JWT tokens on approval
  • Events — Create, RSVP, and manage custom or birthday events with image and online link support
  • Birthdays — Automatic birthday tracking, upcoming previews, and reminder notifications
  • Notifications — In-app and email notifications for events, RSVPs, birthdays, and access changes
  • Family chat — Paginated group messaging with read receipts and soft-delete
  • Admin dashboard — User management, role promotion, site content editing, email logs, and data cleanup
  • Email system — Transactional emails via Gmail/Resend with templated HTML layouts and retry support

How We Built It

Backend (Node.js / TypeScript):

  • Express app deployed as an AWS Lambda function via SAM
  • MongoDB single-document datastore with in-memory fallback for local dev
  • JWT authentication with live DB role verification on every request (withAuth middleware)
  • Zod input validation on all routes
  • Modular service layer: authService, eventService, birthdayService, notificationService, emailService
  • 100+ Jest tests covering middleware, handlers, services, and integration flows

Frontend (React / TypeScript):

  • Vite + Tailwind CSS v4 with a warm coral/mint design system
  • TanStack Query for server state, Zustand for auth persistence
  • React Router v6 with protected and admin-only route guards
  • Mobile-first layout with a bottom nav, collapsible sidebar, and smooth Framer Motion transitions
  • Silent re-authentication on token expiry with automatic redirect on hard failures

Challenges

  • JWT staleness — We needed live DB lookups on every authenticated request so that role changes take effect immediately without requiring a new token. This meant the withAuth middleware always cross-checks the JWT payload against the database.
  • Single-document MongoDB — Storing all app data in one document simplifies queries but required careful serialization, upsert logic, and a write queue to avoid race conditions across Lambda invocations.
  • Route ordering in Express — Static paths like /api/users/promote had to be registered before dynamic ones like /api/users/:id, which required explicit ordering in app.ts.
  • Email reliability — Building a transport-agnostic email layer that supports Gmail app passwords, Resend, graceful degradation, retry tracking, and templated HTML without a dedicated email service was a significant undertaking.

What We Learned

  • Designing auth middleware that enforces live role changes without sacrificing performance
  • Building a full transactional email system with templates, logs, and retries from scratch
  • Making a serverless app feel stateful through careful DB initialization and persistence strategies
  • The value of integration tests that exercise the full API against real data

What's Next

  • Push notification support (Web Push / Expo)
  • Password-based login option
  • Real-time chat with WebSockets
  • Photo album / memory sharing per event
  • Mobile app (React Native) ## How I built it

Challenges I ran into

Accomplishments that I'm proud of

What I learned

What's next for kinEvents

Built With

Share this project:

Updates