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

  1. Brief intake — a sales rep authors the brief in Treehouse, setting topic, target industries, target seniority, deliverable format, and budget.
  2. 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.
  3. Briefing & kickoff — accepted experts get a private kickoff post outlining the question.
  4. Conversation — multi-week threaded discussion. Daily summary email keeps engagement high.
  5. Transcript — board content is exported and (formerly) sent to a transcription service; now handled in-house.
  6. Deliverable — a Currnt analyst writes the final report, mixing direct expert quotes, synthesis, and recommendations.
  7. Closure — board archived, deliverable shipped to client portal (see Corporate).

Representative routes

Boards-engine routes spanning customer-facing and Treehouse views.
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.