The foundation every module stands on.
Included with every install: a core infrastructure plugin that owns migrations, audit, storage, search, and secrets — plus a USWDS-inspired theme pair that gives staff one coherent admin and residents one accessible public site.
Try Crumina Civic All modulesModules
Infrastructure that respects your data
A module manager, not an FTP session
Agencies install, update, and activate the curated clg-* plugins from
one admin screen — via ZIP upload, no server access needed. A live status table
shows exactly what's installed, active, and awaiting updates.
- Install / update / activate / deactivate from the admin UI
- System status card verifies core and both themes are loaded
- WP-CLI toolkit for scripted installs, migrations, and audit pruning
Health checks — ready for uptime monitoring
/health/live200 OK/health/ready — DB · migrations · storage · search · cache200 OKData Management — erase resident data
Deletion is explicit — never a side effect
Every module registers its erasure callbacks with the core registry, and the Data Management screen shows a dry-run count preview before anything is removed. Uninstalling or deactivating a plugin never deletes customer data.
- Platform-wide erasure registry with per-module callbacks
- Dry-run count preview before every deletion
- Central audit log records every sensitive mutation with actor, IP, and before/after state
Branding that can't break accessibility
Agencies brand their site in the native Customizer — primary, secondary, and accent colors — while the picker computes contrast ratios live and rejects combinations below 4.5:1. The public theme ships a high-contrast style variation on top.
- Live contrast checking in the Customizer brand picker
- Design tokens in
theme.json: palette, type scale, spacing, layout widths - Documented template overrides — customize module output without forking plugins
Core infrastructure services
Health-check API
/health/live and /health/ready validate DB, migrations, storage, search, and object cache.
WP-CLI toolkit
Install, migrate, list modules, and prune audit logs from the command line.
Central audit logging
One audit service for every module, with configurable retention pruning.
Storage driver contract
A working local driver out of the box, with a registry for swapping in S3 or Google Drive.
Search provider contract
WordPress-native search by default, with a registry for the Meilisearch provider.
Package installer
Install and update curated modules from the admin UI — no server access required.
Data-erasure registry
The backend for platform-wide "delete my data" workflows with dry-run previews.
Encrypted secrets
Versioned, libsodium-based storage for API keys, OAuth tokens, and service credentials.
Agency profile service
Name, jurisdiction, timezone, and contact info — one place of record for every module.
Comment kill-switch
One click disables WordPress blog comments platform-wide for agencies that don't want them.
Shared document processing
Text extraction for PDF/Word/Excel/PowerPoint/CSV and Office-to-PDF rendering, reused by Documents and Meetings.
REST permission helpers
Reusable admin-only, capability-gated, and logged-in-only checks for every module's endpoints.
One design system, two themes
crumina-framework — the admin & design system
- Central "Crumina Civic" admin menu: Agency Settings, Modules, Data Management, and every module's settings page
- React Agency Settings screen: name, short name, jurisdiction, timezone, contact info
- System status card confirming core and both themes are loaded correctly
- Customizer branding with built-in contrast checking
- Design tokens in
theme.jsonplus CSS variables for focus rings and brand colors - USWDS-inspired components: forms, buttons, alerts, cards, summary boxes
- Five reusable block patterns: alert, three-card grid, summary box, agency hero, footer identifier
- Accessible by default: visible focus rings and semantic landmark roles
crumina-agency — the public presentation layer
- Civic color palette and layout widths tuned for public agency sites
- Built-in high-contrast style variation for residents who need it
- Documented template-override system — customize module output without forking plugin code
- Reserved, presentation-only CSS hooks for every module (
.clg-projects__,.clg-documents__,.clg-meetings__,.clg-feedback__)
Style variations
Residents can always fall back to high contrast — branding never removes it.
See the foundation in action
Open the demo admin: install a module, run a dry-run erasure, and try to save an inaccessible brand color — you can't.