# davidshmavid1/vendi architecture

> Architecture diagram of the GitHub repository davidshmavid1/vendi, 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/davidshmavid1/vendi
- Repository: https://github.com/davidshmavid1/vendi

## Overview

Vendi supports farmers’ markets and popup events through public discovery, organizer setup and management, vendor applications, and stall reservations. Its Next.js frontend contains established Auth.js, Prisma, and Stripe workflows, while Django provides a separate API and PostgreSQL database; the README explicitly notes that moving the frontend did not migrate those workflows or data. The graph preserves these separate surfaces. Some backend modules were only sampled partially, so uncertain connections between their APIs and services are omitted.

Main entry points: [`frontend/src/app/api/webhooks/stripe/route.ts`](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/app/api/webhooks/stripe/route.ts) (Stripe webhook), [`frontend/src/app/markets/DiscoveryClient.tsx`](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/app/markets/DiscoveryClient.tsx) (Market discovery), [`frontend/src/server/actions/applications.ts`](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/server/actions/applications.ts) (Application actions), [`backend/markets/services.py`](https://github.com/davidshmavid1/vendi/blob/main/backend/markets/services.py) (Market scheduling)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_discovery["Discovery and events"]
  node_publicmarkets["Market discovery"]
  node_discoverylogic["Filter logic<br/>[logic.ts]"]
  node_marketapi["Market API<br/>[api.py]"]
  node_marketservice["Market scheduling<br/>[services.py]"]
  node_layoutservice["Layout and pricing<br/>[services.py]"]
end

subgraph group_participation["Applications and reservations"]
  node_applicationsui["Application review"]
  node_applicationactions["Application actions<br/>[applications.ts]"]
  node_applicationstate["Application state"]
  node_applicationapi["Application API<br/>[api.py]"]
  node_applicationservice["Application intake<br/>[services.py]"]
  node_reservationservice["Stall reservations<br/>[services.py]"]
  node_reservationactions["Booking actions<br/>[bookings.ts]"]
end

subgraph group_identity["Accounts and organizations"]
  node_accountsservice["Account services<br/>[services.py]"]
  node_organizationservice["Organization teams<br/>[services.py]"]
  node_vendorservice["Vendor businesses<br/>[services.py]"]
  node_moderationservice["Participation moderation<br/>[services.py]"]
end

subgraph group_commerce["Frontend commerce"]
  node_prismadb[("Prisma database<br/>[prisma.ts]")]
  node_payments["Payment workflows<br/>[payments.ts]"]
  node_stripewebhook["Stripe webhook<br/>[route.ts]"]
  node_bookingstate["Booking state"]
  node_feepayments["Application fee payment"]
  node_applicationfeestate["Fee payment state"]
end

node_marketgoer(("Market visitor"))
node_organizer(("Organizer"))
node_vendor(("Vendor"))
node_stripe["Stripe"]
node_djangodb[("Django PostgreSQL")]

node_marketgoer -->|"browses"| node_publicmarkets
node_publicmarkets -->|"parses filters"| node_discoverylogic
node_publicmarkets -->|"fetches markets"| node_marketapi
node_organizer -->|"manages schedule"| node_marketservice
node_organizer -->|"edits layouts"| node_layoutservice
node_vendor -->|"submits application"| node_applicationactions
node_organizer -->|"reviews applications"| node_applicationsui
node_applicationactions -->|"invokes transitions"| node_applicationstate
node_vendor -->|"books stall"| node_reservationactions
node_vendor -->|"requests hold"| node_reservationservice
node_applicationservice -->|"reads and writes"| node_djangodb
node_reservationservice -->|"reads and writes"| node_djangodb
node_marketservice -->|"reads and writes"| node_djangodb
node_layoutservice -->|"reads and writes"| node_djangodb
node_accountsservice -->|"reads and writes"| node_djangodb
node_organizationservice -->|"reads and writes"| node_djangodb
node_vendorservice -->|"reads and writes"| node_djangodb
node_moderationservice -->|"reads and writes"| node_djangodb
node_payments -->|"reads and writes"| node_prismadb
node_stripewebhook -->|"verifies events"| node_stripe
node_stripewebhook -->|"looks up payment"| node_prismadb
node_stripewebhook -->|"confirms booking"| node_bookingstate
node_stripewebhook -->|"confirms fee"| node_applicationfeestate
node_applicationactions -->|"starts fee payment"| node_feepayments
node_feepayments -->|"creates payment"| node_stripe

click node_publicmarkets "https://github.com/davidshmavid1/vendi/blob/main/frontend/src/app/markets/DiscoveryClient.tsx"
click node_discoverylogic "https://github.com/davidshmavid1/vendi/blob/main/frontend/src/lib/discovery/logic.ts"
click node_marketapi "https://github.com/davidshmavid1/vendi/blob/main/backend/markets/api.py"
click node_marketservice "https://github.com/davidshmavid1/vendi/blob/main/backend/markets/services.py"
click node_layoutservice "https://github.com/davidshmavid1/vendi/blob/main/backend/layouts/services.py"
click node_applicationsui "https://github.com/davidshmavid1/vendi/blob/main/frontend/src/app/organizer/%5BorganizationId%5D/applications/OrganizerApplications.tsx"
click node_applicationactions "https://github.com/davidshmavid1/vendi/blob/main/frontend/src/server/actions/applications.ts"
click node_applicationstate "https://github.com/davidshmavid1/vendi/blob/main/frontend/src/domain/applicationStateMachine.ts"
click node_applicationapi "https://github.com/davidshmavid1/vendi/blob/main/backend/applications/api.py"
click node_applicationservice "https://github.com/davidshmavid1/vendi/blob/main/backend/applications/services.py"
click node_reservationservice "https://github.com/davidshmavid1/vendi/blob/main/backend/reservations/services.py"
click node_reservationactions "https://github.com/davidshmavid1/vendi/blob/main/frontend/src/server/actions/bookings.ts"
click node_accountsservice "https://github.com/davidshmavid1/vendi/blob/main/backend/accounts/services.py"
click node_organizationservice "https://github.com/davidshmavid1/vendi/blob/main/backend/organizations/services.py"
click node_vendorservice "https://github.com/davidshmavid1/vendi/blob/main/backend/vendors/services.py"
click node_moderationservice "https://github.com/davidshmavid1/vendi/blob/main/backend/moderation/services.py"
click node_prismadb "https://github.com/davidshmavid1/vendi/blob/main/frontend/src/lib/prisma.ts"
click node_payments "https://github.com/davidshmavid1/vendi/blob/main/frontend/src/domain/payments.ts"
click node_stripewebhook "https://github.com/davidshmavid1/vendi/blob/main/frontend/src/app/api/webhooks/stripe/route.ts"
click node_bookingstate "https://github.com/davidshmavid1/vendi/blob/main/frontend/src/domain/bookingStateMachine.ts"
click node_feepayments "https://github.com/davidshmavid1/vendi/blob/main/frontend/src/domain/applicationFeePayments.ts"
click node_applicationfeestate "https://github.com/davidshmavid1/vendi/blob/main/frontend/src/domain/applicationStateMachine.ts"

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_publicmarkets,node_discoverylogic,node_marketapi,node_marketservice,node_layoutservice toneBlue
class node_applicationsui,node_applicationactions,node_applicationstate,node_applicationapi,node_applicationservice,node_reservationservice,node_reservationactions,node_djangodb toneAmber
class node_accountsservice,node_organizationservice,node_vendorservice,node_moderationservice toneMint
class node_prismadb,node_payments,node_stripewebhook,node_bookingstate,node_feepayments,node_applicationfeestate toneRose
class node_marketgoer,node_organizer,node_vendor,node_stripe toneIndigo
```

## Components

### Discovery and events

- [Market discovery](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/app/markets/DiscoveryClient.tsx): `frontend/src/app/markets/DiscoveryClient.tsx`
- [Filter logic](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/lib/discovery/logic.ts): `frontend/src/lib/discovery/logic.ts`
- [Market API](https://github.com/davidshmavid1/vendi/blob/main/backend/markets/api.py): `backend/markets/api.py`
- [Market scheduling](https://github.com/davidshmavid1/vendi/blob/main/backend/markets/services.py): `backend/markets/services.py`
- [Layout and pricing](https://github.com/davidshmavid1/vendi/blob/main/backend/layouts/services.py): `backend/layouts/services.py`

### Applications and reservations

- [Application review](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/app/organizer/%5BorganizationId%5D/applications/OrganizerApplications.tsx): `frontend/src/app/organizer/[organizationId]/applications/OrganizerApplications.tsx`
- [Application actions](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/server/actions/applications.ts): `frontend/src/server/actions/applications.ts`
- [Application state](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/domain/applicationStateMachine.ts): `frontend/src/domain/applicationStateMachine.ts`
- [Application API](https://github.com/davidshmavid1/vendi/blob/main/backend/applications/api.py): `backend/applications/api.py`
- [Application intake](https://github.com/davidshmavid1/vendi/blob/main/backend/applications/services.py): `backend/applications/services.py`
- [Stall reservations](https://github.com/davidshmavid1/vendi/blob/main/backend/reservations/services.py): `backend/reservations/services.py`
- [Booking actions](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/server/actions/bookings.ts): `frontend/src/server/actions/bookings.ts`

### Accounts and organizations

- [Account services](https://github.com/davidshmavid1/vendi/blob/main/backend/accounts/services.py): `backend/accounts/services.py`
- [Organization teams](https://github.com/davidshmavid1/vendi/blob/main/backend/organizations/services.py): `backend/organizations/services.py`
- [Vendor businesses](https://github.com/davidshmavid1/vendi/blob/main/backend/vendors/services.py): `backend/vendors/services.py`
- [Participation moderation](https://github.com/davidshmavid1/vendi/blob/main/backend/moderation/services.py): `backend/moderation/services.py`

### Frontend commerce

- [Prisma database](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/lib/prisma.ts): `frontend/src/lib/prisma.ts`
- [Payment workflows](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/domain/payments.ts): `frontend/src/domain/payments.ts`
- [Stripe webhook](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/app/api/webhooks/stripe/route.ts): `frontend/src/app/api/webhooks/stripe/route.ts`
- [Booking state](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/domain/bookingStateMachine.ts): `frontend/src/domain/bookingStateMachine.ts`
- [Application fee payment](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/domain/applicationFeePayments.ts): `frontend/src/domain/applicationFeePayments.ts`
- [Fee payment state](https://github.com/davidshmavid1/vendi/blob/main/frontend/src/domain/applicationStateMachine.ts): `frontend/src/domain/applicationStateMachine.ts`

### Other components

- **Market visitor**
- **Organizer**
- **Vendor**
- **Stripe**
- **Django PostgreSQL**

## Connections

- Market visitor → Market discovery: browses
- Market discovery → Filter logic: parses filters
- Market discovery → Market API: fetches markets
- Organizer → Market scheduling: manages schedule
- Organizer → Layout and pricing: edits layouts
- Vendor → Application actions: submits application
- Organizer → Application review: reviews applications
- Application actions → Application state: invokes transitions
- Vendor → Booking actions: books stall
- Vendor → Stall reservations: requests hold
- Application intake → Django PostgreSQL: reads and writes
- Stall reservations → Django PostgreSQL: reads and writes
- Market scheduling → Django PostgreSQL: reads and writes
- Layout and pricing → Django PostgreSQL: reads and writes
- Account services → Django PostgreSQL: reads and writes
- Organization teams → Django PostgreSQL: reads and writes
- Vendor businesses → Django PostgreSQL: reads and writes
- Participation moderation → Django PostgreSQL: reads and writes
- Payment workflows → Prisma database: reads and writes
- Stripe webhook → Stripe: verifies events
- Stripe webhook → Prisma database: looks up payment
- Stripe webhook → Booking state: confirms booking
- Stripe webhook → Fee payment state: confirms fee
- Application actions → Application fee payment: starts fee payment
- Application fee payment → Stripe: creates payment
