Decisions

  • Pending: Which content categories to include at launch?
  • Pending: Where to host — VPS (FR-019) or cloud function?
  • Pending: Claude API model for content generation (Haiku for cost, Sonnet for quality)?
  • Pending: Pull-only (user asks) or also push (scheduled messages)?

User Tasks


FR-064: Personal Learning Feed

Summary

A messaging bot that replaces mindless social media scrolling with interesting, personalized content about AI, Opus, and the user’s learning goals — accessible from any chat platform.

Problem / Motivation

When bored, waiting, or needing a distraction, the reflex is to open Instagram or Facebook — low-value dopamine. The goal is a healthier alternative that’s equally appealing but actually useful: a personal knowledge feed accessible from the phone.

Proposed Solution

A channel-agnostic content engine with pluggable messaging adapters. The core logic (content generation, vault access, feeds) is separated from the delivery channel, so it works with Telegram today and WhatsApp/Signal/Discord/SMS tomorrow.

Channel comparison

ChannelEase of setupRich formattingFreePush messages
TelegramEasy (BotFather)Yes (markdown, buttons)YesYes
WhatsAppHard (Meta Business API, approval)LimitedNo (paid)Template-only
SignalMedium (signal-cli)BasicYesYes
DiscordEasy (bot token)Yes (embeds)YesYes
SMS (Twilio)EasyNoNo (per-msg cost)Yes

First adapter: Telegram — lowest friction, best formatting, free.

Content Categories

CategorySourceExample
AI NewsRSS feeds (Anthropic blog, HN, ArXiv, etc.)”Anthropic released tool use for Claude — here’s what changed and why it matters for Opus”
Opus InsightVault files”You have 50 feature requests. 5 are in progress. Here’s one you might have forgotten: FR-024 Text-to-Speech”
Learning Bitevault/90_inbox/learning-goals.md + ClaudeShort explanation of a concept from your learning list
Progress NudgeGit history + vault”This week you completed 2 FRs and added 4 ideas. Your most active area: hooks”
Thought PromptClaude-generatedA reflective question tailored to current projects
Tech Deep DiveClaude + web search2-3 paragraph explanation of a technical concept relevant to current work

User Interaction

User: /learn
Bot: [Returns a random content item from any category]

User: /news
Bot: [Latest AI news digest — 3 items with summaries]

User: /opus
Bot: [Insight about vault state, progress, or a forgotten idea]

User: /goals
Bot: [Learning bite based on learning-goals.md]

User: /more
Bot: [Another item from the same category as last]

User: /todos
Bot: [Current "Now" section from my-todos.md]

Quick reply buttons after each message: “More like this” | “Something else” | “My todos”

Architecture

src/
└── learning-feed/
    ├── core/
    │   ├── engine.py          # Content selection + orchestration
    │   ├── news.py            # RSS fetcher + Claude summarizer
    │   ├── vault_insights.py  # Reads vault, generates insights
    │   ├── learning.py        # Learning bite generator
    │   ├── progress.py        # Git/vault stats
    │   └── prompts.py         # Thought prompt generator
    ├── adapters/
    │   ├── base.py            # Abstract adapter interface
    │   ├── telegram.py        # Telegram bot adapter
    │   └── ...                # Future: whatsapp.py, discord.py, etc.
    ├── config.py              # API keys, feed URLs, paths
    └── scheduler.py           # Optional: scheduled push messages

Tech Stack

  • Claude API (Haiku or Sonnet) — content generation and summarization
  • feedparser — RSS feed parsing
  • python-telegram-bot — first adapter
  • Hosting — VPS (FR-019) or cloud function (AWS Lambda / Cloudflare Worker)

Open Questions

1. Content categories at launch

Question: Which categories to ship first?

OptionDescription
A) AI News + Opus Insight + Learning BiteCore trio — external news, internal knowledge, personal growth
B) All six categoriesMore variety but more build time
C) Just AI NewsSimplest MVP

Recommendation: Option A — three categories gives enough variety to be interesting without over-scoping.

2. Hosting

Question: Where to run the bot?

