Skip to content

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.

Tags

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

Team