SaaS web app
Eventread
The check every booker skips.
Visit site (opens in a new tab)
- Role
Research, design and build, end to end
- Timeline
Mar 2026 – ongoing
- Team
Solo
- Tools
- Figma
- Figma MCP
- Claude Code
- Next.js
- Vercel
- Ticketmaster
- JamBase
- football-data.org
- Wikidata
Problem
Two bands, one lost night. My band's release show lost its audience to a Måneskin arena show on the same night. A friend's band lost theirs to the Champions League final. Nobody had checked, because there was nothing to check with.
Eventread is built for the two people I worked with for eight years: artists and managers picking a date, and promoters and agents filling a room. Both pick a date and hope: ticketing platforms show their own events, and nobody shows the whole night.
Live Nation alone puts on 54,000 shows a year, about 150 every night. Every independent show gets booked around that calendar, usually without seeing it. Prism.fm, TourSmart and ChatGPT each answer part of the question; none checks a date against everything happening that night.
Solution
The Danger Score. Every competing event gets three weights: how big its room is next to yours, how close its genre is to yours, and how close its start time is to yours. Multiplied together, they place the night in one of three bands: Safe, Threat or Critical.
On the live product's own example, a 1,000-cap rock show in Berlin on 18 November 2026, Muse at the Uber Arena is Critical, Horse Lords in a 532-cap room is a Threat because it's the same genre, and TAEMIN at 3,638 is Safe.
Size isn't danger; relevance is.
How it works
One search, then it remembers. Pick a city, a month, your genre and your room size, and the month comes back laid out by risk. Around that search sit three things bookers do every week: book for several acts, watch a date after it's booked, and route a tour.
Search, then save it as an act
A manager or an agent books for several acts, and every search asked for the same genre and room size again. Signed in, a search offers to save itself as an act. After that the act is one click on the search page, and its genre and room size fill in.
Follow the date you booked
Shows keep getting announced after a date is booked. A followed date is re-checked every day, and an email goes out when a competing show lands on that night.

Plan a tour as one run
Eight cities typed in any order, one date already booked in Paris. The planner routes Berlin to Paris in 12 days and 2,495 km, keeps every drive possible, picks the quietest nights the run can reach, then checks the 20 shortest alternatives: none beats it.

Under the hoodTicketmaster covers the big ticketed shows and JamBase the local ones it doesn't list: for Berlin in November 2026, 487 shows against 93, 436 of them not on Ticketmaster at all. "Cambridge" returned 124 events across the UK and the US until places carried their country (21 after the fix), and tour shows wanting the same night are assigned in two passes.
Design system
One product, one language. The interface had grown by feature: pill-shaped navigation next to square buttons, colour used for decoration as much as for risk. I surveyed product design systems and built one from three references.
Type
Geist Sans for words, Geist Mono for numbers and labels.
Colour
Risk is the only colour, shown as a dot and a word.
Month view

A month at a glance, each day carrying its risk.
One type family, one set of shapes, three colours that always mean risk, and a CI test that fails if an old style comes back.
Challenges
- 01
A blank calendar looked safe
Not checkedNo coverage hereAll Saints' DayWhat happenedA month with no data looked exactly like a month with no competition. London showed 7 days of events, Tel Aviv came back as a green “No conflicts”, and holidays were missing.
What I didI gave missing data its own states (“Not checked”, “No coverage here”), showed holidays without scoring them, and added an “announced” indicator built on an 8-city count: about 95% of a month's shows are listed one month out, 1% a year out.
What it changedLondon went from 7 visible days to all 31.
- 02
The score claimed precision it didn't have
SafeThreatCriticalWhat happened“Safe 18” on a tour date read like a date or a time, and a 0–100 number promised more precision than the formula has.
What I didI dropped the number and kept three bands, Safe, Threat and Critical, after checking the cut-points on 3,172 real listings.
What it changedThe formula produced only 27 distinct values, and none fell between 35–45 or 64–80: the bands sit on real gaps.
Impact
Live at eventread.vercel.app (opens in a new tab), built solo.
Finds the competing events, ticketed or not, before the date is booked.