Project Structure
Top-Level Directory
EMV3.1/
├── src/ Source code
├── public/ Static assets (icons, manifest, images)
├── docs/ This documentation site (Docusaurus)
├── .github/workflows/ CI/CD pipelines
├── start-database.sh Local PostgreSQL setup script
├── drizzle.config.ts Drizzle ORM configuration
├── next.config.ts Next.js configuration
├── tailwind.config.ts Tailwind CSS configuration
└── package.json
Source Directory (src/)
src/app/ — Next.js App Router
app/
├── (app)/ Main user-facing routes
│ ├── layout.tsx 9-level provider nesting, Nav, NProgress
│ ├── page.tsx Landing page (search, recommendations, testimonials)
│ ├── (auth)/
│ │ ├── login/page.tsx Google + magic link login
│ │ └── onboarding/page.tsx New user onboarding
│ ├── map/
│ │ ├── layout.tsx Google Map, mobile drawer
│ │ ├── results/page.tsx Search results
│ │ └── place/[id]/page.tsx Place detail + review form
│ ├── profile/
│ │ ├── page.tsx User profile + reviews
│ │ └── edit/page.tsx Edit profile / delete account
│ ├── blogs/
│ │ ├── page.tsx Blog listing (Sanity CMS)
│ │ └── [slug]/page.tsx Individual blog post
│ ├── about/page.tsx About page (Sanity CMS)
│ ├── contact/page.tsx Contact form
│ ├── businesses/page.tsx Business onboarding marketing
│ └── info/privacy-policy/ Privacy policy
│
├── admin/ Admin dashboard (role-guarded)
│ ├── page.tsx Dashboard overview
│ ├── submit/page.tsx Self-report venue form
│ ├── users/page.tsx User management (SUPERADMIN)
│ ├── allPlaces/page.tsx Browse all reviewed places
│ ├── reviewsByDate/page.tsx Reviews by date range
│ └── graphs/page.tsx Analytics charts
│
├ ── studio/ Sanity Studio CMS
└── api/
├── auth/[...nextauth]/ NextAuth handlers
├── trpc/[trpc]/ tRPC HTTP endpoint
└── draft-mode/ Sanity draft mode toggle
src/components/ — React Components
components/
├── ui/ Customized shadcn/ui primitives
├── map/ Google Maps components (markers, info windows)
├── providers/ React context providers
├── landing/ Homepage sections
├── layout/ Navigation, header, footer
├── review/ Review form and display
├── search/ Search interface components
├── admin/ Admin dashboard components
└── auth/ Auth guards and forms
src/lib/ — Utilities and Core Logic
lib/
├── api/
│ ├── server/
│ │ ├── index.ts Root tRPC router (merges all sub-routers)
│ │ ├── trpc.ts Procedure definitions (public, private, admin, superadmin)
│ │ └── routers/ Individual routers (place, category, user, role, analytics, geolocation)
│ ├── client.ts tRPC React Query hooks
│ └── provider.tsx tRPC + React Query provider
├── hooks/ Custom React hooks
├── auth.ts NextAuth configuration
├── constants.ts App-wide constants
├── utils.ts Utility functions
├── roleUtils.ts Role definitions and helpers
└── ratelimit.ts Upstash rate limiting setup
src/db/ — Database
db/
├── schema/
│ ├── auth-schema.ts Users, accounts, sessions
│ ├── core-schema.ts Places, reviews, photos, types
│ ├── relations.ts Drizzle relation definitions
│ └── views.ts Materialized views (placeSummary)
├── migrations/ Generated Drizzle migration files
├── seed.ts Database seeding script
└── index.ts Database client singleton
Other Directories
| Directory | Purpose |
|---|---|
src/store/ | Zustand stores (search-store.ts) |
src/types/ | Shared TypeScript type definitions |
src/sanity/ | Sanity CMS configuration and schemas |
src/posthog/ | PostHog analytics configuration |