POTE/docs/HANDOFF-2026-05-27.md
ilia 781a45f1a3
All checks were successful
CI / skip-ci-check (push) Successful in 9s
CI / secret-scan (push) Successful in 8s
CI / python-ci (push) Successful in 22s
Mark deploy and daily email verified (#4)
2026-07-12 10:38:51 -05:00

5.6 KiB
Raw Permalink Blame History

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.


Whats 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/hostspote @ .48, VMID 236
  • docs/guides/host-list.md — LXC 236 row
  • scripts/beszel-install-agents.shpote-236
  • scripts/deploy-pote.sh, make deploy-pote
  • scripts/vault-update-pote.py, make vault-update-pote
  • docs/guides/smtp-inventory.md — POTE uses alerts@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

  1. 07:00+ — Email in Gmail (From: alerts@levkine.ca, subject POTE Daily Report - YYYY-MM-DD). Check spam once.

  2. Logs~/logs/daily_report.log, trades.log — no tracebacks.

  3. 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.

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 tomorrows cron email, then Beszel, backups, and optional data-source expansion.