Inspiration
You've just landed somewhere new, or you're at the gym with your hands full, and you want to know where to eat, what to listen to, or what to do next. Search gives you what's popular, not what's yours. A friend who lives there would ask what you like and answer in a sentence or two. Nion tries to be that: a voice that knows the place and knows you.
What it does
Nion is a voice-and-typing web app for people who are new to a place. Say or type "I'm hungry" or "what would I like in Lisbon?" and Nion answers in a few spoken sentences while listing its picks on screen.
It builds your taste from what you tell it, and it picks "places, music, films, TV, books, podcasts, brands, and destinations" with Qloo. Your likes carry across all of these, so a music taste can drive place and film picks. Dislikes are more targeted: a disliked food only affects places, a disliked genre can affect any type, and a disliked named film or artist only affects the same type of thing.
Where Qloo has opening hours for a place, the card shows whether it's open now and when it closes or opens, in the place's local time. Some places, such as the Brooklyn Bridge, have no hours, and their cards say nothing about it.
How I built it
- You speak (Chrome) or type, or tap a suggested example.
- The page sends your words, your saved taste, and your location to a small server that holds the API keys.
- "Claude Haiku 5.5" is the agent. It can note a like or dislike, search the web once, or ask Qloo.
- Qloo returns picks. The server turns them into plain terms for Claude (a walking time, a fit in words), Claude writes the spoken answer, and the screen lists the picks Nion actually named.
How it uses Qloo
Qloo is the taste engine, not decoration. Nion uses three kinds of call: name lookup, tag lookup, and recommendations. One question can trigger several, because each liked item and each tag is looked up separately.
Nion sends Qloo your liked items as taste signals, plus category filters, a map point and radius, and exclusions for your dislikes. When two or more likes are blended, Nion also asks Qloo for its "why" breakdown and shows it. With a single like, Nion doesn't ask, because the answer would trivially be "all of it".
Challenges
- "Qloo's rate limit is the bottleneck.** I assumed starting lookups in parallel would be faster. It wasn't, because Qloo allows 5 calls per second, which means at least 200 ms between calls. Nion spaces them 230 ms apart to stay safely under. Remembering lookups helped: the lookups before the recommendation call (names, tags, and cities) dropped from 1.4 s to 0.2 s. That is only that part, not the whole answer time. The lookups a demo is most likely to need (Radiohead, Blade Runner 2049, ramen, jazz, and three sample cities) are loaded in the background when the server starts.
- "Open now" had to be worked out. Qloo's hours filter takes only a day of the week, so I calculate open or closed from each place's hours, using the local time at the place.
- A silent failure mode. My new tests caught a bug where a missing Qloo header could read as "0 calls left" and put Nion into "resting" mode. Fixed.
- Ranking quality. Places are ranked with ratings counting, and duplicates are removed. But the rating bias let a Thai place into a ramen list, so I turned it off whenever a cuisine filter is set. Qloo's own tags are loose, so a Thai place can still occasionally appear in ramen results.
- Protecting credit. Per-visitor limits, daily and total spending guards, and a Qloo-allowance guard, with polite "I'm resting" lines.
What I learned
- Measure before optimizing. The obvious speedup (parallel calls) did nothing, and the boring one (remembering lookups) did the most.
- A voice product lives on a short path to a good answer. With a known taste, Nion goes straight to picks and says what it based them on. When it needs a location, there are one-tap buttons.
- Tests pay for themselves: 394 automated tests, real checks against Qloo and Claude, and a live-site test.
Honest limits
- Voice needs Chrome, and interrupting by voice is unreliable on speakers.
- Answers take a few seconds, and the first load on the free hosting plan is slower.
- Qloo's tags can be loose, and the "why it fits" sentence is partly Claude's.
- Places, music, film, and destinations were tested and tuned most. Books, podcasts, brands, and TV work through the same tool but weren't tuned.
What's next
- Support for browsers beyond Chrome
- More reliable voice interruption on speakers
- Tighter cuisine filtering
- Tuning books, podcasts, brands, and TV as carefully as places, music, film, and destinations
Log in or sign up for Devpost to join the conversation.