Try it in 2 minutes

  1. Open the live demo and tap Try Singapore demo (or Medellín).
  2. Go to Profile, turn Consent on and pick two likes (for example street food + coffee).
  3. Back on the dashboard, see Tonight's match and tap Compare with and without your taste.
  4. Open NAVI, then type or tap the microphone and ask "What if I spend $60?" (or in Spanish: "¿Y si gasto $60?"). Confirm or Cancel.
  5. Optional: create a group in Groups, share the invite code, then ask NAVI "Find me a travel buddy" to see who in your group matches your taste best.

Inspiration

I travel as a volunteer, trading a few hours of work for a bed and meals through platforms like Worldpackers. When a host covers your lodging, the money left in your pocket has to last the whole trip, and every night out is a small bet: is it worth it for me, and can I afford it without breaking the days that come after? Budget apps only log what you already spent. Trip planners suggest places but don't know how much money you can really touch. We wanted an agent that answers both questions before you spend a cent.

What it does

Voluntrip AI is a local-first PWA for volunteers and long-stay travelers on a fixed budget.

  • Money you can actually spend. Real available money, daily and weekly safe spend, protected pockets that stay locked, and a runway status. Pure TypeScript, covered by tests.
  • Cultural DNA. With explicit consent, you pick likes (music, food, entertainment, activities) or search for artists, films and places you love.
  • Tonight's match. Qloo ranks real places in your trip city for your taste, and Voluntrip scores each one against your daily safe spend. "Why this?" separates what comes from Qloo (signals, filter, rank) from what comes from Voluntrip (estimated cost, change in safe spend, protected money untouched).
  • Compare with and without your taste. Two Qloo queries for the same city, side by side. When we tested our Medellín demo, salsa + live music changed 3 of 3 top places (parks and a mall became Son Havana Bar, DANCEFREE and Café Zorba). In Singapore, street food + coffee also changed 3 of 3. Qloo results change over time, so the exact places you see may differ.
  • Stretch plan. Multi-night plans in two versions, best match and stretched, with the savings shown as days of safe spend.
  • NAVI, the agent. Type or speak to it, in English or Spanish. NAVI has tools for finance and culture, including a plan for today. Ask "What if I spend $60?" and NAVI runs a simulation with a before/after card and Confirm or Cancel. Nothing is recorded until you confirm, and a recommendation never creates an expense.
  • Groups. Invite-code groups where members can choose to share their tastes, with a Travel Buddy suggestion inside your group. Travel Buddy only looks at the groups you joined with an invite code, never at all app users.

Available in English, Spanish and Portuguese.

How we use Qloo

  • Insights for places in the trip city, with taste tags as signals (up to 8), one hard filter tag, and loved entities from Entity Search as signals (up to 5).
  • The key stays on the server. Every place result is labeled qloo, demo or unavailable. If Qloo is down or the key is missing, the app says so and never invents a list.
  • Places enter the app only through Qloo (plus a small, clearly labeled baseline when Qloo is off). Without Qloo there is no honest recommendation for an arbitrary city.
  • The Voluntrip Value Score is ours, never presented as a Qloo score: 0.40 × cultural fit + 0.35 × financial fit + 0.25 × context fit.

How we built it

Next.js 15 (App Router), React 19, TypeScript, Tailwind, Framer Motion, Zustand and IndexedDB, deployed on Vercel. Supabase RPCs power the groups. Azure OpenAI and Azure Speech power conversational NAVI and voice, and Azure Vision handles optional receipt reading. Money figures and place lists always come from tools, never from the model. 326 automated tests.

Challenges

  • Qloo returns a default list when it doesn't recognize a tag. We probed about 50 candidate likes against the live API and only shipped the ones proven to change the results. For the rest we found a hard-filter tag that works.
  • Signals depend on the city. In Singapore, one signal alone didn't move the ranking, but two together did.
  • A timezone bug. Our server runs in UTC and we are based between Medellín/Bogotá (UTC-5) and Singapore (UTC+8), so the same trip showed 13 days left instead of 12 and gave wrong budget numbers. We fixed it with a deterministic demo clock and tests.

What we learned

Taste and money have to be decided in the same place, and honest labeling matters more than a smooth demo. Working as a team across Bogotá and Singapore, we shaped the idea, the pitch and the tests together.

Who it's for

Volunteer-stay networks such as Worldpackers, Workaway and HelpX, and communities of digital nomads, bring together travelers who live on a fixed budget. Voluntrip AI is built for them. We are not affiliated with any of these platforms, and reaching those communities is part of our plan.

Team

  • Viviana Plata (Medellín/Bogotá, Colombia)
  • Joshita Krishna (Singapore)

We built Voluntrip AI together as a team: the idea, the pitch, the testing and the decisions along the way. Singapore, Jhosita's city, is our second demo city, which let us test taste-based recommendations somewhere very different from Medellín.

Known limits

Prices are estimates from Qloo price bands or category fallbacks, and the app always says so. Exchange rates use a built-in table. When Qloo is unavailable, the app says so instead of inventing results. Groups need cloud configuration and expire. Qloo results change over time.

What's next (planned, not built yet)

  • An opt-in traveler directory beyond invite groups, with verification and anti-spam. We held it back on purpose: sharing tastes and trip city with strangers needs accounts and moderation we won't rush.
  • A freemium version, distribution through volunteer-stay and nomad communities, live exchange rates and more cities.

Built With

  • azure-ai-vision
  • azure-openai
  • azure-speech
  • framer-motion
  • indexeddb
  • nextjs
  • pwa
  • qloo-api
  • react
  • supabase
  • tailwindcss
  • typescript
  • vercel
  • vitest
  • zustand
Share this project:

Updates

Submission history