Coryo

Whitepaper

Every dance class in the world, in one place

One catalog, every class, receipts on every row. The one place a dancer sees who is teaching, where, and when. Starting with Los Angeles.

Coryo is the one place a dancer sees who is teaching, where, and when. It is a shared catalog of Los Angeles dance classes, read by a native iPhone app, and it is built from schedules studios already publish. The booking platforms that hold this data hold it well, but each holds only its own slice, so a dancer deciding on tonight's class still checks eight studio websites, three booking widgets, and an Instagram story that expires in an hour.

We aggregate discovery and only discovery. Every class in the app links straight to the studio's own booking page, so the studio keeps the customer and the sale. The catalog today carries 675 classes across 14 LA studios, read from six different booking platforms, with provenance (a record of exactly where each fact came from and when we last checked it) attached to every row.

1Finding tonight's class should take five seconds. It takes fifteen apps.

A dancer is in her car. She has two hours free tonight. She wants to know who is teaching, where, and when, and she wants it in under five seconds. Today she answers that question by checking fifteen Instagram stories and eight studio websites.

The people this describes are specific: the LA commercial and hip-hop scene. These dancers take three to six classes a week, follow specific choreographers rather than venues, and will drive forty minutes for the right teacher. For them the schedule is not a nice-to-have. It is the daily logistical problem of their training life, and the information they need is scattered across more places than anyone can reasonably check.

The scattering has a shape. A guest masterclass or a last-minute substitute teacher gets announced in an Instagram story and vanishes in 24 hours. That expiration is exactly why dancers miss classes. Studio websites publish through whatever booking widget the studio happens to rent, in whatever format that vendor chooses. And the directories that claim to cover the scene rot in public: EDGE Performing Arts Center closed permanently in 2020 after 29 years and still ranks first in several "best LA studios" listicles. Any list that includes EDGE is at least six years stale.

A city grid at night with scattered green points of light
Los Angeles at night. The scene is everywhere; the schedule is nowhere.

Meanwhile, every neighboring culture got its aggregator. Live music got Bandsintown, which grew to 100 million users and 700,000 artists answering the same "who is playing near me" question. Fitness got ClassPass, which fills classes at over 8,000 studios. Dance, a roughly $5 billion US studio market across some 14,600 studios, of which Los Angeles is the largest metro at around 785, got nothing. Our founder danced for 13 years and puts it plainly: in that time the industry got zero infrastructure. There is no Bandsintown for dance.

That is the question this document answers: what does it take to build one, and why has nobody done it.

Who is building this

Aayush is 22, has been dancing for 13 years, and has spent too many nights in his car cross-referencing flyers, stories, and half-updated schedules just to find one class worth driving across town for. He is an engineer, so he did what engineers do when something they love is harder than it should be: he built the tool he wished existed.

"I can tell you every venue my favorite band plays this year, but I had to dig through fifteen Instagram stories to find one hip-hop class on a Tuesday. There is no Bandsintown for dance, so I'm building it." Aayush, founder

2What exists today, and where it stops

The existing platforms are good at their jobs. The gaps are in the jobs nobody took.

Every platform holds only its own slice

Booking and billing are owned by Mindbody, Vagaro, and Jackrabbit, and they work. A studio on any of them can sell a class, run a roster, and take a card. But when we surveyed 143 evidence-graded LA County locations, we found their schedules published through more than 25 distinct systems: Wix Bookings, Jackrabbit, DanceStudio-Pro, Punchpass, Momence, Pike13, Setmore, Google Calendar embeds, plain web pages, PDFs, and six different Mindbody embed variants alone. Each vendor shows you one studio at a time. No dancer lives inside one vendor.

The real schedule lives in a story that expires

The commercial scene's true publishing channel is Instagram. A weekly schedule posted as an image, a sub announced in a story, a battle flyer in a feed. It reaches followers for a day and then it is gone, and no computer could read it in the first place. Some of the city's most important rooms publish nowhere else: Millennium Dance Complex publishes no schedule on the web at all and tells students to download its app, where instructors "are not confirmed until the day before class."

Nobody follows the teacher

