Inspiration

Every weekend, the same exhausting ritual plays out. You want to go out for dinner. You open Yelp. 47 results. You scroll. You read reviews. You compare ratings. You check if they take reservations. You text your friends. They have opinions. An hour later, you're still on your couch, hungrier than when you started, paralyzed by options.

The problem isn't finding restaurants. Yelp already solved that. The problem is deciding. The average person spends 45 minutes choosing where to eat. That's not a search problem—it's a decision problem.

I built Slate because I wanted software that doesn't give me options. I wanted software that gives me an answer.

What it does

Slate is a personal concierge that plans your evening. Not a search engine. Not a chatbot. A decision engine.

Here's how it works:

Vibe Profiling: When you first open Slate, you pick photos of restaurant scenes that speak to you. Dim candlelit corners. Bustling neighborhood joints. Upscale tasting menus. From these selections, Slate builds your taste profile—not just cuisine preferences, but the energy, lighting, crowd, and style you gravitate toward.

Natural Language Input: Tell Slate what you want the way you'd tell a friend. "Saturday dinner for 2, somewhere romantic in Brooklyn, maybe drinks after." No filters. No dropdowns. Just speak naturally.

Real-Time Availability Matrix: This is where it gets interesting. Slate doesn't just return a list of restaurants. It shows you a live matrix of 5 restaurants across 6 time slots, checking availability in real-time. You watch it work—cells turn green for available, red for taken, yellow while checking. No other product shows you this.

Intelligent Recovery: Here's the moment that makes people say "holy shit." You pick a slot. Slate starts booking. It fails—the slot was just taken by another party. But instead of showing you an error, Slate automatically finds the next best option and books that instead. Failure becomes invisible. The system just handles it.

Complete Itinerary: Slate doesn't just book dinner. It plans your night. Dinner at 7:30. Dessert spot at 9:15, 8 minute walk away. Cocktail bar at 10:30, 5 minute walk. Everything timed, everything mapped, everything handled.

How I built it

Yelp Fusion API: The intelligence layer. Every restaurant recommendation comes from Yelp's comprehensive database. I use the Search API to find venues matching the user's query, Business Details for availability and attributes, and the AI Chat API for natural language understanding of vibe and intent.

Vibe Matching Algorithm: I don't just match on cuisine and price. When a user selects photos during onboarding, I extract dimensional preferences: lighting (dim to bright), energy (calm to lively), crowd (locals to scene), style (casual to upscale). Every restaurant gets scored against this profile. That's why Slate can say "94% match—similar energy to your favorites."

Real-Time Availability System: The matrix isn't just visual theater. It's checking actual availability across multiple venues and time slots simultaneously. When slots get taken, the system knows immediately and adjusts recommendations.

Simulated Booking Flow: Without access to Yelp's booking API, I built a realistic simulation layer that demonstrates the full booking experience. Confirmation numbers are generated, timing feels authentic, and occasional failures trigger the recovery system—making the demo feel real.

Frontend Stack: Next.js 14 with App Router, Tailwind CSS for styling, Framer Motion for animations. The UI is intentionally premium—no playful illustrations, no AI-looking gradients. It looks like software you'd pay for.

Maps Integration: Leaflet with OpenStreetMap displays the full evening itinerary with pins for each stop and walking paths between them.

Challenges I ran into

The Decision Paralysis Problem: Early prototypes still showed too many options. Users would see 5 great restaurants and freeze up again. I had to be aggressive about narrowing to ONE recommendation. The product only works if it's opinionated.

Vibe is Hard to Quantify: How do you turn "romantic but not stuffy" into searchable parameters? I solved this with visual selection during onboarding—let users show me what they mean instead of trying to describe it in words.

Booking Without Booking Access: I applied for Yelp's booking API but couldn't get access in time. Rather than abandon the core experience, I built a simulation layer sophisticated enough to demonstrate the full flow. The recovery system—where a failed booking triggers automatic alternatives—actually works better as a demo because I can guarantee the failure happens on camera.

Real-Time Feels Slow: Checking availability across 30 slots (5 restaurants × 6 times) takes time. Making users wait felt broken. The solution was the animated matrix—instead of hiding the work, I show it. Users watch slots check one by one. The wait becomes engaging instead of frustrating.

Accomplishments I'm proud of

The Recovery Moment: When a booking fails and Slate automatically finds an alternative without any user intervention—that's the moment in the demo where people lean forward. It's not a feature you'd put on a marketing page, but it's the thing that makes the product feel alive.

Vibe Matching That Actually Works: Slate can take a request like "somewhere my parents would like but not boring" and return restaurants that genuinely fit that description. The visual onboarding captures preferences that words can't express.

Premium Without Pretense: The UI looks like a luxury product but the interaction is dead simple. No learning curve. No tutorial needed. Tell it what you want, get an answer.

Full Night Planning: Most restaurant apps stop at the reservation. Slate plans dinner, dessert, drinks, entertainment—a complete evening with walking directions between each stop.

What I learned

Decisions Are the Product: I started building better search. I ended up building decision elimination. The insight that changed everything: people don't want more options, they want fewer. Ideally one. The product's job is to be confident enough to give a single answer.

Show the Work: Users trust systems more when they can see them working. The availability matrix isn't just functional—it builds confidence. "I can see it checking, so I know it's thorough."

Failure Is a Feature: Most products hide failures or show error messages. Making failure visible and recovery automatic turns a negative into a trust-building moment.

Yelp's Data Is Underutilized: Yelp has the most comprehensive restaurant database in the world, but their product still puts the decision burden on users. There's a massive opportunity to build decision layers on top of their data infrastructure.

What's next for Slate

Full Autonomy Mode: Set your preferences once. Every Thursday, your phone buzzes with Saturday's plan. No input required. You just show up. I've architected this but need real booking access to make it work.

Group Planning: Four friends, four different dietary restrictions, one link. Everyone submits their constraints, watches the options narrow from 47 to 1, and gets notified when it's booked. The infrastructure is built—needs polish.

Voice Calling for Bookings: For restaurants outside Yelp's booking network, Slate could call and book on your behalf using voice AI. I prototyped this with ElevenLabs but pulled it from the demo for reliability.

Trend Prediction: Surface restaurants before they blow up. "Raku just got mentioned on Eater and TikTok is up 240%. Currently easy to book. In 2 weeks, expect 3-week waits. Want in now?"

The Real Vision: I want Slate to be the last app you open when you want to go out. Not the first of many. The last. You tell it what you want, it handles everything else. That's not a search engine with better filters. That's a concierge in your pocket.

Built With

Share this project:

Updates