/ | | | | _ \
| ( ___ _ __ ___ | | | |) | ___ ___ ___ _ __
_ \ / _ | '_ ` _ \ / _ \ | | _ < / _ / / _ | ' \
) | () | | | | | | _/ | | |) | __/ (| () | | | |
|/ _/|| || ||___|_| |__/ _|____/|| ||
Helping teams deliver polished proposals with AI-assisted storytelling and accurate quotes.
Smart Proposal brings every part of the proposal lifecycle into one place so creative, sales, and operations teams can move faster together. From the first intake conversation to the final PDF handoff, the product keeps context connected and elevates every client touchpoint.
Our north star is a confident, repeatable process: collect the right details once, let AI draft a compelling narrative, fine-tune quotes with clarity, and share results through a delightful, branded experience.
- Phase 01 - Unified Workspace. Establish a shared home for the web app, service layer, and reusable building blocks so every contributor works from the same playbook.
- Phase 02 - Trusted Accounts & Data. Launch a secure hub for team members, proposals, and quote records, backed by authentication and thoughtful data policies.
- Phase 03 - Core Services. Introduce reliable services that coordinate proposal and quote actions, ensuring every request is validated, auditable, and ready for future automation.
- Phase 04 - AI Proposal Generation. Teach the platform to co-write proposals by blending project inputs with curated prompts, producing structured sections that stay on brand.
- Phase 05 - Proposal Experience. Craft a focused dashboard and editing flow where teams can create, review, and refine proposals with live AI assistance.
- Phase 06 - Quote Calculator. Embed an interactive quote workspace that keeps pricing, taxes, and totals accurate while syncing effortlessly into each proposal.
- Phase 07 - PDF & Sharing. Offer polished, branded exports and controlled share links so clients can review proposals securely on any device.
- Phase 08 - Insights Dashboard. Surface key metrics around proposal activity, client engagement, and AI usage to guide teams toward smarter follow-ups.
- People-first storytelling that balances automation with human voice.
- One source of truth so every team member trusts the latest proposal and quote data.
- Transparent AI usage with clear prompts, guardrails, and fallback paths.
- Built to grow, with each phase setting up the next wave of features and partnerships.
The .plans directory outlines each phase in depth—perfect for onboarding, planning sprints, or scoping contributions. Start with Phase 01 to understand the foundation, then follow the phases in sequence to see how Smart Proposal evolves into a complete client-ready platform.
apps/web: Next.js frontend shell with a shared UI button to prove package wiring.apps/api: Express server stub exposing/healthand/api/proposalsfor future services.packages/ui: React component library seed (currently exports a styled button).packages/utils: Shared helpers, including Supabase clients, available to all workspaces.
- Install dependencies:
pnpm install - Run local development servers in parallel:
pnpm dev - Check quality gates:
- Lint:
pnpm lint - Type safety + builds:
pnpm build
- Lint:
Environment variables live in .env files (see .env.example). Default ports are 3000 for the web app and 4000 for the API.
- Location:
apps/api - Core endpoints:
GET /api/proposals— list proposals for the authenticated user (optionalstatusfilter)POST /api/proposals— create a proposalPUT /api/proposals/:proposalId— update proposal details or contentGET /api/proposals/:proposalId/quotes— retrieve quotes tied to a proposalPOST /api/proposals/:proposalId/quotes— create or update quote line items and totalsPOST /api/generate— trigger AI-assisted generation (mode: full | section)- Frontend requests use
NEXT_PUBLIC_API_URL(defaults tohttp://localhost:4000) to target the API gateway.
- Auth: provide a Supabase access token via
Authorization: Bearer <token>header. - Reference
apps/api/requests.httpfor ready-to-run examples (REST Client / Thunder Client compatible).
Supabase powers authentication, proposal storage, and quote management.
- Prerequisites
- Install the Supabase CLI:
pnpm dlx supabase@latest init(first run) andpnpm dlx supabase@latest --helpfor upgrades. - Ensure Docker is available if you plan to run the local stack.
- Install the Supabase CLI:
- Project configuration
- Update
supabase/config.tomlwith your hosted projectproject_idandorganization_id. - Copy
.env.exampleto.env, then supplyNEXT_PUBLIC_SUPABASE_URL,NEXT_PUBLIC_SUPABASE_ANON_KEY, and the secureSUPABASE_SERVICE_ROLE_KEY.
- Update
- Local workflow
- Start the local stack:
pnpm dlx supabase start - Apply migrations:
pnpm dlx supabase db reset(recreates the database and runs everything insupabase/migrations) - Seed data (optional):
pnpm dlx supabase db reset --seed supabase/seed.sql
- Start the local stack:
- Using the utilities
packages/utilsexportscreateSupabaseBrowserClientandcreateSupabaseServerClientfor consistent client creation.- Typed helpers such as
listProposalsForUserandupsertQuoteencapsulate common queries against the shared schema.
Keep the service role key on the server only. Frontend code should consume the browser client helpers which rely on the anon key.
- The backend uses OpenAI’s Responses API to draft proposal sections.
- Required environment variables (see
.env.example):OPENAI_API_KEYOPENAI_MODEL(optional, defaults togpt-4.1-mini)
POST /api/generatemode: "full"— supplygenerationinputs (projectName,projectSummary, etc.) to create all sectionsmode: "section"— supplyrewriteinputs (section,existingContent,projectSummary) to refresh a single section- Optional
settingsallow custommodelortemperature
- Generated output is written back to
proposals.contentfor later retrieval by the frontend.