← Back to Site Map

🚀 Business Launch Plan Builder

Standard Operating Procedure — AI-powered conversational plan builder with interactive 30-day PM dashboard
Version 1.3 • 17 Apr 2026 • Owner: Kevin Brittain

⚡ Quick Reference

Access URL
os/business-plan-builder/index.html
AI Providers
Claude (Anthropic), ChatGPT (OpenAI), Custom Endpoint
Proxy Endpoint
/api/chat (required for API calls)
localStorage Key
od-bplan-v4
Plan Sections
10 sections across 3 groups (Foundation, Commercial, Execution)
30-Day Plan Tasks
~30–40 tasks, 4 weeks, assigned to real team members
Export
Browser print dialog (Export as PDF button)
Reset URL
?reset query string clears all data

🎯 1. Overview & Purpose

💡 What It Does

The Business Launch Plan Builder is an AI-powered conversational tool that guides you through building a complete business plan and a detailed 30-day launch action plan. Instead of filling in a blank template, you have a natural chat conversation with an AI coach that asks focused questions, extracts your answers, and automatically assembles a polished business plan with rich visual output.

When the plan is complete, it renders as a full-screen document with KPI summary cards, tabbed section navigation, collapsible accordions, financial tables, and — if the 30-day dashboard is generated — a live project management view with task status tracking, workload balance, and progress KPIs.

💬
Think of it like this: You are talking to a top-tier business consultant. You answer their questions, they take notes, and at the end they hand you a finished plan. The AI does all the structuring and writing.
🔄 End-to-End Flow
⚙️ Setup Provider, key, name
💬 Chat 10 phases of questions
📋 Sections Captured Auto-saved as JSON
📊 View Plan Rich visual output
Generate 30-Day Plan AI-built PM dashboard
📤 Export PDF Print or save

🔑 2. How to Access

1

Opening the App & Setup Screen

First-time & every new plan

Prerequisites

The app sends API calls to an AI provider through a proxy endpoint (/api/chat). The proxy must be running before you start chatting. Without it the app will display a "Could not connect to AI" error on the setup screen.

Open the Application

  1. Navigate to os/business-plan-builder/index.html from the main platform (the page is loaded in an iframe from the Leadership section in the sidebar, or open directly in a browser tab).
  2. The Setup Screen loads. You will see fields for provider, API key, model, and your name.
  3. Select your AI Provider: Claude (Anthropic), ChatGPT (OpenAI), or Custom Endpoint. The model dropdown updates automatically based on your choice.
  4. Enter your API Key (Anthropic keys start with sk-ant-; OpenAI keys start with sk-). If using a Custom Endpoint, enter the endpoint URL instead; no key field is shown.
  5. Select a Model from the dropdown. Claude Sonnet is the default and recommended for balance of speed and quality. Claude Opus produces richer plans but costs more.
  6. Enter your Name (optional but recommended — the AI greets you by name and personalises the conversation).
  7. Click Start Building Your Plan. The app validates that a key or custom endpoint is present, then transitions to the chat view and immediately sends the first message to the AI.
💾
Session restore: If you previously completed part of a plan, the app automatically reloads your conversation from localStorage key od-bplan-v4 and skips the setup screen, returning you exactly where you left off.
⚠️
API key security: Your key is stored in browser localStorage only. It is never written to disk by the platform and is only transmitted from your browser to the proxy endpoint, which forwards it to the AI provider.

📋 3. Plan Builder Structure

📚 The 10 Sections

The AI guides you through exactly 10 sections in order. Each section corresponds to one phase of the conversation. Sections are grouped into three colour-coded tabs in the plan view.