In this scene the teacher is the draw and the studio is a venue. A dancer tracks one choreographer across three studios in a week. Mindbody and ClassPass are built for booking inventory at a location, not for following a person across locations, so the one map that matters to a dancer, the teacher map, exists nowhere. ClassPass itself is the instructive case: it began as a search engine for fitness classes, and studios did not care until it showed up with paying customers. Discovery alone did not move the studios. Ours moves without their permission, which is the next section.

3What we stand for

We believe dance should be easy to find and fun for everyone. Finding tonight's class should feel like the first eight-count of a song you love, not a scavenger hunt across screenshots and story highlights. So we hold ourselves to four commitments.

Speed. Five seconds from opening the app to knowing where the floor is tonight. That promise holds in a parking garage with zero bars, because the catalog lives on your phone, ready before the signal is.

Truth. Every fact in the catalog traces back to its source. When we say a class meets Tuesday at 8, we can show you where that came from and when we last checked. "Verified 2 days ago" is written right on the card, because honesty about freshness is part of the fact.

Openness. The catalog is useful from your very first tap. No account, no gatekeeping. A new dancer in a new city gets the same catalog as a fifteen-year veteran.

Respect. The studio stays the hero of every booking and keeps its customer. The teacher stays the star of the class. The dancer's training life stays hers alone.

This is a tool that serves the dancer, not an algorithm that serves itself.

Dancer silhouettes backlit by green light in a studio
Not another feed to scroll. A tool that gets more people on more floors.

4Four mechanisms, each one earning the next

Each exists because the one before it leaves a problem open.

Many green light streams converging into a single bright line
Many sources, one catalog. Every reader feeds the same shared record.

4.1 One protocol, many sources

Supply is the existential problem, not the app's interface. Every way a class can reach the catalog goes through an adapter (a small program that knows how to read one booking site's schedule), and every adapter follows one protocol (a shared contract that makes them all interchangeable). Nothing above that contract knows or cares where a class came from. Twenty-three adapters exist today, one per publishing system, and adding a booking platform means writing one new file.

Studio's own websitePublic booking widgetTyped in by handA reader for that platformone adapter per booking systemHonesty checksnothing guessed, big deletions blockedThe shared catalogsame for every dancerThe app on your phonekeeps working offline from a saved copy
Figure 1. A class travels from wherever the studio publishes it, through honesty checks, into one shared catalog.

Sources are ranked by how much we trust the result. A listing the studio claims itself outranks a partner API (a direct data feed a platform offers on purpose), which outranks structured data the site already publishes, which outranks a public widget, which outranks manual typing. Manual entry is the floor and it is never wasted work: it needs nobody's permission, it wins the cold start, and it is the accuracy baseline every automated adapter gets checked against. The two most important LA studios that publish nothing a computer can read cost one to two hours of typing each, once, and the recurrence model does the rest. We spent more effort trying to read one of them automatically than it would have taken to just type it in.

Studio maintains its own listingthe studio edits it directlyOfficial platform connectiontheir booking system tells us directlyMachine readable data the site already publishesread exactly as writtenPublic booking widgetread from the page customers seeTyped in by handa person copied it over
Figure 2. Every listing carries one of five sources, ranked from the studio speaking for itself down to a human typing it in.

The scaling insight: the cost that matters is human hours per studio, not computing cost. So the system fingerprints the platform, not the studio. Fetch a candidate's page once, detect which booking system it embeds, and route it to that platform's adapter with the right site id. Onboarding studio 300 should be a lookup, not a morning of engineering.

4.2 A protocol solves where classes come from. It says nothing about whether they are true.

The catalog's only asset is being right, so correctness is built into the structure, not left to good intentions.

