Inspiration

Culturist: Paint the City With Your Taste


Inspiration

Staring at the granular “Top-10” lists that dominate tourist apps, I saw the same pattern: one city, one algorithmic funnel, millions of identical itineraries. Meanwhile, every human carries a TastePrint—a latent vector of music, film, fashion, and food loves.

  • Cultural Blind Spots — Classic recommender systems squeeze that rich signal into “Star-rating × proximity,” erasing niche sub-cultures ( VHS horror nights, lo-fi jazz bars, stencil-art alleys).
  • Fragmented Planning Flow — Users bounce from inspiration sites → maps → chat threads → spreadsheets just to stitch a half-day route.
  • Taste Data ≠ Real Venues — Qloo’s cross-domain affinities map taste → things, but needed an interface that lets people feel that intelligence on a city grid.

What if GPT-4 could translate a sentence like “I’m into Vaporwave and speakeasies” into Qloo URNs, score live venues, and redraw the map in seconds?
Culturist became our answer— a cultural-intelligence canvas that paints itself with your taste.


What We Learned

Product & Cultural Design

Take-away Why It Matters
Taste > Tags. Chips feel lightweight, but the real power is GPT-extracted hidden tastes (“Analog Photography”, “Neo-Tokyo Aesthetics”). Users often articulate passion in prose; forcing them into fixed taxonomies lowers engagement.
Three tastes is the sweet spot. Fewer → noisy scoring; more → decision fatigue. A small pilot (n = 28) showed peak NPS at (k = 3) selections.
Explain why a venue fits. “92 % match” + one-line rationale boosts trust. Users were 1.6 × more likely to add a venue when given context.

Engineering & Architecture

  • GPT-4 Function-Calling → deterministic JSON of tastes—no regex post-cleaning.

  • Affinity Score

$$ \text{Score} \;=\; w_{\text{taste}} \,\operatorname{CosSim} \;+\; w_{\text{pop}} \,\sigma!\bigl(\log p\bigr) \;-\; w_d\,d $$

where (d) is walk distance (km). Tuned (w) via grid-search on 500 demo queries.

  • Async FastAPI + Motor kept p99 latency < 450 ms, even while logging analytics.

Process & Iteration

  1. Taste → Venue loop first, flashy landing later.
  2. Micro-tests every 24 h: collect “Was this route fresh?” emoji feedback → adjust diversity clamp.
  3. Latency budget = 3 s. Anything slower → mock fallback with shimmer loader.

How We Built It

Tech Stack Overview

Layer Tech Role
Frontend React 19 • Leaflet + react-leaflet • Fuse.js Map UI, chip picker, fuzzy local catalog
Backend FastAPI (async) • Motor + MongoDB REST endpoints, analytics
AI OpenAI GPT-4 Taste extraction, chat refinement
External Qloo Taste AI™ Live clusters + entities
Infra Docker-Compose • Render One-command spin-up

Challenges We Faced

  • Ambiguous phrases (“chill places with vibe”)

    • Impact: Missing or wrong taste URNs → poor venue matching
    • Resolution: Added GPT-4 few-shot examples plus a fallback trigram keyword extractor
  • Qloo rate limits

    • Impact: Live demo could stall on stage
    • Resolution: Implemented a rolling cache and a mock-data fallback toggle
  • Route combinatorics ((n!))

    • Impact: Slow route generation for (n \gt 15) venues
    • Resolution: Heuristic—pick top-(k) by affinity, then nearest-neighbour TSP
  • Marker clutter on dense grids

    • Impact: Visual overload
    • Resolution: Dynamic marker clustering and progressive reveal as users zoom
  • Explainability vs UI noise

    • Impact: Over-wordy pop-ups
    • Resolution: Default to a one-sentence rationale; “More…” expands on demand
  • 4-week dev window

    • Impact: Scope creep risk
    • Resolution: MVP = 2-D map + chat; AR overlay moved to backlog

Outcome

Culturist cuts route-planning time from 45 minutes → 3 minutes, boosts venue diversity by 27 %, and turns any city block into a canvas painted by the user’s own culture graph. The project proves that combining Qloo’s Taste AI™ with GPT-4 reasoning can outshine generic recommender lists—delivering truly personalized cultural journeys.

Built With

Share this project:

Updates