Systems

Midsummer is organized as a set of Django apps. Each app owns a slice of convention operations. This section explains what each app does at a level useful to a developer touching it for the first time.

For the cross-cutting theory (multi-tenancy, the form system, permissions, payments), see Concepts & Theory. For the exhaustive data model and API surface, see Reference.

How the apps fit together

Tenant (public schema)            ← owns everything below
  └─ Event ─┬─ RegistrationForm → Registration → RegistrationLevel / RegistrationItem
            ├─ VendorType → Vendor → Jury / Juror / VendorDisplay
            ├─ Category / Track / Room → Panel → Slot / Interest / Comment
            ├─ Department → ModuleOwnership / Shift / HR
            ├─ ShopItem → ShopCart → ShopOrder → ShopFulfillment
            └─ RapidCheckinTerminal / EventBadgeSettings / DigitalSignageDisplay
User (public schema, shared)      ← one identity across all tenants
  └─ Membership (per-tenant role) + PersonnelFile + auth (MagicLink/MFA)

Shared vs. tenant apps

Midsummer uses schema-based multi-tenancy (django-tenants). Apps split into two groups:

  • Shared apps live in the public schema and are the same across every tenant: accounts, tenant, plus Django’s core apps.

  • Tenant apps are provisioned into each tenant’s own schema and hold the event data: event, register, staff, vendors, schedule, shop, front, kioskos, utility.

A request is routed to the correct schema by TenantMainMiddleware (see Request resolution).

The “app” naming note

The frontend folders ui/ and tenantui/ are Angular apps, but in this section “app” means a Django application. The Angular SPAs consume the REST + WebSocket APIs that these Django apps expose.

App quick-reference

App

What it’s for

Key models

accounts

Identity, auth, personnel files

User, PersonnelFile, MagicLink, Multifactor, AuthenticationState

event

The event itself + per-event config

Event, EventProperty

register

Registration forms, levels, check-in, badges

RegistrationForm, Registration, RegistrationLevel, RegistrationItem

vendors

Dealer applications, jury voting, task flow

VendorType, Vendor, Jury, Juror, JuryRating

staff

Departments, roles, HR, shifts

Department, ModuleOwnership, Shift, DepartmentTitle

schedule

Panels, rooms, tracks, signage, static pages

Panel, Slot, Category, Room, Track

shop

E-commerce with Stripe + QR fulfillment

ShopItem, ShopCart, ShopOrder, ShopFulfillment

tenant

Tenant org, domains, memberships

Tenant, Domain, CustomDomain, Membership

kioskos

Self-service terminal endpoints

kiosk views under /app/kioskos/