Skip to main content

User Manual

Everything you can do on the platform.

A visual, step-by-step guide for community members, city staff, and admins. Use the sidebar to jump to a section.

Community

Platform Overview

The Community Event & Partnership Portal is the city's one-stop platform for discovering events, booking municipal rooms, applying as a performer, vendor, sponsor, or community organization, and (for city staff) running every operational side of the program.

Public home page with the four community portals
Public home page with the four community portals

Everyone starts at the same landing page. From there, your view of the app depends on your role and which department you're currently acting in:

  • Community members browse events, buy tickets, book rooms, and apply to programs across every department.
  • Staff see an Event Ops sidebar scoped to their active department — events, venues, approvals, and box office only show records belonging to that department.
  • Dept admins & Super admins additionally manage department settings, branding, room policies, user roles, and which platform modules are turned on.
Note
The platform is multi-tenant by department (City Hall, Fire, Parks, etc.). The same login can belong to several departments — see Multi-Department Model.
Community

Accounts & Logging In

One account works across every program. You can be a ticket-buyer, musician, org admin, and vendor under the same login.

Login screen — sign up if you don't have an account yet
Login screen — sign up if you don't have an account yet
  1. 1

    Sign up or log in

    Click Log in in the top-right corner. New users can tap Sign up to create an account with email and password.
  2. 2

    Land on your Hub

    After signing in you'll arrive at your personal hub showing everything you can do.
  3. 3

    Add roles as you go

    Need to apply as a musician later? Just open your hub and tap Apply as a Musician. Same login, more capabilities.
  4. 4

    Forgot your password?

    On the login screen, click Forgot password? and enter your email. We'll send a one-time reset link — open it to choose a new password.
Password reset — enter your email and we send a secure link
Password reset — enter your email and we send a secure link
Note
City staff are invited (or promoted) by an admin — see the Admin section. You'll get an email invitation to set your password.
Community

Your Personal Hub

Your hub at /hub is mission control for everything you do with the city. It groups actions into three rows: Apply / Add a role, Do something, and Manage your stuff.

Tip
The hub is signed-in only. Public visitors who want to see what a single department offers should go to /departments and pick one (for example, the Library) — see Department Hub Pages.
The Hub — every program reachable from one screen
The Hub — every program reachable from one screen
  • Apply as musician, community org, vendor, or sponsor.
  • Book a room or browse events.
  • Review your tickets, room reservations, gigs, and orgs.
  • Staff and admins see extra "Staff Portal" / "Admin" tiles.
Community

Browsing Events

The /events feed combines city-run events, community gatherings, and live music.

Events feed with filters and sort options
Events feed with filters and sort options
  1. 1

    Filter and search

    Use the search box plus type, venue, and stage/room dropdowns. Date range narrows the feed to a specific window.
  2. 2

    Open an event

    Click any card to see full details, sessions, sponsors, and the ticket button.
  3. 3

    Look for waitlist callouts

    Sold-out events show a "Sold out — join the waitlist" badge directly on the card image.
Community

My Wallet — Tickets, Prizes & Raffles

My Wallet at /wallet is the single place for everything you've earned or purchased. It replaces the old /my-tickets page (that URL still works and redirects here). A summary row at the top shows your counts at a glance, and three tabs split the contents:

  • Events — event tickets you've reserved or purchased, each with a scannable QR for door check-in. Groups get one QR per seat, and you can download any QR as a PNG.
  • Prizes — virtual prize tickets earned by completing Civic Quests. Tap Show QR to redeem and present it at the listed pickup location (City Hall or a sponsor). Status chips show issued, redeemed, or void.
  • Raffles — your entries into active raffles, with prize, draw date, and entry count. Winners see a 🎉 banner once the draw is run.

Buying an event ticket

  1. 1

    Pick a tier and quantity

    Free tickets reserve a seat. Paid tiers route through secure checkout.
  2. 2

    Find it under Wallet → Events

    Open /wallet and stay on the Events tab — every ticket renders with its QR, holder name, tier, and venue.
  3. 3

    Show the QR at the door

    Staff scan it on arrival. Each seat gets its own QR for groups.
  4. 4

    Join a waitlist if sold out

    You'll get notified automatically if a seat opens.

Deep-link tip: append ?tab=prizes or?tab=raffles to jump straight to a section, e.g. from a confirmation email after a quest completion.

Community

Booking a Room

Rooms page with venue, capacity, and tag filters at the top
Rooms page with venue, capacity, and tag filters at the top
  1. 1

    Filter to the right room

    Use the filter bar to narrow down by venue, minimum capacity, and tags (Power, Projector, TV, etc.). Filters update the list instantly and are remembered in the URL — share the link and the recipient sees the same filtered view.
  2. 2

    Pick a room

    Each card shows the photo, capacity, building, and address. Click for full details.
  3. 3

    Choose a time

    The detail page shows a live 7-day availability calendar. Booked or blocked-by-event windows are greyed out.
  4. 4

    Read and accept the departmental room policy

    Before the request is submitted, a modal shows the room policy set by the department that owns the room (rules, fees, cleanup, alcohol, etc.). You must tick "I agree to this departmental policy" to continue. Each department writes its own policy, so the wording changes with the room.
  5. 5

    Instant-bookable rooms confirm immediately

    If the room is marked instant-bookable, your reservation is approved on submit and you receive a confirmation email right away — no staff review needed. Otherwise it joins the pending queue for that department's staff to review.
Heads up
For non-instant rooms, submitting does not guarantee the booking until the owning department's staff approve it. The policy you agreed to is recorded with your request.
Community

