← Back to Work

BidScribe

AI-powered RFP Automation

The Problem

Responding to RFPs is one of the most painful processes in B2B sales. Teams spend days copying from old proposals, adapting tone and context, checking for consistency — under tight deadlines, every time. The work is 80% repetitive but requires enough domain knowledge that simple templates fall apart. I watched teams burn hours on this and thought: this is exactly where AI should help.

The Approach

BidScribe lets teams build a knowledge base from their best previous responses. When a new RFP comes in, the system retrieves the most relevant context and generates tailored answers — not generic AI slop, but responses grounded in the company's actual expertise and voice.

The core insight: RFP responses aren't creative writing. They're informed synthesis. Getting the retrieval right matters more than which language model you use. I spent most of my time on chunking strategies, embedding quality, and relevance ranking — not prompt engineering.

Architecture

Frontend

Next.js + TypeScript

Backend

Supabase Edge Functions

Database

PostgreSQL + pgvector

AI

OpenAI GPT-4 + Embeddings

Search

Vector similarity (RAG)

Auth

Supabase Auth + RLS

Storage

Supabase Storage

Hosting

Vercel + Supabase Cloud

Styling

Tailwind CSS

Why Supabase over Firebase? PostgreSQL. I needed pgvector for embedding storage and similarity search, Row Level Security for multi-tenant data isolation, and proper relational modeling. Firebase's document model would have been a constant fight.

The RAG pipeline: Documents are chunked, embedded via OpenAI's embedding model, and stored in pgvector. On query, the system performs vector similarity search, re-ranks results, builds a context window, and generates a response with GPT-4. The entire flow runs in Supabase Edge Functions — no separate backend needed.

Multi-tenancy: Every row is scoped to an organization via RLS policies. Users never see each other's data, and I don't have to think about it in application code.

Lessons Learned

Chunking is everything. The quality of your RAG output depends more on how you split documents than on which LLM you call. I went through three different chunking strategies before landing on one that produced consistently good results.

Ship the ugly version first. The first version of BidScribe looked terrible and had half the features. But it worked, and real users gave me feedback that shaped everything after. Waiting for "ready" would have killed it.

Supabase is a cheat code for solo founders. Auth, database, storage, edge functions, realtime — one platform. I spent zero time on DevOps and all my time on the product.

Building with constraints makes you faster. Full-time job, two small kids, limited hours. Every decision had to be pragmatic. No over-engineering, no premature abstractions. It turns out that's just good engineering.

Where It Stands

BidScribe is live in production and actively used. Built entirely solo — from database schema to deployment pipeline — while working full-time as an engineering leader and being a present father.

Try BidScribe →