Operations Continuity Plan
The “if the Director of Operations is suddenly unavailable” runbook — what the LMR digital system is, what has to keep running, who to call, and where everything lives. Written so someone who is not the person who built it can keep the lights on.
info@letmerun.org as admins. (3) The one open item is the secrets vault — the
keys & logins still live on JB’s laptop; a shared password manager (“LMR Ops Secrets”)
is being set up (see the last section). Until it exists, a successor can reach the files and both admin
consoles but would still recover vendor passwords the hard way (resets via the Microsoft 365 mailboxes).
Work these in order. Nothing here is urgent in the first hour — the public website and registration keep running on their own, and the staff tools keep showing the last good data. Breathe first, then go top to bottom.
- You already have the access. You’re both Google Workspace Super Admins, Microsoft 365 Global Admins, and Managers on the “LMR Operations — Toolchain & Docs” Shared Drive. Nothing to request or unlock.
- Open the Shared Drive. Google Drive → Shared drives → “LMR Operations — Toolchain & Docs.” Everything lives there — the code, the docs, and this plan. Start by reading
LMR_Master_Context.md(the deep map) and this page. - Get the keys. Open the “LMR Ops Secrets” vault (Bitwarden) — every password and key is there, shared with you both.
Until the vault is set up: the keys are on Jason’s laptop. You can still recover most vendor logins by resetting their passwords through the
letmerun.orgmailboxes in Microsoft 365 (which you both admin) — that’s why the M365 access matters. - Keep the sites running. dashboard.letmerun.org and coaches.letmerun.org run themselves off the database. If one won’t load, roll it back: Netlify → the site → Deploys → Publish the last good deploy.
- The daily numbers can wait. The daily refresh (fresh registration counts) is a manual routine on Jason’s machine — Section 2 below. If it doesn’t run, nothing breaks and nothing is lost; the sites just show yesterday’s numbers. Don’t stress it in week one.
- If letmerun.org (the public website) breaks — that’s WordPress on WiT’s hosting. Call WiT (Section 3). You can’t fix that hosting yourselves, and that’s expected — it’s their job.
- Bring in a technical hand. For anything that means running or changing the code, hire or borrow a technical person and hand them three things: the Shared Drive, the vault, and this plan + Master Context. That is genuinely everything they need to keep it running or rebuild it.
- Then read the rest of this page — the full map of every system, who to call, and how each piece recovers.
1 · The 30-second picture
LMR’s digital system is one data source feeding three tools. Families register in Pinwheel (pinwheel.us). Everything else is a downstream view of that:
PINWHEEL (system of record — families register here)
|
+----------------+------------------+
| |
nightly auto-sync manual Excel export --> JB's laptop
| |
v v (local Python turns exports into data)
WordPress (letmerun.org) +-----------+-------------------+
| | | |
v v v v
1) PUBLIC TEAMS LIST 2) STAFF DASHBOARD 3) COACH HUB
letmerun.org/regions dashboard.letmerun.org coaches.letmerun.org
(public) (staff login) (coach login)
Tools 2 and 3 read a shared database (Supabase) and are refreshed by a manual daily routine JB runs. Tool 1 (the public teams list) refreshes itself live from Pinwheel — see the Resources card “How the Public Teams List Gets Its Data.”
2 · The one job that must not stop: the Daily Refresh
Once a day, the staff Dashboard and Coach Hub need fresh registration and roster numbers. Today this is a manual routine on JB’s Windows laptop, not an automatic server job:
- Download the current Pinwheel exports (Seasonal Participant Details + Assigned Volunteers) to the laptop’s Downloads folder.
- Double-click
LMR_Daily_Refresh.batinC:\Users\jmbai\LMR. It runs three scripts that read the exports and push the data into Supabase. - Confirm each report says it reached Supabase, then spot-check both live sites.
If the refresh is skipped, nothing breaks and no data is lost — the sites simply show yesterday’s numbers until it runs again. The public teams list is unaffected (it’s live from Pinwheel). So: a missed day is an inconvenience, not an emergency.
3 · The systems & who holds the keys
Every moving part, what it does, and where access lives. Fill in the blanks only you can answer.
| System | What it does | Access / where the login lives |
|---|---|---|
| Pinwheel (pinwheel.us) | Registration — the system of record for every boy, coach, team, and payment. | LMR Pinwheel admin account. key person |
| WordPress + Divi — letmerun.org | The public website, incl. the regional teams lists. | WP admin login. Built by WiT Group, maintained by JB. |
| WP Engine (hosting) | Hosts WordPress; holds server-level backups. | Only WiT has portal access — LMR does not. single point |
| Netlify | Hosts the Dashboard & Coach Hub + their serverless functions. Deploys happen here. | Netlify account. Sites: super-melba-887aa5 (Dashboard), rainbow-trifle-740737 (Coach Hub). |
| Supabase | The secure database behind both staff tools — where PII (emails/phones) and OS data live. | Supabase account (project yvrxssdyenuqkugwzxgo). |
| Resend | Sends the 6-digit sign-in code emails (from info@letmerun.org). | Resend account. |
| Raceplanner / Pinwheel API | Live team data for the public teams list. | Token stored server-side (Netlify env var) + in the WP sync plugin. Reissued by WiT. |
| Domain / DNS | Points letmerun.org + the subdomains at the right hosts. | Domain registrar account. |
| Google Workspace | Hosts the Shared Drive “LMR Operations — Toolchain & Docs” (the code + docs) and Drive admin. | Super admins: JB, Lane, Michelle, info@. Drive Managers: JB, Lane, Michelle. redundant |
| Microsoft 365 | Email & identity (letmerun.org mailboxes) — the plane that recovers vendor logins via password-reset emails. | Global admins: JB, Lane, Michelle, info@. redundant |
info@letmerun.org so
an admin can always recover them. The passwords themselves go in the LMR Ops Secrets vault (last
section), never in this document.4 · Single points of failure (the honest list)
These are the places where “one person or one machine” is the whole story. Reducing them is the point of the Google Shared Drive move and the fill-ins above.
- The secrets still live on one laptop. The code & docs are now mirrored to the org-owned
Shared Drive (three Managers), so the toolchain files survive. What’s still laptop-only is
the secrets — the Supabase service key in
lmr_config.pyplus the vendor tokens and logins. Until the shared vault exists, losing the laptop means recovering those keys the hard way (vendor resets through the Microsoft 365 mailboxes). The vault is the last step. - Only WiT can reach WP Engine. LMR cannot pull its own website/server backups; if the site goes down, the path is call WiT, not self-serve. Recommended fix (small lift, not a project): have WiT add LMR as a user on the WP Engine account so LMR isn’t locked out of its own hosting.
- Deploys are manual. Updating the Dashboard or Coach Hub means dragging a folder onto Netlify by hand. No CI, no automation — whoever does it needs the Netlify login and the folder.
- The knowledge is written down in a few key files (below), but they assume a fair bit of context. A successor should read them with a technical helper the first time.
5 · If something breaks — quick triage
| Symptom | First move |
|---|---|
| letmerun.org is down or broken | Contact WiT Group — it’s their WordPress/WP Engine stack. LMR can’t fix hosting directly. |
| Dashboard or Coach Hub won’t load | Check Netlify (is the site up? recent bad deploy? roll back to the prior deploy in Netlify’s Deploys tab). |
| Nobody can sign in (no code email) | Check Resend (is it sending?) and Supabase (is the project up?). The code emails come from info@letmerun.org via Resend. |
| Sites show stale numbers | The daily refresh hasn’t run. Not urgent — run it when possible (Section 2). |
| Public teams list looks wrong | Decide if it’s a Pinwheel field (fix in Pinwheel) or an LMR field (fix in the Dashboard). See the “How the Teams List Gets Its Data” card. |
6 · Where everything is written down
The deep knowledge lives in a small set of files in C:\Users\jmbai\LMR (and, once set up,
on the Google Shared Drive):
LMR_Master_Context.md— the single source of truth: architecture, infrastructure, brand, locked decisions. Start here.CLAUDE.md— the working “glance” state and conventions.LMR_Pipeline.md— the backlog / future work.LMR_Recovery_Runbook.md& the various*_Deploy_Runbook.md— step-by-step recovery and deploy procedures.- The daily refresh procedure — captured as the
daily-pw-reportroutine.
7 · The one open item: the secrets vault in progress
This is the last leg. The Shared Drive holds the code; the vault holds the keys that make it run. Plan: one shared password-manager vault named “LMR Ops Secrets” (Bitwarden pricing requested Jul 14, 2026), shared with JB, Lane, and Michelle, each with their own login + two-factor. When it exists, everything below moves off JB’s laptop into it:
- Supabase — project URL, the service key, and the anon key.
- Netlify — account login + a personal access token.
- Pinwheel / Raceplanner — the Pinwheel admin login + the API token.
- WordPress / WP Engine — the WP admin login, and (once obtained) LMR’s own WP Engine access; the WiT contact until then.
- Resend — account login + API key (sends the sign-in codes).
- Domain registrar — login for letmerun.org DNS.
- Break-glass admin — the
info@letmerun.orgpassword, and the Google Workspace + Microsoft 365 admin recovery details. - A secure note with the full contents of
lmr_config.py, so the file can be recreated on a new machine from scratch.
Internal continuity plan — for LMR leadership & board. Two “Jason: fill in” items remain (WiT contact + vendor account emails), and the secrets vault is being set up. Revisit whenever a vendor, account owner, or the backup person changes. Last structural update: July 14, 2026.