StreetBeats (Musicians)

Public StreetBeats lineup and open slots
Public StreetBeats lineup and open slots

StreetBeats lets approved musicians claim open busking slots at city venues. One account can hold up to 10 separate artist profiles — perfect for solo acts who also play in bands, or for managers handling several performers.

Your Account
one email + password
🎸 Solo Acoustic (approved)
🎺 Jazz Quartet (approved)
🎤 DJ Set (pending)
One account, many artist identities — each approved separately
  1. 1

    Create your first artist profile

    From My Artist Profiles on the StreetBeats page (or Apply as a Musician in the Hub), fill in stage name, genre, bio, photo, and social/tip links.
  2. 2

    Add more profiles if you wear multiple hats

    Tap Add another artist to register an additional persona. Each one is reviewed and approved independently.
  3. 3

    Wait for approval

    Staff review each artist and notify you by email. Pending profiles can't claim slots yet.
  4. 4

    Claim a slot — and pick which artist

    On the StreetBeats page or My Gigs, hit Claim. If you have more than one approved profile, a dialog asks which artist is performing this gig. The slot is locked to that artist and appears on their public profile.
  5. 5

    Release if your plans change

    From My Gigs, hit Release on an upcoming gig to open the slot back up for other performers.
Tip
Each artist profile gets its own shareable page at /artists/<id> showing upcoming gigs, social links, and tip jar.
Community

Gig Flyers & Sharing

Every claimed StreetBeats gig has its own public flyer page at /gigs/<id> — designed for sharing on phones, printing as a QR poster, or dropping into social posts. The "More info" button on each music card on the events page links straight to it.

[ Artist photo ]
FREE MUSIC EVENT
Sat, Jun 7 · 6:00 PM
Solo Acoustic at Town Square Stage
📍 123 Main St →
⚡ Power⛱ Shade
Spotify
YouTube
SoundCloud
Tip
WhatsApp
Facebook
X
IG
Copy
Anatomy of a gig flyer
  • Date, venue, address — the address links straight to Google Maps so listeners can navigate.
  • Stage features — power, shade, seating, bathrooms, and backline are shown as colored chips.
  • Scan-or-tap QR grid — each social/tip link becomes a QR code that doubles as a tap target on mobile.
  • One-tap share row — WhatsApp, Facebook, X, Instagram (copy + open), and copy-link.
Tip
Performers: open your flyer, hit Copy, and paste into your own stories. The page renders rich Open Graph previews so it looks great in iMessage, WhatsApp, and Facebook.
Community

Community Organizations

Community-hosted events show up alongside official ones
Community-hosted events show up alongside official ones

HOAs, nonprofits, churches, and schools can register as a Community Org and submit events for the city calendar.

  1. 1

    Register your org

    Tap Register Your Org. You can have multiple orgs under one account.
  2. 2

    Submit events

    Once approved, submit events from My Organizations. Staff approve before they go live.
Community

Vendor Applications

Vendor portal — sign in to manage your booth
Vendor portal — sign in to manage your booth
  1. 1

    Sign in to the vendor portal

    Go to /vendor and create an account if needed.
  2. 2

    Apply for events open to vendors

    Pick an event, choose a booth tier, and submit your application with your business profile.
  3. 3

    Tell us about your sales & licensing

    The application now asks four extra questions used by staff to triage your booth:
    • Will you be selling items? If yes, describe the products or services (menu, merchandise, services offered, price range).
    • Are you licensed to do business and sell items? If yes, upload one or more proofs (sales-tax permit, health/cottage-food permit, business license, food handler cards, etc.) — multi-file upload is supported.
    • Special requirements — electrical needs, water access, vehicle drop-off, allergens, accessibility, anything staff should know before assigning your spot.
  4. 4

    Wait for staff approval

    City staff review your application and supporting documents before any payment is collected.
  5. 5

    Review the contract and pay

    Once approved, an in-app payment panel opens showing your tier, the exact amount due, and the full Vendor Agreement (event rules, cancellation/refund policy, indemnification, and insurance requirements). You must tick "I have read and agree to the contract terms" before the Submit Payment button enables. Card details are captured on the same screen and charged on submit; you'll receive a confirmation with a transaction reference and invoice number.
  6. 6

    Manage booth placement

    After payment clears, your booth assignment and event-day logistics appear in the same vendor dashboard.
Tip
Uploaded permits are stored privately in the vendor-permits bucket and are only visible to you and the reviewing staff.
Community

Special Event Permits

Anyone planning a public event that needs city approval (parades, festivals, runs, block parties, etc.) applies online at /events/permits/apply. The form is a guided 5-step wizard with dynamic pricing and in-app payment.

  1. 1

    Applicant & Event Basics

    Primary contact, organization, event name, estimated participants, and event type. The event type is pulled from the city's current fee schedule and contributes to your total.
  2. 2

    Dates, Times & Logistics

    Setup, main, and teardown windows; whether you'll serve alcohol (with TABC license number), have food vendors, need electrical service, or are including a parade route.
  3. 3

    Operations & Safety

    Narrative answers for traffic control, litter control, and how you'll notify nearby residents and businesses.
  4. 4

    Document Uploads

    Required: certificate of insurance, site plan, and traffic management plan. Files are stored privately in the permit-docs bucket and are only visible to you and staff reviewers.
  5. 5

    Fees, Signature & Payment

    The wizard adds the active base fee + your chosen route/trail option fee in real time. After typing your name to certify, the same USAePay checkout used for vendor booths opens. On a successful charge the permit is marked paid and sent to the staff review queue.
