Skip to content

Live App Link

Live App Link: https://fix-flow-seven.vercel.app FixFlow is an AI-powered property maintenance agent that turns a single photo into a fully dispatched repair.

Core trick

Gemini vision classifies a repair photo, Google Maps tools find nearby licensed trades, and an ElevenLabs-voiced Twilio call collects quotes.

Tags

Description

Live App Link: https://fix-flow-seven.vercel.app FixFlow is an AI-powered property maintenance agent that turns a single photo into a fully dispatched repair. Diagnosis, contractor discovery, vetting, quoting, and approval are all automated. Here's the problem: 10 million independent landlords in the US coordinate maintenance through text messages, phone tag, and Google searches. Reactive repairs cost 3-5x more than preventive ones, and slow response drives tenant turnover that costs $4,000 per unit on average. Here's how FixFlow solves it: A tenant photographs a broken sink. Within seconds, Gemini Flash's vision capability diagnoses the issue (plumbing emergency, severity 5/5), flags a safety warning, and recommends immediate action. The agent then uses Gemini's Google Maps tools to find real licensed plumbers within 3 miles of the property. These are real businesses with real ratings, hours, and phone numbers pulled live from Google Maps. Each contractor is then vetted using Gemini's Search grounding: the AI summarizes real reviews, flags licensing concerns and red flags, estimates repair costs ($163 to $2,040), and links every finding to its source. The tenant selects a contractor, and FixFlow contacts them automatically via an AI-powered phone call using ElevenLabs voice generation delivered through Twilio. The agent explains the issue, provides the details, and asks the contractor for their quote. The contractor states their price over the phone, and the AI extracts it in real time. The quote then appears live on the tenant's dashboard in the Contractor Quote section, no manual entry needed. If the contractor doesn't answer, a detailed email is sent as a fallback with the full issue details, photo evidence, and cost estimate. The entire background pipeline of finding, vetting, and notifying contractors is orchestrated through Vercel Workflows, making the process durable and retryable. An AI voice briefing also keeps the tenant informed at every step of the process. Meanwhile, the landlord has a real-time Command Center showing all tickets across all properties: 20 active requests, 4 needing approval, $42K monthly spend, average resolution under 1 hour, with one-click approval for dispatches. One photo. Full dispatch.
goffycoder/FixFlow★ 00 forksTypeScriptCreated Mar 21, 2026 · last push Mar 21, 2026

README excerpt

This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).

## Getting Started

First, run the development server:

```bash
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
```

Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.

### Environment variables

Copy [`.env.example`](.env.example) to `.env.local` and fill in values. Notable keys:

| Variable | Purpose |
|----------|---------|
| `GOOGLE_GENERATIVE_AI_API_KEY` | Gemini (diagnosis, contractors, vetting, work order, etc.) |
| `ELEVENLABS_API_KEY` | Optional; generate spoken quote-request scripts. |
| `TWILIO_ACCOUNT_SID` / `TWILIO_AUTH_TOKEN` / `TWILIO_FROM_NUMBER` | Optional; place outbound quote-request call (default target is `+15109609841`). |
| `RESEND_API_KEY` / `RESEND_FROM_EMAIL` | Optional; send quote-request email (default recipient is `ethan.chkrn@gmail.com`). |
| `LANDLORD_OVERRIDE_PHONE` | Override outbound quote call target (defaults to `+15109609841`). |
| `QUOTE_NOTIFY_EMAIL` | Override quote email recipient (defaults to `ethan.chkrn@gmail.com`). |
| `APP_URL` | **Twilio webhooks:** must be a **public `https://` URL** (e.g. Vercel deployment or `ngrok http 3000`) for speech capture (`/api/twilio/voice` + `/api/twilio/gather`). If unset or only `http://localhost`, calls still work using **inline TwiML** (you hear the quote request, but Twilio cannot post speech back without

Team