#Section IDDisplay TitleWhat the AI ExtractsGroup
1 overview Business Idea Business name, description, problem, solution, industry, stage Foundation
2 market Target Customer Ideal customer profile, pain points (array), current alternative, market size, geographic focus Foundation
3 value Your Edge Value proposition, unique selling points (array), competitive advantage Foundation
4 products Products & Pricing Products array (name, description, price each), revenue model, pricing strategy Commercial
5 revenue Revenue Model Year 1 revenue target, Year 3 target, customers per month, avg transaction value, key assumptions Commercial
6 costs Costs & Investment Startup costs array (item + cost), monthly costs array (item + cost), funding source, break-even estimate Commercial
7 team Team & Resources Founder role, team members array (name, role, specialization: marketing/systems/product), key hires, tools & software, skills gaps Execution
8 marketing Marketing & Sales Channels array, sales process (text), lead generation strategy, marketing budget Execution
9 launch 30-Day Launch Plan Launch date, week 1–4 summaries, pre-launch checklist, and (when generated) a full weeks array with day-level tasks Execution
10 metrics Success Metrics 30-day milestone, 90-day milestone, 12-month milestone, KPIs array, biggest risk, risk mitigation Execution
🗂️ Sidebar Progress Indicators

The left sidebar shows all 10 sections with a status dot. The dot style changes as you progress.

Dot StateCSS ClassMeaning
Number only, dimmedsection-item (no modifier)Not yet started — waiting in queue
Number, accent-colouredsection-item activeCurrently being discussed with the AI
Green tick, clickablesection-item doneCaptured and saved — click to open Review Panel
Solid green backgroundsection-item reviewingCurrently open in the Review Panel

🛠️ 4. Step-by-Step Workflow

2

Completing the Conversation

Core workflow

The Chat Interface

After setup, you enter the main app layout with two areas side by side:

  • Sidebar (left, 280px): Shows the 10 sections with progress dots. The footer has View Your Plan and Start Over buttons.
  • Chat area (right): A header showing the current section name and phase count, a scrollable message history, and a text input at the bottom.

Sending Messages

  1. Type your answer in the textarea at the bottom. Press Enter to send (Shift+Enter adds a new line without sending). Or click the send arrow button.
  2. The textarea auto-resizes as you type (up to 150px tall). While the AI is responding, both the textarea and send button are disabled.
  3. A three-dot typing indicator appears while the AI is generating a response.
  4. The AI's reply appears as a chat bubble labelled "AI Coach". Your messages appear on the right labelled with your name (or "You" if no name was entered).

How Sections Are Captured

  1. When the AI has gathered enough information for a phase, it writes a summary message. Hidden inside that message is a structured data block in the format [PLANDATA:section_id]{...JSON...}[/PLANDATA].
  2. The app automatically strips the data block from the displayed message (so you never see it), parses the JSON, and stores it in planData.
  3. A green "[Section Title] captured in your plan" banner appears in the chat immediately after the AI's summary message.
  4. The sidebar dot for that section turns green. The chat header title and phase counter advance to the next section.
  5. The View Your Plan button in the sidebar footer becomes enabled as soon as any section is completed.
💡
Quality tip: The AI asks one question at a time. Give detailed, specific answers — numbers, names, actual figures. Vague answers produce vague plan content. The AI will ask follow-up questions if your answer is too brief before moving on.

Context Window Management

If the conversation grows beyond 50 messages, the app automatically summarises the completed sections and trims the message history to the last 48 messages. This prevents hitting API context limits on long sessions. Your plan data is never lost — only the conversation history is compressed.

3

Viewing the Plan

Plan overlay

Opening the Plan View

  1. Click View Your Plan in the sidebar footer. This button is enabled as soon as at least one section is complete.
  2. A full-screen overlay slides over the entire app showing your business plan.
  3. The overlay has a sticky top bar with two buttons: Back to Chat and Export as PDF.

Plan View Layout

  • Plan header: Business name (styled large), "Business Plan & 30-Day Launch Action Plan" subtitle, and a generated-on date.
  • KPI Row (4 cards): Revenue Target Y1, Break-Even, Monthly Customers, Launch Date — pulled directly from the revenue, costs, and launch section data.
  • Sticky tab bar: One tab per section, colour-coded by group — Foundation tabs have a green accent border, Commercial tabs a success-green border, Execution tabs an amber border. Clicking a tab shows that section and hides all others.
  • Section content: Each section renders using a tailored layout (see the Plan Section Renders table below).
  • Section action buttons: Every section header has two buttons — View Discussion and Edit Section. These toggle panels within the plan view.

Per-Section Render Styles