Tip
Hit Save Draft at any time. Drafts are kept in your account and can be resumed from /my-permits or the My Permits card on your Hub.
Community

My Permits

The /my-permits page lists every Special Event Permit you've started or submitted, along with its current status:

  • Draft — saved but not yet submitted. Click Resume to reopen the wizard or the trash icon to delete.
  • Pending review — sent to staff; you can still view your answers and the calculated fee.
  • Approved — staff have approved; the wizard will let you complete payment.
  • Paid — payment captured; the city has your certificate on file.
  • Rejected — see staff notes for why; start a new application if needed.
Note
You can also reach this page from My Permits in the "Manage your stuff" section of your Hub.
Community

Exploring Venues

The public venues directory
The public venues directory

The /venues page lists every location, stage, and room in the network with addresses and capacities.

Staff

Staff Portal Overview

The staff portal at /staff has a dark sidebar (Event Ops) listing every operational area you can access. Items only appear if you have permission for them.

Staff Master Schedule with the Event Ops sidebar
Staff Master Schedule with the Event Ops sidebar
  • Events — Master Schedule: create, edit, and CSV-import events.
  • Venues & Stages — manage locations, stages, and rooms.
  • Box Office — attendees, check-ins, and ticket sales.
  • Vendors / Sponsors — review applications and assign booths.
  • Community Music / Orgs / Events — approve and schedule.
  • Room Reservations — approve, decline, or reschedule requests.
  • Classes — manage the class catalog and registrations.
  • Social Command — multi-channel social publishing and connections.
  • Platform Settings — your profile and operational settings.
Note
Special Event Permits are reviewed by admins under Admin → Permit settings; see the admin section for the permit queue.
Staff

Managing an Event

Click any event from the Master Schedule to open its dashboard. Each event has tabs for Overview, Box Office, Marketing, Ticketing, Vendors, Volunteers, Reports, Attendees, Waitlist, Scanner, and Settings.

  1. 1

    Create the event

    Use the New Event form on the Master Schedule. Required fields: title, type, room/stage, start time.
  2. 2

    Add tickets and tiers

    On the Ticketing tab, define tiers, capacity, and pricing.
  3. 3

    Manage attendees and waitlist

    Live counts update as people buy. Move waitlisters into open seats with one click.
  4. 4

    Run the door

    Open the Scanner tab on a tablet at the entrance to scan ticket QRs.
Tip
Use Batch CSV on the Master Schedule to export selected events, edit in a spreadsheet, and re-upload changes.
Staff

Box Office & Attendees

The Box Office page (/staff/attendees) is the cross-event view of every ticket holder. Filter by event, status, or search by name and email.

  • Issue comp tickets, refund, or reassign seats.
  • Resend QR codes by email.
  • Check arrival status against scans.
Staff

Approvals (Music, Orgs, Vendors, Rooms)

Each application type lives in its own sidebar page. They share the same review pattern: see the queue, open a submission, then approve, reject, or request changes.

  1. 1

    Open the queue

    Pick Community Music, Community Orgs, Vendors, Sponsors, or Room Reservations from the sidebar.
  2. 2

    Review the submission

    Applicant info, attachments, and history appear in the right pane.
  3. 3

    Decide

    Approve to publish / activate, decline with an optional note (sent by email), or leave a comment and come back later.
Admin

Managing Staff Accounts

Admin > Manage staff: invite, promote, or bulk-invite
Admin > Manage staff: invite, promote, or bulk-invite

Admins manage staff from /staff/admin. You can:

  • Invite a new user — sends an email with sign-up link and assigns the chosen role (staff or admin).
  • Promote existing user — grant staff or admin to someone who already has a community account. No email is sent.
  • Bulk invite — paste a list of emails to onboard multiple staff at once.
Heads up
Be careful with the admin role — admins can change permissions, modules, and other admins.
Admin

Granular Permissions

Open Manage permissions from the admin page header. Each staff member has a row; click to open a drawer with two tabs:

  • Global — checkbox grid of every permission (sidebar pages and event-dashboard tabs). What's checked applies to all events.
  • Per-event — pick an event and override permissions with grant, revoke, or inherit.
Note
Admins implicitly have every permission. Plain staff users get only what you grant. Permission changes take effect on the user's next page load.
Admin

Platform Modules & Settings

Turn entire features on or off across the platform from the settings/modules area. Every major feature has its own toggle so you can phase rollouts or pilot a single program. Current modules:

  • Events — the public events directory & ticketing.
  • Venues & Stages — venue/stage directory and editor.
  • Box Office — attendee management and check-in.
  • Vendors / Sponsors — applications, contracts, payments.
  • StreetBeats — musician roster and gig claiming.
  • Community Orgs & Events — HOA / nonprofit submissions.
  • Room Reservations — booking flow and instant-book toggle.
  • Classes — class catalog and registration.
  • Social Command — multi-channel social publishing.
  • Special Event Permits — the 5-step permit wizard, My Permits, and the staff review queue.
Note
Disabling a module hides it from public nav, the Hub, and the staff sidebar. Existing data is preserved — modules can be re-enabled at any time without data loss.
Admin

Permit Settings & Fee Schedule

