Event Ops for Movement Arts

Turn a festival’s spreadsheets into promo frames and printed schedules.

Built for flow-arts festivals and used in production at FLAME 2026, where it produced 185 performer frames across a 171-person directory.

185
promo frames produced
171
people in the directory
955
automated tests
91%
statement coverage

Promo frames

Every performer, a ready-to-post image

A canvas editor composites each person’s photo with a branded frame and name and role stickers. Undo, redo, background color and photo swap are built in, and layouts save as versioned JSON, so a frame can be reopened and tweaked weeks later.

The Marquee frame editor showing a performer photo inside a branded frame
Frame editor: photo, overlay and stickers on one canvas.

Self-serve

Attendees can make their own

A public link lets anyone upload a photo and download a finished frame to post from their own page, with no account and no staff time. It is a deliberately small tool for spreading the word about the event, and iPhone HEIC photos are converted on the server.

The public frame generator page with a finished promo frame
The public generator, configured once by a designer.

Schedule

From spreadsheet to print-ready PDF

Import a Google Sheet or XLSX. Marquee detects standard and transposed layouts and reads cell background colors as skill levels. It renders a time-by-area grid with per-cell typography and auto-fit text, then exports a PDF.

A festival schedule grid with color-coded skill levels
Schedule grid with skill levels carried over from the sheet’s cell colors.

Directory

One place for everyone involved

Instructors, performers and staff live in one directory with a photo library per person. Import from a spreadsheet with a preview-then-confirm step, or bulk-upload photos by filename pattern or Drive folder, with live progress.

The people directory with roles and photos
Directory and roles, with bulk import.

Under the hood

Built like production software

Invite-only accounts with TOTP and a four-tier role hierarchy. Database-backed sessions with sliding expiry. Invitations that track email delivery and can be re-sent. All of it tested.

Nuxt 4

Monolith with Nitro server routes

PostgreSQL 17 + Drizzle

Typed schema as the single source of truth

Fabric.js + Paper.js

Interactive canvas plus precise text rendering

PrimeVue + Tailwind

Custom dark “fire” theme

Puppeteer

Headless Chrome for print-quality PDFs

Vitest

80% coverage gate; routes tested without a database

Why two canvas libraries?

Paper.js renders sticker text to images with better typography and path handling, but has no selection or resize UI. Fabric.js provides that interactive layer. Each does the job the other is bad at.

Running a festival? Let’s talk.

Marquee is in production use at flow-arts festivals. Demos are by screen share.

Request a demo