Tenant Maintenance AI
Tenant Maintenance AI is a multimodal maintenance intake platform that lets tenants report issues through a web app or WhatsApp using text, images, audio, or video.
Core trick
Gemini classifies uploaded photos, audio and text from WhatsApp into a structured work order with urgency and category.
Description
Tenant Maintenance AI is a multimodal maintenance intake platform that lets tenants report issues through a web app or WhatsApp using text, images, audio, or video. The system stores the evidence, uses Gemini to understand the problem,
classifies urgency, summarizes the issue, and automatically turns it into a structured maintenance request that landlords and maintenance teams can act on immediately.
The value is speed and clarity. Instead of vague tenant messages, landlords get AI-triaged work orders with attached evidence, suggested issue category, priority, and a tenant-friendly summary. That reduces back-and-forth, improves response
time, and gives property teams a shared operational view from first report to resolution.
alivenkickin/tenant-maintenance-vercel★ 00 forksJavaScriptCreated Mar 21, 2026 · last push Mar 21, 2026
README excerpt
# Tenant Maintenance Vercel Vercel-compatible port of the tenant maintenance workflow. This project keeps Gemini credentials in environment variables and uses Vercel Blob when configured. On Vercel without Blob, it falls back to temporary `/tmp` storage for testing only. ## Environment ```bash cp .env.example .env.local ``` Required: ```bash GEMINI_API_KEY=your-gemini-key ``` Optional: ```bash GEMINI_BASE_URL=https://generativelanguage.googleapis.com GEMINI_MODEL=gemini-2.5-flash TWILIO_ACCOUNT_SID=AC... TWILIO_AUTH_TOKEN=... TWILIO_MEDIA_HTTP_AUTH_ENABLED=false BLOB_READ_WRITE_TOKEN=... USE_BLOB_STORAGE=false ``` ## Run ```bash npm install npm run dev ``` Open `http://localhost:3000`. Local development uses filesystem storage by default. On Vercel, the app uses Blob if `BLOB_READ_WRITE_TOKEN` is present; otherwise it falls back to temporary `/tmp` storage, which is not persistent across deployments or cold starts. ## Routes - `POST /api/intake/messages` - `GET /api/requests` - `GET /api/requests/:id` - `PATCH /api/requests/:id/status` - `POST /api/webhooks/twilio/whatsapp` ## Deploy 1. Push this repo to GitHub. 2. Import the repo into Vercel. 3. Set `GEMINI_API_KEY` in Vercel project environment variables. 4. Optionally set `GEMINI_BASE_URL`, `GEMINI_MODEL`, `TWILIO_ACCOUNT_SID`, `TWILIO_AUTH_TOKEN`, and `TWILIO_MEDIA_HTTP_AUTH_ENABLED`. 5. If you want persistent file storage on Vercel, connect a Blob store so Vercel provides `BLOB_READ_WRITE_TOKEN`. 6. Deploy