The Permit settings link on /staff/admin opens the Special Event Permit configuration page at /staff/admin/permits. Admins control two things here:

  • Fee schedule — manage three categories of configurations:
    • Event types — the radio choices applicants pick in step 1 (e.g., "5K Run", "Block Party", "Parade").
    • Route / Trail fees — the route or trail options shown in step 5 (e.g., "River Walk Trail — $150").
    • Base fees — flat fees added to every permit (sum of all active base fees, e.g., a $50 application fee).
    Each row has a label, cost, sort order, and an Active toggle. Deactivating a fee hides it from the public wizard without deleting historical data.
  • Permit review queue — every non-draft application appears here with applicant, event details, calculated fee, status, and uploaded documents. Staff can mark a permit Pending review → Approved / Rejected, and attach internal notes. Approving a permit unlocks the applicant's payment panel; payment moves the status to Paid.
Heads up
Changing the cost of an existing fee only affects new applications. Submitted permits keep the calculated fee that was active when they were submitted.
Admin

Branding Engine

The Branding engine at /staff/admin/branding is the single source of truth for how the platform looks. It controls the full design-token set — not just two colors — and powers a live preview, accessibility checks, a logo/favicon pipeline, and a Draft → Publish workflow with version history.

  • Full token system — primary, secondary, accent, surface, foreground, border, radius, typography pair, and more. Edits apply instantly in the live preview pane.
  • Accessibility checks — every color pair is scored against WCAG contrast. Failing combinations are flagged before you can publish.
  • Logo variants & favicons — upload a master logo; the favicon pipeline auto-generates the 32 px, 180 px (Apple touch), and 512 px (PWA) versions in a single click.
  • Curated font picker — choose from a curated set of heading/body pairs with previews; the chosen pair flows into CSS variables consumed by every page.
  • Presets, versions & drafts — save reusable presets, work in a draft without affecting the live site, then publish. Every publish snapshots the previous state so you can roll back from Version history.
Note
Branding tokens cascade: global → tenant → department. A tenant or department can override any subset of tokens; everything else inherits from the global theme.
Admin

Tenants (Multi-Site)

Tenants let the platform serve multiple branded sites from one installation. Manage them at /staff/admin/tenants.

  • Create a tenant with a slug, display name, and optional custom host (e.g. events.cityname.gov).
  • Tenant-level branding — each tenant has its own token overrides, logos, and favicon, layered on top of the global design system.
  • Resolution — when a request comes in, the platform matches by host first, then by /t/<slug>path, and falls back to the global default.
Tip
Tenants pair with the Home Page editor: each tenant can publish its own home page that automatically replaces the global one for visitors on that host.
Admin

No-Code Home Page Editor

The landing page at / is fully editable — no code required. Open /staff/admin/home for a side-by-side editor with a live preview on the right.

  • Hero — badge, title, subtitle, sign-in copy, and a list of secondary CTA buttons (each can be gated to a specific module).
  • Sections — drag-and-drop ordered blocks: portal cards, explainer cards, rich text, image banner (with built-in uploader), and CTA band. Cards pick from a curated icon set and a fixed color-theme palette.
  • Footer — tagline, body copy, and copyright line.
  • Editing scope — toggle between the global default and any tenant. Tenant rows seed from the global one on first edit, so you only customize what's different.
  • Draft & Publish — save drafts while you iterate; publishing snapshots the previous live version into history so you can revert with one click.
Heads up
Items inside cards can declare a requires_module — if that module is disabled, the card is hidden automatically. Use this to safely advertise features still rolling out.
Community

Departments & Active Context

The platform is organized into departments (City Hall, Fire, Parks & Rec, Library, etc.). Every event, venue, room, vendor application, and reservation belongs to exactly one department. This keeps each team's queue, calendar, and box office focused on their own work — while still letting the public see and book across the whole city from one site.

City Hall
own logo · own brand · own policy · own staff
Fire Dept.
own logo · own brand · own policy · own staff
Parks & Rec
own logo · own brand · own policy · own staff
Library
own logo · own brand · own policy · own staff
One platform, many departments — each owns its events, rooms, and approvals

A single staff login can belong to multiple departments (for example, the city clerk who supports both City Hall and the Library). When that's the case, a department picker appears in the top-right of the site header. Whatever you pick is your Active Department — every staff page, sidebar count, and "new event / new booking" form fills in that department until you switch.

Tip
Staff: glance at the badge in the Event Ops sidebar to confirm which department you're acting in. Switch in the header before creating anything important.
Community

Department Hub Pages

Every department has a public landing page at /departments/<id> showing its logo, name, and — all scoped to that one department — upcoming events, classes, bookable rooms, and any Streetbeats gigs at its stages. No login required.

Tip
Don't know the department's ID? Send people to /departments — the public directory lists every department with a quick count of events, classes, and rooms. For example: open /departments, click Library, and you'll see only what the Library offers.
  • Great for sharing — link the Fire Department's page to send people straight to their open houses and training rooms.
  • Theming (colors, logo) matches the department's brand, so the page doesn't feel like a generic listing.
  • Visitors can reorder or hide the Events / Classes / Rooms / Gigs sections with the Customize toolbar; the layout is saved per account.
  • Clicking through goes straight into ticketing, class registration, or room booking with the department's policy applied automatically.
Community

Department Branding & Theming

When you're viewing a department's hub — or when staff have a department selected as active — the site automatically adopts that department's brand colors. Behind the scenes, each department stores a small block of CSS variables (primary color, accent, etc.) that override the default theme globally for the current view.

Note
Departments can swap their look without code changes. Admins paste updated CSS variables in the department editor and the new theme applies on the next page load.
Staff

Working in Your Active Department

