Inspiration

As someone learning pre-sales consultancy, I kept running into the same bottleneck: prepping for a discovery call takes real time. You need to research the company, guess at their likely pain points, come up with questions that don't sound generic, and figure out how to naturally bring up your own product without it sounding like a pitch — all before the call even starts. I wanted to see if Codex and GPT-5.6 could compress that prep work from an hour down to seconds, without losing the quality that makes a discovery call actually useful.

What it does

Briefly takes a prospect's company name, industry, and contact role — plus a product selected from your own saved company profile — and generates a structured, call-ready brief in about 20 seconds:

  • Company snapshot — real, live-researched facts about the prospect where available, clearly tagged "Verified" (with source links) vs. "Hypothesis" when the model is inferring rather than confirming. This distinction matters: a rep should know what's confirmed fact versus an educated guess before they walk into a call.
  • Likely pain points — hypotheses tailored to the industry and contact role
  • How to introduce your product — a soft, natural way to bring up the selected product mid-conversation, tied to the specific pain points already surfaced, with a reminder to listen first and pitch second
  • Discovery questions — seven tailored, non-generic questions
  • Positioning talking points — how to frame the product against the prospect's likely priorities
  • A suggested, timed call agenda

Beyond generation, Briefly is a lightweight workspace:

  • A company profile section lets a user save their company info and a list of products once, then pick from a dropdown when generating a brief instead of retyping a product description every time
  • A dashboard saves every generated brief, with archive/unarchive for deals that have gone cold — non-destructive by default, with a separate permanent-delete option in the archived view
  • Briefs can be exported as a polished PDF to share or attach to a CRM
  • A "Suggest meeting times" feature proposes call slots with downloadable .ics calendar files and a drafted follow-up email, so a rep can go from "here's my prep" to "here's a meeting on the books" without leaving the tool

How I built it

I used Codex inside the ChatGPT app, connected directly to a GitHub repository, and worked in a tight iterative loop: describe a feature in plain language, let Codex scaffold it, test it in-browser, then come back with the next increment. The stack is a React + Vite frontend and an Express backend, calling OpenAI's Responses API with GPT-5.6, with SQLite for lightweight persistence.

Key build steps, roughly in order:

  1. Scaffolded the core input form and call-brief generation flow, with the OpenAI API call happening server-side so the key never reaches the browser
  2. Enforced strict JSON Schema output on the model response after discovering early versions occasionally leaked raw model text — including its own JSON self-correction reasoning — directly into a question field. Added server-side validation plus a single automatic retry on parse failure.
  3. Added a live web-search step so the Company Snapshot section pulls real, sourced facts when available, falling back gracefully to clearly labeled hypotheses when it can't find anything
  4. Built the dashboard with SQLite persistence, scoped by a lightweight name-based workspace identifier (deliberately not full OAuth — kept simple given the timeline)
  5. Fixed a real bug this surfaced: briefs appeared to "disappear" between sessions because the workspace identifier wasn't being normalized or persisted consistently — fixed by trimming/normalizing the identifier and clarifying what "logging out" should and shouldn't clear
  6. Added archive/unarchive as the primary organization action, with permanent delete only reachable from the archived view, so the main demo flow stays non-destructive
  7. Replaced free-text product entry with a company-profile system: users save their products once, then select one from a dropdown per brief — removing repetitive typing and letting the generation prompt use a consistent, richer product description every time
  8. Added the "How to introduce your product" section, generated only after pain points are established, so the framing stays consultative rather than pitch-first
  9. Replaced markdown export with PDF export, preserving the Verified/Hypothesis labels and section structure so the exported document is as usable as the on-screen brief
  10. Added meeting-time suggestions with .ics export and a draft follow-up email — no calendar OAuth, kept fully self-contained
  11. Passed several rounds of layout polish — fixing inconsistent card widths and heights across sections with variable-length content, and adding inline (ⓘ) tooltips explaining how to use each section live on a call

Challenges I ran into

The biggest one was output reliability. Early on, the brief generation would occasionally leak the model's own JSON-repair reasoning straight into a question field — visible, broken text instead of a clean question. I fixed this with strict JSON Schema enforcement on the API call, independent server-side validation, and a single automatic retry when a response fails parsing or fails a sanity check like returning fewer than seven discovery questions.

The second was a subtler bug: briefs seemed to vanish after logging out and back in. The data wasn't actually lost — the lightweight, name-based workspace identifier used to scope private data was being handled inconsistently between sessions, so the dashboard was looking for the wrong key. It was a good reminder that even "simple" auth substitutes need careful, deliberate state handling.

The third was scope discipline. It was tempting to keep adding features — full OAuth-based calendar booking with live availability checking, a CRM-style deal pipeline with stages like Discovery → Negotiation → Closed — but with a fixed deadline, I made a deliberate call to ship the lightweight versions (static time-slot suggestions with .ics export; archive/unarchive instead of full pipeline stages) and scope the fuller versions as roadmap items instead of half-building them under time pressure.

What I learned

Using Codex conversationally — describe a feature, test the result, iterate — was a much faster development loop than I expected, especially for someone newer to full-stack development. It also taught me a lot about pre-sales workflows themselves: figuring out exactly what belongs in a good discovery brief, and how a rep should introduce their product without it feeling like a pitch, was as valuable a learning exercise as the coding itself.

What's next

  • Real calendar integration — OAuth-based Google/Outlook connection, live availability checking, and direct invite sending, replacing the current static time-slot suggestions
  • CRM integration — auto-populating prospect data from a connected CRM and pushing generated briefs back as logged activity
  • Deal-stage tracking — moving briefs through a lightweight pipeline (Discovery → Qualification → Proposal → Negotiation → Client Onboarded) rather than a simple active/archived split
  • Team workspaces — shared briefs and company profiles across a sales team, rather than a single local, name-based workspace

Built With

Share this project:

Updates