Build

Apps

AI

7

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.

Connects to
prompt-router (repo-investigation agent chain + repo-crosscheck-of-* refuter, on Daedalus)T3 message store (via the skills' close/scripts/corrections.sh, over SSH)trigger.dev (the optimizer-fixer dispatch)SSH (Daedalus)Cloudflare D1Uptime Kuma
trigger.devMon-Fri 1:00 AM PT

Pointer app — the code lives in the dashboard.ashkaan.me repo (github.com/Ashkaan/dashboard.ashkaan.me, checked out at ~/code/dashboard.ashkaan.me).

Connects to
Cloudflare D1GitHub APIUptime Kuma
ManualCommit-driven (repository_dispatch from this repo's post-commit hook) + manual workflow_dispatch

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

Connects to
ResendCloudflare D1Uptime Kuma1Password
trigger.devMon 6:05 AM PT

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

Connects to
GitHub1PasswordUptime Kumaprompt-router (identity layer 2, `judgment` row)Daedalus (SSH, through the prompt router's CLI slots)
trigger.devEvent-driven (from daily-optimizer, weekdays 1:00 AM PT)

Cross-provider AI prompt router.

Connects to
Google GeminiCodex CLIClaude Code CLIGrok CLIUptime Kuma1Password
ManualLibrary

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.

Connects to
aptnpmClaude CodeGitHub
trigger.devNightly 2:30 AM PT

Remote tool server the Claude app's voice mode calls, so Ashkaan can talk to his work from his phone.

Connects to
T3 Code1PasswordCloudflare (tunnel, Access)GitHub (via the triage skill's scripts)Uptime Kuma
Node 26 on DaedalusAlways on (systemd user unit)

Client

1

The portal request loop.

Connects to
integrations/github/github_api.ts (issues — create, comment, list, close, reopen, search)integrations/cloudflare/cloudflare.ts (Pages deployment poll)apps/ai/prompt-router/router.ts (restatement + readiness decision, and the pre-publish review of the change — never on the vendor that wrote it)apps/homelab/ssh/ssh_exec.ts (headless claude --print on Daedalus)integrations/resend (owner notice per request; submitter nudge per turn that awaits them; outcome emails)Uptime Kuma (per-run heartbeat receipt)
trigger.devnone (push only)

Finance

3

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

Connects to
Kalshi (via integrations/kalshi/)Polymarket (via integrations/polymarket/)Cloudflare D1 + R2 (via integrations/cloudflare/d1.ts + r2.ts)Uptime Kuma (via integrations/uptime-kuma/uptime-kuma.ts)1Password (via integrations/1password/op_helper.ts)
trigger.devevery 15 min (cycle); hourly at :07 (settlement)

Monthly portfolio review email (1st Monday).

Connects to
Monarch Money (via integrations/monarch/monarch.ts)Finnhub (via integrations/finnhub/finnhub.ts)The AI prompt router (via apps/ai/prompt-router/router.ts — the vendor is the policy's choice, not this app's)Resend (via integrations/resend/resend.ts)1Password (via integrations/1password/op_helper.ts)Uptime Kuma (via integrations/uptime-kuma/uptime-kuma.ts)
trigger.devMon 5:38 AM PT (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`).

Connects to
QuickBooks Online (via integrations/qbo/qbo.ts)Monarch (via integrations/monarch/monarch.ts)Autotask PSA (via integrations/autotask/autotask.ts)Hudu (via integrations/hudu/hudu.ts — read-only client-codename lookup)Uptime Kuma (via integrations/uptime-kuma/uptime-kuma.ts)Cloudflare D1 (via integrations/cloudflare/d1.ts + packages/snapshot-sync-db; reads packages/scorecards-db)Daedalus-via-SSH (targets.json + client-industries.md reads only; no writes)
trigger.devDaily 4:00 AM PT

Growth

7

Daily 5:30 AM PT morning briefing — Calendar + Todoist + goals + projects → HTML email

Connects to
googletodoistuptime-kuma1passwordssh (Daedalus)
trigger.dev30 5 * * * America/Los_Angeles

Daily email reminder with weighted-random picks from Jess's caring behaviors list (Imago Exercise 10).

Connects to
Resend (via integrations/resend/resend.ts)
trigger.devDaily 5:50 AM PT

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.

Connects to
prompt-router (apps/ai/prompt-router) — the assistants, with live web searchCloudflare analytics (integrations/cloudflare) — crawler user-agent counts1Password
node (library module — imported, never deployed)None — run on demand by its callers

Personal and professional goal tracking with quarterly review protocol.

Connects to
trigger.dev (self-hosted v4 at trigger.ashkaan.me)Daedalus SSH (repo reads + writes via the local clone)Cloudflare D1 (reads the `mrr-sync` database's `clients` table for the MRR cell)Cloudflare D1 (reads health.daily for the Sleep Time cell, dashboard for Games, reflection.weeks for the WSP hrs/wk cell)1Password (Cloudflare API token via getCred)Uptime Kuma (push monitor on slug app-growth-goals-sync)
trigger.devEvent-driven (producer-fired triggerTask)

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.

Connects to
YouTube channel search (no auth; IGN + GameSpot review videos)Resend (via integrations/resend/resend.ts)AI Router (Gemini/Codex/Haiku) via apps/ai/prompt-router/router.tsCloudflare KV (via integrations/cloudflare/cloudflare.ts)RSS feeds (40+ across 8 topics)
trigger.devDaily 5:08 AM PT

Daily HTML email digest clustering cross-perspective debate topics from 24 opinion sources, with Sunday New Voice Spotlight.

Connects to
Resend (via integrations/resend/resend.ts)AI Router (Gemini/Codex/Haiku) via apps/ai/prompt-router/router.tsRSS feeds (24 sources + 15-source Sunday discovery pool)
trigger.devDaily 5:00 AM PT

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

Connects to
Resend (via integrations/resend/resend.ts)YouTube (RSS + in-container yt-dlp)AI Router (Gemini/Codex/Haiku) via apps/ai/prompt-router/router.ts
trigger.devWeekly Monday 5:16 AM PT

Health

2

Renders the health year files out of the health D1 database and commits them.

Connects to
Cloudflare D1GitHub APITrigger.devUptime Kuma
trigger.devPush-driven (Health Auto Export → hae-capture Worker) PLUS a nightly 05:30 America/Los_Angeles cron that regenerates the view from D1

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.

Connects to
Cloudflare D1Trigger.dev
Cloudflare WorkersPush-driven (Health Auto Export automation on the iPhone)

Homelab

25

Works recurring Uptime Kuma alerts instead of emailing about them.

Connects to
GitHubtrigger.devKomodoDaedalus SSHResend1PasswordUptime Kuma
trigger.devEvent-driven (from alert-triager, 1:00 AM PT) + hourly poll at :41 PT

Nightly read-only Uptime Kuma collection.

Connects to
Uptime KumaHermes SSHtrigger.devGitHub1Password
trigger.devDaily 1:00 AM PT

Daily passive probe of every homelab backup's freshness.

Connects to
SSH (runner → Hermes:8222 + Apollo:8222)CubeBackup REST APITrueNAS midcltGarage S3Uptime Kuma
trigger.devDaily 6:00 AM PT

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

Connects to
Cloudflare D1 APIGarage S3 (SigV4)Uptime Kuma
trigger.devDaily 4:15 AM PT

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.

Connects to
Cloudflare D1GitHubUptime Kuma1Password
trigger.devDaily 6:30 AM PT

Runtime-neutral date/time formatting helpers (Pacific Time defaults).

ManualLibrary

Both halves of the repo's deploy guarantee.

Connects to
Trigger.devUptime KumaDaedalus (SSH)
trigger.devDaily 7:15 AM PT (reconcile) + on every push to main (deploy)

The one Drive-filing program.

Connects to
Google Drive1Password
ManualLibrary

Resend-backed send service that other trigger.dev apps call to email a user, via tasks.triggerAndWait("email-sender", { to, subject, html, from?, replyTo?

Connects to
Resend1PasswordTrigger.dev
trigger.devOn demand

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.

ManualLibrary

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

Connects to
GitHub webhooksGitHub REST (repository_dispatch)Uptime Kumatrigger.dev REST trigger endpointCloudflare Workers
Cloudflare WorkersNone — event-driven

Turns TrueNAS alerts on Apollo and Hermes into Uptime Kuma up/down.

Connects to
TrueNASUptime KumaCloudflare1Password
Cloudflare WorkersOn demand (event-driven; no timer)

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

Connects to
Cloudflare D1KomodoUniFipfSenseHome AssistantProxmoxTrueNASUptime KumaCloudflare KV1PasswordGitHubprompt-router
trigger.devOn demand (invocation-only; no cron)

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.

Connects to
trigger.devGitHubUptime Kuma1Password
trigger.devWeekly Mon 6:00 AM PT

Generic OAuth2 refresh-token flow with 1P-backed storage and verify-after-write.

Connects to
1Password
ManualLibrary

Hourly active probe of the firewall's FreeRADIUS.

Connects to
SSH (runner → pfSense 10.1.0.1:1622 as Automation)FreeRADIUS via radclient, run on the firewallUptime Kuma1Password (runner SSH key)
trigger.devHourly, on the hour (America/Los_Angeles)

Per-session memory guard and session-revival toolkit for Claude Code remote control on Daedalus.

Connects to
claude-code
Node 22 on DaedalusEvery 60s (rc-session-guard.timer, user manager)

Daily mirror of every Ashkaan-owned GitHub repo to hermes:/mnt/pool/backup/github via `git clone --mirror` / `git remote update`.

Connects to
GitHub APISSH (runner → Hermes:8222)Uptime Kuma
trigger.devDaily 3:00 AM PT

Generic RSS / Atom feed primitives (CDATA/tag stripping, item parsing, feed fetch).

ManualLibrary

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.

Connects to
todoistmonarchgoogleunifipfsensetruenasuptime-kuma1passwordtrigger-dev
trigger.devSunday 03:00 PT (cron 0 3 * * 0, America/Los_Angeles)

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.

Connects to
GitHubDaedalus SSHUptime Kumatrigger.dev1Password
trigger.devEvery 30 minutes

Shared SSH execution helper for cross-host commands (truenas, home-assistant, proxmox, daedalus).

Connects to
TrueNASHome AssistantProxmox
ManualLibrary

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.

Connects to
Trigger.dev1PasswordUptime Kuma
Bash + Node (native type-stripping)None — invoked by the loop skills, the push deploy, and the index workflow

Renders and pushes content to the TRMNL OG e-ink display, across five trigger.dev v4 schedules.task.

Connects to
TRMNL (custom-plugin webhook + image webhook)SSH (runner → Daedalus clone: goals.md / projects/README.md / game cards)Cloudflare D1 (`game-ranker`.dataset — games scores + covers)prompt-router (til science fact; Gemini→Codex→Haiku)Uptime Kuma
trigger.devfocus-board */15 min · til 08:00 · gratitude 10:00 · philosophy 12:00 · games 14:00 (PT)

The one email.

Connects to
GitHubResend1PasswordUptime Kumatrigger.dev
trigger.devDaily at 5:30 AM PT

Legal

5

Generates and publishes one fresh mass-tort blog post for nulegal.com every Wednesday 09:00 AM PT.

Connects to
prompt_ai_neutral (Gemini/Codex/Haiku fallback chain via apps/ai/prompt-router/router.ts)nulegal.com repo on Daedalus (via DAEDALUS_SSH_PRIVATE_KEY)Google News RSS (4-category fan-out)Cloudflare Pages (auto-deploys on git push to nulegal.com main)Uptime Kuma (push monitor `app-legal-nulegal-blog-writer`)
trigger.devWeekly Wednesday 09:00 AM PT (cron `0 9 * * 3` America/Los_Angeles)

Pointer app — the code lives in the nulegal.com repo (~/code/nulegal.com).

Connects to
Cloudflare PagesUptime Kuma
ManualEvent-driven (intake form submissions)

Autonomous lead-lifecycle engine for NuLegal mass-tort referrals.

Connects to
Resend (NuLegal account, a@nulegal.com — lead-facing only, since 2026-09-07)DocuSeal (docuseal.ashkaan.me, templates 1 / 7 / 8)Google Gmail (read a@nulegal.com replies, googlePersonal)GitHub Issues + Projects v2 (Ashkaan/workbench, githubPatWorkflow)Cloudflare D1 (`nulegal-pipeline` database)prompt-router (reply classification)Uptime Kuma
trigger.dev (node-22, legal domain bundle)0 */3 * * * (every 3 hours (00:00, 03:00, … PT))

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

Connects to
Cloudflare D1Resendapps/legal/tcpa-deadline-monitor (re-run on a final notice)
trigger.devOn demand (invoked by /tcpa-claim)

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.

Connects to
GitHub API (Ashkaan/library — the claim READMEs)Uptime Kuma1Password
trigger.devDaily 09:00 AM PT

Media

11

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

Connects to
Audible catalog API (api.audible.com, keyless)Dashboard entities API (via integrations/dashboard/entities.ts)Cloudflare D1 (via integrations/cloudflare/d1.ts + packages/media-db)Uptime Kuma
trigger.devDaily 5:00 AM PT

Monthly book-discovery email.

Connects to
Cloudflare D1 (via integrations/cloudflare/d1.ts + packages/media-db)ResendAudible catalog API (api.audible.com, keyless — shared with book-ranker)OpenLibrary (first-publication year, keyless)AI router (Gemini, web search on; its codex/haiku fallback slots ssh to Daedalus)1Password Connect
trigger.devMonthly — last Sunday 5:36 AM PT (fires every Sunday; runtime gate no-ops all but the last)

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.

Connects to
Google delivery search (headed Chrome on Daedalus, via integrations/google/delivery_search.ts)Dashboard entities API (via integrations/dashboard/entities.ts)Daedalus over SSH (the scrape runs there, not in the container)Uptime Kuma
trigger.devDaily 6:30 AM PT

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.

Connects to
HowLongToBeat list API + game pages (via integrations/hltb/hltb.ts)MetacriticAI router (series match — the one remaining AI call)Dashboard entities API (via integrations/dashboard/entities.ts)Cloudflare D1 (via integrations/cloudflare/d1.ts + packages/media-db)Trigger.dev (fires goals-sync)Uptime Kuma
trigger.devDaily 5:00 AM PT

Monthly game-discovery email.

Connects to
Cloudflare D1 (via integrations/cloudflare/d1.ts + packages/media-db)ResendAI router (Gemini, web search on)1Password Connect
trigger.devMonthly — last Sunday 5:30 AM PT (fires every Sunday; runtime gate no-ops all but the last)

trigger.dev v4 schedules.task for daily *arr queue cleanup, qBittorrent + SABnzbd download hygiene, and Apollo orphan cleanup over SSH.

Connects to
SonarrRadarrqBittorrentSABnzbdApollo over SSHUptime Kuma1Password
trigger.devDaily 3:15 AM PT

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.

Connects to
PlexTMDBIMDb datasetsDashboard entities API (via integrations/dashboard/entities.ts)Cloudflare D1 (via integrations/cloudflare/d1.ts + packages/media-db)1Password ConnectUptime Kuma
trigger.devDaily 5:00 AM PT

Monthly movie-discovery email.

Connects to
Cloudflare D1 (via integrations/cloudflare/d1.ts + packages/media-db)ResendAI router (Gemini, web search on)1Password Connect
trigger.devMonthly — last Sunday 5:36 AM PT (fires every Sunday; runtime gate no-ops all but the last)

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.

Connects to
HowLongToBeat API (via integrations/hltb/hltb.ts)Daedalus over SSH (the live `op read` of the HLTB cookie)1Password ConnectUptime Kumaemail-sender (trigger.dev)
trigger.devEvent (Playnite menu push, no timer)

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.

Connects to
Stash (GraphQL API at `http://10.2.0.27:9999`)Uptime Kuma
trigger.devDaily 5:30 AM PT

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

Connects to
SonarrPinchflatApollo over SSHUptime Kuma1Password
trigger.devDaily 3:30 AM PT

WSP

44

Deterministic CA-labor-code attendance auditor for the 3-person WSP roster.

Connects to
MSPBotsCloudflare D1GmailUptime Kuma1Password
trigger.devDaily 10 PM PT; Friday runs also email HR

Makes the live attendance board actually live.

Connects to
AutotaskGoogleCloudflaretrigger.dev1Password
Cloudflare WorkersOn demand (event-driven; no timer)

Live technician status board fed by MSPBots + Google Calendar, plus a nightly unapproved QuickBooks Time post derived from the Slack punch log

Connects to
AutotaskGoogle CalendarMSPBotsQuickBooks TimeGitHubResendUptime Kuma1Password
trigger.devSnapshot every minute; calendar watch hourly (full refresh 04:00); nightly post 00:15 + 11:15 PT

Receives Autotask ticket callouts and hands each one to whichever trigger.dev tasks care.

Connects to
AutotaskCloudflaretrigger.dev1Password
Cloudflare WorkersOn demand (event-driven; no timer)

Builds wesolve.tech's blog into the best GEO-citable answer surface for LA business IT buyers.

Connects to
prompt_ai_neutral (Gemini/Codex/Haiku fallback chain via apps/ai/prompt-router/router.ts)wesolve.tech repo on Daedalus (via DAEDALUS_SSH_PRIVATE_KEY)Google News RSS (3-category fan-out)Cloudflare Pages (auto-deploys on git push to wesolve.tech main)Uptime Kuma (push monitor `app-wsp-blog-writer`)
trigger.devblog-writer Weekly Monday 09:00 AM PT (`0 9 * * 1`) + blog-writer-refresh Weekly Thursday 09:00 AM PT (`0 9 * * 4`), America/Los_Angeles

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.

Connects to
AutotaskNinjaOneCloudflare D11Password
trigger.devOn demand (triggered by sales.wesolve.tech "Pull data")

The quarterly client newsletter, end to end.

Connects to
ResendAutotaskCloudflare D1Gmail (read)Uptime Kuma1Password
trigger.devstats poller and reply puller daily 08:00 PT; candidate fetch, assembler and sender on demand from the portal

WSP client security assessment on two schedules.

Connects to
Cloudflare D1Google Workspace (Admin SDK + Cloud Identity)Microsoft 365 (Graph)NinjaOne (NinjaRMM)Uptime Kuma1Password
trigger.devWeekly Monday 4:00 AM PT (assessment) + daily 6:00 AM PT (subdomain refresh)

Emails one Connector Program reminder per due connector to a@wesolve.tech via Resend.

Connects to
Cloudflare D1Resend1PasswordUptime Kuma
trigger.devHourly (sends only when the configured hour-in-timezone matches, business days only)

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.

Connects to
AutotaskCloudflare D1Uptime Kuma1Password
trigger.devNightly 4:29 AM PT

Refits the MSP growth model once a month and publishes it as one D1 key.

Connects to
AutotaskCloudflare D1GitHub1PasswordUptime Kuma
trigger.devMonthly, 2nd at 5:41 AM PT

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.

Connects to
Google Search ConsoleCloudflare D1Uptime Kuma1Password
trigger.devDaily 6:00 AM PT

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.

Connects to
GitHub
libraryNone — it is a library with no tasks and no cron.

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.

Connects to
LinkedIn Share on LinkedIn API (WSP Content Publisher app)Cloudflare D1 (linkedin-publisher: post_log, rejection_log)apps/ai/prompt-router/router.ts (in-process, drafting only — the poll and the scripts make no AI call)GitHub issues + Projects v2, via apps/wsp/issue-loop/Playwright on Daedalus (branded quote-card screenshot via apps/homelab/ssh/ssh_exec.ts)The `linkedin-publisher` D1 database (technique-bank snapshot + burned-source history)integrations/resend/resend.ts (in-process: the token-expiry warning only)Uptime Kuma (per-task heartbeat receipts)
trigger.devM/T/W 4:00 AM PT (draft), hourly (poll — the expiry and lost-claim sweep), daily 6 AM PT (cleanup)

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.

Connects to
LinkedInGitHubCloudflare D1AutotaskGmailResendUptime Kuma
trigger.devHourly at :30 PT — scan, auto-reply and draft; a drafted reply is sent on demand by /triage (run-triage.sh send)

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

Connects to
AutotaskCloudflare D1Google Sheets1PasswordUptime Kuma
trigger.devNightly 4:19 AM PT (mrr-sync) + hourly :49 PT (mrr-sync-roster)

Keeps every 1P-rotating OAuth credential's access_token fresh in 1Password via Connect — Strety and QBO.

Connects to
1PasswordTrigger.devUptime KumaGmail
trigger.devEvery 5 minutes — deliberately shorter than the 15-minute refresh margin, so a token is always refreshed a full tick before it expires

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.

Connects to
AutotaskCloudflare D1GitHub APIGemini / prompt-routerUptime Kuma1Password
trigger.devNightly 4:24 AM PT (cron 24 4 * * *)

Every-5-minute WSP service-desk operations snapshot.

Connects to
AutotaskQuickBooks OnlineCloudflare D1Uptime Kuma1Password
trigger.devEvery 5 minutes PT (the overview), plus hourly at :07 PT (the PTO sync)

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.

Connects to
githubprompt-router
Manualnone (manual)

Hourly upkeep for the team portal's object model (portal.wesolve.tech).

Connects to
Cloudflare D1Cloudflare Access (dashboard-probe service token)1PasswordUptime Kuma
trigger.devHourly, 17 minutes past (cron 17 * * * *)

Derives every client's price timeline from QuickBooks invoices and publishes it to the price-history-sync D1 database, one row per client.

Connects to
QuickBooks OnlineCloudflare D11PasswordUptime Kuma
trigger.devWeekly, Mondays 05:41 PT

Emails the monthly annual-price-review cohort to a@wesolve.tech via Resend.

Connects to
Resend1PasswordUptime KumaCloudflare Access (dashboard-probe service token)
trigger.devMonthly, 1st at 15:00 UTC (08:00 PT summer / 07:00 PT winter)

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

Connects to
Justia (public listings, rendered on Daedalus)CA State Bar AdvancedSearchGoogleGitHubCloudflare D1prompt-routerUptime Kuma
trigger.devWeekly Sunday 08:00 PT, plus on-demand

Phase 3b direct-hire scorer — invite passing applicants to the video screen + score completed screens with Gemini multimodal

Connects to
ResendGemini (multimodal transcribe + score)Garage S3 (careers-video, resumes)Cloudflare D1Uptime Kuma1Password
trigger.devNone — event-driven since 2026-06-13; fired per candidate by the wesolve.tech apply, screen-complete and attach-resume routes.

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

Connects to
LinkedIn / Sales Navigator (Playwright on Daedalus)Get on BoardTorreGitHubCloudflare D1Uptime Kuma
trigger.devNone while paused — both crons are commented out (2026-08-18). When resumed: inbound hourly on the hour, outbound weekdays 10:20 PT.

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`).

Connects to
AutotaskCloudflare D1Uptime Kuma1Password
trigger.devIncremental every 5 min PT + full sharded every 3h PT (one ISO week/run)

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

Connects to
ZoomCloudflare Access (service token)Cloudflare D1 (wesolve-tech, read-only)1Password (Connect, in-container Zoom creds)Uptime Kuma
trigger.devEvery 30 min (0,30 * * * *, America/Los_Angeles)

Permanent weekly delta-analyzer (App 2 of the 3-app WSP scorecard rebuild).

Connects to
StretyCloudflare D1 (`scorecards`)Gemini / prompt-routerUptime Kuma1Password
trigger.devThu 12:30 PM PT

Works the WSP weekly scorecard's discrepancies itself instead of reporting them.

Connects to
GitHub (REST issues + GraphQL Projects v2)ResendSSH to Daedalus (headless Claude)Uptime Kuma1Password
trigger.devEvent (Thursday, from scorecard-analyzer) + hourly reply poll

Monthly WSP EOS-scorecard sales-concentration sync (App 3 of 3).

Connects to
QuickBooks OnlineAutotaskCloudflare D1 (`scorecards`)GitHub (sshExec — the client→industry mapping only)Uptime Kuma1Password
trigger.devFires daily at midnight PT; real work on the first Tuesday only (other fires push an artifact-freshness heartbeat)

Weekly WSP EOS-scorecard writer (App 1 of 3).

Connects to
AutotaskQuickBooks OnlineZoomGoogle CalendarCloudflare D1StretyCloudflare D1 (`scorecards`)Uptime Kuma1Password
trigger.devMon 12:05 AM PT

Nightly per-client service-satisfaction snapshot for the WSP service desk.

Connects to
AutotaskCloudflare D1Gemini / prompt-routerUptime Kuma1Password
trigger.devNightly 04:04 AM PT (4 4 * * * America/Los_Angeles)

6:00 PM PT capture of the WSP "Service Desk Monitoring" Autotask dashboard.

Connects to
AutotaskCloudflare D1ResendUptime Kuma1Password
trigger.dev0 18 * * * (6:00 PM PT, daily — email Mon–Fri only)

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.

Connects to
Cloudflare AccessCloudflare D11Password
trigger.devEvery 5 minutes PT

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.

Connects to
Autotask (Datto PSA)Hudu (client documentation, per assist note)NinjaOne (client fleet platform, daily)Cloudflare D1Gemini / prompt-routerGitHub (classification guide, raw)Uptime Kuma1Password
trigger.devEvery minute PT (the reconciler), plus per-ticket on the Autotask webhook; assist-note every 15 min + webhook; client-platform daily 04:20 PT

Nightly onboarding time-estimate classifier for the WSP operations portal.

Connects to
AutotaskCloudflare D1Gemini / prompt-routerUptime Kuma1Password
trigger.devNightly 04:19 AM PT (19 4 * * * America/Los_Angeles)

Daily per-tech weekly timeline writer for operations.wesolve.tech /tech-time.

Connects to
AutotaskMSPBotsCloudflare D1Uptime Kuma1Password
trigger.devDaily 00:05 AM PT

Weekly TE (time-entry) quality-review email.

Connects to
cloudflare (the `timesheet-reviewer` D1 database read/write)trigger-dev (cross-project email-sender trigger)uptime-kuma (heartbeat)
trigger.devMon 08:00 PT (cron 0 8 * * 1, America/Los_Angeles)

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.

Connects to
AutotaskCloudflare D1Uptime Kuma1Password
trigger.devNightly 4:09 AM PT

Works the triage bot's recurring classification mistakes itself instead of reporting them.

Connects to
GitHub (REST issues + GraphQL Projects v2)Cloudflare D1ResendSSH to Daedalus (headless Claude, two repos)Uptime Kuma1Password
trigger.devEvent (Monday, from triage-reviewer) + hourly reply poll

Weekly triage-bot accuracy reviewer.

Connects to
AutotaskCloudflare D1trigger.dev (the triage-fixer dispatch)GitHub (reading triage-fixer's issues for the verification round-trip)Uptime Kuma1Password
trigger.devMonday 01:30 PT (cron 30 1 * * 1, TZ America/Los_Angeles)

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.

Connects to
HuduAutotaskCloudflare D1Uptime Kuma1Password
trigger.devOn demand (manual dispatch)

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

Connects to
ZoomGitHubUptime Kuma
trigger.devEvery 2 hours (cron 0 */2 * * *, America/Los_Angeles)