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/chi router, pgx/v5 (PostgreSQL), JWT auth (golang-jwt), Stripe (stripe-go) for payments, AWS SDK v2 (S3-compatible storage), GeoIP (oschwald/geoip2-golang), testify for 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 testify unit 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)

Screenshots

Have a project in mind?

Let's build something great together.

Tell me what you need and I'll get back to you with a clear, honest estimate.

HassanOSSYS-00
SECURE CHANNEL · ACTIVE
INIT://