Format: `- [ ] [PROJECT] Task — deadline or context`
Mark done: `- [x]`
Claude reads and updates this file each session.
---
□ [OPS-CENTER] Add DNS A record: `ops.byzantiumai.com` → `46.62.244.138` (in domain registrar). Then run: `ssh hetzner "sudo certbot --nginx -d ops.byzantiumai.com"` to enable HTTPS.
□ [HETZNER] Install fail2ban: `ssh hetzner "sudo apt install fail2ban -y && sudo systemctl enable fail2ban"` — 17,000+ SSH brute force attempts per day
☑ [PAPERCLIP] Create Byzantium holding company at http://localhost:3100
☑ [PAPERCLIP] Write ~/projects/byzantium-paperclip/CONTEXT.md
☑ [PAPERCLIP] Build Byzantium CEO SOUL.md
☑ [PAPERCLIP] Build shared tools layer at ~/projects/tools/ (Instantly + AnyMailFinder clients)
☑ [PAPERCLIP] Phase 2 UI steps: create Cledge/Aperture/Auction Lister projects in Byzantium, hire Cledge CEO (instructionsFilePath + SOUL.md), set Byzantium CEO instructionsFilePath, run orientation issue
☑ [PAPERCLIP] Verify tools work: `python ~/projects/tools/instantly_client.py analytics`
☑ [PAPERCLIP] Install tool deps if needed: `pip install requests python-dotenv`
☑ [CLEDGE] Load Variant B copy into Instantly A/B test
☑ [CLEDGE] Upload clean batch 1 — done via Instantly UI (187 leads, 2026-03-26)
☑ [CLEDGE] Fix lead pipeline quality filter — filter.py tightened, enrich.py domain pre-flight added (2026-03-26 Session 5)
☑ [CLEDGE] Evaluate Vayne output — 2,500 leads filtered, 91 ready, enrichment 88/1200 done (2026-03-27)
☑ [CLEDGE] Restart Vayne enrichment: running in background (2026-03-27, aperture-scraper venv)
☑ [CLEDGE] Vayne enrichment complete — 858 leads at ~/projects/scratch/vayne_instantly_ready.csv
☑ [CLEDGE] Launch v2 campaign: duplicate v1 in Instantly → load 858 leads → swap in new A/B copy → activate
☑ [CLEDGE] Deploy to Hetzner — LIVE at https://audit.byzantiumai.com (2026-04-10)
□ [CLEDGE] Test Firecrawl discovery: `python firecrawl_discovery.py --state TX --max-pages 3`
□ [CLEDGE] Purchase cledge.ai or cledge.io (both available as of 2026-03-26)
☑ [PAPERCLIP] Create BYZ-4 — Byzantium CEO task: propose first 2 hires
□ [BYZANTIUM-LINKEDIN] Register corporation to unlock LinkedIn Community Management API — needed to enable company page posting + personal reshare automation
□ [BYZANTIUM-LINKEDIN] Once corp registered: create "Byzantium Org Publisher" LinkedIn app, add Community Management API, run `linkedin_org_auth.py` → pipeline auto-switches to company page posting
☑ [BYZANTIUM-SEO] Clutch profile created
☑ [BYZANTIUM-SEO] G2 profile created
☑ [BYZANTIUM-SEO] Capterra/G2/Gartner — skipped, requires off-the-shelf software product (not services)
☑ [PAPERCLIP] Optimize agent costs: right-size heartbeats + models, build ops RAG, rewrite SOUL.mds to query RAG (2026-03-27)
☑ [PAPERCLIP] Write SOUL.md for Aperture CRO (ab391d8e)
☑ [PAPERCLIP] Write SOUL.md for Aperture Research Director (4e586447) and AL Sales Director (76722bf6)
☑ [PAPERCLIP] Write SOUL.md for idle agents: Cledge CMO, Cledge CSO, Byzantium CFO, CTO, CLO, Chief of Staff
☑ [PAPERCLIP] Wire instructionsEntryFile for all 11 unconfigured agents via DB adapter_config UPDATE
☑ [PAPERCLIP] Set heartbeats + model config for new active agents (Aperture CRO — 7200s set 2026-03-27)
☑ [PAPERCLIP] Add `threads` command reference to Cledge CRO AGENTS.md (2026-03-27)
☑ [PAPERCLIP] Update models: o4-mini (strategic), gpt-4o-mini (all others). gpt-5.4-mini/nano were fake — fixed 2026-03-29.
☑ [PAPERCLIP] Wire instructionsFilePath for 5 agents missing it: Chief of Staff, Aperture CRO, AL CEO, Cledge CMO, Byzantium CLO
☑ [PAPERCLIP] Fix Personal Director workspace CWD → Personal Affairs project (06628297) created
☑ [PAPERCLIP] Add explicit blocking protocol to Personal Director SOUL.md (false-success bug)
□ [PAPERCLIP] Formalize recurring agent tasks as scheduled TASK.md files (CLO weekly cycle, CFO weekly P&L, CRO daily Instantly check) using AgentCompanies v1 schedule format — see SKILL at .agents/skills/company-creator/ in paperclipai/paperclip repo
□ [PAPERCLIP] Create digital marketing subsidiary — operational container for one-off client projects (web dev, design, SEO, social media). No outreach arm yet. Active projects to slot in: Builder Block Expo, House of Gaia (Instagram management/shadow operator). Needs: CEO + Service Director (delivery). Add to Byzantium org. Write context file covering active projects and service scope.
☑ [BUILDER-BLOCK] Post-call: deal confirmed March 30. Website stays as-is. Equity anchor 30%.
□ [NEXUSCAI] Upload output/new_*.csv to campaigns via Instantly UI (815 leads ready)
□ [NEXUSCAI] Mark 5 unsubscribes in Instantly UI: don@fullertonelectric.net, bob@redwoodmoving.com, etuan@trseinc.com, c.richter@quorex.ca, shaune@ledbetterelectric.com
□ [NEXUSCAI] Reconnect nataliecross@nexuscaihub.com in Instantly UI (status=-1, not sending)
□ [NEXUSCAI] Sales Nav scrape running (nexuscai-trades campaign, ~425 leads, resume with: cd ~/projects/aperture-scraper && source venv/bin/activate && python scraper.py --campaign "nexuscai-trades")
☑ [CLEDGE] Nuke V1: 1,259 leads removed via ~/projects/scratch/nuke_v1.py (2026-03-30)
☑ [CLEDGE] cpa_canonical.csv (239 leads) already in V2 — confirmed via export analysis (2026-03-30)
☑ [CLEDGE] Upload ~/projects/scratch/cpa_batch1_net_new.csv (237 Google Maps leads not in V2) to V2 via Instantly UI — done 2026-03-30, V2 now ~1,381 leads
☑ [CLEDGE] Consolidate all vayne_*.csv intermediates → cledge_master.csv (1,333 leads, 2026-03-30)
☑ [APERTURE] Update outreach email copy: add "vs. Octus / vs. 9fin / vs. Debtwire" framing — done in pitch deck + call brief (2026-04-06)
☑ [APERTURE] Change Render branch from claude/restructuring-alert-system-zA1w2 → main (Settings → Branch in Render dashboard)
☑ [APERTURE] Reply to Rob Baynes: "Rob, a walkthrough takes 15 min and saves you the navigation. Thursday at 2pm CST?"
☑ [APERTURE] Send credentials to "booked until May" lead + open channel message
☑ [APERTURE] Free Law Project follow-up — Apr 7. Email info@free.law: "Following up on my request for /parties/ endpoint access sent Apr 2. We're building a mid-market restructuring intelligence platform on top of CourtListener data. Any update on the access request?"
☑ [APERTURE] Create Evan Adonailo (A&M) beta account — eadonailo@alvarezandmarsal.com, temp pw: Aperture2026! — done Apr 7
□ [APERTURE] Email Evan login credentials — **PAUSED INDEFINITELY** until Alfiero explicitly says
☑ [APERTURE] News feed homepage: Dashboard → reverse-chronological signal feed with cursor pagination, infinite scroll, watchlist tab, distress scores, quick actions (session 21, 2026-04-10)
☑ [APERTURE] Home page (morning briefing): /home as post-login landing with top movers, watchlist deltas, matched news, outcomes, data freshness. companyScoreHistory table + lastLoginAt + snapshotScores in ingest (session 22, 2026-04-10)
☑ [APERTURE] Dashboard Analytics redesign: replace signal feed with macro analytics view (Market Pulse, Unadvised Pipeline, Convergence Alerts, Sector Stress, Signal Category chart). Plan approved: ~/.claude/plans/bubbly-chasing-pnueli.md — IMPLEMENTED session 23 (2026-04-11)
□ [APERTURE] Commit + push session 22 + 23 changes (Home page + Dashboard Analytics) to main
☑ [APERTURE] Add key financial metrics to CompanyDetail: total debt, revenue, EBITDA, company description, ownership — source: SEC EDGAR XBRL API (public cos) + submissions API — deployed 2026-04-07
☑ [APERTURE] Wire alternative advisor data source by midweek Apr 9 — DONE: EDGAR 8-K scan (fetchAdvisorRetentions in secEdgar.ts, 26 firms, "Check EDGAR" button live)
□ [APERTURE] WHEN FREE LAW GRANTS /parties/ ACCESS: (1) run `python scripts/backfill_case_parties.py --run` to populate case_parties from existing 57 ch11 signals, (2) run `python scripts/enrich_case_parties.py` for AnyMailFinder enrichment on contacts without email, (3) re-enable Check CourtListener button in CompanyDetail.tsx, (4) set up Instantly case-party campaign shell (4 dedicated inboxes, 160/day, copy in CLAUDE.md CASE-PARTY OUTREACH section)
☑ [APERTURE] Fix EDGAR same-day signal clustering: sameDayCount map in dataIngestion.ts, caps 2 signals/company/date/run — deployed 2026-04-06
☑ [APERTURE] Purge BDC contamination: SIC 6726 added to isExcludedFiler(), 25 signals + 3 companies deleted — deployed 2026-04-06
☑ [APERTURE] Outcome logging expanded — 5 detection passes (ch11_filed/restructured_oot/acquired/advisor_retained/recovered) + 56 historical ch11_filed backfilled (session 13, 2026-04-09)
☑ [APERTURE] Manual advisor backfill: scripts/backfill-advisor-outcomes.ts — 29 advisor_retained rows inserted across 11 companies (session 14, 2026-04-09). Uncovered + fixed 3 compounding bugs in fetchAdvisorRetentions/fetchFilingSnippet that had silently broken the scanner since session 12.
☑ [APERTURE] Advisor scan false-positive purge (session 15, 2026-04-09): added ADVISOR_ITEM_GATE (1.03/7.01/8.01) + 2000-char proximity gate vs distress keywords in fetchAdvisorRetentions. Created test-advisor-scan.ts (11/11 pass) + debug-advisor-scan.ts. Purged 29 dirty rows, re-backfilled at min-score=40 → 13 clean rows across 4 companies (Beasley, WW International, EchoStar, TPI Composites). Committed d5b8d4b, pushed to main.
□ [APERTURE] Free Law Project call April 14 — pitch use case for /parties/ access
☑ [APERTURE] BDC/credit fund cleanup: 110 junk entities purged, isExcludedFiler expanded to 31 patterns (session 19, 2026-04-10)
☑ [APERTURE] Auth hardening + TOTP 2FA: Zod validation, password strength (10 chars), account lockout (5/15min), auth rate limiter (10/15min), audit logging, TOTP 2FA with recovery codes, CORS PATCH fix (session 20, 2026-04-10)
□ [APERTURE] Write "Crash Course" lead magnet: "How Boutique Restructuring Advisors Find Mid-Market Mandates Before Competitors" — free PDF, email capture.
☑ [APERTURE] Whitepaper plan approved session 16 (2026-04-09): `~/.claude/plans/dreamy-munching-galaxy.md` — Q1 2026 Mid-Market Restructuring Advisory Activity, 7-stage verification gate, CourtListener historical pull + UniCourt fallback.
☑ [APERTURE-WHITEPAPER] Phase 0.5: write `scripts/research/q1-2026-methodology.md` — DONE session 17, locked before data pull
☑ [APERTURE-WHITEPAPER] Phase 0.1: build + run `scripts/research/pull-dockets.ts` — DONE session 17. 3,110 raw, 1,984 included. Monthly windowing to bypass 2000-result CL pagination cap.
☑ [APERTURE-WHITEPAPER] Phase 0.2: build + run `scripts/research/filter-q1-mid-market.ts` — DONE session 17. 1,982 mid-market (dropped Bread Financial $4.3B, Cumulus Media $642M).
☑ [APERTURE-WHITEPAPER] Phase 0.3: scaffold ResearchPublication.tsx (public page), /api/research/:slug route, researchPublication.ts service — DONE session 18
☑ [APERTURE-WHITEPAPER] Phase 0.4: `CREATE TABLE research_publications` via psql + Drizzle schema — DONE session 18
☑ [APERTURE-WHITEPAPER] Phase 0.6: build `scripts/research/generate-pdf.ts` (headless Chrome) — DONE session 18
□ [APERTURE-WHITEPAPER] Phase 1 (unlocks on /parties/ grant): enrich-q1-parties.ts + aggregate-q1-leaguetable.ts. Manual review gate before status='draft'→'published'.
□ [APERTURE-WHITEPAPER] Phase 1.5 verification gate (ALL 7 must pass before publishing): 1.5.1 internal cross-check vs company_outcomes, 1.5.2 first-day declaration spot-check (15 stratified cases), 1.5.3 EDGAR 8-K cross-check per public debtor, 1.5.4 firm announcement check (top 15 firms), 1.5.5 peer review from ≥2 ICP pros (Evan + 1 TMA reply), 1.5.6 methodology disclosure of coverage rate + corrections link, 1.5.7 third-party benchmark comparison vs ABI/Epiq (±5%)/Octus/Law360/Debtwire (zero overlap on large-cap lists).
□ [APERTURE-WHITEPAPER] Phase 2 publish: flip status, generate PDF, SEO (canonical URL, OG image, JSON-LD schema.org/Report, sitemap.xml).
□ [APERTURE-WHITEPAPER] Phase 3 distribute: Instantly blast to 3,963 TMA leads (1-email campaign, no FU), LinkedIn post from Alfiero personal with methodology thread, warm re-engagement to open leads.
□ [NEXUSCAI] Build OOO handler: ooo_handler.py + "Nexuscai OOO Reengagement" campaign. Parse return date → enroll day before. 10-day default if no date. Cron entry in briefing.py.
□ [BUILDER-BLOCK] Email Brianna: request contact list + site access (form embed + schema markup)
□ [BUILDER-BLOCK] Directory listings audit + fix — 25 platforms, 68% wrong. Start here, no dependency on Brianna.
□ [BUILDER-BLOCK] Set up Brevo account + list structure (Past Exhibitors / Builders / Prospects)
□ [BUILDER-BLOCK] Build automated sequences: booth inquiry, registration confirmation, post-show follow-up
□ [BUILDER-BLOCK] Write + launch Builder Block Briefing issue #1 (target: end of April)
☑ [ARTISTA] Enable Netlify form detection + add info@artistadrywall.ca as notification recipient
☑ [ARTISTA] Wait for GBP re-verification — DONE (email routing confirmed working)
☑ [ARTISTA] GA4 installed (G-42V9GG7F7Y) + UTM on GBP + GSC verified + sitemap submitted
☑ [ARTISTA] FAQ section (20 questions) + FAQPage schema (AEO play)
☑ [ARTISTA] 9 service/location landing pages built and deployed
☑ [ARTISTA] 25 WordPress 404s resolved via _redirects
Note: today is Sunday Apr 5. Day 1 = Monday Apr 6. Do not surface Day 1 tasks before Apr 6.
### Completed before Day 1
☑ [ARTISTA] HomeStars: signed up Apr 5 — free listing, service area Calgary + surroundings
☑ [ARTISTA] Code: BreadcrumbList schema added to all 9 service pages (Apr 5)
☑ [ARTISTA] Code: AggregateRating schema already present in homepage LocalBusiness schema (23 reviews / 5.0 stars)
### Day 1 (Monday Apr 6) — YOU
□ [ARTISTA] GBP Messaging: go to business.google.com → your listing → Messages → Turn on. Lets customers text you from Google Search/Maps instead of needing your phone number. You'll get notified via the GBP app on your phone.
□ [ARTISTA] GA4 Conversion event: go to analytics.google.com → Admin (gear, bottom left) → Data Display → Events → find "generate_lead" → toggle "Mark as conversion" ON. This makes GA4 count every form submission as a tracked goal so you can see lead volume by traffic source.
□ [ARTISTA] Yelp: go to biz.yelp.ca → "Claim your business" → search "Artista Drywall Calgary" → claim or create → fill name, category "Drywall Contractor", email info@artistadrywall.ca, website artistadrywall.ca, service area Calgary AB. Yelp ranks above most contractor sites for local queries.
### Day 2 (Tuesday Apr 7) — YOU
□ [ARTISTA] Yellow Pages Canada: go to yp.ca → "Add your business" → fill NAP: Artista Drywall, Calgary AB, info@artistadrywall.ca, artistadrywall.ca. YP Canada listings rank in Google independently and count as a trusted Canadian citation.
### Day 3 (Wednesday Apr 8) — YOU
□ [ARTISTA] BBB Canada: go to bbb.org/ca → "Get Accredited" → choose free basic listing (decline paid accreditation) → fill NAP. BBB backlinks carry unusually high trust weight for local contractors.
### Day 4 (Thursday Apr 9) — YOU
□ [ARTISTA] Houzz: go to houzz.com/pro → create contractor profile → category "Drywall & Insulation" → fill NAP. Houzz dominates renovation-related local searches in Canada and gets you in front of homeowners actively planning projects.
### Day 5 (Friday Apr 10) — YOU
□ [ARTISTA] Kijiji Services: go to kijiji.ca → post a Services ad under Home Renovation > Drywall → title "Artista Drywall — Calgary Drywall Contractor" → include website artistadrywall.ca in description. Free, shows up in Google.
□ [ARTISTA] Canpages: go to canpages.ca → "Add your business" → fill NAP. Quick 5-min listing, minor citation signal.
### Day 6-14 (Apr 11-18) — YOU (flexible, do when you have phone photos)
□ [ARTISTA] GBP photos: go to business.google.com → Photos → Add photos. Upload 10+ before/after pairs from real jobs. Phone photos are fine. More photos = higher engagement score in Google's local ranking algo. Before/after pairs showing finish quality are the most effective.
### Apr 19 (Saturday) — YOU, 5 min
□ [ARTISTA] GSC first look: go to search.google.com/search-console → Performance → Pages tab. Two weeks have passed since service pages were deployed. Check if any pages are showing impressions. Don't expect rankings yet — you're just confirming Google has crawled and indexed them. If pages show 0 impressions, no action needed, check again at Phase 2 start.
---
### Apr 26 (Sunday) — CLAUDE CODE SESSION
□ [ARTISTA] Code: build /drywall-cost-calgary/ — standalone informational page answering "How much does drywall cost in Calgary?" with pricing by project type. High-volume mid-funnel query with almost no local competition from contractor sites. Captures homeowners before they've chosen who to call.
□ [ARTISTA] Code: build /popcorn-ceiling-asbestos-calgary/ — answers "does popcorn ceiling contain asbestos Calgary?" Evergreen high-anxiety query. Homeowners searching this are ready to book.
□ [ARTISTA] Code: build /level-5-finish-calgary/ — answers "what is level 5 drywall finish." Educates and pre-qualifies premium leads.
### Apr 27 (Monday) — CLAUDE CODE SESSION
□ [ARTISTA] Code: add 4 location pages using the same ServicePage template: /drywall-contractors-strathmore/, /drywall-contractors-high-river/, /drywall-contractors-canmore/, /drywall-crossfield/. Expands geographic footprint to communities with zero current coverage.
□ [ARTISTA] Code: update public/sitemap.xml to include all new pages and redeploy to Netlify.
### Apr 28 (Tuesday) — YOU, 5 min
□ [ARTISTA] GSC sitemap resubmit: go to search.google.com/search-console → Sitemaps → type "sitemap.xml" → Submit. This tells Google to re-crawl and discover the new pages. Do this after the Apr 27 deploy.
### May 3 (Saturday) — YOU, 10 min
□ [ARTISTA] GSC Phase 2 index check: Performance → Pages tab. Confirm new pages (cost, asbestos, level-5, new location pages) are appearing with at least some impressions. If a page is completely absent after 1 week, it may not have been indexed — check Coverage tab for errors.
---
### May 25 (Monday) — CLAUDE CODE SESSION
□ [ARTISTA] Code: add Speakable schema to key FAQ answers on homepage and service pages. Speakable tells Google and AI assistants which content is authoritative enough to read aloud or cite. Increases chances of appearing in AI Overviews and voice search results.
□ [ARTISTA] Code: add HowTo schema to informational pages (/drywall-cost-calgary/, /level-5-finish-calgary/). HowTo schema can trigger step-by-step rich results in Google and is frequently cited by AI engines like Perplexity and ChatGPT.
### May 26 (Tuesday) — CLAUDE CODE SESSION
□ [ARTISTA] Code: expand homepage FAQ from 20 to 30+ questions. Target questions pulled from GSC "Queries" tab — any question-format queries with impressions but no top-3 ranking are the ones to add. Full topic cluster coverage is what gets AI tools to cite Artista as the authoritative local source.
### May 27 (Wednesday) — YOU, 15 min
□ [ARTISTA] Bing Webmaster Tools: go to webmaster.microsoft.com → "Get started" → add site artistadrywall.ca → verify ownership (use the meta tag method — paste the tag into index.html, Claude Code will help if needed) → submit sitemap. Bing feeds the Microsoft Copilot and ChatGPT browse index. Takes 15 min one-time.
### May 31 (Sunday) — YOU, 10 min
□ [ARTISTA] GSC CTR audit: Performance → Pages → sort by Impressions descending. Flag any page with more than 100 impressions and CTR under 2%. Those pages are ranking but not getting clicked — the title tag is weak. Note which pages and bring to next Claude Code session for title tag rewrites.
□ [ARTISTA] GSC CTR audit: also check the Queries tab — look for question-format queries driving impressions. Any question we haven't answered yet on the site should get added to Phase 3 FAQ expansion.
---
□ [ARTISTA] Monthly: check GBP Insights — profile views and direction requests. If views drop month-over-month, add a new GBP post or photo batch to re-engage the listing.
□ [ARTISTA] Monthly: GA4 → Reports → Acquisition → Traffic acquisition. Track whether organic search share is growing month over month. Goal: organic becomes the dominant lead source by August.
□ [ARTISTA] Monthly: if any service page breaks into top 3 average position in GSC, add a Claude Code session to deepen that page (more FAQs, more content) to hold the position.
☑ [PRO-DOSA] Build Airtable base (7 tables) + import 116 distributors
☑ [PRO-DOSA] Delete Carbone templates (per Dr. Hills request 2026-04-08)
☑ [PRO-DOSA] Build src/fill_acvm78.py (python-docx, 30 cells + 45 checkboxes mapped)
☑ [PRO-DOSA] Build src/demo_runner.py (simulated Airtable → fill → Word auto-open)
☑ [PRO-DOSA] Write RECORDING.md screencast plan + demo framework
☑ [PRO-DOSA] Verify sample output via Word PDF conversion (4 pages, layout preserved)
☑ [PRO-DOSA] Confirm ACVM 78 July 2024 is current MPI version
☑ [PRO-DOSA] Reframe positioning from "MPI automation" to "audit-ready compliance" (2026-04-09)
☑ [PRO-DOSA] Add Water Culture Tests + Air Culture Tests tables to Airtable base
☑ [PRO-DOSA] Build Airtable Interface Home dashboard + 5 form pages (Log Batch Production, Log Inwards Goods, Log Outwards Goods, Log Water Culture Test, Log Air Culture Test)
☑ [PRO-DOSA] Build Batch Detail (Record Review) with 6 groups: Overview, Inwards Goods, Microbial Testing, Environmental Monitoring, Outwards Goods, QC Details
☑ [PRO-DOSA] Build Shipment Detail (Record Review) with 4 groups + mock "Generate MPI 78 Form" button
☑ [PRO-DOSA] Finish Home dashboard: title, subtitle, Recent Batches list, Shipments in Flight list, Released Batches Count
☑ [PRO-DOSA] Seed realistic demo data (1 Batch Released, 4 Raw Materials, 2 Water + 2 Air Culture Tests, 1 Shipment Al Asayel Bahrain) via Omni AI
☑ [PRO-DOSA] Interface polish: red theme (on-brand), nav order, form pages hidden, published
☑ [PRO-DOSA] Smoke test demo flow in Preview mode — all groups populated, button working
☑ [PRO-DOSA] Rewrote RECORDING.md v2 (5 scenes, 90-120s, Interface-first, tab-click flow)
□ [PRO-DOSA] Fix data: Batch Size=2400, move Deviations/Notes+QC Documents into QC Details group, re-publish
□ [PRO-DOSA] Record Loom demo with audit-readiness framing (soft single ask at end)
□ [PRO-DOSA] Send Loom to Corinne via text/WhatsApp — DO NOT send discovery questions first
□ [PRO-DOSA] After Corinne buys in: request sample logs → rebuild schema → wire webhook automation
□ [NEXUSCAI] Upload output/new_general_trades.csv (751) + new_general_trades_classified.csv (55) to General Trades campaign
□ [BYZANTIUM-WEBSITE] Execute pSEO + organic traffic plan: data model, 250-300 pages, 3 pillar pages, enrichment, sitemap, deploy — plan at ~/.claude/plans/validated-crunching-bentley.md
□ [BYZANTIUM-WEBSITE] Directory submissions: Clutch, G2, DesignRush, UpCity, Crunchbase, GoodFirms — prepare content + submit
□ [BYZANTIUM-WEBSITE] Google Business Profile: prepare listing content + submit
□ [BYZANTIUM-WEBSITE] Medium cross-posting: create byzantiumai publication, add medium_publisher.py to pipeline
□ [BYZANTIUM-WEBSITE] LinkedIn Articles: extend linkedin_publisher.py to publish full articles
□ [BYZANTIUM-WEBSITE] Featured.com workflow: 2-3 answers/week, draft → humanizer → GPTZero → submit
□ [BYZANTIUM-WEBSITE] Particle animation: tune density/timing on feature/magnetic-particle-text, test mobile
□ [OBSIDIAN] Optional: install Obsidian Local REST API plugin → add to ~/.mcp.json for richer vault querying
☑ [CONTENT-PIPELINE] Get fresh Meta User Token with instagram_basic + instagram_content_publish
☑ [CONTENT-PIPELINE] Get IG account ID (17841436793066351) and save to .env
☑ [CONTENT-PIPELINE] Run first live Facebook publish — confirmed working (Telegram + FB post)
☑ [CONTENT-PIPELINE] Generate permanent Page Access Token via app secret exchange
☑ [CONTENT-PIPELINE] Add source fetching to pipeline.py (URL/RSS/static_facts)
☑ [CONTENT-PIPELINE] Create client skeletons: builder-block, house-of-gaia, artista-drywall
☑ [CONTENT-PIPELINE] Wire Instagram node in n8n — done via Python direct publisher (catbox.moe → Meta IG API)
☑ [CONTENT-PIPELINE] Run live Instagram publish test — confirmed live: https://www.instagram.com/p/DWzTyuVFCCY/
☑ [CONTENT-PIPELINE] Run full pipeline.py --type static for alberta-independence (FB + IG with Telegram approval) — CONFIRMED 2026-04-06
☑ [CONTENT-PIPELINE] Fix IG publisher (container status polling, code 9007)
☑ [CONTENT-PIPELINE] Rewrite telegram_approver.py (raw getUpdates, no PTB Application hang)
□ [CONTENT-PIPELINE] Add real page/IG IDs to builder-block, house-of-gaia, artista-drywall configs
□ [CONTENT-PIPELINE] Multi-client credential routing (META_PAGE_ID + META_IG_ACCOUNT_ID hardcoded in .env)
□ [CONTENT-PIPELINE] Implement algorithm-aware post type system (plan: ~/.claude/plans/gleaming-twirling-willow.md)
---
---
☑ [PERSONAL-ACCOUNTING] Get Wave FY2025 export → reconcile revenue + customer payments (partial — Wave only has Oct 2024–Mar 2025, $85,990 revenue confirmed)
□ [PERSONAL-ACCOUNTING] **BLOCKED: Resubscribe to QBO** → pull Apr–Sep 2024 records to complete FY2025 revenue picture (missing ~$57K vs bank deposits)
□ [PERSONAL-ACCOUNTING] Classify Wave Uncategorized Income ($11,126): flag inter-account TFRs ($1,079 non-income), match ATM DEPs to Kevin Lim invoices (possible double-count in Wave)
□ [PERSONAL-ACCOUNTING] Classify LOAN entries (Jackie truck vs draw, worker advances) + look up Apr 15 $600 in TD online
□ [PERSONAL-ACCOUNTING] Add 5241971 statements to ~/bank-analyzer/data/ → re-run pdf_to_csv.py → complete FY2025 shareholder loan calc
□ [PERSONAL-ACCOUNTING] File GST $8,369.83 via CRA My Business Account
□ [PERSONAL-ACCOUNTING] Pay March 15 CRA instalment ($1,285 PAST DUE)
□ [PERSONAL-ACCOUNTING] Build FY2025 P&L + shareholder loan schedule → file T2 (blocked on QBO + LOAN classification)
□ [PERSONAL-ACCOUNTING] Build Scotia + TD Visa parsers in pdf_to_csv.py
☑ [PERSONAL-ACCOUNTING] Set up Personal Accountant agent in Paperclip (ec5bd13c — external mode, personal-accountant-spec.md)
☑ [PERSONAL-ACCOUNTING] Process crypto.com CSV: $8,485.47 net capital loss saved to personal-accounting/
☑ [PERSONAL-ACCOUNTING] Process Questrade T5008: -$97 CAD options loss. T1135 not required.
☑ [PERSONAL-ACCOUNTING] Update bookkeeper spec + SOUL.md: AI classification workflow, T778 childcare, data gap protocol
□ [PERSONAL-ACCOUNTING] Drop 2025 TD personal chequing PDFs into ~/bank-analyzer/data/ → trigger bookkeeper classification run
□ [PERSONAL-ACCOUNTING] Confirm Mar 15 CRA instalment ($1,285) paid or not