Inspiration

I kept running into the same dead end with friends. We'd have an afternoon free, everyone would pull out their phone, and twenty minutes later we were still scrolling through reviews and maps with nothing decided. Every app I tried was built for planning a trip weeks ahead. Nothing was built for the next three hours. I wanted something that could take the small, annoying constraints you actually have right now, like a tight budget or no car or a place closing at six, and just hand back a plan.

What it does

You tell WhatNow where you are, how much time you have, your budget, how you're getting around, your energy level, and who you're with. It gives you back a few full plans instead of a list of links. Each plan is a set of real nearby places in an order that makes sense, with rough timing for each stop, travel time in between, and an estimate of what the whole thing will cost. Everything it suggests is actually open in the window you gave it.

How I built it

The frontend is Next.js with React and Tailwind, built mobile first since this is something you use while standing on a sidewalk. The backend is a Python Flask service running a LangChain agent on Groq, which I picked because response speed matters a lot when someone is waiting to make a decision. Real place data comes from Geoapify, and I parse OpenStreetMap opening hours to filter down to places open during the exact window. The whole thing is deployed on Render.

The core design choice was to give the model as little rope as possible. The agent searches for places through tools, and every real result gets stored in a registry for that request. When the model writes a plan, it can only name places from that registry. Addresses, categories, coordinates, and prices are all looked up server side afterward, so the model literally cannot invent a restaurant that does not exist.

Challenges I ran into

The first version hallucinated constantly. It would confidently recommend cafes with plausible names and real sounding addresses that were nowhere near the user. The registry approach fixed that, but it took a few rewrites to get there.

The second problem was arithmetic. I was asking the model to output durations, travel times, and costs, and it was consistently wrong in ways I then had to correct in code. Eventually I stopped asking. Now those numbers are computed from the type of place and the actual distance between stops, and the model only names places and writes the description. It got faster and cheaper at the same time.

Time zones were a quiet headache. The server runs in UTC, and guessing someone's local time is worse than not knowing it, so the client sends its own wall clock. If it is missing, the app plans without a clock rather than pretending.

Accomplishments that I'm proud of

Getting the hallucination rate to effectively zero without giving up the natural language quality. The plans still read like a friend suggesting something, but every fact in them is verified. I'm also happy with how the failure cases are handled. Rate limits, upstream errors, and searches that come back empty all give you a real message about what happened instead of a spinner that never stops.

What I learned

The most useful thing I learned is where the model belongs in the system. My instinct was to hand it the whole problem and let it figure things out. What actually worked was narrowing its job down to the part it is genuinely good at, which is taste and judgment about what goes well together, and moving everything factual or numeric into ordinary code. The app got better at exactly the point where I gave the model less to do.

I also learned a lot about how much perceived quality comes from speed. A plan that arrives in four seconds feels smarter than a better plan that takes twenty.

What's next for WhatNow

I want to add real transit and traffic data so the travel lags are exact rather than estimated. Saving plans and sharing them with the people you're going out with is the obvious next step, since these decisions are almost never made alone. Longer term I'd like it to learn what you actually enjoyed, so the tenth plan it gives you is noticeably better than the first. And it should eventually work as a proper installable app with your location already known, so the whole thing is one tap.

Built With

Share this project:

Updates