Weekday 1:00 AM PT trigger.dev task that finds recommendations for how Ashkaan and his AI setup work together, with an AI agent running on Daedalus across all four checkouts — the code, the records, the Claude configurations and the skills — on whichever vendor the `repo-investigation` policy row selects, starting from every message he typed in T3 on every harness.
Apps
AI
7Pointer app — the code lives in the dashboard.ashkaan.me repo (github.com/Ashkaan/dashboard.ashkaan.me, checked out at ~/code/dashboard.ashkaan.me).
Monday 6:05 AM PT trigger.dev task that emails one digest of what actually changed across the five AI vendors Ashkaan tracks — Anthropic (API, Claude Code, Cowork), OpenAI (platform, news, Codex CLI), Gemini (API, blog, DeepMind, CLI), Grok, and Copilot (GitHub, VS Code, M365).
Files the repo improvements the weekday morning scan suggests, one durable GitHub issue per recommendation identity, in state `awaiting-triage` for Ashkaan's next `/triage` — which checks each one against the repo, builds it in a session, and closes it through `apps/wsp/issue-loop/scripts/rule.ts`.
Cross-provider AI prompt router.
Nightly 2:30 AM PT comprehensive system update of Daedalus: full apt dist-upgrade (all packages, reboot-if-kernel), Claude Code, Gemini CLI, Codex, Wrangler, Playwright Chromium, yt-dlp, grok, impeccable, VS Code CLI + extensions, and a context-repo git pull.
Remote tool server the Claude app's voice mode calls, so Ashkaan can talk to his work from his phone.
Client
1The portal request loop.
Finance
3Every-15-minutes trigger.dev schedules.task that reads live prediction-market books from Kalshi and Polymarket US, forecasts eligible contracts through the prompt router, and writes real order decisions to a paper ledger in Cloudflare D1.
Monthly portfolio review email (1st Monday).
Nightly QBO + Monarch fetch for the WSP business finance snapshot — report envelopes, the household budget history, the per-client profitability rows and the dashboard/finance-portal views, all stored in Cloudflare D1 (`snapshot-sync`).
Growth
7Daily 5:30 AM PT morning briefing — Calendar + Todoist + goals + projects → HTML email
Daily email reminder with weighted-random picks from Jess's caring behaviors list (Imago Exercise 10).
Shared engine for a GEO (generative-engine-optimization) visibility audit: asks every assistant the prompt router carries whether a named business gets recommended, and counts AI-crawler reach from Cloudflare request analytics.
Personal and professional goal tracking with quarterly review protocol.
Daily HTML email roundup curating stories from 40+ RSS feeds across 8 topics (Game Reviews, Album Reviews, Entertainment, Tech, Cybersecurity, Science, Politics, World News) via the cross-provider AI router.
Daily HTML email digest clustering cross-perspective debate topics from 24 opinion sources, with Sunday New Voice Spotlight.
Weekly HTML email spotlighting the 1-3 upcoming technologies worth paying attention to this week, synthesized from 13 curated YouTube channels via a two-pass AI pipeline (per-video extraction + cross-video synthesis).
Health
2Renders the health year files out of the health D1 database and commits them.
Cloudflare Worker that receives Health Auto Export pushes from the iPhone, stores every raw HealthKit sample in the health D1 database, and forwards a flattened payload to the biometric-sync trigger.dev task.
Homelab
25Works recurring Uptime Kuma alerts instead of emailing about them.
Nightly read-only Uptime Kuma collection.
Daily passive probe of every homelab backup's freshness.
Nightly backup of EVERY D1 database on the account — the set is discovered from the Cloudflare API on each run, never declared in a file — to gzipped JSON and SQL in Garage S3 bucket `d1-backup`.
Daily audit of every Cloudflare D1 database the fleet owns — reachability, table freshness, expired-row cleanup, run deadlines, row floors, content rules, period currency, self-reported errors, attendance week coverage and repo file counts — pushing one Uptime Kuma monitor per check.
Runtime-neutral date/time formatting helpers (Pacific Time defaults).
Both halves of the repo's deploy guarantee.
The one Drive-filing program.
Resend-backed send service that other trigger.dev apps call to email a user, via tasks.triggerAndWait("email-sender", { to, subject, html, from?, replyTo?
Dependency-free home for how this repo handles a failed fetch: the default trigger.dev task-retry policy plus the transport-error classifier and cause-chain renderer.
Signed GitHub repository webhooks on Ashkaan/workbench (the issue board routed by LABEL, and its pushes routed by REPOSITORY to the deploy), the three WSP portal repos (routed by REPOSITORY, for the request-thread resync), and the pushes of library, skills and workbench (sent on to their consumers as repository_dispatch).
Turns TrueNAS alerts on Apollo and Hermes into Uptime Kuma up/down.
Invocation-only trigger.dev task that patches + reboots the whole homelab in one pass via a durable D1 state machine resumed by a delayed (+5m) self-trigger that survives the only two runner-killers (Hermes OS reboot + trigger-stack update).
Weekly audit that flags any scheduled task whose p95 runtime is creeping toward its own maxDuration ceiling (the latent-Emma precursor) and pushes one Uptime Kuma heartbeat.
Generic OAuth2 refresh-token flow with 1P-backed storage and verify-after-write.
Hourly active probe of the firewall's FreeRADIUS.
Per-session memory guard and session-revival toolkit for Claude Code remote control on Daedalus.
Daily mirror of every Ashkaan-owned GitHub repo to hermes:/mnt/pool/backup/github via `git clone --mirror` / `git remote update`.
Generic RSS / Atom feed primitives (CDATA/tag stripping, item parsing, feed fetch).
Sunday 3:00 AM PT weekly backup of 11 service exports + network-device configs to 11 fixed Google Drive folders, plus an Uptime Kuma heartbeat per target.
Notices when a Claude Code session is still running but has lost the link that puts it in the phone's session list, and opens one GitHub issue per session asking whether to bring it back — with the last few turns of that conversation, so the thread is recognisable.
Shared SSH execution helper for cross-host commands (truenas, home-assistant, proxmox, daedalus).
The programs that build, check, review and deploy everything else in this repo, minus the ones that moved beside their consumers on 2026-09-21.
Renders and pushes content to the TRMNL OG e-ink display, across five trigger.dev v4 schedules.task.
The one email.
Legal
5Generates and publishes one fresh mass-tort blog post for nulegal.com every Wednesday 09:00 AM PT.
Pointer app — the code lives in the nulegal.com repo (~/code/nulegal.com).
Autonomous lead-lifecycle engine for NuLegal mass-tort referrals.
Sends one approved TCPA letter — the original demand, or the final notice when a claim's response deadline lapsed — via Resend sendEmail, from NuLegal <a@nulegal.com>.
Daily trigger.dev scheduled task that reads each open TCPA claim's response-deadline + status from the records repo (GitHub API) and pushes one Uptime Kuma monitor DOWN + email when any open claim is past its deadline.
Media
11Daily 5:00 AM PT trigger.dev v4 schedules.task — reads the dashboard's `books` rows, resolves each book's Audible cover + rating + review count (cache-first; Audible is the rating source of truth), scores and dense-ranks the queue with the taste-based v2 formula, writes the rating and rank back as dashboard rows, and writes the atomic scores/covers/counts/completed dataset to the `book-ranker` D1 database.
Monthly book-discovery email.
Daily 6:30 AM PT trigger.dev v4 schedules.task — reads the dashboard's `food` rows, gates the due ones, runs the headed-Chrome Google delivery scrape on Daedalus, sticky-merges the per-app delivery list, and writes the changed rows back over the entities API.
Daily 5:00 AM PT trigger.dev v4 schedules.task — fetches the three HowLongToBeat lists, enriches queue games (studio/genre/blurb from each game's HLTB page, gg.deals slug derived, Metacritic critic scraped, series match via the AI router), ranks via the frozen formula, writes the dashboard's `games` rows, and writes the scores/covers/completed dataset to the `game-ranker` D1 database.
Monthly game-discovery email.
trigger.dev v4 schedules.task for daily *arr queue cleanup, qBittorrent + SABnzbd download hygiene, and Apollo orphan cleanup over SSH.
Daily 5:00 AM PT trigger.dev v4 schedules.task — reads the Plex [Beta] Movies section as the scored universe + the Movies Collection for star ratings, enriches each movie via TMDB + the IMDb ratings dataset (stream-filtered), runs the v3 watchlist-derived base scoreMovie formula, writes the dashboard's `movies` rows, and writes the atomic scores/covers/completed dataset to the `movie-ranker` D1 database.
Monthly movie-discovery email.
Event-triggered trigger.dev v4 task — on a gaming-PC Playnite library push, moves newly-owned games out of the HowLongToBeat wishlist (custom list) and into the HLTB backlog via /api/submit, year-aware so a wrong-edition match is never moved.
Daily 5:30 AM PT trigger.dev v4 schedules.task that runs the Stash media library maintenance pipeline: scan, generate phashes, deduplicate via DupFileManager, generate covers/sprites/previews, clean orphaned metadata, and optimise the SQLite database.
trigger.dev v4 schedules.task that discovers new Pinchflat YouTube downloads and imports them into Sonarr via the ManualImport API (Sonarr does the file move).
WSP
44Deterministic CA-labor-code attendance auditor for the 3-person WSP roster.
Makes the live attendance board actually live.
Live technician status board fed by MSPBots + Google Calendar, plus a nightly unapproved QuickBooks Time post derived from the Slack punch log
Receives Autotask ticket callouts and hands each one to whichever trigger.dev tasks care.
Builds wesolve.tech's blog into the best GEO-citable answer surface for LA business IT buyers.
On-demand trigger.dev task that pulls Autotask ticket metrics (current + prior quarter), NinjaOne hardware lifecycle, and wsp-assessments findings for one client + review period, then writes the assembled review snapshot into the `sales-portal` D1 database for the portal's QBR detail view.
The quarterly client newsletter, end to end.
WSP client security assessment on two schedules.
Emails one Connector Program reminder per due connector to a@wesolve.tech via Resend.
Computes a deterministic rolling 13-week First-Time-Resolution percentage from Autotask help-desk tickets once nightly and writes the single ops:ftr-weekly key to the `first-time-resolution-sync` namespace.
Refits the MSP growth model once a month and publishes it as one D1 key.
Pulls Google Search Console search-analytics for sc-domain:wesolve.tech once daily and writes the marketing + ranking_history rows of the `gsc-analyzer` D1 database.
Shared library for the self-closing GitHub-issue loops — the issue-body JSON state fence (parse, render, compare-and-set write, comment markers, notification predicates), the ProjectV2 board half (find-or-create, State column, backfill), and the one script /triage runs to rule on any filing-only loop's issue.
Auto-generates WSP LinkedIn posts on Mon/Tue/Wed mornings — AI drafts a post + branded quote-card image and opens it as a GitHub issue on the WSP LinkedIn Posts board.
Scans BOTH the Sales Navigator and personal LinkedIn inboxes every hour, resolves each sender's identity deterministically (client roster, Autotask contacts, person cards, prior email, recruiter applications), auto-replies to applicants/prospects/vendors/referral-partners, declines rejected candidates once, and puts every ESCALATED thread on the WSP LinkedIn board as a durable GitHub issue carrying a drafted reply — /triage sends it, his own words, or a decline, only when Ashkaan says so.
Performs a single nightly read-modify-write cycle on the mrr-sync D1 client book across three ordered phases — contracts (Autotask contract end dates + WiFi/BPW entries), amounts (Autotask BLK/COM/WiFi MRR), and sheet-counts (per-client Google-Sheet user counts).
Keeps every 1P-rotating OAuth credential's access_token fresh in 1Password via Connect — Strety and QBO.
Nightly, AI-extracts the per-user onboarding date/email/name from Autotask new-user and new-mailbox tickets over a 400-day rolling window, groups the resulting events by calendar month, and writes one onboarding:events:YYYY-MM row per month to the onboarding-tracker D1 database.
Every-5-minute WSP service-desk operations snapshot.
Builds the five review briefs for the WSP team portal from the portal's own generated page documentation, and fans each brief out to the prompt-router panel through the debate skill's dispatcher.
Hourly upkeep for the team portal's object model (portal.wesolve.tech).
Derives every client's price timeline from QuickBooks invoices and publishes it to the price-history-sync D1 database, one row per client.
Emails the monthly annual-price-review cohort to a@wesolve.tech via Resend.
LA law-firm sourcing + AI ICP qualification via a public-source scrape pipeline (Justia listings + CA Bar firm-name rosters + firm sites) — qualified list to the `prospect-qualifier` D1 database, no sending
Phase 3b direct-hire scorer — invite passing applicants to the video screen + score completed screens with Gemini multimodal
Candidate sourcer with two tasks — (1) hourly INBOUND pull (Get on Board / Torre / LinkedIn) → wesolve.tech/api/careers/ingest, and (2) weekday LinkedIn OUTBOUND (Sales Nav rate-governed InMail → careers funnel).
Tracks re-opened Autotask tickets grouped by ISO week and publishes the grouping to the `reopened-ticket-tracker` D1 database (ops:reopened:index + ops:reopened:week:{iso}, `reopened-ticket-tracker`).
Every 30 minutes, polls Zoom Scheduler "Introductory Meeting" bookings and POSTs each to the sales.wesolve.tech intake endpoint, which creates/updates the sales pipeline (deals, companies and contacts in the `sales-portal` D1 database).
Permanent weekly delta-analyzer (App 2 of the 3-app WSP scorecard rebuild).
Works the WSP weekly scorecard's discrepancies itself instead of reporting them.
Monthly WSP EOS-scorecard sales-concentration sync (App 3 of 3).
Weekly WSP EOS-scorecard writer (App 1 of 3).
Nightly per-client service-satisfaction snapshot for the WSP service desk.
6:00 PM PT capture of the WSP "Service Desk Monitoring" Autotask dashboard.
Keeps the vendor-status board on operations.wesolve.tech current by calling the portal's own refresh endpoint every 5 minutes, so the page stops depending on a human opening it.
Triages new Autotask tickets every minute — one AI classification per human ticket plus a deterministic rule chain — and records the proposed actions to the `triage` D1 database.
Nightly onboarding time-estimate classifier for the WSP operations portal.
Daily per-tech weekly timeline writer for operations.wesolve.tech /tech-time.
Weekly TE (time-entry) quality-review email.
Nightly Autotask timesheet quality-flag engine for the configured WSP technicians — 14 flag types over the last 4 ISO weeks, per-tech / team stats, rolling trend, and coaching recommendations.
Works the triage bot's recurring classification mistakes itself instead of reporting them.
Weekly triage-bot accuracy reviewer.
On-demand trigger.dev task (wsp domain-bundle member) that reads the Hudu Company-Overview "VIPs" field, name-matches each VIP to an Autotask contact ID, and updates priority_signals.vip_contact_ids in the `triage` D1 database's config row.
Every 2 hours, syncs Zoom AI Companion meeting summaries (plus the cloud-recording transcript when one exists) into the context repo as browseable markdown under knowledge/wsp/meetings/.