Skip to content

Repository files navigation

GalaGate

GalaGate is being rebuilt as a real-time event operations platform for student organizations and community events.

The v2 direction covers:

  • Event setup
  • Attendee import and management
  • Staff check-in
  • Live raffle display
  • Sponsor asset management
  • Post-event analytics
  • AI-generated event recap reports

See the implementation plan in docs/galagate-v2-technical-plan.md.

Repository Structure

apps/web/      GalaGate v2 Next.js application
Backend/       Legacy Flask prototype
CheckIn/       Legacy Next.js check-in prototype
Lottery/       Legacy Nuxt raffle display prototype
docs/          Planning and technical documentation

The legacy folders are kept as reference while v2 is rebuilt in apps/web.

GalaGate v2 Local Development

Use Node.js 20+ and pnpm 10+.

pnpm install
pnpm dev

The v2 app runs at http://localhost:3000.

Useful commands:

pnpm lint
pnpm typecheck
pnpm build

Database

GalaGate v2 uses PostgreSQL and Prisma.

Start the local database after Docker Desktop is running:

docker compose up -d postgres
pnpm db:push
pnpm db:seed

Prisma commands:

pnpm db:generate
pnpm db:migrate
pnpm db:studio

The local default database URL is:

postgresql://galagate:galagate@localhost:5433/galagate

Environment

Copy .env.example to .env.local before running database or auth flows locally.

cp .env.example .env.local

AI Event Recap Report uses the OpenAI Responses API. Set OPENAI_API_KEY before generating reports.

Development Login

The organizer dashboard uses Auth.js credentials during local development.

Default credentials:

Email: junyu@example.com
Password: galagate-dev

The protected dashboard is available at http://localhost:3000/dashboard.

Event management routes:

/dashboard/events
/dashboard/events/new
/dashboard/events/[eventId]
/dashboard/events/[eventId]/settings

Attendee management routes:

/dashboard/events/[eventId]/attendees
/dashboard/events/[eventId]/attendees/new
/dashboard/events/[eventId]/attendees/import
/dashboard/events/[eventId]/attendees/export

Staff check-in route:

/dashboard/events/[eventId]/check-in
/dashboard/events/[eventId]/check-in/walk-in

Walk-in guests can be created during staff check-in. A walk-in record creates an attendee with source = WALK_IN and immediately writes a check-in record. Email is optional for walk-ins if a phone number is provided.

Realtime updates:

  • The local dev server runs through apps/web/server.ts.
  • Socket.IO clients join an event room by eventId.
  • Staff check-in writes to PostgreSQL first, then broadcasts check-in:created.
  • Event detail, attendees, and check-in pages refresh when a check-in event is received.

Raffle routes:

/dashboard/events/[eventId]/raffle
/dashboard/events/[eventId]/raffle/prizes/new
/stage/[eventId]

Raffle drawing uses checked-in attendees where lotteryEligible = true and excludes anyone who has already won a prize for the event.

The stage display listens for raffle:winner-drawn events over Socket.IO and reveals the latest winner in fullscreen-friendly layout. Stage display access requires the event stageToken; use the Stage display link from the raffle control page instead of opening the stage route manually.

Sponsor routes:

/dashboard/events/[eventId]/sponsors
/dashboard/events/[eventId]/sponsors/new
/dashboard/events/[eventId]/sponsors/[sponsorId]/edit

Sponsors can be linked to raffle prizes. The stage display shows active sponsor names, tiers, optional logos, and display copy.

Analytics route:

/dashboard/events/[eventId]/analytics

Analytics are computed from database aggregations and summarize attendance, check-in timeline, ticket type distribution, raffle activity, sponsors, and attendee sources. The same aggregation service is designed to feed the AI Event Recap Report input.

AI Event Recap Report routes:

/dashboard/events/[eventId]/reports
/dashboard/events/[eventId]/reports/new
/dashboard/events/[eventId]/reports/[reportId]

Recap generation uses structured output validation. The model receives aggregated event analytics only, saves the generated report as DRAFT, and lets the organizer review and edit markdown before saving the report as SAVED. Failed generations are logged in AiGenerationLog without creating a broken report.

CSV import supports these headers:

fullName,email,phone,ticketType,ticketCode,lotteryNumber,lotteryEligible,notes

A demo CSV fixture is available at:

apps/web/prisma/fixtures/demo-attendees.csv

Override credentials in .env.local:

NEXTAUTH_SECRET="replace-with-a-long-random-secret"
NEXTAUTH_URL="http://localhost:3000"
DEV_AUTH_EMAIL="junyu@example.com"
DEV_AUTH_PASSWORD="galagate-dev"

Set OPENAI_API_KEY before using AI Event Recap Report generation.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages