Skip to content

MyExternalCortex — Roadmap

"Meet users where they are" is the guiding principle. Platform support expands as demand and economics justify it.


Messaging Platform Support

Tier 1 — Up Next

(Planned; build in rough priority order once prerequisites are met)

Slack (blocked on /web layer) - Multi-tenant: each workspace installs via OAuth2 callback → requires a live public HTTP endpoint (FastAPI /web) before this can start - New SlackWorkspace table: team_id, encrypted bot_token - User identity is workspace-scoped: User needs slack_user_id + slack_team_id (unlike Discord/Telegram where IDs are global) - Incoming events via HTTP webhook; Socket Mode for local dev only - Distribution: shareable direct-install link — no Slack marketplace review required - Notifier._send_slack() looks up workspace token, calls chat.postMessage - Estimated effort: 2–3 days once /web is live

WhatsApp - Massive global reach (2B+ users); dominant outside North America - API path: Meta Cloud API directly, or Twilio as middleman - Architecturally close to Telegram — webhook delivery, global user IDs - Phone number registration step adds minor friction vs. Discord/Telegram - Same /web-first dependency as Slack for the webhook endpoint - Estimated effort: 2–3 days once /web is live

SMS - Widest possible reach — no app required - API path: Twilio or AWS SNS - Stateless by nature; conversation threading requires storing phone number + session - No rich formatting, no buttons — plain text only - Higher ongoing cost (per-message) than app-based platforms - Estimated effort: 2 days; needs careful rate-limit and opt-out handling


Tier 2 — When There's Enough Demand (or Someone Offers Money)

Matrix / Element - Open-source, federated, privacy-focused - Good bot API (matrix-nio); fits project values well - Small but loyal audience; low commercial urgency

Microsoft Teams - Large enterprise / workplace install base - Bot Framework API is well-documented; architecturally similar to Slack - Worth building if a B2B / workplace-ADHD angle emerges

iMessage - iOS/macOS only; no official bot API - Apple Business Connect is heavily restricted and review-gated - Only viable if Apple opens the API or demand from iOS-only users is overwhelming

Google Chat (Google Workspace) - Workplace-focused; requires Google Workspace account to use - Has a reasonable bot API but limited personal-use audience


Tier 3 — Won't Do Without Significant Revenue

Email - Not interactive chat — no back-and-forth coaching loop - Useful only as a one-way notification channel (daily digest, weekly summary) - Every other platform on this list does it better - If implemented: SMTP only, opt-in, no inbound processing


Tier 4 — Watching

Signal — No official bot API. Only path is signal-cli (Java sidecar, DBus/JSON-RPC), which is operationally messy and terms-of-service ambiguous for automated messaging. Revisit if Signal publishes an official API.

LINE — Dominant in Japan, Thailand, Taiwan. Has a Messaging API. Low priority until there's geographic demand.

WeChat — China-focused. API access for non-Chinese businesses is severely restricted. Not viable without a Chinese entity.

Viber, KakaoTalk, Zalo, etc. — Regional platforms. Add if specific user demand appears.


Feature Backlog

(Items deferred from the phase plan or not yet scheduled)

  • Slack / WhatsApp / SMS — see Platform Support above
  • Task dependencies — blocked tasks hidden until prerequisites are done; new task_dependencies join table (task_id → depends_on_task_id); AI tool to set/clear in natural language; chained tasks (A → B → C) are the simplest case
  • manage.py broadcast — send message to all real users via Notifier; skip is_test=True by default; --test-only and --user <id> flags
  • Admin commands backlog — owner-only slash commands (/admin reset <user>, /admin stats, /admin broadcast), /admin purge_history <user>, usage stats dashboard, bulk user management; owner identity: hardcode Discord ID in settings or role-based check
  • Prompt caching (Phase 2) — cache-control headers on the system prompt block; requires refactoring _build_system_prompt() to return content blocks, marking the stable prefix with {"type": "ephemeral"}; better ROI once user count grows
  • Win streak summary quality (Phase 2) — review and improve weekly summary job
  • Conversation summarization improvements (Phase 2)
  • Web presence /web (prerequisite for Slack/WhatsApp) — FastAPI on a separate port; scope: static landing page, user dashboard (tasks/appts/habit stats), admin dashboard (API usage, cost, user list), REST API layer for future mobile apps
  • End-to-end test users — test harness calling coach.respond() / execute_tool() directly (no Discord/Telegram transport); covers onboarding, task CRUD, appointment CRUD, habit setup, morning check-in, reminder delivery, account linking, preferred_platform routing; is_test=True excludes from broadcasts/stats
  • Google Calendar OAuth2 + sync (Phase 3)
  • Pomodoro focus sessions (Phase 3)
  • Pattern detection (Phase 3) — weekly background job, 30–90 days of data, surfaces one actionable observation (time-of-day patterns, habit/schedule correlations, snooze friction, win slumps); ≥60% confidence threshold
  • Coping strategy library (Phase 3)
  • i18n (Phase 3) — model layer is already multilingual; work needed on hardcoded strings in bot layer and OVERWHELM_KEYWORDS / coaching_modes keyword lists

Design Notes

Adaptive AI Persona — Future Options

User.bot_persona (Text, nullable) is the hook. If set, it is injected into the system prompt via format_user_profile() as "- Persona note: {bot_persona}".

Three non-exclusive directions:

  1. Curated personas — small set of named characters with distinct voices (calm-and-structured, energetic-and-playful, etc.), selectable at onboarding
  2. Emergent persona — after ~1–2 weeks of interactions, one API call (~500 input
  3. ~100 output tokens) analyzes coaching style responses, completion rates, and mood signals to generate a short descriptor stored in bot_persona. Negligible cost.
  4. User-named persona — user names the bot; stored and used in responses