SectionKey Visual Elements
Business IdeaAccent card with business name, elevator pitch highlight, industry/stage KPI mini-cards, problem/solution side-by-side highlights
Target CustomerCollapsible accordion steps: Ideal Customer (open by default), Pain Points (amber bullet list), Market Size & Geography (two-column highlights)
Your EdgeValue proposition highlight box, USPs in a card grid (2 or 3 columns), Competitive Advantage accordion step
Products & PricingProducts table inside collapsible step (Name / Description / Price columns), Revenue Model and Pricing Strategy side-by-side highlights
Revenue Model4-cell metric grid: Y1 revenue, Y3 revenue, customers/month, avg transaction; Key Assumptions highlight if present
Costs & InvestmentStartup costs table, Monthly costs table, Funding Source and Break-Even side-by-side highlights
Team & ResourcesFounder Role accordion (open), Key Hires as coloured tags, Tools & Software as green tags, Skills Gaps as a warning decision callout box
Marketing & SalesOne accordion step per marketing channel, Sales Process as a numbered funnel diagram, Lead Gen and Marketing Budget cards
30-Day Launch PlanEither a thin summary view (week summaries + Generate button) or a full interactive PM dashboard (see Section 5)
Success Metrics3-column milestone cards (30d / 90d / 365d), KPIs as accent-coloured tags, Biggest Risk as a warning decision callout
4

Reviewing & Editing a Section

Refinement

Review Panel (from Sidebar)

Clicking a completed section (green tick) in the sidebar opens a Review Panel in place of the chat messages:

  1. The chat message area is hidden. The Review Panel slides in showing the section icon, title, and a Back to Chat button.
  2. Current Data block: every JSON field captured for that section is shown in labelled data cards (arrays shown as bullet lists; objects shown as “value1 — value2” lines).
  3. Discussion block: the AI and user messages for that specific section are replayed in a scrollable panel, colour-coded by role (green = you, accent = AI Coach).
  4. Make Changes block: a textarea and Update button for sending an edit instruction (see below).

Editing from Inside the Plan View

Inside the full plan overlay, each section also has Edit Section and View Discussion action buttons directly above the section content. These work identically to the Review Panel edit but stay within the plan view without navigating away.

How a Section Edit Works

  1. Type your edit instruction — e.g. "Change the launch date to 1st June" or "Add a new product called Premium Coaching at £150".
  2. Press Enter or click Update. The textarea and button disable and a "Updating section…" message appears.
  3. The app builds a focused prompt containing the current section JSON and your instruction, then calls the AI with a fresh single-message conversation (not part of the main chat history).
  4. The AI returns a brief confirmation and an updated [PLANDATA:section_id]{...}[/PLANDATA] block. The app extracts the new JSON, updates planData, saves to localStorage, and reloads the view.
  5. The edit is also appended to that section’s discussion log as “✏️ Edit: [your instruction]” followed by the AI’s confirmation.
Non-destructive: Edits always preserve all fields the user did not ask to change. The AI receives the complete current JSON and is instructed to return all fields, not just the modified ones.
⚠️
If the AI does not return a valid [PLANDATA:...] block, the edit fails and displays "AI did not return updated data. Try rephrasing your request." Rephrase and try again.

🤖 5. AI Generation Features

💬 Main Conversation (Plan Building)

The primary AI conversation uses a detailed system prompt built by the buildSystemPrompt(userName) function. Key behaviours the AI is instructed to follow:

  • Ask one question at a time. Never dump multiple questions in a single message.
  • Keep responses to 2–4 sentences when asking questions.
  • Reference UK business context where relevant (Companies House, HMRC, etc.).
  • After gathering enough information for each phase, write an encouraging summary and embed the structured data block [PLANDATA:section_id]{...JSON...}[/PLANDATA] at the very end of that message.
  • For the launch section, ask for actual team member names and their specialization (marketing / systems / product) so tasks in the 30-day plan can be assigned to real people.
  • Throughout phases 8 and 9, suggest specific AI tools and prompts the user can use (ChatGPT, Claude, Canva AI, etc.) to accelerate their launch.
  • After all 10 phases are complete, congratulate the user and include [PLAN_COMPLETE] at the very end of the message. The app then shows a star banner and enables the plan view.
ℹ️
The app also supports a fallback format <plan_data section="id">...JSON...</plan_data> via the extractPlanDataFromText() function, in case the AI uses XML-style tags instead of the bracket format.
🚀 Generate Detailed 30-Day Plan (AI)

