5.6 KiB
POTE homelab handoff — 2026-05-27
Status: Production LXC running; PR #1 merged to main; CI green on Gitea Actions.
Research only — not investment advice.
What’s live
| Item | Value |
|---|---|
| Host | LXC 236 pote @ 10.0.10.48 (pve10) |
| App | /home/poteapp/pote (venv, no git clone — deploy via rsync) |
| DB | PostgreSQL pote / poteuser (password rotated; in Ansible vault) |
| Data | ~55 officials, ~329 trades (30-day live ingest, May 2026) |
| SMTP | 10.0.10.132 (Mailcow), send as alerts@levkine.ca |
| Reports | idobkin@gmail.com daily 07:00, weekly Sun 08:00 |
Cron (crontab -u poteapp -l)
| Time | Script |
|---|---|
| 06:00 | fetch_congressional_trades.py --days 7 |
| 06:15 | enrich_securities.py |
| 06:30 | monitor_market.py --scan |
| 07:00 | send_daily_report.py --to idobkin@gmail.com |
| Sun 08:00 | send_weekly_report.py --to idobkin@gmail.com |
Data source (important)
Legacy housestockwatcher.com and S3 buckets are dead/blocked. Ingest uses public JSON from congress-trading-monitor (~5000 rows cap). Override with env POTE_HOUSE_DATA_URL if you add another feed.
Repos & branches
| Repo | Branch | Notes |
|---|---|---|
| POTE | main @ git.levkin.ca/ilia/POTE |
Merged PR #1 — ingest, email, CI, deps |
| ansible | feature/outline-setup-api (or master) |
Inventory, deploy-pote.sh, vault — may need merge to homelab default branch |
Local:
cd ~/Documents/code/POTE && git checkout main && git pull
Quick access
ssh root@10.0.10.48
su - poteapp
cd pote && source venv/bin/activate
# Logs
tail -f ~/logs/daily_report.log
tail -f ~/logs/trades.log
# Manual run
python scripts/fetch_congressional_trades.py --days 30
python scripts/send_daily_report.py --to idobkin@gmail.com --test-smtp
Deploy code from laptop (preserves server .env):
cd ~/Documents/code/ansible
make deploy-pote
# or: RUN_FETCH=1 make deploy-pote
Ansible / homelab inventory
Already wired (ansible repo):
inventories/production/hosts—pote@.48, VMID 236docs/guides/host-list.md— LXC 236 rowscripts/beszel-install-agents.sh—pote-236scripts/deploy-pote.sh,make deploy-potescripts/vault-update-pote.py,make vault-update-potedocs/guides/smtp-inventory.md— POTE usesalerts@levkine.ca- Vault:
vault_pote_db_password_prod,vault_pote_smtp_password
make vault-export-env
make beszel-install-agents BESZEL_ONLY=pote-236 # if agent not yet installed
Verify after first automated day
-
07:00+ — Email in Gmail (From:
alerts@levkine.ca, subjectPOTE Daily Report - YYYY-MM-DD). Check spam once. -
Logs —
~/logs/daily_report.log,trades.log— no tracebacks. -
DB growth — trade count should tick up on weekdays:
su - poteapp -c 'cd pote && source venv/bin/activate && python -c " from sqlalchemy import func, select from pote.db import SessionLocal from pote.db.models import Trade, Official with SessionLocal() as s: print(\"trades\", s.scalar(select(func.count(Trade.id)))) print(\"officials\", s.scalar(select(func.count(Official.id)))) "'
Vikunja: todo.levkin.ca → Business → POTE (POTE)
Open tasks (source of truth)
| P | Task | Owner | Status |
|---|---|---|---|
| P1 | Proxmox backup schedule for LXC 236 on pve10 | @you | ⏳ |
| P3 | Dedicated pote@levkine.ca mailbox (vs shared alerts@) |
@you | optional / low |
| P3 | Git deploy on LXC (replace rsync-only) | @agent | optional / low |
| P3 | Kuma LAN health monitor | @agent | optional / low |
| P3 | Mattermost / webhook alerts (email only today) | @agent | optional / low |
| P3 | Full history ingest (second data source beyond kadoa cap) | @agent | optional / low |
Closed 2026-07-11: Beszel agent on pote-236 (beszel-agent active).
Closed 2026-07-12: make deploy-pote synced to LXC 236; 07:00 cron email delivered (idobkin@gmail.com, log OK). DB ~1129 trades / 80 officials.
Not planned (unless you want them)
- Public URL / Caddy vhost (LAN-only by design)
- Investment signals exposed as advice (research descriptors only)
Known issues / caveats
| Topic | Detail |
|---|---|
| Disclosure lag | STOCK Act filings appear weeks after trades; reports are descriptive, not timely trading signals. |
| Amount ranges | Disclosure buckets only ($1k–$15k, etc.), not exact sizes. |
| Empty tickers | Some filings skipped when ticker missing. |
| CI vs prod | CI uses venv + Postgres service; prod uses host Postgres — both should pass after merge. |
| Gitea deploy workflow | .github/workflows/deploy.yml still references git pull on Proxmox; prod uses rsync via ansible deploy-pote.sh. |
Related docs
| Doc | Purpose |
|---|---|
| EMAIL_SETUP.md | SMTP / Mailcow / levkine.ca |
| AUTOMATION_QUICKSTART.md | Cron + reports |
| PROXMOX_QUICKSTART.md | Original LXC provisioning |
Ansible docs/guides/projects-handoff-2026-05-26.md |
Multi-project homelab context |
Ansible docs/guides/smtp-inventory.md |
Mailboxes |
One-line summary
POTE on 10.0.10.48 ingests public congressional trades daily, emails a research summary to Gmail at 07:00, and is maintained via main + make deploy-pote — verify tomorrow’s cron email, then Beszel, backups, and optional data-source expansion.