Kinship Directory
A private, multi-tenant community directory built with Next.js, Node.js, Tailwind CSS, and MongoDB.
Features
- Organization-level tenant isolation on every directory and image query
- Globally unique account email, limiting each person to one organization
- Family-level write authorization, including for administrators
- Parent/adult and under-18 child profiles
- Family and individual photo uploads stored in MongoDB
- Admin-controlled organization name, logo, app icon, colors, and typography
- Invite-code member registration
- Responsive, installable Progressive Web App
Run with Docker
Docker is the quickest option because it starts both the web application and MongoDB.
AUTH_SECRET="$(openssl rand -hex 32)" docker compose up --build
Open http://localhost:3000, choose Create your directory, and register the first organization administrator.
Run with Node.js
Requirements: Node.js 22+, Yarn 1.22.22, and MongoDB 7+.
cp .env.example .env.local
yarn install
yarn dev
Set a random AUTH_SECRET of at least 32 characters in .env.local before deployment.
Install on iPhone
- Open the deployed HTTPS site in Safari and sign in.
- Tap Share.
- Tap Add to Home Screen.
The uploaded admin app icon is used for the favicon, PWA manifest, and iPhone home-screen icon. Use a square 512 x 512 PNG for best results.
Security model
Account emails are normalized to lowercase and protected by a global unique MongoDB index. Directory reads always include the session organization ID. Family updates do not accept a family ID from the browser; they derive it from the signed, HTTP-only session cookie and require both family and organization IDs to match. Branding endpoints require the organization admin role. Mutating requests validate their origin, and uploaded files are size- and MIME-restricted.
For production, terminate TLS at a reverse proxy, back up the MongoDB volume, and rotate AUTH_SECRET using your hosting provider's secret manager.