OptionDescription
A) VPS (FR-019)Natural fit, but FR-019 isn’t done yet
B) Cloud functionQuick to deploy, low cost, no server management
C) Local machineFree, but only works when PC is on

Recommendation: Option B to start — can migrate to VPS later. A Telegram bot on a cloud function costs near-zero.

3. Push vs Pull

Question: Should the bot also send unsolicited messages?

OptionDescription
A) Pull onlyUser initiates — no notification fatigue
B) Pull + daily digestOne scheduled message per day (morning briefing)
C) Pull + smart pushPush when there’s genuinely interesting news

Recommendation: Option A at launch. Push can be added later (Phase 3) once the content quality is proven.

4. Claude model for generation

Question: Which model for content generation?

OptionDescription
A) HaikuCheapest, fast, good enough for summaries
B) SonnetBetter quality, still affordable for low-volume personal use
C) MixHaiku for news summaries, Sonnet for deep dives

Recommendation: Option B — this is personal use (low volume), quality matters more than cost here.


Phase Overview

PhaseDescriptionStatus
Phase 1Bot skeleton + AI News feed
Phase 2Opus Insights + Learning Bites
Phase 3Progress Nudges + Push messages + Thought Prompts

Phase 1: Core Engine + Telegram Adapter —

Goal: Working bot that serves AI news summaries on demand via Telegram.

File / FeatureDetailsOwnerStatus
src/learning-feed/core/engine.pyContent engine — selects and formats contentopus
src/learning-feed/core/news.pyRSS fetcher (Anthropic, HN AI, ArXiv) + Claude summarizeropus
src/learning-feed/adapters/base.pyAbstract adapter interface (send, receive, buttons)opus
src/learning-feed/adapters/telegram.pyTelegram adapter via python-telegram-botopus
src/learning-feed/config.pyAPI keys (env vars), feed URLsopus
Create bot via BotFatherGet Telegram API tokenopus
Deploy to cloud functionBot running 24/7opus

Phase 2: Vault Integration —

Goal: Bot can read from the Opus vault and generate personalized content.

File / FeatureDetailsOwnerStatus
src/learning-feed/core/vault_insights.pyRead vault state, generate insightsopus
src/learning-feed/core/learning.pyParse learning-goals.md, generate bitesopus
/opus and /goals commandsNew bot commandsopus
/todos commandShow my-todos.md “Now” sectionopus
Vault sync to hostingMechanism to keep vault accessible to botopus

Phase 3: Smart Features + More Adapters —

Goal: Add progress tracking, push messages, reflective prompts, and additional channels.

File / FeatureDetailsOwnerStatus
src/learning-feed/core/progress.pyGit stats, FR completion trackingopus
src/learning-feed/core/prompts.pyThought prompt generatoropus
src/learning-feed/scheduler.pyOptional daily digest pushopus
Quick reply buttonsInline keyboard for “More” / “Something else”opus
Additional adapterWhatsApp, Discord, or Signal — based on needopus

Prerequisites / Gap Analysis

Requirements

RequirementDescription
REQ-1Telegram account + BotFather bot creation
REQ-2Claude API key with billing
REQ-3Hosting for the bot (cloud function or VPS)
REQ-4RSS feed list curated

Current State

ComponentStatusDetails
Telegram accountunknownUser may already have one
Claude API keyunknownNeeded for content generation
VPS (FR-019)Not yet available
Vault contentdoneRich enough to generate insights
Learning goalsdonevault/90_inbox/learning-goals.md exists

Gap (What’s missing?)

GapEffortBlocker?
Bot creation + API tokenLowNo
Cloud function hosting setupLowNo
RSS feed curationLowNo
Vault sync to hostingMedOnly for Phase 2

Test

Manual tests

TestExpectedActualLast
pending-

AI-verified tests

ScenarioExpected behaviorVerification method

E2E tests

ScenarioAssertion

Integration tests

ComponentCoverage

Unit tests

ComponentTestsCoverage

History

DateEventDetails
2026-03-12CreatedHealthy alternative to social media scrolling

References

  • FR-019 (VPS Deployment) — potential future hosting
  • FR-023 (Email/WhatsApp Access) — related mobile access goal
  • FR-037 (Daily Briefings) — content overlap, could share news pipeline