discover
locale.
A mobile-first app that finds free community events, pop-ups, and live shows in Sacramento โ pulling from Ticketmaster, Reddit, Meetup, and more in real time.
Built for spontaneous discovery
Three modes for three moments โ browsing what's on, exploring where things are, and tracking what you're doing.
Tonight strip surfaces same-day events. Trending pills show what's buzzing. Category and date filters cut through the noise.
Color-coded teardrop pins by category. Bottom sheet lists nearby events. Links to Apple Maps or Google Maps based on device.
14-day calendar strip with event dots. Going tab tracks RSVPs. Saved tab holds your watchlist. Tap any day to filter.
Three views, one experience
Each screen is tuned for a distinct moment in the discovery journey. Click any phone to pause.
PM
PM
8 PM
PM
PM
PM
8 PM
Crafted with intention
Every visual and interaction decision was grounded in a specific intent — from the color of a dot to the shape of a map pin. Here is what drove the key choices.
The dark-first design ensures event imagery, emoji, and category colors pop. A light interface flattens everything; this one recedes so content leads. Built mobile-first at 390×844px — the real use case is a phone in hand, not a browser tab.
The accent color evolved from #7CFF6B (electric, harsh) to #5DD44A (organic, warm). That single shift changed the feel from “tech product” to “neighborhood guide.” The dot moved from red to green for the same reason — alive, not alarming.
Eight distinct hues, one per event type, used consistently across cards, map pins, and filter pills. Users learn the system in one session — a purple pin means music before they read a word. Color does the work language slows down.
Cards borrowed from the social story format — a familiar scroll behavior redirected toward real-world events. Widened to 150×190px after testing narrower cards felt cramped and easy to skip.
border-radius: 50% 50% 50% 4px — a directional shape that points to a place with personality. Distinct from generic circles; the slight asymmetry communicates “go here.”
Every event card shows where the event came from — Reddit, Meetup, Local News, Community. Provenance transparency builds trust, especially for free events from unofficial sources.
Two distinct states of intent: Going (committed RSVP, added to your calendar strip) and Saved (soft wishlist, no pressure). Marking Going triggers a confetti micro-animation — celebrating the moment of decision.
Event venues link to Apple Maps on iOS and Google Maps on Android/desktop. A small decision that reflects genuine respect for the user’s ecosystem — no forcing a third platform into an already-long journey.
Hardcoded fallback events ensure no screen is ever empty, even when both APIs fail. Resilience is a design decision, not an afterthought. The app should always feel alive — because the city always is.
App identity comes from the product, not logo repetition. Removed in favor of clean utility space.
Felt deceptive about actual load time. Replaced with an honest spinner that communicates real network activity.
Minimalism at the cost of affordance. Users need a clear tap target — the border was restored.
Added anxiety to the discovery flow before users even decided they were interested. Cut entirely.
Designed for the Friday-evening scroll
Research was conducted entirely online — listening to where Sacramento residents actually talk about events, and auditing what existing platforms get wrong. The insight that drove every decision: people want to scroll and connect.
“It’s 6pm Friday. I want to do something tonight — not just scroll. But I don’t know where to start looking. Google gives me tourist results. Eventbrite shows nothing free. I end up staying home.”
Every Friday and Saturday, r/Sacramento sees the same post: “What’s happening this weekend?” The replies consistently surface events that aren’t on any platform — pop-up markets, free concerts, gallery openings, block parties. The community does the curation work by hand because no tool does it for them.
Eventbrite optimizes for ticketed commercial events — concerts, conferences, galas. Meetup serves recurring interest groups. Facebook Events are buried under an opaque algorithm. None of them surface the category Locale is built for: free, community-driven, spontaneous local happenings. The gap is structural, not accidental.
Users open social apps in the evening to decompress — but that scroll habit sits right next to a latent desire for real-world connection. The behavior is the same; the destination is different. Locale is designed to intercept that exact moment: same familiar scroll, same story-card format, but the payoff is something to actually go do.
“The most underserved use case in local discovery isn’t finding the next concert — it’s finding something worth leaving the couch for, tonight, that doesn’t cost anything.”
Sacramento has hundreds of free community events every week. They live on Reddit threads, city calendar pages, and Facebook groups. Locale pulls them into one scrollable surface — and makes the discovery feel as effortless as checking Instagram.
From vision to working product
The development process was deliberately iterative โ each phase producing something tangible to evaluate, critique, and build on.
"Every design decision was validated before moving forward. If something felt off, it was revisited โ not rationalized away."
Desktop Prototype โ Establishing the Core Experience
Built the first interactive prototype as a desktop layout to establish the foundational information architecture: a map/list dual-view, category filter pills, and event cards. This phase validated the core content model โ what an "event" is, how it's displayed, and how users navigate between browse modes.
Mobile Prototype โ Designing for the Real Use Case
Rebuilt entirely for mobile (390ร844px) โ because the real use case is someone on their couch on a Friday evening, not at a desktop. This phase introduced the Tonight strip, Trending pills, date filters with a calendar picker, the Plans tab with a 14-day calendar strip, and a map view with color-coded teardrop pins and a sliding bottom sheet.
Multiple design decisions were tested and deliberately reverted โ a wordmark, a shimmer loading bar, a borderless search input, and a capacity bar โ demonstrating disciplined editing over feature accumulation.
Live API Integration โ Wiring Real Data
Connected to Ticketmaster Discovery API and Anthropic's web search tool, with a multi-source merge architecture, deduplication, server-side caching, and hardcoded fallback events to prevent blank states. A key finding: Anthropic's tool-use pattern requires a proper two-turn conversation loop โ a single-turn implementation silently fails.
Production Scaffold โ Building for Scale
Full Next.js 14 / TypeScript backend with modular source architecture, parallel fetching via Promise.allSettled, community submission endpoint, and Vercel deployment. API keys are server-side only throughout.
What the process revealed
Two-Turn API Flows Are Non-Obvious
Anthropic's tool-use pattern requires a two-turn conversation loop. A single-turn implementation silently returns nothing โ a subtle failure mode that only rigorous testing catches.
Fallbacks Are a Feature, Not a Crutch
Hardcoded events ensure users never see a blank screen. Planning for API failure is as much a product decision as any feature โ resilience is designed in, not bolted on.
Editing Is a Design Discipline
A wordmark, shimmer bar, borderless search input, and capacity indicator were all built and deliberately removed. The willingness to revert kept the interface clean and intentional.