Almost every page in the Staff Portal is filtered by your active department:

  • Master Schedule only lists events whose department_id matches.
  • Venues & Stages shows only the rooms/venues owned by that department.
  • Box Office & Attendees only show tickets for that department's events.
  • Approvals (vendors, sponsors, room reservations) only show requests for things this department owns.
  • New Event auto-fills the department, and the Staff Owner dropdown only lists users who belong to that same department.
Tip
If you swap departments mid-task, your forms and lists update immediately. The active department is shown as a badge in the Event Ops sidebar, with a count of how many departments you belong to.
Staff

Cross-Department Room Requests

Staff frequently need to book a room that belongs to another department (e.g., the Fire Dept. wants a City Hall conference room). The /staff/room-reservations page now has two tabs to keep this clear:

Inbound
Bookings against rooms your department owns, including requests from other departments. Approve / decline here.
Outbound
Requests your department has sent out to other departments. Read-only — track status while you wait.
Inbound vs. Outbound — two sides of every cross-department booking
  1. 1

    Submit a request

    Use the New reservation dialog. If the room is owned by a different department, a banner warns you it's a cross-department request; your active department is stamped as the requester.
  2. 2

    Track it under Outbound

    Your request appears in your Outbound tab with a "to {owning department}" badge. You'll see status updates (pending → approved / declined) as the other team reviews it.
  3. 3

    Review incoming requests under Inbound

    When another department asks for one of your rooms, it shows up in your Inbound tab with a "from {requester department}" badge. Approve or decline — only the inbound side shows action buttons.
Note
Instant-bookable rooms still apply: a public user (or staff) booking an instant room is auto-approved regardless of department.
Admin

Managing Departments

Super admins manage departments from /staff/admin/departments. The page has a datatable of every department and full CRUD via a dialog editor.

  • Department Name — shown on the public hub, in the staff sidebar badge, and on cross-department badges.
  • Logo upload — stored in the department-logos bucket and rendered on the department hub and header.
  • Room Policy Text — the agreement the public must accept before booking any room owned by this department.
  • Brand CSS — a small JSON block of CSS variables (e.g. { "--primary": "262 83% 58%" }) applied globally when this department is active or being viewed.
Heads up
Deleting a department is destructive: events, rooms, and approvals tied to it lose their owner. Re-assign first, then delete.
Admin

Assigning Users to Departments

Open Manage permissions from the admin page and pick a user. The drawer now has a Departments tab where you can attach the user to one or more departments and grant them either:

  • staff — works inside that department's queues (events, approvals, box office) with whatever global/per-event permissions you've granted.
  • dept_admin — same as staff plus can edit that department's branding, room policy, and assignments.
Tip
Users with multiple memberships get the department picker in the header — see Departments & Active Context.
Admin

Program Guidebook Generator

Admins can compile every approved event, StreetBeats performance, and class within a date range into a print-ready PDF program guide, with sponsor ads automatically interleaved. Open it from Admin → Generate Guidebook.

Quick generate

  1. 1

    Pick a date range

    Set a start and end date. Click Preview counts to see how many events, gigs, classes, and sponsor ads will land in the PDF.
  2. 2

    Generate PDF

    Click Generate PDF for an automatic layout. The browser downloads program-guide-{start}_to_{end}.pdf.

Customize with the Layout Builder

Need finer control? Click Open in Layout Builder to enter the Guidebook Canvas, where every event, gig, class, and ad is a drag-and-drop card.

  • Drag any row to reorder it within the print edition.
  • Hide / show items that don't fit the visual flow.
  • Edit print copy to override a title or description just for this edition — the underlying database record is not touched.
  • Reframe the card image — click and drag on any card's image to set its focal point. The PDF crops around that point so faces and signage stay in frame.
  • Insert ad slot drops a sponsor's bought ad block exactly between any two listings.
  • Click Export PDF to render the final layout.

Guidebook sponsors (no event required)

You don't have to attach a sponsor to an event to get them into the guidebook. On the Generate Guidebook page, scroll to Guidebook sponsors and fill in the form:

  1. 1

    Enter company info

    Company name is required. Add contact name, email, logo URL, and ad copy as available.
  2. 2

    Click Add guidebook sponsor

    The sponsor is created as standalone (no event link) on the Guidebook Ad Space tier and immediately marked approved. The tier is auto-created the first time it's needed.
  3. 3

    They appear in the next PDF

    Standalone and event-attached guidebook sponsors are pooled together and rotated through the cover logo, full-page ad, half-page slots, and footer credits.
Tip
Sponsors who applied through the public sponsor portal and chose the Guidebook tier still flow in automatically — you only need the form above for sponsors you want to add manually without an event.
Admin

Social Media Command Center

The Social Media Command Center turns a monthly calendar into a drag-and-drop publishing tool for Facebook Pages, Instagram Business accounts, and LinkedIn — scoped to whichever department is active in the top-left switcher. Open it from Event Ops sidebar → Social Command.

Permission

Access is gated by the new Social Command Center staff permission (page.social_command). Grant it under Admin → Permissions. Existing staff and admins received it automatically when the feature shipped.

One-time platform setup (admin)

Before any department can connect accounts, an admin pastes OAuth credentials at Admin → Social integrations:

  1. 1

    Create a Meta app

    At developers.facebook.com create a Business app. Add the Facebook Login and Instagram Graph API products. Copy the App ID and App Secret into the Meta card on the integrations page, then paste the Redirect URI shown there into Meta's allowed redirect URL list.
  2. 2

    Create a LinkedIn app

    At linkedin.com/developers create an app, enable Sign In with LinkedIn using OpenID Connect, Share on LinkedIn, and any organization products you have access to. Copy the Client ID and Secret into the LinkedIn card and paste the redirect URL into the Auth tab.
  3. 3

    Hit Save on each card

    Credentials live in social_integration_secrets and are only readable by admins. Until both cards are saved, the per-department Connect buttons will show "{platform} OAuth is not configured".

