About the Project: Fanly
Inspiration
With over 1 million international visitors expected to flood the NY/NJ metropolitan area during the 2026 FIFA World Cup™, lodging demand will reach an all-time high. Traveling fans face severe price-gouging by traditional hotels, while popular platforms like Airbnb are heavily restricted or effectively banned under local short-term housing regulations (such as New York City's Local Law 18).
As an NY resident, I was inspired to build a community-driven, peer-to-peer (P2P) home exchange platform that helps fans find affordable, verified lodging with local hosts. By combining conversational AI with legally-compliant lease contracts, my product allows regular homeowners to safely host international guests, turning local rooms into tournament stays while navigating complex rental laws.
What it does
Fanly connects traveling soccer fans with local hosts in NY/NJ through a conversational AI matcher. Here is what it accomplishes:
- Conversational Search & Match: A Gemini-powered chat assistant allows fans to query listings in their native languages, matching their preferences (budget, languages, amenities) to local rooms.
- Match Context Integration: Searching for a stay automatically overlays the World Cup match schedule for MetLife Stadium, ensuring accommodation dates align with match tickets.
- Frictionless Lease Contracts: When a host accepts a booking request, the platform automatically drafts a compliant short-term lease agreement that protects both parties and complies with local regulations.
- User Authentication Gates: Provides role-based workflows for Fans (requesting stays, viewing dashboard logs, signing leases) and verified Hosts (listing rooms, verifying security credentials, and approving guest requests).
How I built it
Fanly is designed as a unidirectional, stateless architecture deployed entirely on Google Cloud Platform:
- Client Interface (Next.js 14): A React-based web interface built with Tailwind CSS for clean, responsive aesthetics. It manages authentication state in local storage and resets active sessions when logging in or out.
- API Orchestration (FastAPI): A Python microservice that acts as the gateway. It enforces routing, validates schemas using Pydantic, and coordinates communication between data stores and AI engines.
- Cognitive Engine (Vertex AI / Gemini 3 & Agent Builder SDK): Leverages Google Cloud's Agent Builder client libraries and Gemini models. I used Model Context Protocol (MCP) to map our database queries directly as functions (tools) that the LLM can invoke to perform live lookups.
- Search Database (Elastic Serverless): A fully managed Elasticsearch cluster hosted on Elastic Cloud on GCP. I use Elasticsearch index matching (
fanly_listings,fanly_bookings,fanly_users) to handle multi-field text searching and retrieve listings instantly.
Challenges I ran into
- Webpack Cache Corruption: In Next.js dev mode, Webpack caching occasionally caused
MODULE_NOT_FOUNDerrors when hot-reloading. I had to implement a complete cache-clearing sequence to restore the build pipeline. - Authentication State Boundary Resets: Syncing local component states with Next.js router transitions during logout events initially left in-memory chat histories and query lists uncleared. I resolved this by bypassing the client-side router intercept and forcing a hard window reload to reset the DOM state.
- Semantic Query Intent Classification: Differentiating general conversational pleasantries (e.g. "hi, how does this work?") from high-intent lodging search terms was difficult. I built an regex-assisted text classifier to prevent the AI from outputting room recommendations on simple greetings.
- Stateless API Synchronization: Ensuring listing detail pages could consistently resolve property IDs after container recycles required refactoring backend routes to query the persistent Elasticsearch cluster first, falling back to disk-bound files only if the cluster was unreachable.
Accomplishments that I'm proud of
- Automated Contract Generation: Generating customized legal lease templates dynamically when a host approves a request, helping hosts and guests legally bypass Airbnb limitations.
- Dynamic Tournament Overlays: Showing real-time match match-ups (e.g., Brazil vs Argentina) dynamically based on the exact search dates selected by the guest.
- Seamless Multi-lingual Search: Allowing users to search in Arabic, Spanish, French, Portuguese, or English and getting accurate keyword matches from Elasticsearch.
What I learned
- Model Context Protocol (MCP): Learned how to bridge structural database indexes as dynamic tool call APIs for LLMs, allowing the model to perform complex searches autonomously.
- Serverless Elastic Integration: Learned how to configure and query serverless Elasticsearch clusters on GCP to perform multi-match text queries on indexed documents.
- Next.js Hydration: Gained a deeper understanding of handling browser-specific storage APIs (like
sessionStorageandlocalStorage) safely without causing hydration mismatches.
What's next for Fanly
- Geo-Spatial Radius Queries: Leverage Elasticsearch's native
geo_pointfields to allow users to filter listings within a precise physical radius (e.g., within 3 miles of MetLife Stadium). - Identity Verification integration: Integrate OCR passport checks and Google Identity services to verify guests and hosts for security.
- Split Payments: Introduce automated escrow-based payment processing to hold booking values until checkout.
Built With
- agent-builder
- elastic-mcp
- elasticsearch
- es|ql
- fastapi
- gcp
- gemini-3
- kibana
- next.js
- python
- typescript
Log in or sign up for Devpost to join the conversation.