High-level Todo · synthesized from 5 open inboxes + compliance
HighMedLowCompliance
High priority
HIGHFO54crm / calendar · push booking `venueAddress` into the Google Calendar event `location` field.2026-06-13
HIGHFO42crm / clients · add edit capability to clients — currently read-only (just headings, not fully readable); need full CRUD for client contact/profile data2026-06-13
HIGHFO33CRM / bookings · once a booking is "confirmed", the booking itself needs a confirm button, likely on the name tag in the right-side widget; flow: change pipeline to "confirmed", expose "invoice now" on the name, send invoice, expose the client in Clients, show all history (quote request, quote, acceptance, other emails, invoice), then once paid move pipeline from invoiced to booked2026-06-13
HIGHFO22CRM / billing · clients need invoices raised and recurring billing set up — 9 counterparties seeded 2026-06-12 from Customers.csv (andrew@waglandtextiles.com, bedatec, CW Make A Difference, Eden Brooke, Jackson Toms, PMC Rentals, Samantha Carbon, Staffs Council, We Are Lumina) via `src/dev/import-folium-customers.ts`. First invoices done. Remaining: test recurring billing setup + decide recurring cadence/product line per the amounts in Customers.csv.2026-06-12
HIGHFO18property / rental deposit · start process of refund against rental deposit scheme2026-06-12
Med
MEDFO62crm / enquiries · handle enquiries where dates are taken — exclude from quote-counting metrics, auto-move to archive (date-taken status)2026-06-15
MEDFO61crm / enquiries · after 14 days of no contact, move an enquiry in the pipeline from quoted to lost2026-06-15
MEDFO56crm / quotes · venue reviews in quotes — capture review/testimonial data per venue so shinepics quotes pull relevant social proof (e.g. "Emma & Daniel · Belfast Castle" instead of generic "Emma & Daniel"). Default to generic testimonial if no venue-specific reviews exist. Unlock: populate a `venues` table (reference from bookings/enquiries) + optional `reviews` table (venue_id, quote, attribution) — quotes builder prefills from that data on preview. Low-friction capture: operator adds review directly in quotes UI or via admin.2026-06-14
MEDFO59miabella · email / migrations · mailchimp → Resend migration — use mail-chim-mia-import.csv to migrate contacts and send pure HTML emails2026-06-14
MEDFO51UI / responsive · **Client visuals still broken on mobile after second-pass attempt.** Round 1 (2026-06-10) collapsed the shell. Round 2 attempted 2026-06-13 — `ledger.responsive.css` lines ~137–197 add overrides for `.fable-crm .do-cols`/`.fo-portfolio .do-cols` (≤1024), and at ≤768: `.fo-portfolio .stats` 4→2-up, `.fable-crm .cmail` stack, `.bk-banner`/`.bk-cal-toolbar`/`.dossier__top` wrap, `.fable-crm .wflow` horizontal-scroll, `.qc` modal padding trim. Sandbox-authored; NEVER BUILT — `npm run build` + `serve-prod.sh restart` not run this session, so live `dist/assets/*.css` doesn't yet carry the rules. Next: (a) build + restart on host; (b) re-test at 375/414/768; (c) if still broken, DevTools-inspect at the affected nodes to see which rule wins — likely culprits are the Bookings detail panel being rendered outside `.fable-crm` (so `.do-cols` rule misses) or higher-specificity desktop rule in `ledger.css` winning. Full handoff in `explainers/operator-app.md` § Live issues.2026-06-13
MEDFO38CRM / comms · cannot start a new comms thread from a client — no "New message" / compose button exists outside of invoice-send flow2026-06-13
MEDFO55crm / venues · central venue listing — first-class `venues` table (name + address + optional contact details) so booking entry picks from a canonical list instead of re-typing. Bookings reference a `venue_id`; address captured once and reused everywhere it's needed. Direct unlock for FO54 (calendar address sync) and a cleaner data source for FO53 (cross-brand calendar).2026-06-13
MEDFO53crm / calendar · cross-brand calendar view — single visual showing bookings/events across every brand. Placement TBD (portfolio tab / operator-app shell / dedicated published page). Now unblocked: the Google Calendar integration is live, so the data is there to fan out.2026-06-13
MEDFO47ledger / ar · add preview modal before sending invoices/quotes — catch errors/typos before send2026-06-13
MEDFO46crm / weddings · send run sheet to bride 7 days before wedding for last-minute changes — automated email with event details/timeline2026-06-13
MEDFO41crm / bookings · "On The Day" PWA — small JSON-driven standalone site per booking, renders client wishlist as checklist so items can be marked off; prevents post-event "you didn't do this" disputes2026-06-13
MEDFO37ledger / chatbot · add a chatbot to the ledger that has access to the full corpus2026-06-13
MEDFO32CRM / email · incoming email to be CC'd to the site email itself; replies routed through CRM so hitting reply sends to CRM, which forwards to the client2026-06-12
MEDFO31CRM / operator-app · add Bookings section to daily inbox showing per-client booking workflow stages (quote → book → invoice → payment received → thank you → what to expect) as horizontal progress bars with completion status2026-06-12
MEDFO27Global / dashboard · new dashboard — visual here /home/jody/repos/family-office/docs/archive/pipeline-todo/design/master-overview-dashboard.html2026-06-12
MEDFO24crm · add folium customers — see /home/jody/repos/family-office/docs/Customers.csv2026-06-12
MEDFO19capture/today · serve today.html at ledger.patrimonia.co.uk/today behind CF tunnel + Access (app route + build copies file into the served static path)2026-06-12
MEDFO3ledger / holding-structure · **Monthly DLA sweep — holdco assumes each sub's director's loan** so subs carry no DLA, just an intercompany balance with Patrimonia; Jody's loan consolidates to one central line at `patrimonia-uk · 1200`. Per sub (credit balance B): sub posts Dr 1200 / Cr 2210, Patrimonia posts Dr 1210 / Cr 1200. Scope = UK subs only (folium, shinepics, miabella-uk, vidi); **exclude miabella-wy**. ✅ Accounts ready 2026-06-11 (2210 seeded on miabella-uk + vidi via `coa:init`; all 4 subs now have 1200 + 2210). **Remaining = build the routine:** idempotent monthly sweep keyed `dla-sweep:<sub>:<YYYY-MM>` with preview/confirm; **flag overdrawn DLAs (s.455)** rather than pooling silently (clean-up = net against the DL Patrimonia owes Jody, not cash repayment). Full design in `explainers/holding-structure.md` § "Monthly DLA sweep".2026-06-11
MEDFO15structure / vidi-systems-ltd · **J30 stock transfer Jody → Patrimonia before vidi starts billing** (part of the Web9→Vidi rename). Vidi incorporated 2026-05-25, BEFORE Patrimonia existed — legally Jody's until the J30; the seed's `parent_id` (and the Shareholders view) states the TARGET structure ahead of legal fact. On transfer: Patrimonia cost of investment = consideration → Dr 1500 (via DLA if no cash moves); vidi's own incorporation fee stays Jody's personal cost.2026-06-11
MEDFO16global · infrastructure · Sort out BackBlaze per project2026-06-11
Low
LOWFO13Global & In Veritate W, Orchrana · item =ledger; · Dashboard should see the Full Value, not just cash on hand2026-07-09
LOWFO20capture/today · make today.html a PWA (manifest + service worker) — installable on phone, offline2026-06-12
LOWFO21capture/today · split today rollup into per-entity surfaces (each entity serves its own tab) — cleanliness endgame; today.html currently aggregates all 4 inboxes2026-06-12
High priority
HIGHWP5multi-locations · data-safety · `multilocation_install()` DROPs tables on update/reactivation (documents/DATA_MIGRATION_CRITICAL_ISSUE.md); verify `MultiLocations_DataMigrationFix` actually guards every path before the next client update2026-06-11
HIGHWP6multi-locations · security · hardcoded Google Maps API key in admin_editcounty.php:94 + LIKE queries without prepare() (counties/towns.php) — from VERSION_3.2_SUMMARY audit, unfixed2026-06-11
HIGHWP8herd · release · release v1 to WP team2026-06-11
HIGHWP14herd · security · rotate the exposed updater client token `csi-prod-10cb…` server-side (flagged in herd/todo.md 2026-06-08, still pending)2026-06-11
Med
MEDWP21speed-cache · infra · add a `sync-folium-ui.sh` script (only featherweight and sitewise have one; speed-cache requires manual file copying to vendor folium-ui updates)2026-06-14
MEDWP20sitewise · widget / design · apply new visual identity to chat widget on open (see explainers/issues/chat-widget-visual.png) — dark header, avatar row, action buttons with accent highlights2026-06-13
MEDWP19featherweight · competitor research · create a competitor folder and pull https://plugins.trac.wordpress.org/browser/disable-everything/trunk as the first plugin2026-06-13
MEDWP18sitewise · branding/licensing · powered by should not be optional unless paid2026-06-12
MEDWP2featherweight · i18n · WP 6.7+ notice on pepslogin: `_load_textdomain_just_in_time` — translations for the `wp-disable` domain load too early (move textdomain/translatable strings to `init` or later); shows on every wp-cli run2026-06-11
MEDWP4folium-ui · api · `Folium_UI::render_switcher()` is documented + called by sitewise's legacy `settings-page.php:21` but the method doesn't exist — silently renders empty (either implement it or kill the call when the legacy form is removed)2026-06-11
MEDWP7global · deployment · discuss GH commit for everything, where a repo is private and not public2026-06-11
MEDWP10multi-locations · admin/branding · bring into "by Folium" styling and fold2026-06-11
MEDWP11global · infrastructure · Sort out BackBlaze per project2026-06-11
MEDWP15herd · cleanup · dev/test cruft committed in the plugin (test-*.php, emergency-*.php, logs/debug.log, .csi-license-cache) — strip before any release2026-06-11
Low
LOWWP3global · test-site · pepslogin responds with an unexplained header `quantum-flux-capacity: Omega` on the front page — identify the source (mu-plugin? theme? nginx conf? leftover from the old compromise?); box is already flagged don't-trust2026-06-11
⚡ Quick Wins
LOWW7global · deploy · verify CF Access policies exist for folium reports portal and are scoped per client2026-06-11
LOWW4global · deploy · CF Pages auto-deploy on push — verify all sites have this enabled and branches correctly wired2026-06-11
High priority
HIGHW13shinepics · form-visibility · the contact form is too hidden away, on each page you have to scroll a lot to get it, even on the check date2026-06-15
Med
MEDW12shinepics · form · convert the form to a component instead of per page embeds, so it's 1 global changed when needed2026-06-15
MEDW10shinepics · quotes · venue reviews in quotes — capture review/testimonial data per venue so shinepics quotes pull relevant social proof (e.g. "Emma & Daniel · Belfast Castle" instead of generic). Default to generic if no venue-specific reviews exist. Pairs with FO56 (same feature for family-office quotes builder).2026-06-14
MEDW9meridian · design · new visual for Meridian — sample here /home/jody/repos/meridian/docs/Dashboard peps new.html2026-06-12
MEDW2folium · content · blog post + service page: WordPress plugins philosophy (why Folium builds plugins; position as strategic vs. legacy; anchor to rebrand Featherweight/Herd/Sitewise)2026-06-11
MEDW5inveritatellc · migration · convert from WordPress to static Pages and decommission old WP2026-06-11
MEDW6nautica · migration · convert from WordPress to static Pages and decommission old WP2026-06-11
Low
LOWW3folium · UX · thank-you page after form submit on `/api/enquire` (currently no post-submit UX; consider email link or redirect)2026-06-11
LOWW8global · email · migrate folium/shinepics/miabella from SendGrid → Resend (better CRM integration for campaigns)2026-06-11
⚡ Quick Wins
LOWC2global · infrastructure · plan migration to Vidi Systems — folder rename, or bigger rebranding/restructuring?2026-06-11
Med
MEDC9global · ai-synthesis · AI Synthesis against the body corpus - a weekly run against the models - "what do you know about xyz" then, compare that to the body corpus for the brand and flag OK or needs fixing2026-06-15
MEDC8global · automation · build an automation to track and validate change to scrape to results2026-06-14
MEDC6global · SERPs · save SERP results to JSON for later AI analysis — currently single-run output; persist for comparative + temporal analysis2026-06-13
MEDC3global · deployment · discuss GH commit for everything, where a repo is private and not public2026-06-11
MEDC4global · infrastructure · Sort out BackBlaze per project2026-06-11
MEDC1global · branding · rebrand the campaigns app/product as Vidi/GetVidi2026-06-10
High priority
HIGHPS8peps / pepsdata · plan a transition from pepsdata to new2026-06-12
Med
MEDPS7peps / dashboard · rebuild main dashboard visual2026-06-12
MEDPS1DS · Firefox POST resend / duplicate cart on currency switch for variable products — WC form POST → WC GET redirect → pepsdata currency redirect → Firefox sees URL with POST history → resend dialog → duplicate cart add. Fix in `redirectWithQuery()`: detect `single-product` body class and append `#switched` fragment, or use `history.replaceState` on arrival. Fold into next pepsdata update.2026-06-11
MEDPS3pepsdata · WP Rocket adapter for Currency_Cache — currently only GP SRCache auto-integrated; PLG/PG run WP Rocket with a mu-plugin stopgap. Real fix: detect WP Rocket in Currency_Cache, register `rocket_cache_dynamic_cookies` filter, call `rocket_generate_config_file()`, remove mu-plugins. Also prototype for wp-disable WC-cache addon.2026-06-10
MEDPS4PG/DP/DS · Exchange rate API keys missing — PG: no key, hardcoded defaults (USD 1.27/CAD 1.72); DP: key empty, rates present but drifting; DS: manual-copy stopgap. Set key via pepsdata admin → `Currency_Updater::update_rates()` as site user → clear page cache. See pepsdata.md for one-liner.2026-06-10
Low
LOWPS5docs · Structured YAML catalog block per site — add a YAML-fenced `catalog:` block at top of each `explainers/sites/<site>.md` (pepsdata_version, currency_plugin, cache_layer, php_fpm_terminate_timeout, multi_locations_count, last_recon) to enable precise cross-portfolio grep queries.2026-06-09
LOWPS6infra · Lightweight audit script — `/root/scripts/audit.sh` that SSHes each server, pulls live state for catalog fields, diffs vs docs. Auto-surfaces drift instead of relying on maintenance discipline alone.2026-06-09
Governance
GOVERNANCEBoard resolutions — 4 company actionsGroup