Crypto & Investing — Notifications & Schedules
Notifications & Schedules¶
Every output from the Investment Coach flows through Discord. Three channels, each with its own webhook, routed by content type.
Discord Channels¶
| Channel | Tag | What Goes Here |
|---|---|---|
#investment-alerts |
invest-alerts |
On-demand analysis results, morning pulse, significant price moves |
#weekly-report |
invest-weekly |
Sunday portfolio summary, 1st-of-month deep review |
#learning |
invest-learn |
Concept of the week, reflections, quiz results |
Current Setup (Direct Webhooks)¶
As of 2026-04-05, each channel has its own Discord webhook URL stored in .env:
DISCORD_WEBHOOK_ALERTS=https://discord.com/api/webhooks/.../...
DISCORD_WEBHOOK_WEEKLY=https://discord.com/api/webhooks/.../...
DISCORD_WEBHOOK_LEARN=https://discord.com/api/webhooks/.../...
The skill's notify.sh script routes a tag to the correct webhook. All three channels are tested and working.
Future: Apprise Routing¶
The homelab already runs Apprise at notify.example.homelab (port 9914). Switching gives you:
- Multi-service fanout (Discord + Telegram + Email + Gotify simultaneously)
- Centralized notification config (one place to add channels)
- Gotify fallback if Discord webhooks are rate-limited or down
To switch: uncomment NOTIFY_MODE=apprise in .env and run scripts/invest/apprise-setup.sh <discord-webhook-url>. See the Monitoring Stack for the Apprise service configuration.
Automated Schedules¶
Four recurring triggers drive the coach without manual invocation. All times are Asia/Manila.
| Schedule | Cron | Action |
|---|---|---|
| Morning pulse | 0 8 * * 1-5 |
Scan holdings + watchlist, overnight moves, pre-market movers, today's events → #investment-alerts |
| 3-day reflection | n8n delayed workflow, triggered per analysis | Mini reflection → #learning |
| Weekly report | 0 20 * * 0 |
Full portfolio review + reflections + PDF → #weekly-report |
| Monthly review | 0 20 1 * * |
Deep review + stage promotion check → #weekly-report |
The Claude Code scheduler (RemoteTrigger) handles morning pulse, weekly, and monthly. n8n handles the 3-day reflection because it needs to fire relative to when each analysis ran — a relative delay, not an absolute cron.
Message Formats¶
On-demand analysis (#investment-alerts):
📊 AAPL Analysis — Rating: OVERWEIGHT
Bull: Strong services revenue growth, AI integration momentum
Bear: Premium valuation (P/E 32), China exposure risk
Risk: Moderate — you already hold 23% AAPL
💡 Action: Add 2 shares ($380), diversify remaining $120 into VTI
📚 Concept: "Position sizing — why 25%+ in one stock is risky"
Full analysis → [Memory MCP link]
Weekly report (#weekly-report):
📋 Weekly Portfolio Report — Apr 6, 2026
Portfolio: $12,450 (+2.3% this week)
Winners: NVDA +5.1%, VTI +1.8%
Losers: AAPL -1.2%
Freqtrade paper: +0.8% (BTC/USDT RSI strategy)
⚠️ Watch: NVDA earnings Apr 10, Fed meeting Apr 12
🎓 This week: "What earnings reports actually tell you"
Full report → [Obsidian link] | PDF → [attached]
Reflection Process¶
The 3-day reflection is the most important automation in the pipeline. It's what makes the coach learn from its own mistakes.
graph LR
A["Analysis runs<br/>Rating stored in Memory MCP"] --> B["3 days pass<br/>n8n delayed trigger"]
B --> C["Fetch actual price performance"]
C --> D["Compare prediction vs reality"]
D --> E["Generate lesson:<br/>what signals were correct,<br/>what we missed"]
E --> F["Store reflection in Memory MCP"]
F --> G["Discord #learning"]
Reflections accumulate in Memory MCP and get pulled into future analyses by the Bull and Bear researchers — past wins and misses directly inform new thinking.
Market Closed / Weekend Behavior¶
| Scenario | Behavior |
|---|---|
| Weekend | Morning pulse skips; manual /invest analyze uses last close data |
| US holiday | Same as weekend — skip pulse, manual works |
| Market closed mid-day | Analyses run with last trade price, flagged as "session paused" |
Error Handling¶
| Scenario | Behavior |
|---|---|
| Discord webhook rate-limited | Fall back to Gotify (port 9880); retry Discord in 5 min |
| Apprise unreachable | Write to Obsidian + log warning, retry via n8n in 30 min |
| n8n unreachable | 3-day reflections queue until n8n recovers |
TL;DR
Three Discord channels (alerts, weekly, learning), each with its own webhook. Four scheduled triggers: morning pulse (weekdays 8am), 3-day per-analysis reflection (n8n), weekly report (Sunday 8pm), monthly review (1st of month 8pm). Apprise is already running for future multi-channel routing. 3-day reflections are the feedback loop that makes the coach learn from its own predictions.
Previous: ← Learning Progression | Next: First Analysis — VTI →