After the main conversation completes the launch section with week-level summaries, the 30-Day Launch Plan tab shows a Generate detailed 30-day plan button. This triggers a separate AI call via generateLaunchPlan().

What the AI receives

  • The entire planData object as JSON context.
  • A formatted list of team members with their 0-based index numbers and specializations.
  • The target launch date (or today + 30 days if no date was set).

What the AI must produce

  • A single [PLANDATA:launch]{...}[/PLANDATA] block with no prose before or after.
  • Exactly 4 weeks, each with 4–5 working days, each day with 2–3 tasks.
  • Total approximately 30–40 tasks, every one tailored specifically to this business (no generic filler).
  • Each task has: id (task-1, task-2…), title, detail (how to do it / what success looks like), category (marketing | systems | product), and suggestedOwner (0-based index matching the team member whose specialization matches the task category).
  • Week themes: w1=accent, w2=blue, w3=amber, w4=green.

On success, the new launch data is merged with the existing plan data (preserving any fields the AI omitted), saved to localStorage, and the plan view re-renders with the full interactive PM dashboard. The app then auto-scrolls to the 30-Day Launch tab.

⚠️
The Regenerate plan button (shown at the bottom of the 30-Day Dashboard after generation) calls the same function and overwrites the existing task data. Any status or owner changes made since the last generation will be lost. Export to PDF before regenerating if you want to keep a record.
✏️ Section Edit AI Call

Every time you submit an edit from the Review Panel or the plan view Edit Section panel, the app makes a separate, isolated AI call. It builds a system prompt with the current section JSON and instructs the AI to apply only the requested changes, return all fields, and end with a [PLANDATA:section_id]{...}[/PLANDATA] block. This call uses the same provider, model, and key as the main session.

📱 Supported AI Providers
ProviderSetup field shownDefault model optionsProxy route
Claude (Anthropic) API Key (sk-ant-...) Claude Sonnet, Claude Opus, Claude Haiku /api/chat with provider: "anthropic"
ChatGPT (OpenAI) API Key (sk-...) GPT-4o, GPT-4o Mini /api/chat with provider: "openai"
Custom Endpoint Endpoint URL (no API key field) Default (single option) /api/chat with provider: "custom" and endpoint field
ℹ️
All three providers call the same proxy route (/api/chat or the value of PROXY_ENDPOINT). The proxy differentiates by the provider field in the request body. The Custom Endpoint option is designed for self-hosted proxies or OpenAI-compatible APIs.

💾 6. Saving & Exporting

🗄️ Auto-Save to localStorage

The app saves all state after every AI response and after every section edit. The saveState() function writes a single JSON object to localStorage under the key od-bplan-v4. The saved object contains:

FieldWhat it stores
configProvider, model, API key, username, endpoint URL
messagesFull conversation history (all roles, including raw data blocks before they are stripped)
planDataAll captured section JSON objects, keyed by section ID
completedSectionsArray of section IDs that have been successfully captured
sectionMessagesPer-section conversation log (role + cleaned text, no data blocks)
lastSectionMsgIndexIndex pointer used to slice messages for the next section’s discussion log
⚠️
Browser storage limits: Browsers typically allow 5–10 MB per origin. A full business plan with a detailed 30-day task structure is large; if saveState() silently fails (try/catch swallows errors), data will not persist. Export to PDF when the plan is complete.
💡
Task tracking is stored separately. The 30-day PM dashboard saves task statuses under key bpb-launch-status-{plan-slug} and owner overrides under bpb-launch-owners-{plan-slug}. The plan slug is derived from the business name. These keys are independent of od-bplan-v4.
📤 Export as PDF
  1. Open the plan view (click View Your Plan).
  2. Click Export as PDF in the sticky top bar. This calls window.print().
  3. Your browser’s print dialog opens. Select Save as PDF as the destination, or choose a printer.
  4. For best results, set margins to “Minimum” or “None” and enable “Background graphics” / “Print backgrounds” so the plan’s colour blocks print correctly.
