← back to Butlr

README.md

39 lines

# Butlr

We wait on hold so you don't have to. Credit cards, hospitals, restaurants, anywhere a queue stands between you and a human.

## Phase 1 — onboarding MVP (this is what's built)

- Submission form capturing: business name, business phone, the goal of the call, account info (account number, last-4 SSN, billing ZIP, DOB, verbal-auth password), callback name/phone/email, best-time window, max hold time, max spend, recording consent, terms consent
- 13 category presets (credit-card-increase, credit-card-dispute, hospital-billing, hospital-appointment, restaurant-reservation, airline-change, cable-cancel, insurance-claim, utility-dispute, warranty-claim, mortgage-loan, subscription-cancel, other)
- Per-category default goal text pre-fills the textarea
- Call queue + per-call detail page with masked-sensitive fields + Reveal toggle
- Security: helmet (CSP/HSTS/X-Frame-Options/Referrer-Policy/Permissions-Policy), express-rate-limit (200/min global, 20/min on /api), x-powered-by disabled
- Standing rules: logo UL, hamburger UR, Gucci-style huge hero, dark/light toggle with localStorage persistence

## Phase 2 (not yet)

- Twilio Voice integration — actual dial, IVR navigation, hold-music detection, human-agent detection, bridge-to-user
- Optional AI voice agent for low-stakes calls (reservations, simple cancellations)
- SMS / email notifications when an agent picks up
- Encrypted-at-rest sensitive fields
- Stripe billing for the $9/$29 plans

## Run

```
PORT=9932 node server.js
# → http://localhost:9932
```

## Routes

- `/` — home + use-case grid
- `/new` — submission form (?category=foo to preset)
- `/new` POST — submit
- `/calls` — your queue
- `/calls/:id` — per-call detail (`?reveal=1` to see sensitive fields)
- `/api/category/:id` — JSON for the form's preset hints
- `/how-it-works`
- `/healthz`