Per-department: connect accounts

Each department connects its own accounts so cross-department staff can't accidentally post to the wrong page. From the Social Command page, click Connect (top-right) or open Social → Connections:

  1. 1

    Connect Meta

    One sign-in connects every Facebook Page the signed-in user administers plus any Instagram Business accounts linked to those Pages.
  2. 2

    Connect LinkedIn

    Posts go out as the connecting member. Use a service account if you want a stable author across staff turnover.
  3. 3

    Disconnect anytime

    The trash icon next to a connected account immediately revokes posting from this app — tokens stay in the platform's account settings until you fully revoke them there.

Schedule a post

  1. 1

    Drag an event onto a day

    The composer opens pre-filled with a draft caption from the event title, date, and speaker. Or click an empty day to compose from scratch.
  2. 2

    Pick channels

    Only platforms with connected accounts will actually publish. Instagram requires an image URL. X stays in the UI as a manual copy/paste workflow because X's automated posting API is paid-tier only and not wired up.
  3. 3

    Schedule

    Posts within 1 minute of "now" publish immediately. Future posts land in the calendar with status scheduled; results are recorded per platform on social_posts.results.
Note
Tokens for connected accounts never leave the server — the client only sees account names and connection status. Publishing happens entirely through TanStack server functions using each department's stored access token.
Admin

Communications (Email Campaigns)

The Communications module is a native replacement for tools like Mailchimp. Compose rich-text emails, target specific community segments, send immediately or schedule for later — all without leaving the platform. Open it from Event Ops sidebar → Communications.

Permission

Access is gated by the Communications staff permission (page.communications). Grant it under Admin → Permissions.

One-time setup

The module sends through Resend using a server-stored API key. The following secrets can be set in Project Settings → Secrets:

  • RESEND_API_KEY — required. Your Resend API key.
  • RESEND_FROM — optional. Verified sender like City Events <hello@yourdomain.com>. Defaults to onboarding@resend.dev for testing.
  • SITE_URL — optional. Used in unsubscribe links. Defaults to the deployed app URL.
  • DISPATCH_SECRET — optional. Protects the /api/public/dispatch-due cron endpoint.

Compose a campaign

  1. 1

    Click New campaign

    A draft is created instantly and the editor opens.
  2. 2

    Write the email

    Use the TipTap rich-text editor: headings, bold, italic, lists, blockquote, and links. Content is sanitized server-side before sending.
  3. 3

    Choose your audience

    Add one or more audience segments:
    • All active users — every signed-up community member.
    • Event attendees — everyone with a ticket to a specific event.
    • Approved vendors — applicants whose status is approved or paid.
    • Department members — staff and admins in a given department.
    Unsubscribed emails are automatically excluded. The live preview shows the recipient count.
  4. 4

    Send now or schedule

    Pick Send now to dispatch immediately, or Schedule for… with a date and time. Scheduled campaigns are picked up by a per-minute cron job that pings /api/public/dispatch-due.
  5. 5

    Send a test first

    Enter your email in the Send test box to preview the real rendered email in your inbox before sending to everyone.

After sending

Each campaign records its recipients, status (sent/failed), and the Resend message ID for follow-up. Sent campaigns are read-only. Recipients who click the unsubscribe link at the bottom of any email are permanently added to the campaign_unsubscribestable and excluded from all future campaigns.

Note
The RESEND_API_KEY never leaves the server. The dispatch route runs server-side via TanStack server functions; the browser only sees campaign metadata and recipient counts.
Admin

Surveys & Feedback

The Surveys module is a native replacement for tools like SurveyMonkey. Build multi-question surveys, share a public link, and view aggregated results with charts — all responses are anonymous by design. Open it from Event Ops sidebar → Surveys.

Permission

Access is gated by the Surveys & Feedback staff permission (page.surveys). Grant it under Admin → Permissions.

Build a survey

  1. 1

    Click New survey

    A draft is created instantly and the editor opens.
  2. 2

    Title and description

    Use the rich-text editor for the description — explain what the survey is for and how the answers will be used.
  3. 3

    Add questions

    Three question types are supported:
    • Short text — free-form response.
    • Rating 1–5 — five-star picker, great for NPS-style scores.
    • Multiple choice — one answer from your option list.
    Mark any question as Required. Reorder with the up/down arrows.
  4. 4

    Set active and share the link

    Toggle the survey Active, then copy the public link (/survey/<id>). Anyone with the link can respond — no sign-in required.
  5. 5

    Optional: post-submit redirect

    Set a Redirect URL to send respondents to a thank-you page, the department hub, or any internal route after they submit. Leave blank to send them back to the home page.

View results

Click the Analytics icon on any survey row (or the Analytics button in the editor) to see:

  • Total response count.
  • Bar charts for rating and multiple-choice questions, with per-option tallies.
  • Full text dumps for free-form questions.
  • Average score for 1–5 rating questions.
Note
Submissions are always anonymous — no user ID, IP, or session is stored with the response. Toggling a survey to Inactivestops new submissions but keeps all historical data and analytics intact.
Community

Civic Quests — Overview

