SolviBnb
Property-maintenance operations platform for short-term rental managers, with an AI-in-the-loop WhatsApp bot
// At a glance
Problem
Short-term rental property managers had no centralized way to track maintenance issues from report through payment, and reporting issues meant leaving WhatsApp group chats entirely to file a ticket somewhere else.
Solution
Built a decoupled Go API and Next.js platform around a formal ticket state machine (New, Quote Sent, Approved, Paid, In Progress, Completed), with a WhatsApp bot (via EvolutionAPI + n8n) that drafts tickets from group chat messages for account-manager approval, AI-assisted quote generation against a price catalog, and Stripe-based billing.
// Key highlights
- →Formal ticket state machine spanning quoting, payment, execution, and dispute/extra-approval loops
- →AI-in-the-loop workflow: bot-drafted tickets with confidence scores and a human approval gate, not full automation
- →Service-account JWT auth model for external bot integrations, isolated from normal user auth
- →Test coverage across critical Go services plus Vitest/Playwright on the frontend
- →Containerized, deployment-ready stack (Docker Compose dev/prod, Nginx, Render config)
SolviBnb is a full-stack property-maintenance operations platform for short-term rental (Airbnb-style) property managers. It centralizes maintenance ticket intake, AI-assisted quoting, technician dispatch and live tracking, payments, and reporting — including a WhatsApp bot integration that lets property managers report issues directly in a group chat, with an AI layer that drafts tickets for account-manager approval.
Tech Stack
- Backend: Go (1.25),
go-chi/chirouter,pgx/v5(PostgreSQL), JWT auth (golang-jwt), Stripe (stripe-go) for payments, AWS SDK v2 (S3-compatible storage), GeoIP (oschwald/geoip2-golang),testifyfor tests - Frontend: Next.js 16 (App Router), React 19, TypeScript, TanStack Query, Zustand, Tailwind CSS 4, Radix UI / shadcn-based component library, React Hook Form + Zod validation,
next-intl(i18n), Leaflet/React-Leaflet (maps), Recharts (analytics), Framer Motion,@react-pdf/renderer(PDF generation), CodeMirror (in-app editing), Sentry (error monitoring) - Database: PostgreSQL with SQL migrations and generated query code (
db/generated,db/queries) - Testing: Go
testifyunit tests (services, handlers), Vitest + Testing Library, Playwright (E2E) - Infra/DevOps: Docker & Docker Compose (dev/prod), Nginx reverse proxy, Render (
render.yaml) deployment, shell-based deploy/seed scripts - Integrations: WhatsApp (via EvolutionAPI + n8n automation), Stripe billing, AI service layer for quote suggestion/drafting
Key Features
- End-to-end maintenance ticket lifecycle with a defined state machine (New → Quote Sent → Approved → Awaiting Payment → Paid → In Progress → Completed/Invoiced, with unresolved/extra-approval branches)
- WhatsApp "Group Scraper" bot that extracts maintenance requests from PM group chats and creates draft tickets pending AM approval
- Conversational concierge bot with human escalation workflow (AI-to-human handoff with context/session state)
- AI-assisted quote generation: suggests interventions from a standard price catalog, estimates costs for novel issues, and compares against market pricing
- Role-based dashboards for Property Managers, Account Managers, Technicians, and Admins
- Technician assignment, live intervention tracking, and geolocation services
- Apartment/asset, zone, and vehicle management with calendar-based scheduling for recurring interventions
- Billing, invoicing, receipts, subscriptions, and dispute handling via Stripe
- Notifications, ratings, equipment revision reminders, and admin KPI/reporting panels
- Multi-language support (i18n) with automated key/hardcoded-string checks
Architecture
The system is a decoupled Go API + Next.js frontend. The backend follows a layered handler → service → generated-query architecture (internal/handler, internal/service, internal/db/generated), keeping HTTP concerns separate from business logic and SQL. A dedicated intervention state machine (intervention_state_machine.go) enforces valid ticket-status transitions. Draft tickets created by the WhatsApp bot land in a "Pending AM" state and only become live interventions once approved, reusing the existing ticket-creation and webhook-notification pipeline. The frontend uses Next.js route groups to separate (auth), (dashboard), and (admin) experiences, with a proxy API layer, React Query for server state, and Zustand for client state. The bot integration runs externally on n8n + EvolutionAPI and talks to the platform over versioned REST endpoints secured with service-account JWTs, decoupling chat-automation concerns from the core platform.
My Role
- Designed a formal ticket state machine spanning quoting, payment, execution, and dispute/extra-approval loops
- Built an AI-in-the-loop workflow (bot-drafted tickets, confidence scores, human approval gate) rather than fully automated ticket creation, balancing automation with operational safety
- Implemented a service-account JWT auth model for external bot integrations, isolated from normal user auth
- Maintained test coverage across critical Go services (payments, assignment, geolocation, PDF generation, WhatsApp integration) plus Vitest/Playwright coverage on the frontend
- Delivered i18n tooling (automated hardcoded-string and missing-key checks) to keep a multi-language product consistent
- Containerized and deployment-ready (Docker Compose for dev/prod, Nginx, Render config)