Tonight · 7:30 PM · doors 6:30
Măcelaru conducts Enescu
Music Hall · 2 tickets, Orchestra A row F
Your evening begins here.
Tonight · 7:30 PM · doors 6:30
Music Hall · 2 tickets, Orchestra A row F
Sunday, October 18
2026–27 season
Classical six-show
SubscriptionHarmony Pass
MembershipSingle tickets
Not in a membershipOctober
3 eventsNovember
5 eventsDecember
2 eventsTonight · 7:30 PM
After the performance
We can send the program notes, the recordings referenced tonight, and the next three concerts in this series. Once, not weekly.
Or keep going: .
Member pass
Cameron Koczon
Held offline. Show this at the door; the code is rendered from the secure credential.
Sunday, 18 October at 7:30 PM
Music Hall · Springer Auditorium
Plan status
ActiveRenewal
SubscriptionYour two seats in Orchestra A are held until 15 December. Pricing for 2027–28 is published on 3 November, and renewing keeps the same seats.
Included shows
Six-show · 6Monthly · renews 1 Nov
Harmony Pass
MembershipMember benefits
3 available nowClaimable shows
2 of 4 usedPatron 1048 · since 2019
Plan status
ActiveIncluded shows
Six-show · 6Harmony Pass
MembershipRenewal
SubscriptionYour two seats in Orchestra A are held until 15 December. Pricing for 2027–28 is published on 3 November, and renewing keeps the same seats.
Maestro connects every part of your organization, simplifying the complex systems behind ticketing, patron relationships, memberships, fundraising and reporting.
From the first ticket purchase to the next donation, Maestro connects every audience interaction in one place. Your box office, marketing, development and leadership teams work from the same information, without disconnected tools or duplicate records.
Verified once and stored, so the app stops asking until it expires.
Paid 14 August. Seats are held for the season and carry to renewal.
Harmony Pass member
Tonight’s event
No signal? Your pass and ticket remain available offline.
Home, Events, Program, Subscription
Maestro is the audience platform for cultural institutions: ticketing, membership, giving, communication and attendance in one patron record. Tessitura is the CRM underneath, not the product. It is multi-tenant. The test case here is the Cincinnati Symphony.
The direction is Beyond the Seat. The seat is the brand’s foundational unit: one patron alone, an audience when repeated. So a member’s several relationships sit on one screen instead of behind separate tabs.
This is the member side. The app a subscriber opens between buying a ticket and walking into the hall. It serves four of the five domains; giving has no surface in it at all, which is the largest gap between what Maestro says it is and what this shows.
Two programs run alongside each other and the app has to hold both. A season subscription, and Harmony Pass, a monthly membership giving free tickets to selected shows. They renew on different clocks and mean different things, so they sit as separate cards rather than tiers of one thing.
Five questions, in the order a member asks them.
Home answers the first two, the access sheet the third, the membership rail the fourth. The fifth is why renewal and unclaimed Harmony Pass shows surface before anyone goes looking.
A subscriber, not a buyer. Same seats every season, six or more performances a year, converted years ago by the orchestra rather than by an app. That removes the acquisition half of a ticketing app.
It does not remove buying. A subscriber still picks up single tickets outside their package, claims Harmony Pass shows and takes a waitlist place, which is why Events carries prices and an All events mode.
Older than the median app user, often attending with a spouse, reading in a low-lit lobby minutes before a downbeat. That sets the type size and the contrast floor. Nothing goes below 11px, and seat and section stay large enough to read aloud when a scanner fails.
Donors, students, first-time attendees and non-subscribers, each with its own job in the brief. This prototype serves none of them. They sit on the navigation map as roadmap, labeled.
Nine screens and the public site. Five destinations: Home, Events, Subscription, Membership and Profile. A navigation map of the whole surface, where the built screens open and the rest are drawn and marked as not built.
The bottom bar carries five destinations, with Subscription and Membership as separate tabs. A patron holds more than one relationship with the orchestra and the two renew on different clocks, so folding them into one Tickets tab hid whichever was not on top. Home still opens with the membership rail, which is the answer to what is included in each.
Alongside the app, an identity system and a design system: type, color, motion, components and voice, over the token layer they all read from.
Two things are unfinished. The typefaces are trial and desktop licenses, which have to be cleared before this goes anywhere public. The member pass shows no scannable code, because there is no credential system to draw one from.
Drawn with the tokens it documents, so the diagram cannot drift from the layout.
--doc-gap 16px · between items in a rack
--doc-col-gap 40px · between prose columns
Five columns, 16px gutters. The rail stops at the center of the first and last column, which is calc((100% - 64px) / 10) from each edge: half a column, derived from the grid rather than guessed, so it lands on center at any width.
Rows sit on a fill one step off the paper. Nothing in the app is parted by a rule.
18px on the phone, and every rule that bleeds past it widens by exactly that much on both sides. A divider never stops short of the edge it is meant to reach.
color.text
#101010
Body copy and headings
color.text.subtle
#464646
Secondary text and captions
color.text.subtlest
oklch(0.58 0 0)
Eyebrows, inactive tab labels
color.text.inverse
#FFFFFF
Text sitting on burgundy or ink
color.text.brand
#390C0C
Current tab, brand emphasis
color.background
#FFFFFF
Screens and cards
color.background.raised
oklch(0.98 0 0 / 82%)
Blocks sitting on white
color.background.subtle
#EAEAEA
Tab bar and segmented tracks
color.background.brand
#390C0C
Primary action, full bleed sections
color.background.accent
#E1EFA3
Lemon. Legal on burgundy or ink only
color.border
oklch(0.90 0 0 / 90%)
The four structural rules in the build
space.050
4px
Icon to label
space.100
8px
Inside a chip
space.150
12px
Button padding block
space.200
16px
Between items in a rack
space.250
20px
Button padding inline
space.300
24px
Screen padding
space.400
32px
Between stacked groups
space.600
48px
Page gutter
space.800
64px
Between sections
radius.pill
999px
Every control: buttons, tab bar, chips, segmented control
radius.field
12px
Text inputs and icon plates
radius.card
8px
Navigation-map nodes
radius.chip
7px
Icon chips inside map nodes
radius.none
0
Cards, lists, the pass. Content stays square
radius.full
50%
Circular marks only. Dots, avatars, round buttons
alpha.1
.12
Hairlines and fills on a tinted ground
alpha.2
.24
Rules inside a dark surface
alpha.3
.40
Scrims behind a sheet
alpha.4
.60
Secondary text on media
alpha.5
.82
Primary text on media
Gradient ramps are exempt. A falloff needs intermediate stops, and five would band.
frost.tint
rgb(232 232 232 / .34)
The wash over a full-screen overlay
frost.blur
blur(34px) saturate(118%)
One blur for every overlay
safe.top
env, min 52px
Status bar. Every screen opens below it
safe.bottom
env, min 30px
Home indicator. The tab bar sits above it
font.family.display
Lorem ipsum
FT System Blank
Headings. 66 glyphs, trial cut
font.family.body
Lorem ipsum
Lab Grotesque
Everything a member reads
font.family.code
Lorem ipsum
Lab Grotesque Mono
Token names, values and code
font.heading.large
Lorem
72 / 1.12
Hero on the splash
font.heading.medium
Lorem
48 / 1.1
Section headings
font.body
Lorem ipsum
16 / 1.2
Default reading size
font.body.small
Lorem ipsum
14 / 1.2
Buttons and navigation
font.code
Lorem ipsum
10 / 1.4
Token names and values
space.0504pxspace.1008pxspace.20016pxspace.30024pxspace.60048px18px · 1.75 stroke Feather. Twenty-four in the set. Always beside a label, never instead of one.
Identity system · 01
Set everything in FT System Blank, headlines and body alike. Do not add a third face. Expect the trial cut to hand off to Lab Grotesque on any accent, question mark, apostrophe, dash or middot, and check names like Măcelaru at size before signing anything off. License the full cut before release.
Spend burgundy on the primary action and the active tab, nothing else. Put lemon on burgundy or off-black only; on paper it measures 1.19:1, so never set it on the page. Build everything else from the warm neutrals, and do not reach for pure white.
Draw a box only when the things inside it act together. If the rows are just rows, leave them unboxed.
Three tiers, square corners, no radius. Fill the primary in burgundy, the secondary in paper, and leave the tertiary as an outline. Change the fill between states, never the shape or the size.
Separate with a change of ground, never a rule. Fill and round the rows; do not add hairlines. Build overlays as frosted glass, a translucent warm white over a wide blur, so what sits behind stays legible. Do not dim the screen to make a panel read.
Ratios are WCAG 2.2, computed from the token values.
They share a lightness: L≈0.235 against L≈0.234. Beyond being unreadable, burgundy placed beside ink stops reading as a color at all. Give it white or lemon to sit against.
A 3px outline at 3px offset. Apply it to every control; do not invent a second.
Draw the control at whatever size the design wants, then grow the pressable box with a pseudo-element until it reaches 44. Do not resize the visible thing to hit the number.
Pad the tab bar with env(safe-area-inset-bottom). Check it on a real phone, not in the mock.
Eight outlined paths, 511 × 92, no live text, so it carries no font dependency. Inline it once as a <symbol> and referenced wherever it appears.
The fill is currentColor: burgundy on light grounds, off-white on burgundy. Never recolor it by hand.
Below that the stacked bars stop separating. It runs at 18px in the bar, 30px on the splash, 46px here.
Half the lockup’s height on every side, measured from the bounding box. Set nothing inside it.
#FFFFFF#EAEAEA#101010#E1EFA3#C2ACE8#390C0CThe board names three neutrals. These are the working roles derived from them: the values components actually reference.
--off-white#FBFAF9 · warm paper--raised#F0EEEB · rows on paper--gray#EDEBE8 · filled rows--quiet0.58 · eyebrows, inactive--muted#464646 · secondary text--ink#101010 · reading ink--display and --sans · FT System Blank
Maestro
--sans · FT System, falling back to Lab Grotesque
Member pass ready
Tonight · 7:30 PM · Music HallThe trial cut carries 66 glyphs: the alphabet, the digits, space, comma and period. Everything else falls to Lab Grotesque through a unicode-range, so the handoff is deterministic rather than left to the browser.
Read Măcelaru closely: the M, c, e, l, a, r and u are FT System, the ă is Lab Grotesque. Assume every accented name in the catalog does this until the full cut is licensed.
Long exposures, always. A bow mid-stroke, a hand leaving a key, the audience as one smear of movement. Nothing posed and nobody looking at the camera.
pressTransform on tapcolorHover and statescreenEntry between screensambientSplash focus, letter driftcubic-bezier(.22, 1, .36, 1). It decelerates hard and settles, which suits a screen arriving. Do not introduce a second easing.
Three keyframes in the build: a screen entering, the splash pulling focus, a letter drift. If a motion is not tracking something that changed, cut it.
Under prefers-reduced-motion, collapse every duration to .01ms, the ambient splash animations included. Do not treat it as optional.
Doors open at 6:30.
Not “Your unforgettable evening awaits.” Say what the member needs.