Live demo: https://eventorav2.vercel.app
Invyra is an event management web application built with Next.js (App Router), TypeScript, Prisma (PostgreSQL on Neon), Firebase Authentication, and several modern UI/tooling libraries. It provides event creation, guest lists, invitations, editor tools, and social features backed by PostgreSQL.
Quick Links
- Source: This repository (root)
- Main app folder: app/
- Prisma schema: prisma/schema.prisma
- Prisma client: lib/prisma.ts
- Firebase helpers: lib/firebase.ts
- Editor AI route: app/api/editor/ai/route.ts
Stack & Key Tech
- Framework: Next.js 16 (App Router)
- Language: TypeScript (strict)
- Styling: Tailwind CSS (v4) via
@tailwindcss/postcss+tw-animate-cssand shadcn/ui - Database: PostgreSQL via Prisma (Neon recommended)
- Auth: Firebase Authentication
- Database: PostgreSQL via Neon + Prisma (including social features)
- AI: OpenAI integration for editor assistant (optional, uses
OPENAI_API_KEY) - Maps: Google Maps (lazy-loaded using
NEXT_PUBLIC_GOOGLE_MAPS_API_KEY)
Local Setup
- Install dependencies (use pnpm; lockfile is authoritative):
pnpm install- Development server:
pnpm dev
# (Next dev; ensure nothing else is running on port 3000)- Build (note: Next build may ignore TS errors; verify with the typecheck command below):
pnpm build- Typecheck and lint:
npx tsc --noEmit # full TypeScript check
pnpm lint # eslint .- Prisma commands (after schema changes):
npx prisma generate
npx prisma db pushEnvironment Variables
DATABASE_URL— PostgreSQL connection string (Neon recommended)NEXT_PUBLIC_GOOGLE_MAPS_API_KEY— Google Maps API key for map featuresOPENAI_API_KEY— optional; used by the editor AI route- Firebase client config for authentication (see
lib/auth/client.ts) - Firebase Admin credentials for server-side account deletion:
FIREBASE_CLIENT_EMAIL,FIREBASE_PRIVATE_KEY, and optionallyFIREBASE_PROJECT_ID
Project Routes (high level)
/— Landing (public)/(auth)/sign-in— Sign in/(auth)/get-started— Sign up/(app)/— App shell and authenticated pages- App pages include:
dashboard,events,builder,editor,home,settings,connections,guest-list,preview,publish
Check the app/ folder for individual route implementations.
Important Files
- App layout and global styles: app/layout.tsx and app/globals.css
- App shell: app/(app)/layout.tsx
- API routes: app/api/
- Prisma schema: prisma/schema.prisma
- DB client: lib/db/index.ts
- Auth client helpers: lib/auth/client.ts
- Auth server helpers: lib/auth/server.ts
Developer Notes & Gotchas
- Use
pnpm(thepnpm-lock.yamlis authoritative);package-lock.jsonis stale. next buildignores TypeScript errors — always runnpx tsc --noEmitbefore releasing.- The project is generated from a v0.app boilerplate — some patterns follow that generator.
- Styles:
app/globals.cssis the authoritative stylesheet;styles/globals.cssis leftover and not used. - Unified persistence: application and social data are stored in PostgreSQL/Prisma (Neon).
- Vercel Analytics only renders in production mode.
Testing & Utilities
- Small helper scripts are in
scripts/such astest-prisma.js(verify DB connectivity) andtest-smtp.js.
Contributing
- Fork/branch, make changes, run linters and
npx tsc --noEmitbefore opening a PR.
If you'd like, I can also:
- commit this README change and push it to the repo
- add more docs (architecture diagram, ER diagram, or setup for production deploy)
Best Practices
- Package manager: Use
pnpmfor installs and scripts —pnpm-lock.yamlis authoritative; ignorepackage-lock.json. - Type checking: Always run
npx tsc --noEmitbefore merging or releasing.next buildcan skip TS errors. - Lint & format: Run
pnpm lintand your preferred formatter before opening PRs. Keep ESLint warnings minimal. - Local dev: Start with
pnpm dev. Ensure nothing else is using port 3000. - Environment variables & secrets: Store runtime secrets in
.env(never commit). In CI/GitHub, configure repository secrets or environment variables with the same key names (DB, Firebase, OpenAI, Google Maps). - Prisma workflow: After schema edits run
npx prisma generate. For local iterative work you can usenpx prisma db pushto sync quickly, but preferprisma migrate(e.g.npx prisma migrate dev) and checked migrations for production deployments. - Database & backups: Use Neon or a managed Postgres in production. Keep a separate staging DB and take regular backups before running migrations in production.
- Firebase auth: Keep Firebase auth config in environment variables. For server-side token verification and admin operations, configure
FIREBASE_CLIENT_EMAILandFIREBASE_PRIVATE_KEYsecurely. - AI & third-party keys: Provide
OPENAI_API_KEYonly where required. Add usage limits and monitor costs for OpenAI integrations. - Commit & PR hygiene: Create feature branches, run
npx tsc --noEmit+pnpm lint, include small focused commits, and write descriptive PRs. - Testing: No test framework is preconfigured — add unit/integration tests if you touch core logic (recommended for backend logic and Prisma queries).
- CI checks: Add a CI step to run
npx tsc --noEmitandpnpm linton PRs to prevent regressions. - Styling & UI:
app/globals.cssis authoritative for styles;styles/globals.cssis leftover. Respect shadcn/ui patterns and Tailwind utilities; prefer components over ad-hoc styles.
If you want, I can also commit this change, open a PR, or add a small CI job to run the typecheck + lint on PRs.