Trailmap — Discover Places. Find Your People. Show Up Together.

Inspiration

Friends want to hike, play badminton, or join a Saturday run, but discovering activities means switching between Meetup, Eventbrite, group chats, and maps.

Inspired by Meta’s “Bringing People Closer Together with AI” theme, we built Trailmap around one idea: recommendations should lead to real-world connections, not another social feed.

Trailmap makes the map the home screen, bringing together real activities, places, and people who opt in to being discoverable. No live GPS tracking, no invented events—just relevant opportunities to connect in person.

What It Does

Trailmap is a map-first discovery platform for recreational places, events, and like-minded people.

  • Live Activity Discovery: Ingests public Meetup, Eventbrite, race, and studio listings through Apify into Supabase.
  • ML-Powered Recommendations: Uses scikit-learn, TF-IDF, and cosine similarity to rank activities based on user interests.
  • Smart Filtering: Applies hard constraints for budget, distance, schedule, and skill level before ranking.
  • Natural-Language Search: Find activities using everyday language.
  • People Compatibility: Discover compatible teammates and community members who opt in.
  • Meetup Planning: Turn shared interests into plans to meet in person.
  • Community Features: Profiles, posts, replies, interest signals, and direct messaging.
  • Privacy and Safety: Approximate people pins, Supabase Row-Level Security (RLS), blocking, reporting, and rule-based safety triage.

Unlike using Meetup or Eventbrite alone, Trailmap combines multiple sources into one personalized map with activity recommendations, people compatibility, and tools to plan real-world meetups.

How We Built It

Tech Stack

  • Frontend: Next.js App Router, React, TypeScript, Tailwind CSS
  • Maps: Google Maps with a local fallback
  • Database and Authentication: Supabase, PostgreSQL, Supabase Auth, RLS
  • Data Ingestion: Apify Actors
  • ML Ranking: FastAPI, Python, scikit-learn
  • Testing: Vitest, Playwright

1. Real-World Data Pipeline

Apify Actors collect public activity listings and send them through a secured Next.js ingestion API into Supabase. Imported records retain provenance, and the map uses the same catalog as the recommendation system.

The browser does not invent catalog entries or fabricate people and events.

2. Explainable ML Recommendations

Our recommendation pipeline first applies hard eligibility filters, then ranks eligible activities using TF-IDF text features and cosine similarity.

For term (t) in document (d):

$$ \mathrm{TFIDF}(t,d)=\mathrm{TF}(t,d)\cdot\mathrm{IDF}(t) $$

For a preference query (q) and activity (a):

$$ \mathrm{sim}(q,a)= \frac{\mathbf{q}\cdot\mathbf{a}} {|\mathbf{q}||\mathbf{a}|} $$

This score represents text relevance, not a guarantee of enjoyment or attendance. User feedback and search intent provide additional soft-ranking signals. If the ML service is unavailable, the system uses an explicitly labeled rules-based fallback.

3. A Map-First Social Experience

The interface prioritizes a unified map and activity postcards instead of a dashboard or endless feed. Users can search, explore personalized recommendations, assess compatibility, plan meetups, and participate in community discussions.

4. Privacy-Aware Discovery

People pins use approximate locations rather than live GPS coordinates. Access controls protect user data, while block and report features support safer interactions. Reports receive deterministic triage hints without automatically banning users or claiming definitive judgments.

Challenges We Ran Into

  • Live ingestion and data integrity: Handling Apify Actor quirks, secrets, migrations, deduplication, and source attribution.
  • Ranking without labeled outcomes: Building explainable content-based recommendations instead of claiming a supervised model without ground-truth data.
  • Geographic accuracy: Resolving incorrect-country pins, duplicate markers, and conflicts between search relevance and distance.
  • Authentication and authorization: Ensuring profiles, posts, and direct messages respect authentication, RLS, and block relationships.
  • Responsible AI claims: Keeping moderation and evidence summaries grounded in actual rules and authorized data rather than overstating LLM capabilities.
  • UI consistency: Fixing styling inheritance and empty-state issues while integrating multiple features under hackathon deadlines.

Accomplishments We're Proud Of

  • Built a cohesive, map-first discovery experience rather than disconnected feature demos.
  • Integrated an Apify-to-Supabase ingestion pipeline with provenance.
  • Implemented a working scikit-learn TF-IDF and cosine-similarity recommender with a labeled rules fallback.
  • Connected discovery with profiles, compatibility, meetup planning, community features, and DMs.
  • Implemented approximate people locations, access controls, blocking, and reporting.
  • Made recommendations and summaries explainable without inventing events, reviews, or people.

What We Learned

  • Integrity beats AI theater: An honest fallback is more trustworthy than claiming AI is running when it isn't.
  • Privacy is a product feature: Approximate locations and clear data boundaries help build trust.
  • Data quality drives discovery: Normalization, deduplication, provenance, and useful empty states matter as much as ranking.
  • Filters and ranking have different jobs: Hard constraints determine eligibility; relevance scores order eligible results.
  • Design constraints create coherence: A map-first interface helped unify many features into one understandable experience.

What's Next for Trailmap?

  • Build an offline evaluation harness using labeled queries and Precision@K, Recall@K, and F1@K.
  • Measure recommendation latency and ranking quality.
  • Expand authorized public review ingestion for richer evidence-based activity summaries.
  • Introduce collaborative signals when sufficient user feedback becomes available.
  • Improve locality queries with PostGIS and strengthen production ingestion refreshes.

Our Vision

Trailmap is built around a simple goal: fewer feeds, better recommendations, and more people actually meeting outside.

We want discovering your next hike, badminton match, running group, or new friend to feel as natural as opening a map.

Built With

Share this project:

Updates

Submission history