Skip to content
Back

BonoboAI

Full-Stack Developer – AI Integration

BonoboAI reads a customer's free-text inquiry, prices it against a product catalog, and drafts a branded proposal an operator can review and send. I led the AI integration and rebuilt the product end to end across two iterations.

React, TypeScript, Supabase, Serverless Functions, AI/LLM, Tailwind CSS

Overview

An operator pastes in a customer’s request; BonoboAI reads it, works out the pricing against a product catalog, and produces a branded proposal (line items, totals, and a short narrative) ready to review, edit, and send as a PDF.

My Role

Full-stack developer and AI-integration lead. I built the platform across two iterations (v0 → v1), owning the path from a raw customer message to a finished, editable proposal.

What I Built

  • A full v1 rebuild: login, onboarding, and an operator inbox for managing incoming requests
  • A rich-text proposal editor operators use to fine-tune the AI-generated quote before it goes out
  • The pipeline connecting the app to the AI that reads a customer’s message and drafts the priced proposal
  • A shared component library so the product stays consistent and is fast to extend

Outcome

The product collapses a manual, error-prone quoting task into a review step: instead of writing a proposal from scratch, an operator starts from a drafted, priced document and just refines it. The AI handles extraction and pricing; the human keeps final say before anything reaches a client.

Under the Hood

  • Supabase Edge Functions running structured-JSON LLM extraction that pulls 8+ fields (location, installation type, logistics) from free text and reasons per line item
  • Nearest-store matching: geocodes the customer address, computes driving distance to the closest location via OpenRouteService (ZTL-aware), and applies distance-based surcharges automatically
  • Multi-organization support: each org configures its own catalog, pricing rules, Q&A flows, and templates
  • A Plate-based rich-text editor, off-screen PDF rendering for client delivery, and a split-panel inbox driven by Zustand
  • SWR for data fetching with cache invalidation on status changes; Storybook-documented design system