Inspiration
My father runs R&M Plumbing and Heating, and like most small service businesses, getting Google reviews is a constant struggle. Customers are happy with the work but rarely leave reviews, not because they don't want to, but because they don't know what to say or can't be bothered to figure out the steps. I wanted to build something that removes all that friction: an AI agent that writes the review for the customer, so all they have to do is copy, paste, and submit. This started as a real business problem, and the Gemini Live Agent Challenge was the perfect excuse to build it.
What it does
Plumbly is an AI-powered review assistant for plumbing businesses. When a plumber finishes a job, they enter the customer info in a dashboard. The customer receives an SMS with a link and is greeted by a Gemini-powered chat agent that drafts a personalized Google review for them — all they do is copy, paste, and submit. The agent detects sentiment: if a customer is unhappy, it flags the plumber instead of pushing for a review. The plumber dashboard shows a live service area map with customer locations color-coded by review status, supply house markers with distance/drive time/gas cost estimates, real-time analytics via Redis Sorted Sets, and a full event pipeline visualization. Redis powers 8 distinct data structures as a first-class feature JSON sessions, Lists for chat history, Streams for the event pipeline, Pub/Sub for real-time notifications, Vector Sets for semantic FAQ matching, Sorted Sets for analytics, key expiry for rate limiting, and String caching for instant Gemini response reuse.
How we built it
- Backend: Python + FastAPI deployed on Google Cloud Run
- AI Agent: Gemini 2.0 Flash via the Google GenAI SDK, with a custom system prompt for review drafting, sentiment detection, and FAQ handling
- Redis: 8 data structures used intentionally — JSON (sessions), Lists (conversation history), Streams (event pipeline), Pub/Sub (real-time dashboard updates), Vector Sets (semantic FAQ matching via RedisVL), Sorted Sets (analytics), key expiry (rate limiting), and String caching (Gemini response reuse)
- Frontend: SvelteKit dashboard with Leaflet.js maps for service area visualization
- SMS: Twilio integration to send customers their review link
- Deployment: Docker container on Google Cloud Run
Challenges we ran into
Getting Redis Vector Search (RedisVL) to work reliably for FAQ semantic matching required careful tuning of embeddings and similarity thresholds
- Designing the Gemini system prompt to generate reviews that sound genuine and personalized rather than generic AI slop took many iterations
- Handling the sentiment detection edge case — routing unhappy customers away from the review flow without being obvious about it
Accomplishments that we're proud of
- The aggressive caching system: when two customers have the same job type, the second gets an instant cached response with zero Gemini API calls
- A real, usable tool — my father's business can actually use this starting tomorrow
- Redis isn't background infrastructure here. Every one of the 8 data structures solves a distinct, visible problem
- The service area map with supply house distance/drive time/gas cost calculations — a feature that came from real conversations with plumbers about their daily workflow ## What we learned
- Redis is far more than a cache — Streams, Pub/Sub, Vector Search, and Sorted Sets each unlock entirely different architectural patterns
- The biggest barrier to Google reviews isn't customer satisfaction, it's friction. Writing the review for the customer changes the conversion rate dramatically
- Gemini 2.0 Flash is fast enough to feel conversational in a chat UI, and the GenAI SDK makes integration straightforward
- Building for a real user (my dad) forces you to cut features that sound cool but don't matter, and add ones you'd never think of otherwise
What's next for R&M Plumbing and Heating
- Multi-business support — any local service business (HVAC, electricians, landscapers) could use this
- Automated follow-up sequences if a customer doesn't complete the review within 24 hours
- Integration with Google Business Profile API to track actual review submissions and close the loop
Built With
- built-with:-python
- docker
- fastapi
- google-cloud-run
- google-gemini-2.0-flash
- google-genai-sdk
- leaflet.js
- python
- redis
- redisvl
- svelte
- sveltekit
- twilio
- typescript

Log in or sign up for Devpost to join the conversation.