marc 2db050cc09 feat(search): global spotlight search across all records, pages and actions
Postgres-native global search (tsvector + pg_trgm, no external service) with a
config-driven index so any table self-registers. Per-row visibility via morbac
RLS. New reusable @crudy/search package for the spotlight UI; core wires it into
the bar (Ctrl/Cmd K) with no hardcoded command list.

Backend
- 0008_search.sql: app.search_index + GIN indexes, app.searchable_sources
  registry, generic trigger, app.search_register/reindex_source helpers, the
  app.search(q,limit) RPC (websearch_to_tsquery, word_similarity, RLS), grants.
- BackendModule.searchables: modules declare searchable tables; registered at
  boot in syncModules with identifier validation.
- /search data route; org/role reindex via new RoleEventSink + search-reindex.
- Core entities registered: users, orgs, roles, service connectors, emails.

Frontend
- @crudy/search: presentational Spotlight (dialog, hotkey, grouped results,
  real anchor links, in-modal shortcut hints).
- command-registry is pure logic; pages/actions derive from core-routes,
  the settings tab registry, and module navItems/settingsTabs/crudModels/commands.
- CrudModelDef yields page + create action; generic FrontendModule.commands for
  any developer action. Floating-sidebar top-right items render separately.

Modules: dashboard, license-admin (customers, plans), email-templates,
service-connectors register their searchables and CRUD models.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 20:49:50 +02:00
2026-06-03 19:54:20 +02:00
S
Description
Crudy pgmorbac Multi-OrBAC plugin - extracted
111 KiB
2026-07-22 07:58:46 +00:00
Languages
TypeScript 100%