🖨️
Print CSS: The plan view includes dedicated print styles that hide the toolbar, tab bar, discussion panels, edit panels, the generate button, and the filter/workload bars from the PM dashboard. Accordions are forced open so all content is visible in print. Section page breaks are set to avoid for tidy pagination.
🔄 Resetting & Starting Over

The Start Over button in the sidebar footer opens a confirmation modal. Clicking Delete Everything calls doReset():

  • Removes the od-bplan-v4 key from localStorage.
  • Clears all in-memory state (messages, planData, completedSections, sectionMessages).
  • Hides the app view and shows the setup screen for a fresh start.

Alternatively, add ?reset to the URL. The app detects this on load, removes od-bplan-v4, and clears the URL parameter before showing the setup screen.

🚨
Reset is permanent. There is no undo. Export your plan to PDF before resetting if you want a copy.

🎛️ 7. Action Buttons Reference

📋 All Buttons
Button LabelWhere It AppearsWhat It Does
Start Building Your Plan Setup screen Validates the API key / endpoint, saves config, seeds the first user message, calls showApp() and immediately triggers sendToAI() so the AI sends its opening welcome message.
Send (arrow icon) Chat input bar Calls handleSend() — appends the user’s text to the message array, shows it in the chat, and triggers an AI call. Also triggered by pressing Enter.
View Your Plan Sidebar footer Calls showPlan(). Disabled until at least one section is complete. Renders the full-screen plan overlay.
Start Over Sidebar footer Calls showResetModal(). Opens the confirmation modal. Does not delete data yet.
Delete Everything Reset confirmation modal Calls doReset(). Clears localStorage and resets all state to initial values.
Cancel Reset confirmation modal Calls hideResetModal(). Closes the modal with no changes.
Back to Chat Plan view toolbar; Review Panel header Plan toolbar: calls closePlan(), removes active class from overlay. Review Panel: calls closeSectionReview(), restores the chat message view.
Export as PDF Plan view toolbar Calls window.print(). Opens the browser print dialog with print CSS applied.
Section tab (e.g. “📋 Business Idea”) Plan view sticky tab bar Calls showPlanTab(id, tabEl). Removes active from all section divs and tabs, then adds it to the clicked tab and the corresponding #sec-{id} div.
View Discussion Section action bar (plan view) Calls toggleDiscussion(sectionId, btnEl). Closes all open discussion/edit panels, then toggles the #disc-{id} panel. Shows the AI/user conversation for that section.
Edit Section Section action bar (plan view) Calls toggleEditPanel(sectionId, btnEl). Closes all open panels, then opens the #edit-{id} panel and focuses the textarea.
Update Edit panel (plan view); Review Panel Plan view: calls sendSectionEdit(sectionId). Review Panel: calls sendRpSectionEdit(sectionId). Both make an isolated AI API call to apply the edit instruction.
Accordion step header Collapsible step blocks in plan sections Calls toggleStep(el). Toggles the open class on the step wrapper, showing or hiding the step body content.
✨ Generate detailed 30-day plan 30-Day Launch Plan section (before generation) Calls generateLaunchPlan(). Makes an AI call with the full plan context and team data to produce a structured weeks array. Replaces the thin summary with the full PM dashboard on success.
↻ Regenerate plan 30-Day PM Dashboard footer Same as Generate — calls generateLaunchPlan(). Overwrites existing task data.
Task status button (e.g. “To Do”) 30-Day PM Dashboard, each task row Calls lpCycleStatus(taskId). Cycles the task through To Do → In Progress → Done → To Do. Saves the new status (with owner name and timestamp) to localStorage key bpb-launch-status-{plan-slug} and updates the KPI row and workload bar.
Owner dropdown 30-Day PM Dashboard, each task row Calls lpSwitchOwner(sel, taskId). Updates the owner tag colour and name for the task, saves to bpb-launch-owners-{plan-slug}, refreshes the workload bar, and calls lpCheckBalance() to show a toast warning if the task category does not match the owner’s specialization or if another team member has idle days.
Filter bar buttons (All Tasks, [name], In Progress) 30-Day PM Dashboard Calls lpFilterBy(filter). Dims all task rows that do not match the selected filter. Filter options: all, m0/m1/m2… (by team member index), inprogress.
Week nav buttons (e.g. “Week 1 — Foundation”) 30-Day PM Dashboard Calls lpScrollToWeek(wid). Smooth-scrolls to the corresponding week section using scrollIntoView.