Civic Quests is an optional discovery layer that turns visiting local landmarks, attending events, and supporting partner businesses into a guided, point-earning experience. Residents and visitors follow a quest's waypoints, check in at each stop, and earn badges and leaderboard points.

  • Explore at /explore — browse every published quest with its theme, length, and reward.
  • Quest detail at /explore/<id>— see the full waypoint list with hero images, a live progress bar, social proof ("127 explorers completed this · 38 in progress"), and start the quest.
  • My Wallet at /wallet — every prize ticket and raffle entry you've earned, with scannable QR codes for pickup.
  • Leaderboard at /leaderboard — public top-100 ranking with a podium for the top 3 and a "your rank" pill for signed-in players.
  • Hub badges strip — signed-in residents see their earned quest badges on the Hub with a shortcut to the leaderboard.
Note
The entire module is gated by the civic_quests platform module. When an admin turns it off, every quest surface (Explore, Quest detail, Leaderboard, Staff report, Admin manager, and the Hub badges strip) is hidden or replaced with a "module disabled" stub.
Community

Playing a Quest

  1. 1

    Pick a quest from Explore

    Open /explore and choose a quest. Each card shows the estimated duration, number of waypoints, and reward badge.
  2. 2

    Start the quest

    On the quest detail page, click Start quest. You must be signed in — guests are bounced to the login page and returned here afterward.
  3. 3

    Check in at each waypoint

    Travel to the waypoint and tap the action that matches its type:
    • QR scan — opens the camera scanner and checks you in when the printed waypoint QR is read.
    • Geo-location — uses your device location and confirms you're within the configured radius.
    • Honor system — a single tap to confirm you're there.
    Each waypoint may show a hero image and hint to help you find the spot. The progress bar at the top updates after every check-in.
  4. 4

    Earn the badge, prize ticket, and raffle entries

    Completing the final waypoint awards the quest badge, adds the quest's points to your leaderboard score, and (if staff attached one) mints a virtual prize ticket in your wallet plus any raffle entries for open raffles linked to the quest. A confetti burst and an in-app banner link you straight to /wallet.
Community

My Wallet — Prize Tickets

Every prize you earn from a completed quest lands in /wallet as a virtual ticket with a unique serial and scannable QR code. Show it at the pickup location to redeem.

  • Status badges — Issued (ready to redeem), Redeemed (already picked up), or Void.
  • Prize details — name, sponsor (for partner prizes), and pickup location are shown on the ticket card.
  • QR code — tap a ticket to enlarge the QR for scanning at City Hall or the sponsoring business.
  • Mixed catalog — prizes can be fulfilled by the city directly or by a sponsoring business. Either way the ticket flow is identical.
Tip
Tickets never expire automatically. If a prize runs out of stock before you redeem, staff will reach out via the email on your profile.
Community

Raffle Entries

Some quests grant entries into a city-wide rafflerather than (or in addition to) a guaranteed prize. Every time you complete a quest linked to an open raffle, your entry count for that raffle goes up.

  • Open the Raffle entries panel on /walletto see each active raffle, how many entries you hold, the prize, and the scheduled draw date.
  • When staff draw the raffle, winners are notified and the ticket appears in their wallet just like a quest prize.
  • You can keep earning entries until the raffle's status changes from Open to Drawn.
Community

Public Leaderboard

The leaderboard at /leaderboard is public — no sign-in required to view. It shows the top 100 explorers ranked by total quest points, with a podium for the top 3.

  • Signed-in users see a Your rank pill even if they are outside the top 100.
  • Display names and avatars come from the user's profile. Residents who prefer not to appear can clear their display name in Profile settings.
  • Scores update in near real-time as quests complete.
Staff

Staff Quest Reporting

Staff can review quest performance outside the admin panel at /staff/quests-report. The report is linked from the Civic Quests card on the Staff Admin landing page.

Permission

Access is gated by the Quest Reporting staff permission (page.quests_report). Grant it under Admin → Permissions.

What you see

  • Per-quest table — starts, completions, completion rate, average time-to-finish, and unique players.
  • Waypoint funnel drawer — click any quest to see the drop-off at each waypoint and spot stops that are confusing or unreachable.
  • CSV export — download the raw activity log for external analysis or grant reporting.
Tip
The report respects the module toggle. If civic_questsis disabled, the page renders a stub and the navigation card is hidden.
Admin

Admin — Module Toggle & Management

Turn the module on or off

Civic Quests is a first-class platform module. Open Admin → Modules and toggle Civic Quests. When disabled:

  • The /explore, /explore/<id>, /leaderboard, and /staff/quests-report routes render a "module disabled" stub.
  • The Quest Badges strip on the Hub is hidden.
  • Quest management is removed from the Staff Admin landing.
  • All quest server functions short-circuit with a typed { disabled: true } response so direct API calls also fail safely.
Heads up
Turning the module off does not delete quests, waypoints, check-ins, or leaderboard scores. Flipping it back on restores every surface with all historical data intact.

Manage quests

With the module enabled, manage quests from Admin → Civic Quests (/staff/admin/quests):

  • Create a quest with a theme, reward badge, point value, and cover image.
  • Add waypoints in order — each with a title, check-in method (QR scan, geo-location, or honor system), optional hint, and a hero image you can either upload or generate with the built-in AI illustrator.
  • Attach prizes directly in the quest editor — tick any prize from the catalog and finishers automatically receive a virtual ticket on completion.
  • Publish to make the quest visible on /explore, or keep it as a draft while you finalize content.

