A shared space for YOUNGO members to find groups, attend events, share resources and work on proposals, decisions and elections.
- Public information about YOUNGO, its working groups, youth conferences and resources.
- Member accounts, induction, group workspaces, opportunities and policy contributions.
- Decision-making processes, voting, elections and operational requests, with access based on membership and assigned responsibilities.
- Review tools for membership and content teams. There is no admin UI — staff operations run through the Payload local API (terminal scripts) or direct database access.
The resource collection is part of the Hub. Existing source credits and review records remain attached to imported material.
React draws the member interface in src/member/, routed through the Next.js App Router. Next.js runs the website and server. Payload manages accounts, content and access checks — deliberately without its admin panel; staff work happens through terminal scripts (payload local API) or the database. PostgreSQL stores the records. Server code and access checks are in src/.
The separate content service lets authorised assistant tools use the Hub’s API. It does not receive database credentials.
Use Node.js 22.13 or later in the Node 22 series, or Node 24, and PostgreSQL.
git clone https://github.com/youngo-consitutency/hub.git
cd hub
npm ci
docker run -d --name youngo-pg -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=youngo_dev -p 5433:5432 postgres:16
export DATABASE_URL='postgres://postgres:postgres@localhost:5433/youngo_dev'
export PAYLOAD_SECRET="$(openssl rand -hex 32)"
npm run migrate
npm run devOpen http://localhost:3000. Keep PAYLOAD_SECRET stable between sessions and private. Use a separate development database; do not run migrations against an existing member database without a tested migration plan.
npm run check
npm testcheck runs lint and a production build, including type checks. Tests need the matching database and server; they create their own accounts. Set TEST_BASE_URL to use a different local port. See local development.
Optional environment variables:
SENTRY_DSN/NEXT_PUBLIC_SENTRY_DSN— error tracking (server and browser). Events are scrubbed of credentials and member-identifying fields before leaving the process.CRON_SECRET— bearer token forGET /api/cron/notifications-drain, the scheduled notification-queue backstop (wired invercel.json; Vercel sends the secret automatically).SMTP_URLorSMTP_HOST/SMTP_PORT/SMTP_USER/SMTP_PASS+EMAIL_FROM— outbound email; broadcasts are queued innotification_outboxand delivered asynchronously with retries.VAPID_PUBLIC_KEY/VAPID_PRIVATE_KEY/VAPID_SUBJECT— web push delivery.
The hosted demo uses the existing youngo-hub Vercel project and a separate database of fictional accounts and content. The interface always loads records through the normal API; there are no bundled fictional listings or sign-in shortcuts. See demo environments for setup, delivery controls and account handling.
GPL-3.0. Third-party notices still apply. The package’s inherited MIT label remains unresolved.