🔧 8. Troubleshooting

🛠️ Common Issues & Fixes
❌ "Could not connect to AI: Failed to fetch" on the setup screen
Cause: The proxy server is not running, or the /api/chat route is unavailable.
Fix: Start the proxy server for your deployment environment. In development, this is typically python3 serve.py in the os/business-plan-builder/ directory. Confirm the server is listening before trying again. If using GitHub Pages (no proxy), you need a custom endpoint or a deployed API proxy.
❌ "Server error 401" when chatting
Cause: The API key is invalid, expired, or incorrectly entered.
Fix: Click Start Over (or add ?reset to the URL) to return to the setup screen and re-enter your API key. Verify the key is active in your provider’s console. Anthropic keys start with sk-ant-.
❌ AI is not capturing sections / no green banner appears
Cause: The AI responded normally but did not include a [PLANDATA:section_id]{...}[/PLANDATA] block. This occasionally happens if the AI drifts from its instructions.
Fix: Keep answering questions. The AI will eventually write a summary message with the data block. If it keeps asking new questions without capturing, prompt it directly: "Please summarise what we’ve discussed and save this section."
❌ Edit fails with "AI did not return updated data"
Cause: The AI returned a response without the required [PLANDATA:section_id] block.
Fix: Rephrase your edit request to be very specific. For example, instead of "Update the products", try "Change the price of [Product Name] to £99." Being more precise helps the AI produce a correctly structured response.
❌ Generate 30-day plan fails or shows "Error: AI did not return a valid launch plan"
Cause: The AI response did not contain the required [PLANDATA:launch] block. Often caused by the model hitting a token limit on a very large plan context, or a transient API error.
Fix: Click ↻ Regenerate plan to try again. If it fails repeatedly, try switching to a larger model (Claude Opus or GPT-4o) which can handle more context.
❌ My plan has disappeared after refreshing the browser
Cause: Browser localStorage was cleared, the od-bplan-v4 key was deleted, you are using a different browser/profile, or you added ?reset to the URL.
Fix: If the data is gone, it cannot be recovered. Going forward: export to PDF when the plan is complete, use one consistent browser, and do not clear browser data while working on a plan.
❌ The typing indicator shows but never resolves
Cause: The API call timed out or the connection dropped.
Fix: Wait 30 seconds. If the indicator is still spinning, refresh the page. Your completed sections are saved in localStorage and will reload automatically.
❌ Task status changes are not saved after refreshing
Cause: Task statuses are saved under a different key (bpb-launch-status-{plan-slug}) derived from the business name. If the business name changed, the key changes and old statuses are not found.
Fix: Keep the business name consistent. Check the exact localStorage key in your browser’s DevTools (Application → Local Storage) to confirm the key matches.
❌ "View Your Plan" button is greyed out
Cause: No sections have been captured yet. The button enables as soon as completedSections.length > 0.
Fix: Continue the conversation until the AI captures at least one section (you will see the green captured banner).
📞 Diagnosing Issues
  • Open Browser DevTools (F12 → Console) to see JavaScript errors or failed network requests.
  • Check the Network tab to see what is sent to /api/chat and what the server returns.
  • Check the Application → Local Storage tab to confirm od-bplan-v4 exists and contains valid JSON.
  • Check the terminal running the proxy server for any Python error messages.

📅 9. Changelog

VersionDateChanges
1.3 17 Apr 2026 Complete rewrite of SOP to match current code (v4). Documents multi-provider support (Anthropic / OpenAI / Custom), the interactive 30-day PM dashboard (task status cycling, owner switching, workload balance toast, filter bar, week navigation, progress KPIs), section edit flow from both Review Panel and plan view, context window management, per-section discussion logs, separate localStorage keys for task statuses and owner overrides, and ?reset URL parameter.
1.2 Internal draft (not published).
1.1 Internal draft (not published).
1.0 13 Apr 2026 Initial SOP covering setup screen, 10 sections, chat workflow, plan view, review/edit panel, localStorage persistence, and proxy server architecture.

Business Launch Plan Builder SOP • Version 1.3 • 17 Apr 2026 • Owner: Kevin Brittain