Recurrence is real recurrence. A class schedule is stored as templates holding recurrence rules (the standard calendar format, RFC 5545, that lets software say "every Tuesday at 7pm" precisely), then expanded ahead of time into concrete dated sessions 60 days forward. So the feed is one flat, fast lookup with no calendar math when you open the app. Templates store the local wall-clock time plus an IANA time zone (the official named list of the world's zones, like America/Los_Angeles), never a bare universal timestamp, because a 7pm class stays 7pm across a daylight-saving switch even as its offset moves. Our test data includes 2026-03-08 and 2026-11-01, the two clock-change nights of the year, because the 2007 US daylight-saving change silently broke every calendar system from AdWords to BlackBerry.

Unknown is absent, never guessed. A widget that serves one week of classes says nothing about repetition, so widget sources record dates and never infer "weekly" from a single look. Difficulty levels are never translated between studios: a studio that writes "Pre Intermediate" means a level below intermediate, and remapping it would tell a dancer a class is harder than the studio said. Levels we cannot map stay empty, forever, with a test that fails if anyone wires the shortcut.

Failure preserves the catalog. If a data run would cancel more than three of a studio's classes and more than 40 percent of them, a circuit breaker (a safety switch that halts a process when its behavior looks wrong) refuses the update and reports it. A studio does not cancel most of a week at once; that pattern means our reader broke, not that news happened. An empty fetch never deletes existing sessions.

Nightly read returns far fewer classesthan this studio usually hasMissing more than 3 classesand more than 40% of the schedule?yesnoRefuse the updatekeep yesterday's catalogTell a humanApply the update
Figure 3. A suspicious drop is treated as our reader breaking, not as news. The catalog is never damaged by a bad read.

Every row carries provenance: its source, fetch time, verification time, and trust level, with the raw upstream response kept for tracing. It is what lets the feed degrade honestly, saying "verified 2 days ago," instead of quietly serving something wrong.

4.3 Correct rows still need correct identities

The teacher is the product. If one choreographer teaching at two studios becomes two profiles, the follow graph splits and the core value dies. So teachers get stable internal ids, with display names kept as changeable attributes. Matching duplicate teachers is entity resolution (deciding when two records describe the same real person), and the most reliable real-world identifier in this scene is the Instagram handle. It is stronger than a legal name. Ambiguous matches go to a human review queue and are never merged automatically, because a wrong merge is far harder to detect and undo than a duplicate. Merges are soft and reversible.

The identity layer is also where restraint is a feature. A dancer favorites a teacher and it stays private: no count is shown to the teacher, to other dancers, or anywhere. The mechanic is a follow; the word is what decides whether a scene starts keeping score, and this one will not.

The catalog itself is kept separate from everything personal. The class catalog is a shared public good, byte-identical for every dancer, owned by the server. Follows, plans, and the training log live on the phone, with no account. The raw fetched data lives in a third, write-only store. Mixing these three is the mistake that forces a rewrite later, so the separation is enforced in the architecture, not suggested in a document.

The shared catalogon our server, same for everyoneYour personal dataon your phone onlyRaw fetch recordswrite-only paper trailnever mixednever mixed
Figure 4. The catalog, your personal data, and the raw records live in three separate places.

4.4 An honest catalog knows its own denominator

Most aggregators claim coverage. This one measures it. Our August 2026 LA County census graded 143 locations on first-party evidence and declares itself non-exhaustive, in writing, with the gaps named:

0discovery rows
0audited leads
0evidence graded
0verified
0live readable
0in production

Each stage of that funnel is a file in the repository. The audit rule is strict: a studio name or a platform logo is not a working source. Only first-party schedule evidence promotes a lead, and a source counts as live-readable only after its actual adapter returns at least one row with a recognized dance style.

The same honesty applies to individual rows. A studio can be accepted into the catalog on one read, because a human confirms it, but it is never rejected on one. The same studio page, probed three times in one evening, gave us three wrong rows, then three real classes, then six plus a youth program. No run invented a class, and no run was complete. Six is a floor, not a count.

5Why it works: the arithmetic

The whole read side is cheap. A thousand sources polled hourly is 720,000 requests a month, which is 0.28 requests per second, and it runs on rented serverless computing for under seven dollars a month. The cost curve bends only at the browser: doing that same polling through an automated Chrome browser costs roughly thirty times more. So a browser is a discovery tool that finds a site's underlying data feed once, never the everyday path.

Verification is a habit, not a promise. The server carries 156 automated tests across the recurrence engine, the session expansion against a real Postgres database, the teacher-matching scoring, and every adapter. And the things tests cannot see get checked by hand: before any launch milestone, five random classes are spot-checked against the studio's live schedule. One such pass caught 133 stored sessions whose booking links carried a text-encoding bug that no test had flagged, because nothing had technically failed. Green tests are not verification of the world, so the world gets verified too.

Distribution compounds without the app. The server publishes public class, teacher, and studio pages that carry schema.org structured data, machine-readable labels embedded in each page (in a format called JSON-LD) that tell Google precisely what event the page describes. Google turns those labels into event listings in Search and Maps. That is the cheapest compounding distribution a discovery product can get, and a native app has no equivalent surface. The web pages are the front door; the app is the habit.

6What we chose not to build, and why

Scrape harder

The obvious aggregator move, and the research killed it. Across OpenTable, Yelp, Songkick, SeatGeek, and ClassPass, we found no case where defeating a source that did not want to be read was the documented winning move. Songkick's scrapers got it to a demo and were never the moat. Yelp bought its 20 million listings. OpenTable typed restaurants' reservation books in by hand overnight. The pattern that wins is permitted reads, plus concierge data entry, plus a claim flow that converts a listing into a relationship. That is the pattern here.

Be a marketplace first

A full alternative thesis exists in our own research: in-app checkout, attribution pricing, seat recovery, host payouts. It is good, and it may be where this eventually goes. It is not first, for a load-bearing reason: discovery is useful with zero counterparties, while checkout is useful only after a studio has signed up, agreed to be paid through us, and scans people at a door. The first needs nobody's permission; the second needs everybody's. The discipline that keeps both doors open is logging, anonymously and from day one, the attribution data a marketplace would need, meaning the proof of which channel sent a customer to a booking, because that trail cannot be reconstructed after the fact.
One QR scan at the doorSocial graphwho invited whomPassportyour record of classes takenPayout recordwho gets paid what
Figure 5. A single scan updates who invited whom, your class history, and who gets paid, all at once.

Web first instead of native iOS

Going native costs us App Store review cycles and the search-traffic acquisition channel a website gets for free. We chose it anyway, because the product is opened on the way to class, offline in a parking garage, and because the structured-data web pages recover the distribution the app gives up. The decision is written down as reversible if web traffic proves to be the dominant channel.

7The road ahead

The heart of LA comes aboard. The commercial and hip-hop studios that make this city move publish their schedules on Instagram, and they join the catalog the way everything good in dance happens: through partnership and love, one conversation at a time. Bringing a studio in is priced in hours, not months.

The biggest booking platform is almost connected. The largest scheduling system in fitness is within reach, down the same path ClassPass already proved works. When it lands, whole studio schedules light up at once.

The scene names its own styles. The catalog learns the words dancers actually use in the studio, waacking, litefeet, whatever the scene invents next, so the vocabulary belongs to the community that created it.

Every number grows in public. The 675 classes and 14 LA studios in this paper are live counts, not projections. What we publish, we can prove, and the count climbs every week.

8Where this goes

A dance studio doorway at night with a glowing green code beside the door
The door is where it all connects: one scan marks the roster, the record, and the referral.

The near-term plan is depth in Los Angeles: hand-enter the two studios that publish nothing, ship the generic structured-data adapter, and put the app in ten LA dancers' hands via TestFlight, Apple's beta-testing program. After that, the teacher dashboard becomes the growth engine: one form that turns a teacher's sixty seconds into a story graphic, a public page, a signup link, and a roster. Four jobs done once. Teachers will not post because they like us. They will post because it beats their current workflow, and every post is supply no scraper could ever reach. The full sequence, with what is explicitly not being done, lives on the Roadmap.

9Now there is a Bandsintown for dance

A dotted world map with glowing green points on major cities
Every dance class in the world, in one place. Starting with Los Angeles.

Picture her one more time: parked outside the studio, phone in hand, five minutes before the 8 o'clock. The information she needed always existed. It was just scattered across fifteen stories, three websites, and a flyer taped to a mirror. Now it lives in one catalog, 675 classes across 14 Los Angeles studios, every fact carrying a receipt, every schedule honest about when it was last checked, every tap landing on the studio's own booking page.

Merce Cunningham said, "You have to love dancing to stick to it," and the scene has loved it through every era of flyers and screenshots. That love deserved a home. Every dance class in the world, in one place. Starting with Los Angeles. Come dance.