Changelog
Everything we have shipped, in order.
29entries across the agency's operating system. Click any related help article to dive into how to use the feature.
May 202629 entries
Lumen memory: she now remembers across sessions (Iteration 2)
FeatureTue, May 12, 2026Apps Script v31For operators
- Lumen has memory. She can store and recall durable facts about how Katelyn works and about specific families, candidates, and placements. Memory persists across every conversation; no more re-explaining preferences.
- Three new tools: memory_get (look up a single fact), memory_list (everything about an operator or entity), memory_set (remember a new fact, requires Confirm chip).
- Two scopes of memory: operator (Katelyn's preferences, working style, defaults) and entity (family / candidate / placement, keyed by INQ-XXXX or CND-XXXX).
- Storage: new 'Lumen Memory' tab on the master Sheet, auto-created on first write. Columns: Scope, Entity ID, Key, Value, Notes, Created At, Created By, Updated At. Browse it or edit directly if you want; Lumen reads what's there.
- Confirmation flow: when Lumen wants to remember something, she proposes it as 'Remember about [scope]: [key] = "[value]"' in the chat panel. One click to approve, one click to cancel. Never silent.
- Every memory write also lands in the Activity Log (action: lumen-memory-set) so you can audit what Lumen has learned over time.
- The 'how to notice' meta-skill (in skills/meta/notice.md) describes when Lumen should propose remembering something: stated preferences, corrections, repeated sequences, entity-specific facts, voice corrections, new edge cases.
- Apps Script bumped to v31 with new memory-get, memory-set, memory-list HMAC-signed routes. Same canonical URL.
Lumen skill library wired into the runtime (Iteration 1)
FeatureTue, May 12, 2026Under the hood
- Lumen now reads her institutional knowledge from `skills/` at request time. The Constitution (identity, values, safety), the Tenant Identity (Windermere-specific context), and the Notice meta-skill (how to learn) are all loaded into the system prompt on every conversation.
- Domain skill index appears in the system prompt as one line per skill (description only). When the operator's task matches a skill, Lumen calls the new `load_skill(name)` tool to read the full body before acting. Progressive disclosure: small base context, detail on demand.
- Six kernel files now live in `windermere-admin/skills/` mirroring the productization template in `aubree-AI/windermere-mvp`: 00-constitution.md, 01-tenant.md, meta/notice.md, meta/author.md, meta/bootstrap.md, README.md.
- Skill loader handles YAML frontmatter parsing, skill index generation, and on-demand body loading. New file: src/lib/lumen/skill-loader.ts.
- System prompt builder is now a function (`getLumenSystemPrompt()`) that composes the base scaffold + always-loaded layers + skill index. Same byte-stable output across requests, so prompt caching still works.
- next.config.ts bundles the skills/ directory with the Vercel function via outputFileTracingIncludes (the file tracer would otherwise miss it since no import points there).
- No domain skills yet; the index is currently empty. Authoring `family-onboarding`, `katelyn-voice`, and `stuck-recovery` next.
- Build verified locally; production deploys on push.
Lumen polish: brand mark, model registry, prompt caching
ImprovementMon, May 11, 2026Under the hood
- Floating launcher and panel headers now render the Lumen mark (stylized 8-point compass star) inline as SVG with currentColor adaptation. Replaces the temporary Sparkles icon.
- New src/lib/lumen/model-config.ts holds a model registry, env-var override (LUMEN_MODEL), and per-model cost rates. Migrating to a new Claude model is now a one-line change: add the new ID and bump the default, or just set LUMEN_MODEL in Vercel. No more hardcoded model strings scattered through the route.
- Anthropic prompt caching wired up: the system prompt (~1,500 tokens) and the 23 tool definitions (~3,000 tokens) are marked ephemeral. After the first call in a 5-minute window, subsequent calls read the static prefix at ~10% of fresh input cost. Net effect: per-turn cost drops by roughly 60% on multi-tool conversations.
- Adaptive thinking enabled (Sonnet 4.6 / Opus 4.6+). Claude decides per turn how deeply to think; no fixed token budget to tune.
- Cost logging now reports estimated USD per turn alongside token counts in Vercel logs. The numbers feed the Phase 2 token-spend dashboard widget.
- Default model corrected from Sonnet 4.5 (non-existent) to Sonnet 4.6 (current generation). The model registry will accept any future Sonnet, Opus, or Haiku ID; add the entry, bump the default if desired.
- Phase 2 roadmap published in windermere-mvp/docs/lumen-phase-2-roadmap.md. Covers named workflows, voice input, persistent history, proactive Lumen, long-term memory, sub-agent delegation, MCP server, and cross-system actions, with a prioritized 3-week shipping plan.
Lumen lands in the admin (Phase 1)
FeatureMon, May 11, 2026For operators
- New floating Lumen widget in the bottom-right of every dashboard page. Click the sage circle (or hover to see 'Ask Lumen') to open a side panel.
- Lumen is your concierge AI. Ask her what is stuck, draft an email, schedule a meeting, generate a contract Doc, advance a stage, or send a Stripe invoice. She talks; you confirm.
- Every side effect requires explicit confirmation. Lumen proposes the action, the panel renders a Confirm chip, and nothing fires until you click. Cancellation is one click.
- Read questions execute instantly (pipeline state, who is stuck, the next best action on a record, lookup by name).
- Available actions: advance stage (family or candidate), send templated email, schedule meeting, create task, toggle task, set reference status, generate engagement letter, generate staff contract, generate reference check, generate match summary, generate interview prep packet, send Stripe invoice, toggle nurture sequence.
- Powered by Claude Sonnet 4.5 via the Anthropic API. Cost profile: roughly $0.04 per turn, around $60/month at 50 turns/day. Auth-gated; only signed-in operators can talk to her.
- Phase 2 (later): persisted conversation history, multi-step workflows, token-spend dashboard widget, voice input.
Performance and quality pass
ImprovementMon, May 11, 2026Apps Script v30Under the hood
- Foundation deploy ahead of Stripe and Checkr go-live. No new operator-facing features; the gain is reliability and headroom for the next round of work.
- Apps Script: collapsed 7 read-then-write N+1 patterns into single batched setValues calls. Hot paths affected: Stripe webhook completion (07_stripe.gs), Checkr webhook completion (06_checkr.gs), Status onEdit stamps (03_sheet_triggers.gs), advance-stage handlers (14_actions.gs), toggle-task (15_tasks.gs), reactivate team member (16_team.gs), and set-reference-status (21_references.gs). Net: roughly half the Sheets API round-trips per webhook completion or status edit.
- Apps Script: every doPost dispatch now records a one-line Stackdriver entry with route name, elapsed_ms, and ok flag. View / Executions or Cloud Logging (search '[routeTimer]') gives a baseline for P50 and P95 latency analysis once traffic accumulates.
- Admin: callAppsScript now retries once on transient failures (request timeout, fetch network error, 5xx response) with a 750ms backoff. 4xx and ok:false stay deterministic and are surfaced immediately. Cuts user-visible 'try again' errors during Apps Script cold starts.
- Admin: new /api/health endpoint returns JSON with current commit, timestamp, and an Apps Script reachability probe (3s budget). Plug into any uptime monitor (BetterUptime, UptimeRobot, etc.) for two-tier alerting (admin vs Apps Script).
- Admin: bundle analyzer wired up. Run 'npm run analyze' to produce .next/analyze/{client,server}.html. Deferred require keeps the default build path clean (no new prod dependency).
- Admin: settings-board.tsx converted from a client component to a server component (no hooks or event handlers were actually needed). Shaves the file out of the client JS bundle.
- Style guardrails: zero em dashes, zero en dashes, and zero emojis across windermere-admin, windermere-agency public site, and apps-script source. Sweep covered code comments, UI copy, email subjects, Doc filename templates, and placeholder strings.
- All Last Updated footers on modified files refreshed to 2026-05-11.
Stripe integration live + fee structure update
FeatureSun, May 10, 2026Apps Script v29For operators
- Stripe is now wired end-to-end: invoice creation, hosted payment, webhook callback on payment success/failure.
- Application fee bumped from $500 to $750 to cover up-front costs (Indeed posting, initial screening time, intake review).
- Placement fees unchanged at $3,000 standard / $5,000 premium total; the new application-fee credit lands the second invoice at $2,250 standard / $4,250 premium.
- New 'Amount' field on the Send Stripe Invoice modal: lets you override the default for negotiated discounts ($50-$50,000 range). Leave blank for the standard fee; the description on the invoice notes when it is a negotiated amount.
- Public site Pricing section, FAQ entry, and help-center articles all updated to reflect $750.
UI fix: Send Stripe Invoice modal stacked behind side panel
FixSun, May 10, 2026For operators
- When opening 'Send Stripe Invoice' from a family detail panel, the modal was rendering at the same z-index as the side panel and showed up dim and behind.
- Modal z-index bumped from 50 to 60 so it always sits above any open detail panel.
Family Interview Prep packet generator
FeatureSun, May 10, 2026Apps Script v27For operators
- New 'Generate interview prep packet' button on family detail panel ('More actions').
- Produces a role-aware Doc with warmup questions, behavioral prompts, HEXACO Honesty-Humility prompts, logistics, red flags, and a 5-dimension decision rubric.
- Question banks for Nanny, Family Assistant, Household Manager, Estate Manager, Newborn Care Specialist, Private Chef, and Personal Assistant; falls back to a generic bank for Other.
- Doc lands in the family's Drive folder; activity logged.
Reference Check tracking layer
FeatureSun, May 10, 2026Apps Script v27For operators
- Per-reference status on candidate detail panels (3 slots default).
- Each slot cycles pending → contacted → scheduled → complete.
- When all references are marked complete and the candidate is in 'Reference Check' status, they auto-advance to 'Background Check'.
- Free-text notes per candidate; auto-saves on blur.
- 'X of 3 complete' badge; no schema migration required (columns added on first write).
5-email nurture sequence: operator controls
FeatureSun, May 10, 2026Apps Script v27For operators
- New Settings page section: one-click pause/enable for the 21-day nurture sequence (was previously enable-via-Script-Properties only).
- Toggling on auto-installs the daily 9am Eastern trigger; toggling off removes it.
- Per-inquiry status surface on family detail panels: shows enrollment, days since inquiry, and per-email state (sent / pending / window-passed).
- Sequence schedule preview on Settings page (Day 2, 5, 9, 14, 21).
Match Summary workflow
FeatureSun, May 10, 2026Apps Script v27For operators
- New 'Generate curated introductions' button on family detail panel ('More actions').
- Modal lets the operator pick 1-8 candidates; Approved-Pool candidates float to top, role-matched candidates get an amber 'Role match' badge.
- Optional opening note in the operator's voice; optional per-candidate fit note.
- Doc lands in the family's Drive folder with one section per candidate (name, position, experience, languages, certifications, bio, fit note, photo URL).
- Candidate ordering preserved from selection sequence so the operator controls the shortlist order.
Privacy Policy and Terms of Service pages
ContentSun, May 10, 2026For operators
- Plain-language Privacy Policy at /privacy describing real practices: Workspace-native data flow, HMAC-signed Apps Script web app, Stripe + Checkr as processors, retention windows.
- Plain-language Terms at /terms covering site use, inquiry process, candidate-introduction warranty, hiring relationship, fees, governing law (Florida + AAA arbitration).
- Footer links wired on every page; sitemap.xml entries added.
Mobile responsive pass on admin dashboard
ImprovementSun, May 10, 2026For operators
- Hamburger menu on the top bar (visible below large screens).
- Slide-in mobile nav drawer mirrors the desktop sidebar nav; auto-closes on route change.
- Top bar reduces padding on small screens and hides the search-helper text + ⌘K hint.
- Layout main padding adjusted: px-4 py-6 on mobile, px-6 py-8 on desktop.
Next Best Action engine + stuck-state detection
FeatureSun, May 10, 2026For operators
- Every family and candidate card now surfaces ONE primary action computed from current state (the 'next thing you should do').
- 11 family NBA kinds, 10 candidate NBA kinds; covers schedule, advance-stage, generate-doc, send-invoice, send-email side effects.
- Stuck-state override: any non-terminal status with no action in 5+ days replaces the stage default with a warm-nudge action and an amber 'Xd stuck' badge.
- Detail panels reorganized: dominant NBA + collapsible 'More actions' (all the secondary actions live behind progressive disclosure now, per the design rule).
- 'I already did this. Just advance the stage.' escape hatch when the NBA is a stage advance.
- NBA pill rendered inline on the Clients and Candidates tables.
Candidate stage labels fix
FixSun, May 10, 2026For operators
- Replaced shorthand stage labels in the candidate detail panel and candidates table with the canonical statuses the master Sheet validates against (Phone Screen Scheduled, Phone Screen Complete, In-Person Scheduled, In-Person Complete, Reference Check, Background Check, Approved Pool, Placed, Rejected, Withdrew).
- Resolved a recurring 'Dashboard action failed: advance-stage' email by removing 'Screening' and 'Ready' shorthand that did not exist in Sheet validation.
Per-record document list on detail panels
FeatureSat, May 9, 2026Apps Script v24For operators
- New 'Documents on file' section on family and candidate detail panels.
- Lists every file in the record's Drive folder (engagement letters, staff contracts, reference check Docs, photos, signed PDFs).
- Smart icons by mime type (signature icon + violet for contracts; image icon + amber for photos; etc.) with relative-time stamps.
- Excludes the intake / profile / resume docs already shown above in 'Linked artifacts' so nothing duplicates.
- Refresh button on the section so a doc generated mid-panel-open shows up without reopening.
Email reply tracking on family + candidate panels
FeatureSat, May 9, 2026Apps Script v24For operators
- New 'Email conversation' section uses GmailApp.search to surface up to 20 recent threads matching the record's email.
- Each row: subject, snippet, message count badge, unread/starred indicators, time-ago, latest sender.
- One click opens the full thread in Gmail.
Contract markdown-to-Doc parser improvements
ImprovementSat, May 9, 2026For operators
- Family Engagement Letter and Household Staff Contract Docs now render with cleaner spacing.
- Signature lines get dedicated spacing (18pt before, 6pt after); adjacent fields (Printed Name, Title, Date) tighten to 2pt as a block.
- Body paragraphs get 1.4 line spacing; HR rule no longer crashes on empty paragraphs.
Public-site CRO refinement
ContentSat, May 9, 2026For operators
- New 'What families come back to' themes section on home page (between Process and Pricing).
- New 'What families ask first' FAQ preview section between Pricing and Emotional Close (top 4 highest-intent questions plus link to full FAQ).
- FAQ page emits valid FAQPage JSON-LD so Google can render rich-result snippets.
Public site: candidate application form differentiation
FeatureSat, May 9, 2026For operators
- Family inquiry form and candidate application form are now distinct (previously the same form).
- Candidate flow at /apply?flow=candidate maps to processCandidateApplication_ shape (firstName, lastName, position, years experience, languages, certifications, references, drivers license, vehicle, swim certification, bio, photo URL, resume URL, social handles, FCRA-compliant background-check consent).
- Replaced 'Path of the Luminary' question on family form with 'What is the biggest question you have for us?'
Dashboard performance: multi-layer caching
InfrastructureFri, May 8, 2026Under the hood
- React.cache wraps each unstable_cache fetcher so a single render pass calls Apps Script once per surface.
- TTLs: 30s for activity/calendar, 60s for dashboard/clients/candidates/tasks, 300s for templates/settings/reports/team.
- All server actions revalidate via revalidateTag with Next.js 16 { expire: 0 } profile.
- Cuts dashboard load from one 1500ms Apps Script round-trip per surface to instant for cached pages.
Calendar OAuth fix; meet scheduler stable
FixFri, May 8, 2026For operators
- 'Schedule Meet' was failing with permission error because Calendar scope was not authorized for the deploying user.
- Added authorizeCalendarScope function; running it once forces the consent dialog and grants scope.
- Schedule Meet has worked end-to-end since.
Contract templates: setupContractTemplates
FeatureThu, May 7, 2026For operators
- Two contract templates created: Family Engagement Letter (Agency-Family) and Household Staff Employment Agreement (Family-Staff).
- setupContractTemplates Apps Script function copies the markdown specs into Google Docs in /Templates/.
- Generate buttons on the family detail panel use those templates with merge-field substitution.
Authentication + email allowlist
SecurityWed, May 6, 2026For operators
- Admin dashboard now requires Google sign-in.
- Only emails on the Team tab or in ADMIN_ALLOWED_EMAILS env var can access.
- Sign-out and Team management pages wired in.
Drag-and-drop kanban with optimistic updates
FeatureTue, May 5, 2026For operators
- Pipeline cards can be dragged between stages on the kanban.
- Optimistic local update; reverts on Apps Script error.
- Powered by @dnd-kit with a 6px activation threshold so single-clicks open the detail panel cleanly.
Detail panels (slide-in)
FeatureMon, May 4, 2026For operators
- Click any family or candidate to open a slide-in detail panel: contact info, linked artifacts, take-action grid, status advance, suggested matches, activity feed.
- Closes on Escape and on backdrop click; locks body scroll while open.
Manual add-family and add-candidate flows
FeatureSun, May 3, 2026For operators
- Quick Actions rail buttons to add a family or candidate from inside the dashboard (skips the public form).
- Same downstream pipeline runs as a real submission: client folder created, intake doc generated, ack email sent, Katelyn notified.
Apps Script HMAC-signed write path
InfrastructureSat, May 2, 2026Under the hood
- All dashboard writes route through a single Apps Script web app endpoint.
- Body signed with HMAC-SHA256 (WINDERMERE_INTERNAL_HMAC_SECRET); Apps Script verifies with constant-time compare.
- Stripe / Gmail / Calendar / Checkr credentials never leave Google Workspace.
MVP foundation
InfrastructureFri, May 1, 2026All
- Master Sheet with 5 tabs (Inquiries, Candidates, Placements, Activity Log, Settings).
- Drive folder structure: /Windermere/{Clients,Candidates,Templates,Archive}.
- Two Google Forms: Family Inquiry, Candidate Application.
- Apps Script bundle: form/sheet/digest triggers + webhook web app.
- Six Gmail canned-response templates; two Doc templates.
- Public site at windermere-test.luminarylife.ai with embedded inquiry form.