What's shipped
Every feature, fix, and improvement — in reverse chronological order.
Q3 2026
admin/impersonate: impersonation form has no confirmation step
bulk-import-students: per-row DB errors swallowed, import reports success
admin/sql-snippets/[id]: reject action has no confirmation dialog
admin/export: date range labels missing htmlFor — not associated with inputs
admin/faq: form inputs missing htmlFor/id label associations
community-submissions: layer-1 word filter blocks layer-2 classifier, student gets no reason
HouseholdMembers: co-guardian revoke uses browser confirm() — not accessible
certificates/[id]: safePdfUrl validates protocol only — no domain allowlist
dashboard/parent/sessions: billing checkout is a GET link — no loading state or error
admin/analytics: SparkBar bars have no aria-label — data invisible to screen readers
admin/exit-tickets: tier filter <a> tags should be <button> for keyboard a11y
HouseholdMembers: invite email input missing htmlFor/id label association
admin/notifications: arrow-only link has no accessible label
learn/[tier]/certificate: sign-in redirect loses destination URL
admin/sql-snippets/[id]: snippetId from useParams not validated before API call
Adult learner ownership guards missing across 16+ action files
instructor.ts getCourseProgressOverview missing auth guard
Gradebook page reads role directly from JWT claims (no fallback)
grants/actions.ts used non-existent "super_admin" role
Admin Stripe portal override lacks audit trail
SRS actions block adult learners (selfClerkUserId not checked)
Placement quiz blocks adult learners — age cap + ownership guard
Roleplay page should gate on tier completion before unlock
Eventbrite env vars not confirmed set in prod — events page empty
CRM — audit and fix broken features after CSP/auth fixes
CRM — Academy health monitoring via GraphQL
LMS SaaS Admin — educator multi-tenant instance management
CI workflows blocked by Vercel preview-deployment auth wall
Migration journal drift — 22 orphan files, 2 dead entries, missing exit_tickets
Fix F676 migration journal entry — add idx 85 board_resolutions to _journal.json
Plausible analytics — exclude student-facing routes (/learn/*, /kid/*)
Scaffold fix — acknowledge academy uses Knex + capture academy sub-CLAUDE
Renumber duplicate Drizzle migrations 0030-0032 + regenerate snapshot
Remove nested package-lock.json inside apps/academy/packages/web/
Fix pre-existing academy TypeScript errors in enrollmentStore + guardianStore
F360 — remove console.log from layer1-qa.ts academy server
Fix window.loadPyodide TypeScript error in SlideContent.tsx (PythonPlayground
Replace console.log with console.error in retry-webhooks cron route
F370 — rebase onto develop + regenerate migration for community_submissions
Replace non-null assertions in F430 learning-velocity route
Replace non-null assertion in F431 cohort impact PDF route
Replace non-null assertions in import-clerk route (F617)
Add Zod runtime validation to quiz-responses, retrieval-practice, lesson-progress
Fix asl-feedback.ts — replace bare `db` singleton import with createDb()
Fix F677 migration journal — add idx 95 press_pitch to _journal.json
Seed script — add Tier-2 Mechanics + Educator Certification tracks
React 19 Compiler compliance refactor (25 warnings → 0)
Printable Certificate of Completion (PDF)
Dark mode toggle
Student avatar SVG library expansion
Lesson bookmarking / resume-where-you-left-off
Offline mode for completed lessons (service worker)
Instructor bulk message to cohort
Admin analytics dashboard
Curriculum import/export CLI
Lighthouse CI budgets on develop PRs
axe-core Playwright integration (CI-gated)
Load test — academy GraphQL + web APIs (k6)
Visual regression — Chromatic (nonprofit free tier)
DB migration dry-run CI job
Lesson manifest content validator (Zod)
Browser matrix — Playwright multi-project
Lio Tutor Layer 1 — pre-baked Q&A per lesson
Lio Tutor Layer 2 — Ollama Llama 3.2 3B on Render ($25/mo)
Lio Tutor UI — LioTutor.tsx bottom-drawer chat
Lio Tutor — topic guardrails + prompt-injection defense
Lio Tutor Layer 3 — Claude Haiku emergency fallback
Community — admin pre-publish moderation queue
Community — anonymous student display (no real handles)
Community — external link blocking + allowlist
Community — keyword filter + profanity screen
Community — re-enable in child mode
Adaptive quiz difficulty engine
Interactive code playground (beyond quiz)
Adaptive placement quiz (D-030 A17)
Spanish pilot — translate 6 lessons + Spanish Lio voice
Tier 3 AI Engineering curriculum design (16-20 lessons, ages 15+)
Mobile app — Capacitor wrapper for academy SPA
Learning velocity dashboard (per-student time-on-task + completion rate)
Cohort impact reports — PDF export for funders
FERPA compliance audit + documentation
DPA template enhancement + attorney review coordination
Decommission Remotion pipeline + add HeyGen/Cloudflare Stream VIDEO block
Wire an interactive primitive into a production lesson (establish pattern)
Pilot Lesson 1 — E01 "Hello, Lio!" (Explorers, 5-8) in Coursera-style
Pilot Lesson 2 — B01 (Builders, 9-12) in Coursera-style
Pilot Lesson 3 — I01 (Innovators, 13-17) in Coursera-style
Pilot retrospective — evaluate 3 pilots, decide scaling path
Author manifest.json for all 43 mini-games + link to lesson IDs
Redis session cache — cut Clerk session lookups
Spike — learn-anything graph schema study for Skill Manifest (F356)
Skill Domain Manifest — tag all 128 lessons with lesson-meta.json
Strength Profile Aggregation Layer
Depth Track pilot — 3 concept-origin lessons sourced from build-your-own-x
Spike — Kolibri learner-profile-under-facility data model study
Install ts-fsrs + wire retrieval-prompt spacing into exit-ticket flow
Perception-domain prototype — "Lio sees what you see" (tfjs-models, on-device)
Spike — GitHub Skills interaction pattern study for Lio Tutor loop
Spike — Twenty + CiviCRM data model study for Plio internal CRM features
Admin Grants Tracker — grants.gov + USAspending + ProPublica daily digest
Operator runbook — beancount + fava for Plio books + paperless-ngx for documents
Operator runbook — Open Collective Foundation fiscal sponsorship application
Self-host listmonk — parent + donor newsletter pipeline
Operator runbook — LanguageTool (self-hosted grammar) + Zotero (citation
Operator runbook — Gusto (payroll setup) + Kimai (volunteer time tracking)
CSTA + ISTE standards tagging on every lesson
Kid-safe project gallery — moderated drawings + code + AI projects
Mastery graph + spaced-review scheduler
Educator resource PDFs — per-lesson, no-login, classroom-ready
Innovator typed-code capstone — "Ship a real PWA" track
AI literacy track — "How Lio thinks" (Builder + Innovator)
CRM extension — F604 schema proposals (grants_received, pledges, events,
AI grant drafter + non-gov scraper — Claude API + Playwright crawlers
Lio Advisor — build from docs/product/parent-dashboard-spec.md
Donor portal — GiveForms self-host + Stripe + 990-prep export
Volunteer portal — thin layer over Kimai + attestation PDFs
Docs — CRM functionality map + ops-stack visual index
Tech debt — middleware.ts → proxy.ts (Next.js 16 deprecation)
Tech debt — Sentry config migrate off disableLogger + automaticVercelMonitors
Clerk session token — add metadata claim via dashboard + update guard rules
Observability — Sentry user tagging + route breadcrumbs + env-aware sample
Observability — structured request logging via pino + log-level env
Accessibility — WCAG 2.2 AA sweep across /admin + /dashboard + /learn
Accessibility — focus-trap + Escape close on every admin modal
Performance — Next.js Image component sweep + OG image caching
Performance — ISR + stale-while-revalidate on public marketing pages
SEO — JSON-LD structured data + sitemap enrichment + robots tuning
Admin UX — saved filters + shareable query URLs on contacts/deals/grants
Admin UX — bulk actions on contacts list (tag, export, merge, delete)
Q — Playwright E2E for sign-in + /admin + parent-dashboard golden paths
Q — security audit — OWASP ASVS L1 checklist + dep vuln scan
i18n — Spanish audio parity for all Explorer + Builder lessons
Tech debt — CSP nonce on JSON-LD <script> in RootLayout
ESLint custom rule — block clinical-term + definitive language in parent-facing
Q — Lighthouse CI gate on / /about /programs /dashboard /admin
Q — load test baseline with k6 — 500 concurrent students, lesson player
Parent engagement — nurture email sequence (signup → 7 days)
Parent engagement — reactivation campaign for 14+ day inactive
Content linter — dubitative language scan across all lesson manifests
Content tooling — lesson manifest preview page + audio length validator
Dev experience — Storybook for primitives gallery + docs
Data integrity — foreign key audit + referential consistency script
Security — CSRF token test suite + double-submit pattern for server actions
Security — API rate-limit tightening (per-user, not just per-IP)
i18n polish — ES UI-strings audit + fallback reporting
Admin UX — activity timeline polish — pin, filter by actor, export
Admin UX — global command palette (Cmd+K) across /admin
Accessibility — keyboard shortcuts audit + help overlay (press ?)
Q — axe + pa11y on every primitive in Storybook build
Dev experience — prebuild check script (fast fail before pnpm build)
Content — seeded quiz variants (A/B) for every Builder lesson
Polish — breadcrumb nav across /admin routes
PII-scrub logger + tutor-transcript redaction test
Runbooks — incident response + secret rotation + backup restore drill
Guardian struggle-alert surface + first-7-day checklist + year-end donor
Accessibility — WebVTT captions pipeline + OpenDyslexic font toggle
Pre/post assessment schema + effect-size reporting for grant packets
California AI-Literacy Framework (AB-2876) alignment + tagging
Teachable-Machine-style in-lesson ML training primitive (COPPA-safe, on-device)
Lio Advisor — AI-generated "Ask your child" conversation starters in weekly
Open Badges 3.0 verifiable credentials per tier completion + capstone
Clever + ClassLink rostering spec + "coming soon" landing page
Grants pipeline stages + deadline calendar (extend F605/F618)
990/state-filing compliance calendar + COI forms (Formbricks self-host)
Google Ad Grants enrollment + UTM attribution → donor funnel (Plausible/PostHog)
Donor moves-management — cultivation stages + stewardship cadence
School DPA/MSA e-sign via Documenso self-host + renewal alerts
Fund accounting — restricted/unrestricted ledger on top of beancount
Volunteer shift scheduling + skill matching + 990 Part VI auto-export
Sponsor tier + contract-milestone tracker in CRM
Board portal — BookStack minutes wiki + resolutions tracker + COI workflow
Social scheduling — Mixpost self-host + press/media-contacts CRM extension
Mandated-reporter protocol — child-disclosure detector + triage pipeline
AI safety — red-team suite + nightly eval harness for Lio Tutor
Earned revenue — teacher PD, Advisor Pro, curriculum API licensing
Research infra — IRB templates, de-identification pipeline, researcher role
Alumni longitudinal tracking — opt-in at Innovator exit, annual outcomes
Design system — tokens + Figma kit + brand guidebook + press kit
Public roadmap + changelog + status page (BetterStack free tier)
Integration ecosystem — outbound webhooks + public read-only API + OpenAPI
Key-person continuity — operator handoff + on-call rotation + credentials
Neurodivergent UI modes — ADHD focus, autism-friendly, dysgraphia voice input
International expansion readiness — GDPR audit, FR locale, RTL groundwork
Mental-health safe-messaging policy across parent-facing copy
Parent community — Discourse self-host (COPPA-safe adults-only forum)
Rural / low-bandwidth — 2G testing + audio-only lessons + offline ZIP pack
Thought leadership — op-ed pipeline + CFP tracker + whitepaper program
Paid workshops + events — OCF Eventbrite integration + ticketing
Sibling/family ops — multi-child household, co-guardian, shared dashboard
SLO doc + error budgets + Sentry alert-rule codification
Feature flags via PostHog — gradual rollout + kill switches
Email deliverability — SPF + DKIM + DMARC + bounce handling
Cookie consent / CMP — COPPA-aware + bilingual
Read-only admin SQL console via Metabase self-host
DR / RTO drill — measured + documented recovery time
Distributed tracing — OpenTelemetry + Sentry Performance
Parent notification template library — every event type
Referral program — parent-refers-parent with reward tracking
Testimonials pipeline — collect + curate + approve + publish
Birthday + milestone automated recognition from Lio
Content A/B test framework — variant system for lesson slides
Seasonal + holiday content pack — 6 themed variants
Canvas LMS + Google Classroom + Seesaw integration stubs + specs
Teacher gradebook v1 — cohort + per-student view
Student portfolio — opt-in public showcase (extension of F612)
Certificate of completion PDF per tier + capstone
Recurring-donor upgrade flow + retention + corporate match
Cookie-less privacy-friendly analytics — Plausible alongside PostHog
Caliper Analytics compliance — edu interop standard
Holiday + cultural awareness content — authenticity review
Parent peer mentorship matching
Admin read-only SQL snippets library + approval flow
Terms of Service + Privacy Policy refresh — bilingual, COPPA-compliant
ADR retrospective — consolidate first 50 decisions into rationale index
Performance budget CI gate — per-page bundle size + LCP ceiling
Sign-language video track — deaf accessibility pilot on 5 lessons
Reading-age + ELL adaptation per lesson — Lexile-score filter
Backup verification — monthly restore-smoke-test cron
Admin onboarding walkthrough — first-login tour of 24 routes
Press kit assembler — generate on-demand brand packet
Provision all production env vars in Vercel
Stripe dashboard: webhook + product subscriptions
Clerk dashboard: webhook + metadata schema
Resend domain verification for plio.academy
Run Drizzle migrations against production Neon branch
End-to-end Stripe → Clerk smoke test
Verify all 36 crons fire in Vercel cron dashboard
Annual COI re-acknowledgment cron
Mobile app — React Native or PWA path decision
CRM SaaS — multi-tenancy for second revenue stream
Beancount sync for cashflow + 990-EZ Part II expense lines
SlideContent.tsx — split 3193-line monster component
Lighthouse CI + Web Vitals dashboard
Capture donor mailing address for IRS Schedule B
Block-based lesson editor — admin UI for authoring slides without JSON
Code submission storage — code_submissions table + gradebook column
Hint system — per-slide hints with progressive reveal
Solution reveal — show correct answer after 2+ failed attempts
Cohort session links — upcoming live class scheduling
Mastery gate flag — optional requiresMastery per lesson
Course bundles — named lesson collections within a tier
Pro tier — add 'pro' tier to VALID_TIERS, routes, and lesson schema
Practice slide type — code submission with no answer reveal
i17 AI Safety and Alignment — update slides using Nicky Case metaphors
codeRef field — add attribution URL to lesson JSON schema
Lesson editor — lesson list + metadata form at /admin/curriculum/lessons
Lesson editor — slide list + reorder + delete at /admin/curriculum/lessons/[tier]/[id]/slides
Lesson editor — narration + audio + contentType slide edit form
Lesson editor — new lesson creation wizard
Cybersecurity track — scaffold lesson shells cy-i01 through cy-i08 (Innovator-Cyber)
Cybersecurity track — scaffold lesson shells cy-p01 through cy-p08 (Pro-Cyber)
Data Science track — scaffold lesson shells ds-b01 through ds-b06 (Builder-Data)
Data Science track — scaffold lesson shells ds-i01 through ds-i08 (Innovator-Data)
DevOps track — scaffold skeleton ds-dev01 through ds-dev06 (Pro-DevOps)
Live tutoring — real-time 1-on-1 and small-group sessions (video + chat)
Mid-lesson resume — persist current slide index on advance
Adaptive retry loop — retry missed quiz questions before lesson completes
Teacher assignment UI — create, schedule, and assign lessons to students
Homepage — surface /hour-of-ai above the fold
District RFQ form — public quote request routed to CRM deals pipeline
Social proof counters — live stats on homepage
Grant outcome PDF auto-trigger on grant close_date
Volunteer shift conflict guard — overlap detection on shift create/edit
Donor receipt portal — self-service giving history at /donors/[token]
Student dashboard — surface streak count prominently
Cohort learning leaderboard — weekly XP ranking within cohort
Mastery gating — lock next lesson until current lesson mastery achieved
Spaced repetition — resurface weak quiz questions via exit-ticket
Real-time classroom view — instructor sees live student progress
Placement / diagnostic quiz — skip already-mastered lessons at track entry
Content search — full-text search across all lessons
Instructor audio feedback on student gallery submissions
Parent daily summary email — what my child did today
Advisor conversation history UI — parents see AI advisor chat log
Fix admin contracts page — wire to contracts DB table
Fix academy health page — replace broken GraphQL call with real DB metrics
Email campaign send/schedule action in admin UI
VAPID push notification keys — generate + document setup
Public portfolio — student-controlled visibility toggle
Fix stub lesson shell — redirect to 404 instead of playing fake content
Rate-limit public/unauthenticated server actions — lms-lead, placement quiz
Admin loading skeletons — add loading.tsx to all admin sub-routes
Admin governance — board meeting countdown + docs section
Placement quiz silent fail — handle zero quiz slides gracefully
Community waiting-list — email capture on /parents/community stub page
Assessment results admin view
Error boundaries — add error.tsx + loading.tsx to all dashboard sub-routes
Wire /impact page to real DB student/lesson metrics
Add notify-policy-update cron to vercel.json schedule
Pipeline seeding — create default CRM pipelines via migration
Fix sw.js pre-committed hash — gitignore the generated file
SRS card rating — handle DB error gracefully in ReviewSession
PD course content — author 3 starter MDX modules
Portfolio alt text — fix missing alt on student drawing images
Fix /dashboard/student SRS due-cards badge (S6-004 incomplete)
Fix /donate page — remove from sitemap or add pre-register flow
Rate-limit /api/donors, /api/announcements, /api/faq public endpoints
Stripe webhook — handle payment_failed, subscription_updated, invoice_failed
StudentProfileContext — surface error state on profile load failure
Add missing pages to sitemap.ts
Lesson client silent catch — add Sentry capture + toast on save failure
PD enrollment — add self-serve cancellation to educator dashboard
Fix webhook retry — actually replay non-Stripe deliveries
Fix mentor-matching cron — resolve real emails via Clerk
Admin students list — add pagination
Student notification preferences page
Add nav links to learning-velocity and lesson-quality reports
Create saas_subscriptions table + unblock S9-008 PD cancellation
Add SRI hash to Redoc CDN script tag on /docs/api
Implement event NPS survey cron (R6-001)
PD module error logging, pipeline 404 message, integrations ETA badges (R6-004/005/006)
Adult learner — signup path, Clerk role, student_profile self-ownership
Co-guardian invite + accept flow
COPPA enforcement in code — age-gate messaging and data access
Creator competency gate — application + test before teaching
Guardian-Creator matching system
Bidirectional messaging — creator↔guardian and creator↔learner
Real-time chat — sync creator↔guardian and creator↔learner (13+)
Age-18 transition — learner chooses guardian link status
Volunteer role — deprecate or redirect to creator path
Researcher role — policy decision + disposition
Staff members + departments schema and directory
Department-scoped CRM navigation and access gates
Role-aware UI — hide/disable write controls per department
Department home dashboards — per-role landing page
Standards alignment — per-standard mastery tracking + district export
On-demand guardian progress report PDF download
Summative assessments + creator gradebook
Rich portfolio builder — annotations, cover, categories
Donor lifecycle automation — upgrade, lapsed, anniversary sequences
Live class tools — polls, raised hand, emoji reactions
Streak freeze + recovery mechanic
Personalized lesson sequencing post-placement
Gallery social layer — comments, reactions (COPPA-gated)
Volunteer self-service scheduling + hours log
Public event registration + ticketing
Creator analytics dashboard — session stats, drop-off, revenue
Verifiable certificate LinkedIn sharing + Open Badges
Automated weekly family digest email
Grant-ready funder impact report PDF export
Public trust and transparency page
Creator revenue dashboard + session billing
District pilot funnel + Clever roster sync UI
AI lesson generator for creators (Lio-powered)
Lio structured roleplay / conversation scenarios
1:1 tutoring booking calendar + post-session AI recap
Differentiated learning groups (creator-assigned)
Student-owned goal setting + weekly self-monitoring
Parent conversation starters — family co-pilot nudges
E-Rate eligibility + SOPPA state compliance matrix
Support ticket internal/external split + internal IT board
Operations department — 8th CRM department with scoped dashboard
Clean contact type enum + add funder and vendor types
Board members table — governance tracking
LMS support ticket system — submit, route, resolve
Vendor / contractor management
Funder relationship profiles — grant CRM enrichment
Guardian two-way class updates — creator announcements + direct reply
XP leagues + weekly leaderboard (age-gated social)
Mid-lesson formative checks — exit tickets + live response heatmap
Error handling hardening — consistent result type + error boundaries
Structured logging + Sentry error monitoring
Integration gateway — single entry point for all external webhooks
Dead Letter Queue + exponential backoff (5 retries)
API quota monitoring + throttle at 80% burst limit
Schema normalization engine — ISO 8601 dates, E.164 phones
Conflict resolution + SSOT — protected fields, source hierarchy
Global deduplication service — email/UUID lookup before insert
State-dependent validation — deal stage requires contract attachment
Bi-directional webhook sync — CRM changes push to downstream tools (<60s)
Audit log — every API change logs source, field, old/new value
Sandbox environment — staging schema mirror for UAT
Multi-entity subscription model — Accounts/Tenants separate from Users
MRR/ARR calculation engine — real-time revenue dashboard
Renewal automation — deal created 90 days before expiry, +5% uplift
Usage-based PQL triggers — Product Qualified Lead flagging
Customer health score — churn prediction, <40% triggers alert
Tenant isolation — every DB query filtered by tenantId
GDPR right-to-erasure — purge user data across all SaaS tables
Cohort retention report — % active at 6 months by signup month
CAC/LTV ratio — executive dashboard rolling 30-day
Hierarchical learning objects — Certification > Course > Module > Lesson > Asset
Prerequisites & gating logic — lock objects until prerequisite complete
Seat management + time-bound access with 30-day expiry notification
xAPI / telemetry ingestion — LRS statement capture
Weighted gradebook — immutable final grade on submission
Dynamic certificate PDF on course completion
Recertification workflow — re-enroll or flag non-compliant at 11 months
Behavioral nudge — inactivity trigger after 7 days with resume link
Instructor group-view dashboard — struggling learners, bulk message
Video placeholder UX — replace ▶︎ stubs in I01, B01, I-CAPSTONE chapters
HuntTimer — require child confirm before auto-advancing in E01 Ch2
Chapter replay affordance — Replay button on completed lesson chapters
Remove duplicate HP-007 entry in BACKLOG.yaml
i17 AI Safety — Nicky Case intern + mesa-opt + corrigibility metaphors
Color-blind mode — deuteranopia + protanopia toggles in a11y panel
Progress export CSV — guardian download from student overview page
Explorer co-pilot mode — shared parent+child lesson UI for ages 5–8
Weekly challenges — 3 rotating challenges with XP bonus + leaderboard entry
Screen-time controls — guardian daily limit + quiet-hours config
Milestone celebration — confetti + sound on badge earn / tier complete
Discussion threads — per-lesson Q&A section (COPPA-safe)
Bulk student import — CSV upload into cohort (instructor tool)
S16-008 Explorer co-pilot — implement shared parent+child UI for E01
Lesson filtering — topic + duration filters on tier catalog pages
Lesson bookmarks — save-for-later toggle on lesson cards
Related lessons — 'Up next' suggestions on lesson completion screens
Learning paths — curated sequences displayed as 'paths' on tier pages
Teacher gradebook — wire real lesson completion + quiz scores
Streak activity heatmap on student dashboard
Lesson notes — student can jot a private note during a lesson
Quiz performance insights — show per-slide accuracy after lesson completion
Teacher cohort overview — class-wide mastery heatmap by concept
Lesson progress — 'Continue where you left off' hero on learn landing page
Fix lesson filters — server-side filter + sort using URL search params
Lesson ratings — 1-5 star rating on lesson completion
Social sharing — share lesson progress and certificates
Dark mode toggle — expose UI switcher in settings
Student goals — display and set weekly XP goal on student dashboard
Parent digest customization — frequency picker in parent settings
Set LiveKit env vars in production
parent/settings: offline-pack empty state uses href='#' dead link
ActivityTimeline: pinnedAt field missing from Activity interface, cast silences TS
SendEmailModal: uses window.location.reload() instead of router.refresh()
EnrollmentManager: remove student from cohort fires without confirmation
SendCampaignButton: uses browser confirm() for bulk send action
support/[id]: screenshotUrl from DB rendered as href without protocol check
student dashboard: lesson card falls back to href='#' when info not found
student/portfolio/edit: window.confirm() for category delete
parent/student/[id]/portfolio: window.location.reload() after create
admin/contacts/CsvImportModal: window.location.reload() after import
admin/pipelines/KanbanBoard: window.location.reload() after deal add
admin/deals/DealActivityLog: window.location.reload() after log
admin/curriculum/slides/SlidesPanel: window.confirm() for delete slide
admin/volunteers: revokeVolunteer fires without confirmation
admin/development/funders/[id]: funder.website href lacks protocol check
admin/contacts/QuickAddModal: form labels missing htmlFor/id pairs
actions/portfolio: deletePortfolioEntry missing revalidatePath
admin/tutor-interviews: recordingUrl/lessonRecordingUrl hrefs lack https:// check
admin/contacts/ActivityTimeline: attachment att.url lacks https:// check
admin/governance: linkedBookstackPageUrl and fileUrl hrefs lack https:// check
ParentAccountMenu: Stripe portal URL used as window.location.href without https:// check
parent/settings/SettingsClient: co-guardian revoke fires without confirmation
PortfolioBuilderClient: optimistic entry field update has no rollback on failure
LessonSearchBar: fetch error silently swallowed — no user feedback
admin/settings/fields: window.confirm() for field delete
admin/faq: window.confirm() for FAQ entry delete
admin/announcements: window.confirm() for announcement delete
admin/grants/narrative-library: window.confirm() for block delete
notifications: DB-sourced link rendered without protocol guard
FunderReportForm: signedUrl passed to window.open without https guard
a11y: icon-only buttons missing aria-label in 3 files
admin/settings/tags: window.confirm() for tag delete and merge
admin/settings/team: window.confirm() for member remove
admin/settings/templates: window.confirm() for template delete
admin/development/funders/FunderForm: window.confirm() for funder delete
admin/integrations/webhooks: window.confirm() for webhook delete
a11y: CreatorApplicationClient form inputs missing htmlFor/id
Q2 2026
Lio Tutor UI — lessonId context, 200-char cap, emoji chips, audit log
F370 — rebase onto develop + regenerate migration for community_submissions
Community — admin pre-publish moderation queue