Boards engine
A board at Currnt was a time-boxed advisory engagement: a client (typically a F500 product or strategy team) commissioned a question, Currnt staff recruited a panel of 8–15 industry experts, ran a multi-week asynchronous conversation, transcribed it, summarized it, and shipped a deliverable. This domain is the machinery of that lifecycle.
Internally the term “sprint” is used interchangeably for shorter engagements (one week, ~5 experts), and “board” for the longer format. The data model doesn’t distinguish; it’s the same table with a duration flag.
The lifecycle
- Brief intake — a sales rep authors the brief in Treehouse, setting topic, target industries, target seniority, deliverable format, and budget.
- Expert recruitment — Currnt staff sources from a curated list of experts plus the broader 15M-row CRM. Invites go out as personalized emails; accepts get account provisioning.
- Briefing & kickoff — accepted experts get a private kickoff post outlining the question.
- Conversation — multi-week threaded discussion. Daily summary email keeps engagement high.
- Transcript — board content is exported and (formerly) sent to a transcription service; now handled in-house.
- Deliverable — a Currnt analyst writes the final report, mixing direct expert quotes, synthesis, and recommendations.
- Closure — board archived, deliverable shipped to client portal (see Corporate).
Representative routes
| Method | Path | Handler | Notes |
|---|---|---|---|
| GET | /admin/boards | BoardController.list | Treehouse list view; filter by status. |
| POST | /admin/boards | BoardController.create | Brief intake form. |
| GET | /admin/boards/:id | BoardController.detail | Internal admin view. |
| GET | /admin/boards/:id/recruitment | BoardController.recruitment | Expert sourcing list + invite UI. |
| POST | /admin/boards/:id/invite | BoardController.invite | Queues per-recipient invite email. |
| GET | /admin/boards/:id/transcripts | BoardController.transcripts | Per-board conversation log. |
| POST | /admin/boards/:id/summarize | BoardController.summarize | Triggers AI summarization handler. |
| GET | /board/:slug | BoardController.publicShow | Public board view; gated past first page. |
| GET | /board/:slug/discuss | BoardController.discuss | Member-only conversation view. |
| POST | /board/:slug/post | BoardController.post | New post or reply; rich-text content. |
| GET | /board/:slug/transcript | BoardController.transcript | Member-only full transcript download. |
Headline flow: brief → kickoff
Step 1: Sales rep submits brief at /admin/boards (POST).
Step 2: BoardController.create writes board + initial brief revision.
Step 3: Recruitment view at /admin/boards/:id/recruitment shows
candidate experts pulled from CRM + curated list.
Step 4: Staff selects N candidates → POST /admin/boards/:id/invite.
Step 5: dispenserd lane `send_outreach` fans out N invite emails.
Step 6: Expert clicks tracked link → /board/:slug/accept?token=…
Step 7: AuthController upserts user, joins to board, assigns 'expert' role.
Step 8: BoardController.kickoff fires when N accepts ≥ threshold,
posting the kickoff message and notifying all experts.
The most-engineered step is (3) Recruitment. Candidate scoring blends prospect attributes (industry, seniority, recency) with prior-board participation, with a hand-tunable weight in each board’s settings.