Inquiry Forms Specification

Status: Canonical Last Updated: 2026-05-11 Source: apps/frontend/app/[locale]/(landing)/inquiry/
Doc Status: Excellent | ✓ All 6 checks passed

Overview

All inquiry forms (Contact, Venue Rental, Workshops, Private Events, Artist Proposal, Host an Event) follow the same architecture: React Hook Form + Zod validation on frontend, Convex mutation stores in formSessions, and admin kanban view for management.

Form Types

FormRoutePurposeStorage
Contact/inquiry/contactGeneral inquiriesformSessions
Venue Rental/inquiry/venue-rentalPrivate venue bookingformSessions
Workshops/inquiry/workshopsWorkshop inquiriesformSessions
Private Events/inquiry/private-eventsPrivate event bookingsformSessions
Artist Proposal/inquiry/artist-proposalPerformer applicationsformSessions
Host an Event/inquiry/host-an-eventCorporate/event hostingformSessions

Form Architecture

Frontend

Each inquiry page is a self-contained form:
  • Hero section with page title
  • Form fields (React Hook Form + Zod validation)
  • Submit button with loading state
  • Success/error messages

Backend Storage

All form submissions stored in two tables: formSessions — Raw submission
  • sessionId: UUID
  • formType: enum
  • data: JSON stringified fields
  • submitted: boolean
  • expiresAt: 7 days
inquirySessions — Admin overlay
  • formSessionId: FK
  • formType: enum
  • status: NEW | READ | REPLIED | ARCHIVED
  • adminNotes: optional
  • reviewedBy: Clerk user ID
  • reviewedAt: timestamp

Form Fields by Type

Contact

  • name (required)
  • email (required, validated)
  • subject (required)
  • message (required)

Venue Rental

  • name (required)
  • email (required)
  • phone (required)
  • eventType (required)
  • date (required)
  • guestCount (required)
  • message (optional)

Workshops

  • name (required)
  • email (required)
  • phone (required)
  • workshopType (required)
  • message (optional)

Private Events

  • name (required)
  • email (required)
  • phone (required)
  • eventType (required)
  • date (required)
  • guestCount (required)
  • message (optional)

Artist Proposal

  • name (required)
  • email (required)
  • phone (required)
  • performanceType (required)
  • description (required)
  • links (optional)

Host an Event

  • name (required)
  • email (required)
  • phone (required)
  • eventType (required)
  • date (required)
  • guestCount (required)
  • message (optional)

Submission Flow

  1. User fills form — React Hook Form validates
  2. Submit — useMutation(api.domains.forms.submitInquiry)
  3. Convex stores in formSessions
  4. Convex creates inquirySession with status=NEW
  5. Convex creates notification for admin
  6. Frontend shows success message

Admin Management

Kanban Board (/dashboard/inquiries)

  • Columns: NEW | READ | REPLIED | ARCHIVED
  • Drag cards between columns to update status
  • Click card to expand details

Card Display

  • Form type badge
  • Submitter name
  • Submitter email
  • Date submitted
  • Message preview (first 100 chars)

Detail View

  • All form fields
  • Submission timestamp
  • Current status
  • Admin notes (add/edit)
  • Follow-up history

Follow-ups

Admin can add follow-up notes visible in inquiry detail.