Google Forms, but people answer over a phone call.
Tokito helps organizers turn a feedback goal and contact list into guided conversations, traceable findings, and evidence-backed next steps.
Forms are easy to send and easy to ignore. Society organizers still end up chasing members one by one, helping people through unclear questions, and manually combining partial answers into something useful.
Tokito turns that follow-up work into a campaign. The organizer explains what they need to learn, reviews the questions, imports the people to contact, and keeps control over when outreach starts. Respondents can answer naturally, ask for clarification, decline a question, request a callback, or opt out. Tokito keeps those outcomes visible instead of filling the gaps with guesses.
- Starts from the goal. The organizer describes the decision or feedback they need, then reviews and edits four AI-drafted open, rating, or choice questions.
- Checks the contact list. Tokito imports Excel or CSV files with
nameandphonecolumns, normalizes phone numbers, and surfaces invalid, duplicate, excluded, and opted-out rows before outreach. - Runs the conversation. A built-in text simulator provides a credential-free demo path. With CALL-E configured, the scheduler can place calls within campaign limits, retry missed calls, and ingest transcripts and structured answers.
- Preserves what happened. Answer states such as skipped, declined, unknown, and not asked remain explicit. Callback requests and opt-outs flow into the campaign state.
- Builds a report that can be checked. Per-question analyst agents feed a synthesis agent, then a reviewer removes unsupported findings. Quotes link back to the stored call and answer.
- Works across the team’s tools. The web dashboard and Discord bot use the same API. Google Sheets can supply contacts and receive results, Google Calendar can track callbacks, and Notion can receive a published report.
Tokito separates deterministic facts from generated interpretation. Participation counts and answer status totals come from SQLite. Report agents receive evidence identifiers, generated citations are resolved in code, and unsupported items can be removed before the report is stored.
The current suite passes 75 tests across the API and Discord bot. It covers contact validation, idempotent webhooks, retry limits, opt-outs, callbacks, exports, report citations, integration failures, Discord confirmations, and the shared API contract. Synthetic end-to-end evaluations also exercise dynamic follow-up questions, refusals, screening, callbacks, opt-outs, and questions that the evidence cannot answer.
Tokito is a Bun workspace with three applications:
- Next.js 16 and React 19 provide the authenticated campaign dashboard.
- Hono on Bun owns campaigns, scheduling, integrations, reporting, and a local SQLite database accessed through Drizzle ORM.
- discord.js and Strands Agents provide slash commands and a conversational Discord agent, with confirmation buttons before state-changing actions.
The API builds a campaign-specific task and result schema for CALL-E. Terminal call events update transcripts and answers, then trigger connected-app work such as Sheets sync and Calendar callback updates. The dashboard and Discord bot read the same stored state. OpenAI models, orchestrated through Strands, handle question drafting, simulated conversations, report analysis, synthesis, review, and report Q&A.
The web, API, Discord command handling, text-call simulation, exports, report pipeline, CALL-E adapter, and Google/Notion integration paths are implemented. The external paths have automated coverage against fake providers and networks.
No live CALL-E call, Discord server session, Google account, or Notion account has been exercised in the recorded evaluation. The dashboard currently uses one shared demo login rather than per-organizer accounts. Tokito stores transcripts, not call audio, and region-specific consent requirements must be confirmed before real outreach.
Bun, TypeScript, Next.js, React, Hono, SQLite, Drizzle ORM, Strands Agents SDK, OpenAI, CALL-E, Discord, Google Sheets, Google Calendar, and Notion.
Requires Bun.
bun run setup
bun run devOpen the web app at http://localhost:3000. The API runs at http://localhost:3002.
bun run setup installs dependencies, creates local environment files, applies SQLite migrations, and seeds three draft campaigns. AI drafting and the external services require their corresponding credentials, but the core campaign UI and seeded data can run locally without them.
Run the automated checks with:
bun run lint
bun run typecheck
bun run build
cd apps/api && bun test
cd ../discord && bun testFor the prepared demo campaign and text simulations:
cd apps/api
bun run db:demoSee the two-minute demo script, system and reliability brief, and evaluation record for the intended walkthrough and its verified boundaries.
- Run a consenting live CALL-E campaign and verify the full webhook path against real calls.
- Exercise Discord, Google Sheets, Calendar, and Notion with real accounts and record the results.
- Replace the shared demo login with per-organizer accounts and workspaces.
- Test whether phone conversations improve useful response collection for the society use case instead of assuming they outperform forms.
- Confirm regional consent, calling, retention, and data-handling requirements before broader outreach.