Permissions summary

  • module.civic_quests — admin-only, controls the whole module.
  • page.quests_report — staff permission for the reporting page.
  • Quest management, prize catalog, and raffle administration inherit the existing admin role.
  • Ticket redemption at /staff/redeem is open to anyone with the staff or admin role.
Admin

Admin — Prize Catalog

The prize catalog at /staff/admin/prizes is a single inventory of every reward a citizen can win — both city-owned rewards and items contributed by sponsoring businesses (a "mixed catalog").

Create a prize

  1. 1

    Open the prize editor

    Click + New prize on the catalog page.
  2. 2

    Fill in the basics

    Name, description, image (upload or AI-generate), and pickup location.
  3. 3

    Choose who fulfils it

    City for rewards handed out at City Hall, or Sponsor for a partner business — in which case also fill in the sponsor name so the citizen sees who supplied the prize.
  4. 4

    Set inventory

    Optional total and remaining quantity. Leave blank for unlimited stock.
  5. 5

    Attach to a quest or raffle

    From Admin → Civic Quests tick the prize in the quest editor, or from Admin → Raffles select it as the raffle prize.
Tip
Deactivating a prize hides it from new quest editors and raffle pickers but leaves already-issued tickets intact and redeemable.
Admin

Admin — Raffles

Raffles at /staff/admin/raffles let you award a prize by random draw instead of (or in addition to) the guaranteed prize tickets a quest hands out.

  1. 1

    Create the raffle

    Set a title, description, image, prize, number of winners, and scheduled draw date.
  2. 2

    Link the quests that grant entries

    Pick one or more published quests. Every time a citizen completes a linked quest, they get one entry (or more if the quest is configured to grant multiple).
  3. 3

    Watch entries roll in

    The admin page shows each open raffle with a running count of entries and unique participants.
  4. 4

    Draw winners

    Click Draw winners when the raffle closes. The system picks the configured number of winners at random, marks the raffle Drawn, and mints a prize ticket for each winner — which shows up in their /wallet.
Heads up
Draws are final. Once Draw winners is clicked the raffle locks and no further entries are accepted.
Staff

Staff — Redeeming Prize Tickets

When a citizen presents a prize ticket, staff verify and redeem it at /staff/redeem. Any user with the staff or admin role can use the page.

  1. 1

    Scan the QR or paste the serial

    The page opens a camera scanner by default. If the camera isn't available, paste the serial number printed under the QR into the manual-entry field.
  2. 2

    Verify the ticket

    The lookup shows the prize, the citizen's name, the issuing quest or raffle, and the current status (Issued, Redeemed, or Void). Already-redeemed tickets are clearly flagged so they can't be reused.
  3. 3

    Mark as redeemed

    Confirm the pickup and click Mark redeemed. The ticket flips to Redeemed in the citizen's wallet immediately, with your user ID and timestamp recorded for audit.
Tip
Sponsor-fulfilled prizes follow the same flow — the sponsoring business's staff use the same page (any staff account works) and the ticket records who redeemed it.
Community

311 Reporting — Overview

The 311 Non-Emergency Reporting module lets residents flag issues like potholes, graffiti, broken streetlights, and park maintenance directly from their phone — with a photo, location, and live status tracking from submission to resolution.

  • Intake at /report — pick a category, add a photo (required), drop a pin or use your location, and submit. Sign-in is required.
  • My Reports at /my-reports — track every ticket you've submitted with a pizza-tracker style status bar and public staff updates in real time.
  • Staff Dispatch at /staff/dispatch — a Kanban board grouping tickets by status, scoped to the staff member's department.
Note
Tickets auto-route to the right department based on the category you choose (e.g. Pothole → Public Works, Graffiti → Code Enforcement). Staff can reassign at any time.
Community

Submitting a Report

  1. 1

    Open /report and sign in

    A photo and a verified account are required so staff can follow up if they need more information.
  2. 2

    Pick a category

    Choose from Pothole, Graffiti, Park Maintenance, Streetlight, Trash & Recycling, Sidewalk, or Other. The category determines which department receives the ticket.
  3. 3

    Add a photo and a description

    Snap a photo from your phone or upload one from your library. Describe what's wrong in 10–2000 characters.
  4. 4

    Drop your location

    Tap Use my location for one-touch geolocation, or type an address and drag the pin on the map preview to fine- tune.
  5. 5

    Submit and track

    After submitting you're redirected to /my-reportswhere the tracker updates in real time as staff change status.
Community

Tracking Your Reports

/my-reports shows every ticket you've submitted with a four-step pizza tracker: Submitted → Received → In Progress → Resolved. The tracker updates instantly when staff change the status — no refresh needed.

  • Public notes — when staff post a note marked "public", it appears on your tracker so you know what's happening.
  • Internal notes stay private to the assigned department.
  • Photo & location remain visible for your reference and for staff working the ticket.
Staff

Staff Dispatch Board

Staff with department access open /staff/dispatch to work the queue. Tickets are filtered to the department(s) the staff member belongs to (admins see all).

  1. 1

    Scan the Kanban

    Four columns — Submitted, Received, In Progress, Resolved — show ticket cards with category, photo thumbnail, location, and time submitted.
  2. 2

    Open a ticket

    Click a card to open the detail drawer with the full photo, description, requester email, and an embedded map of the reported location.
  3. 3

    Update status and add a note

    Change the status to advance the ticket. Add a public note to update the citizen's tracker, or an internal note for department-only context. Every update is logged for audit.
Tip
The board uses Supabase realtime — new tickets and status changes appear without refreshing.
That's the whole platform. Bookmark this page — it updates as new features ship.