# krushna-khairnar/ai-event-organiser architecture

> Architecture diagram of the GitHub repository krushna-khairnar/ai-event-organiser, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/krushna-khairnar/ai-event-organiser
- Repository: https://github.com/krushna-khairnar/ai-event-organiser

## Overview

Spott lets attendees discover events, register and manage tickets, while organizers create events, manage attendees and check in participants. The main flow runs from browsing or location-based discovery to an event page and registration; organizers create events directly or use AI-generated details, then manage them in their dashboard. Clerk provides authentication and subscription status, and Convex supplies the application’s data and server functions. The README documents broader capabilities than the sampled source, so some links reflect documented responsibilities rather than inspected call sites.

Main entry points: [`app/(main)/create-event/page.jsx`](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/create-event/page.jsx) (Create Event), [`app/(main)/my-events/[eventId]/page.jsx`](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/my-events/%5BeventId%5D/page.jsx) (Event Management), [`convex/registrations.js`](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/convex/registrations.js) (Registration Functions), [`convex/schema.js`](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/convex/schema.js) (Convex Data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_discovery["Discovery"]
  node_explore["Explore Events<br/>[page.jsx]"]
  node_location_explore["Location Browse<br/>[page.jsx]"]
  node_search_bar["Search &amp; Location"]
  node_event_page["Event Details<br/>[page.jsx]"]
end

subgraph group_event_ops["Event Operations"]
  node_create_page["Create Event<br/>[page.jsx]"]
  node_ai_creator["AI Event Creator"]
  node_ai_route["Generate Details<br/>[route.js]"]
  node_organizer_events["My Events<br/>[page.jsx]"]
  node_event_management["Event Management<br/>[page.jsx]"]
  node_attendee_card["Attendee List<br/>[attendee-card.jsx]"]
  node_qr_scanner["QR Check-in"]
  node_registration_modal["Registration<br/>[register-modal.jsx]"]
  node_my_tickets["My Tickets<br/>[page.jsx]"]
end

subgraph group_identity["Identity &amp; Plans"]
  node_auth_pages["Sign In &amp; Up<br/>[page.js]"]
  node_onboarding["Onboarding"]
  node_user_functions["User Functions<br/>[users.js]"]
end

subgraph group_backend["Convex Backend"]
  node_events_functions["Event Functions<br/>[events.js]"]
  node_search_functions["Search Functions<br/>[search.js]"]
  node_registration_functions["Registration Functions<br/>[registrations.js]"]
  node_organizer_functions["Organizer Functions<br/>[myevents.js]"]
  node_convex_data[("Convex Data<br/>[schema.js]")]
end

subgraph group_integrations["Integrations"]
  node_clerk{{"Clerk"}}
  node_gemini{{"Gemini AI"}}
end

node_attendee(("Attendee"))
node_organizer(("Organizer"))

node_attendee -->|"browse"| node_explore
node_attendee -->|"browse nearby"| node_location_explore
node_explore -->|"search with"| node_search_bar
node_location_explore -->|"filter by location"| node_search_bar
node_search_bar -->|"query events"| node_search_functions
node_search_functions -->|"read events"| node_convex_data
node_attendee -->|"view event"| node_event_page
node_event_page -->|"register through"| node_registration_modal
node_registration_modal -->|"create registration"| node_registration_functions
node_attendee -->|"view tickets"| node_my_tickets
node_my_tickets -->|"load tickets"| node_registration_functions
node_organizer -->|"create event"| node_create_page
node_create_page -->|"request generated details"| node_ai_creator
node_ai_creator -->|"send prompt"| node_ai_route
node_ai_route -.->|"generate details"| node_gemini
node_ai_route -->|"return details"| node_ai_creator
node_create_page -->|"save event"| node_events_functions
node_events_functions -->|"write event"| node_convex_data
node_organizer -->|"manage events"| node_organizer_events
node_organizer_events -->|"load organizer events"| node_organizer_functions
node_organizer -->|"manage event"| node_event_management
node_event_management -->|"show attendees"| node_attendee_card
node_event_management -->|"check in attendees"| node_qr_scanner
node_event_management -->|"load event data"| node_organizer_functions
node_organizer_functions -->|"read event data"| node_convex_data
node_attendee_card -->|"load registrations"| node_registration_functions
node_qr_scanner -->|"record check-in"| node_registration_functions
node_attendee -->|"authenticate"| node_auth_pages
node_auth_pages -->|"authenticate with"| node_clerk
node_onboarding -->|"save preferences"| node_user_functions
node_user_functions -->|"read and write users"| node_convex_data
node_create_page -.->|"check Pro plan"| node_clerk

click node_explore "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(public)/explore/page.jsx"
click node_location_explore "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(public)/explore/%5Bslug%5D/page.jsx"
click node_search_bar "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/components/search-location-bar.jsx"
click node_event_page "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(public)/events/%5Bslug%5D/page.jsx"
click node_create_page "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/create-event/page.jsx"
click node_ai_creator "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/create-event/_components/ai-event-creator.jsx"
click node_ai_route "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/api/generate-event/route.js"
click node_organizer_events "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/my-events/page.jsx"
click node_event_management "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/my-events/%5BeventId%5D/page.jsx"
click node_attendee_card "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/my-events/_components/attendee-card.jsx"
click node_qr_scanner "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/my-events/_components/qr-scanner-modal.jsx"
click node_registration_modal "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(public)/events/%5Bslug%5D/_components/register-modal.jsx"
click node_my_tickets "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/my-tickets/page.jsx"
click node_auth_pages "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(auth)/sign-in/%5B%5B...sign-in%5D%5D/page.js"
click node_onboarding "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/components/onboarding-modal.jsx"
click node_user_functions "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/convex/users.js"
click node_events_functions "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/convex/events.js"
click node_search_functions "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/convex/search.js"
click node_registration_functions "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/convex/registrations.js"
click node_organizer_functions "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/convex/myevents.js"
click node_convex_data "https://github.com/krushna-khairnar/ai-event-organiser/blob/main/convex/schema.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_explore,node_location_explore,node_search_bar,node_event_page toneBlue
class node_create_page,node_ai_creator,node_ai_route,node_organizer_events,node_event_management,node_attendee_card,node_qr_scanner,node_registration_modal,node_my_tickets toneAmber
class node_auth_pages,node_onboarding,node_user_functions toneMint
class node_events_functions,node_search_functions,node_registration_functions,node_organizer_functions,node_convex_data toneRose
class node_clerk,node_gemini,node_attendee,node_organizer toneIndigo
```

## Components

### Discovery

- [Explore Events](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(public)/explore/page.jsx): `app/(public)/explore/page.jsx`
- [Location Browse](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(public)/explore/%5Bslug%5D/page.jsx): `app/(public)/explore/[slug]/page.jsx`
- [Search & Location](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/components/search-location-bar.jsx): `components/search-location-bar.jsx`
- [Event Details](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(public)/events/%5Bslug%5D/page.jsx): `app/(public)/events/[slug]/page.jsx`

### Event Operations

- [Create Event](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/create-event/page.jsx): `app/(main)/create-event/page.jsx`
- [AI Event Creator](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/create-event/_components/ai-event-creator.jsx): `app/(main)/create-event/_components/ai-event-creator.jsx`
- [Generate Details](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/api/generate-event/route.js): `app/api/generate-event/route.js`
- [My Events](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/my-events/page.jsx): `app/(main)/my-events/page.jsx`
- [Event Management](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/my-events/%5BeventId%5D/page.jsx): `app/(main)/my-events/[eventId]/page.jsx`
- [Attendee List](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/my-events/_components/attendee-card.jsx): `app/(main)/my-events/_components/attendee-card.jsx`
- [QR Check-in](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/my-events/_components/qr-scanner-modal.jsx): `app/(main)/my-events/_components/qr-scanner-modal.jsx`
- [Registration](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(public)/events/%5Bslug%5D/_components/register-modal.jsx): `app/(public)/events/[slug]/_components/register-modal.jsx`
- [My Tickets](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(main)/my-tickets/page.jsx): `app/(main)/my-tickets/page.jsx`

### Identity & Plans

- [Sign In & Up](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/app/(auth)/sign-in/%5B%5B...sign-in%5D%5D/page.js): `app/(auth)/sign-in/[[...sign-in]]/page.js`
- [Onboarding](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/components/onboarding-modal.jsx): `components/onboarding-modal.jsx`
- [User Functions](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/convex/users.js): `convex/users.js`

### Convex Backend

- [Event Functions](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/convex/events.js): `convex/events.js`
- [Search Functions](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/convex/search.js): `convex/search.js`
- [Registration Functions](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/convex/registrations.js): `convex/registrations.js`
- [Organizer Functions](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/convex/myevents.js): `convex/myevents.js`
- [Convex Data](https://github.com/krushna-khairnar/ai-event-organiser/blob/main/convex/schema.js): `convex/schema.js`

### Integrations

- **Clerk**
- **Gemini AI**

### Other components

- **Attendee**
- **Organizer**

## Connections

- Attendee → Explore Events: browse
- Attendee → Location Browse: browse nearby
- Explore Events → Search & Location: search with
- Location Browse → Search & Location: filter by location
- Search & Location → Search Functions: query events
- Search Functions → Convex Data: read events
- Attendee → Event Details: view event
- Event Details → Registration: register through
- Registration → Registration Functions: create registration
- Attendee → My Tickets: view tickets
- My Tickets → Registration Functions: load tickets
- Organizer → Create Event: create event
- Create Event → AI Event Creator: request generated details
- AI Event Creator → Generate Details: send prompt
- Generate Details → Gemini AI: generate details
- Generate Details → AI Event Creator: return details
- Create Event → Event Functions: save event
- Event Functions → Convex Data: write event
- Organizer → My Events: manage events
- My Events → Organizer Functions: load organizer events
- Organizer → Event Management: manage event
- Event Management → Attendee List: show attendees
- Event Management → QR Check-in: check in attendees
- Event Management → Organizer Functions: load event data
- Organizer Functions → Convex Data: read event data
- Attendee List → Registration Functions: load registrations
- QR Check-in → Registration Functions: record check-in
- Attendee → Sign In & Up: authenticate
- Sign In & Up → Clerk: authenticate with
- Onboarding → User Functions: save preferences
- User Functions → Convex Data: read and write users
- Create Event → Clerk: check Pro plan
