.github/9
ISSUE_TEMPLATE/3bug_report.md config.yml feature_request.md
workflows/3ci.yml clean-clone.yml release.yml
CODEOWNERS dependabot.yml pull_request_template.md
apps/630
api/250
src/243
common/30
__tests__/3authorize.test.ts bigint-serialization.interceptor.test.ts files-limits.test.ts
filters/1all-exceptions.filter.ts
guards/3auth.guard.ts internal-service.guard.ts rate-limit.guard.ts
interceptors/2actor-context.interceptor.ts bigint-serialization.interceptor.ts
middleware/2idempotency.test.ts idempotency.ts
pipes/1zod-validation.pipe.ts
actor-context.ts audit.service.ts cache.test.ts cache.ts cookies.ts core.module.ts deprecation.ts email.service.ts errors.ts event-bus.ts log-scrubber.test.ts log-scrubber.ts logger.ts permission-cache-bridge.ts prisma.service.ts redis.service.ts trace-metadata.ts types.ts
config/1env.ts
lib/11
__tests__/5crypto.test.ts filter-builder.test.ts jwt.test.ts pagination.test.ts positions.test.ts
authorize.ts crypto.ts filter-builder.ts jwt.ts pagination.ts positions.ts
modules/197
ai/28
__tests__/4ai-writing.test.ts database-ai.test.ts generate-executor.test.ts prompts.test.ts
generator/4executor.ts generate.controller.ts generate.dto.ts generate.service.ts
ai-chat.service.ts ai-rate-limit.ts ai-writing.controller.ts ai-writing.dto.ts ai-writing.service.ts ai.controller.ts ai.module.ts ai.service.ts budget-guard.service.ts database-ai.controller.ts database-ai.dto.ts database-ai.service.ts db-prompts.ts dto.ts gateway-provider.ts ledger.service.ts prompts.ts rag.controller.ts rag.dto.ts rag.service.ts
api-keys/3api-keys.controller.ts api-keys.module.ts api-keys.service.ts
audit/2audit-log.controller.ts audit.module.ts
auth/4auth.controller.ts auth.module.ts auth.service.ts dto.ts
automations/5automations.controller.ts automations.module.ts automations.service.ts dto.ts webhook-incoming.controller.ts
blocks/5
__tests__/1batch-version-cas.test.ts
block.service.ts blocks.controller.ts blocks.module.ts dto.ts
comments/4comments.controller.ts comments.module.ts comments.service.ts dto.ts
databases/9
__tests__/3normalize-select-options.test.ts option-id-canonicalization.test.ts record-open-query-shape.test.ts
database.service.ts databases.controller.ts databases.module.ts dto.ts property-cache-schema.ts query.service.ts
docs/2docs.controller.ts docs.module.ts
files/10
__tests__/1quota.test.ts
dto.ts files.controller.ts files.module.ts files.service.ts quota.ts record.ts s3.ts uploads.controller.ts uploads.service.ts
forms/18debug.controller.ts form.dto.ts forms.controller.ts forms.module.ts forms.service.ts markdown.test.ts markdown.ts optional-auth.guard.ts public-forms.controller.ts public-forms.service.ts question.dto.ts questions.service.ts rate-limit.ts recaptcha.ts slug.ts submissions.controller.ts submissions.service.ts submit-schema.ts
health/3health.controller.ts health.module.ts health.service.ts
integrations/3integrations.controller.ts integrations.module.ts integrations.service.ts
internal/12
__tests__/2flush-query-shape.test.ts internal.endpoints.test.ts
ai-test-seam.controller.ts ai-test-seam.dto.ts ai-test-seam.service.ts internal.controller.ts internal.dto.ts internal.module.ts internal.service.ts test-seam.controller.ts test-seam.dto.ts test-seam.service.ts
notifications/3notifications.controller.ts notifications.module.ts notifications.service.ts
oauth/6
__tests__/1oauth.scopes.test.ts
oauth.controller.ts oauth.module.ts oauth.service.ts scopes.ts token-keys.ts
org/15audit.service.ts embed-preview.controller.ts guards.ts members.service.ts org-admin.controller.ts org-policy.service.ts org.module.ts overview.service.ts policy-effective.controller.ts policy.schema.ts policy.test.ts retention.service.ts totp.test.ts totp.ts two-factor.service.ts
orgs/5dto.ts orgs.controller.ts orgs.module.ts orgs.service.ts util.ts
pages/4dto.ts page.service.ts pages.controller.ts pages.module.ts
scim/15
__tests__/3email-mapping.test.ts etag.test.ts filters.test.ts
etag.ts filters.ts groups.service.ts schemas.ts scim-admin.controller.ts scim-admin.service.ts scim-auth.guard.ts scim-auth.service.ts scim-errors.ts scim.controller.ts scim.module.ts users.service.ts
search/4
__tests__/1search.service.test.ts
search.controller.ts search.module.ts search.service.ts
sessions/3sessions.controller.ts sessions.module.ts sessions.service.ts
share/3share.controller.ts share.module.ts share.service.ts
sso/16
__tests__/4enforcement.test.ts oidc.verify.test.ts provisioning.test.ts saml.validate.test.ts
enforcement.ts oidc.controller.ts oidc.service.ts oidc.ts provisioning.service.ts saml.controller.ts saml.ts schemas.ts sso-admin.controller.ts sso-admin.service.ts sso-secrets.ts sso.module.ts
teams/4dto.ts teams.controller.ts teams.module.ts teams.service.ts
users/4dto.ts users.controller.ts users.module.ts users.service.ts
webhooks/3webhooks.controller.ts webhooks.module.ts webhooks.service.ts
workspaces/4dto.ts workspaces.controller.ts workspaces.module.ts workspaces.service.ts
types/1xmldom.d.ts
app.module.ts constants.ts main.ts
_probe_rawbody.cjs .env.example Dockerfile package.json README.md tsconfig.json vitest.config.ts
realtime/33
src/17auth.ts comments.ts config.ts event-source.ts http-store.ts index.ts metrics.ts notifications.ts page-updated-source.ts presence.ts prisma-store.ts protocol.ts rate-limit.ts room-key.ts rooms.ts server.ts update-log.ts
test/11auth.test.ts config.test.ts event-source.test.ts http-store.test.ts metrics-merge.test.ts page-updated-source.test.ts presence.test.ts protocol.test.ts rate-limit.test.ts rooms.test.ts task-0094-builders.test.ts
.env.example Dockerfile package.json README.md tsconfig.json
web/255
src/244
app/45
__tests__/1theme-tokens.test.ts
(app)/26
w/25
[workspace]/25
ask/1page.tsx
databases/1
[id]/1page.tsx
favorites/1page.tsx
files/1page.tsx
notifications/1page.tsx
page/4
[id]/4
[block]/1page.tsx
share/1page.tsx
layout.tsx page.tsx
search/1page.tsx
settings/10
appearance/1page.tsx
automations/3
[id]/1page.tsx
new/1page.tsx
page.tsx
billing/1page.tsx
developers/1page.tsx
members/1page.tsx
permissions/1page.tsx
teams/1page.tsx
page.tsx
shared/1page.tsx
templates/1page.tsx
trash/1page.tsx
layout.tsx page.tsx
layout.tsx
(auth)/4
login/1page.tsx
register/1page.tsx
reset-password/1page.tsx
layout.tsx
api/2
metrics/1route.ts
v1/1
health/1route.ts
f/1
[slug]/1page.tsx
health/1
ready/1route.ts
org/2
[orgId]/2
admin/2
integrations/1page.tsx
page.tsx
share/1
[id]/1page.tsx
error.tsx global-error.tsx globals.css layout.tsx not-found.tsx page.tsx providers.tsx
components/118
admin/10
org-admin/8ApiKeysTab.tsx AuditTab.tsx MembersTab.tsx OverviewTab.tsx PoliciesTab.tsx RetentionTab.tsx WebhooksTab.tsx WorkspacePicker.tsx
ScimCard.tsx SsoTabs.tsx
ai/6ai-panel.tsx ask-ai-submenu.tsx db-ai-dialog.tsx generate-page-dialog.tsx writing-actions-menu.tsx writing-diff.tsx
automations/5action-editor.tsx condition-editor.tsx lib.ts run-history.tsx trigger-editor.tsx
collaboration/6CursorLayer.tsx OfflineBanner.tsx PresenceBar.tsx README.md ReviewFailedDialog.tsx StatusChip.tsx
comments/3comment-panel.tsx comment-thread.tsx mention-input.tsx
database/27
__tests__/2cell-editor.test.tsx cell-renderer.test.tsx
AiExtractDialog.tsx AiFormulaDialog.tsx AiGenerateDialog.tsx board-view.tsx buttons-panel.tsx calendar-view.tsx cell-editor.tsx cell-renderer.tsx chart-view.tsx database-page-view.tsx database-toolbar.tsx database-view-renderer.tsx db-embedded.tsx filter-builder.tsx form-builder-view.tsx formula-editor.tsx gallery-view.tsx group-builder.tsx list-view.tsx property-editor.tsx record-header.tsx record-panel.tsx sort-builder.tsx table-view.tsx timeline-view.tsx
dialogs/7
__tests__/1move-to-dialog.test.tsx
create-dialog.tsx dialog.tsx file-permissions-dialog.tsx invite-dialog.tsx move-to-dialog.tsx share-dialog.tsx
editor/19
__tests__/3code-block-text.test.ts code-block.test.tsx expandable.test.tsx
block-card.tsx block-renderer.tsx block-save-queue.ts block-toolbar.tsx context-menu.tsx expandable.tsx history-popover.tsx inline-editor.tsx insert-dialog.tsx page-canvas.tsx page-spinner.tsx page-view.tsx selection-toolbar.tsx slash-menu.tsx template-dialog.tsx type-menu.tsx
files/4FileBlock.tsx FileBrowser.tsx FilePicker.tsx PreviewModal.tsx
form/4form-field.tsx form-renderer.tsx form-responses-view.tsx form-view.tsx
layout/8
__tests__/1page-tree-icon.test.tsx
command-palette.tsx factory-logo.tsx page-tree-node.tsx sidebar.tsx theme-provider.tsx topbar.tsx workspace-shell.tsx
mentions/3
__tests__/1mention-model.test.ts
mention-model.ts MentionPopup.tsx
search/3ask-ai-search.tsx results-list.tsx search-dialog.tsx
settings/10
api-keys/4ApiKeyCreateDialog.tsx ApiKeyRevealDialog.tsx ApiKeyTable.tsx ScopesBadge.tsx
webhooks/5CurlExamples.tsx DeliveryInspector.tsx EventExplorer.tsx OverviewTab.tsx WebhooksTab.tsx
settings-shell.tsx
ui/3confirm-dialog.tsx form.tsx toaster.tsx
hooks/21
__tests__/4realtime-frame-handler.test.ts use-blocks.test.ts use-database-options.test.ts use-workspace.test.tsx
realtime-frame-handler.ts use-ai-stream.ts use-auth.ts use-blocks.ts use-database.ts use-db-ai-stream.ts use-forms.ts use-members.ts use-mention-sources.ts use-notifications.ts use-offline-status.ts use-pages.ts use-presence-announcer.ts use-presence-toasts.ts use-presence.ts use-realtime.ts use-workspace.ts
lib/50
__tests__/21ai-database.test.ts ai-generate.test.ts ai-sse.test.ts ai-writing.test.ts api-keys.test.ts api-members.test.ts auth-refresh.test.ts auth-store.test.ts batch-queue-drop.test.ts block-content.test.ts clipboard-import.test.ts code-highlight.test.ts offline-status.test.ts presence-announcer.test.ts presence-color.test.ts presence-cursor.test.ts presence-emitter.test.ts realtime-url.test.ts search.test.ts utils.test.ts writing-diff.test.ts
files/7
__tests__/2picker.test.ts upload.test.ts
api.ts picker.ts upload-store.ts upload.ts use-file-uploads.ts
ai-database.ts ai.ts api-keys.ts api.ts auth-store.ts batch-queue.ts block-content.ts clipboard-import.ts code-highlight.ts constants.ts offline-status.ts org-admin.ts presence-announcer.ts presence-color.ts presence-cursor.ts presence-editor-views.ts presence-emitter.ts query-client.ts realtime.ts search.ts types.ts utils.ts
stores/8
__tests__/1block-patch-store.test.ts
block-patch-store.ts comment-pill-store.ts database-store.ts editor-store.ts offlineQueue.ts presence-store.ts ui-store.ts
instrumentation.ts middleware.ts
.env.example Dockerfile next-env.d.ts next.config.mjs package.json postcss.config.mjs README.md tailwind.config.ts tsconfig.json tsconfig.tsbuildinfo vitest.config.ts
worker/92
src/87
__tests__/13ai-embedding.test.ts ai-request.test.ts ai-usage-budget.test.ts audit-export.test.ts email-decision.test.ts encrypt.test.ts health-search-index-lag.test.ts mime.test.ts retention.test.ts s3-sign.test.ts search-index.test.ts smtp.test.ts webhook-sign.test.ts
health/1server.ts
lib/12
__tests__/1clamav.test.ts
clamav.ts encrypt.ts job-otel.ts mime.ts notify.ts prisma.ts redis-stream.ts redis.ts s3.ts sharp.ts smtp.ts
processors/56
automations/28
__tests__/3condition-evaluator.spec.ts executors.spec.ts run-pipeline.spec.ts
executors/17assign-user.ts call-integration.ts change-status.ts classify.ts create-notification.ts create-page.ts email-cap.ts helpers.ts integration-registry.ts permission.ts record-write.ts registry.ts run-ai-action.ts send-email.ts send-webhook.ts types.ts update-record.ts
condition-evaluator.ts dead-letter.ts log.ts matcher.ts pipeline.ts run-state.ts schedule.ts watchdog.ts
files/15
__tests__/4errors.test.ts scan-gate.test.ts status.test.ts temp.test.ts
steps/4finalize.ts metadata.ts scan.ts thumbnails.ts
cleanup.ts errors.ts generateThumbs.ts processor.ts status.ts temp.ts types.ts
search-index/4builders.ts grants.ts index.ts processor.ts
ai-embedding.ts ai.processor.ts audit-export.ts automations.processor.ts email-decision.processor.ts email.processor.ts maintenance.processor.ts retention.ts webhooks.processor.ts
config.ts events.ts index.ts logger.ts queues.ts
.env.example Dockerfile package.json README.md tsconfig.json
docs/73
api/17ai.md authentication.md automations.md blocks.md comments.md databases.md files.md forms.md openapi.yaml org-admin.md pages.md scim.md search.md sso.md versioning.md webhooks.md workspaces.md
architecture/10ai-architecture.md automation.md backend-architecture.md database-architecture.md frontend-architecture.md realtime-architecture.md search-architecture.md security-architecture.md storage.md system-architecture.md
database/2database-architecture.md redis-keys.md
development/8admin-guide.md coding-standards.md deployment.md development-guide.md files-pipeline.md perf-report.md performance.md testing.md
product/4functional-requirements.md non-functional-requirements.md product-requirements.md ux-requirements.md
requirements/1requirements-matrix.md
security/5audit-report.md files.md forms.md license-allowlist.md security-architecture.md
tasks/16phase-00-foundation.md phase-01-authentication.md phase-02-workspace.md phase-03-pages.md phase-04-editor.md phase-05-databases.md phase-06-relations.md phase-07-collaboration.md phase-08-search.md phase-09-files.md phase-10-forms.md phase-11-automation.md phase-12-ai.md phase-13-api.md phase-14-enterprise.md phase-15-production.md
ui/9ai.md automations.md design-system.md developers.md files.md forms.md org-admin.md scim.md sso.md
support-matrix.md
infrastructure/71
caddy/1Caddyfile
docker/6
init/101-extensions.sql
opensearch/1init-indices.json
.env.docker docker-compose.yml opensearch-init.sh README.md
kubernetes/40
observability/20
alertmanager/1alertmanager.yaml
grafana/8
dashboards/6ai.json api-overview.json infra.json realtime.json search.json workers-queues.json
provisioning/2
dashboards/1dashboards.yaml
datasources/1datasource.yaml
prometheus/3alerts.yaml recording-rules.yaml scrape.yaml
scripts/1sync-sources.mjs
alertmanager.yaml grafana.yaml kustomization.yaml namespace.yaml node-exporter.yaml otel-collector.yaml prometheus.yaml
postgres/7configmap.yaml cronjob-backup.yaml cronjob-opensearch-snapshot.yaml pgbouncer.yaml replica.yaml statefulset.yaml walg-iam-policy.yaml
api.yaml configmap.yaml ingress.yaml kustomization.yaml namespace.yaml networkpolicy.yaml pdb.yaml README.md realtime.yaml redis.yaml secret.example.yaml web.yaml worker.yaml
nginx/2nginx.conf README.md
observability/14
alertmanager/1alertmanager.yaml
grafana/8
dashboards/6ai.json api-overview.json infra.json realtime.json search.json workers-queues.json
provisioning/2
dashboards/1dashboards.yaml
datasources/1datasource.yaml
prometheus/3alerts.yaml recording-rules.yaml scrape.yaml
scripts/1dashboard-completeness.mjs
README.md
terraform/8compute.tf data.tf main.tf network.tf outputs.tf README.md security.tf variables.tf
packages/289
ai/24
src/20
providers/7anthropic.ts google.ts http.ts index.ts openai-compatible.ts rag.test.ts writing.test.ts
schemas/2database.ts generate.ts
adapters.test.ts config.test.ts config.ts gateway.test.ts gateway.ts index.ts tools.test.ts tools.ts types.ts usage.test.ts usage.ts
package.json README.md tsconfig.json vitest.config.ts
auth/11
src/7index.ts passwords.test.ts passwords.ts sessions.test.ts sessions.ts tokens.test.ts tokens.ts
package.json README.md tsconfig.json vitest.config.ts
collaboration/17
src/13awareness.ts codec.test.ts codec.ts index.ts lww.test.ts lww.ts mapping.ts offline.ts outbox.test.ts outbox.ts provider.test.ts provider.ts types.ts
package.json README.md tsconfig.json vitest.config.ts
config/7
src/4eslint.base.js index.ts prettier.base.json tsconfig.base.json
package.json README.md tsconfig.json
database-client/5
src/2index.test.ts index.ts
package.json README.md tsconfig.json
database-engine/33
src/29
filter/2filter.test.ts index.ts
formula/8evaluator.ts formula.test.ts functions.ts index.ts lexer.ts parser.ts types.ts validate.ts
query/6group.ts index.ts paginate.ts pivot.ts query.test.ts sort.ts
relations/2index.ts relations.test.ts
rollups/2index.ts rollups.test.ts
values/5dates.ts index.ts registry.ts types.ts values.test.ts
views/3buttons.ts index.ts views.test.ts
index.ts
package.json README.md tsconfig.json vitest.config.ts
editor/25
src/21
marks/1highlight.ts
nodes/2equation.ts mention.ts
autosave.test.ts autosave.ts clipboard.test.ts clipboard.ts codec.test.ts codec.ts context-menu.test.ts context-menu.ts diff.test.ts diff.ts factory.ts history.test.ts history.ts index.ts positions.ts slash.test.ts slash.ts types.ts
package.json README.md tsconfig.json vitest.config.ts
observability/20
src/16
__tests__/8db-redis-metrics.test.ts metrics.test.ts otel.test.ts pino-otel.test.ts prometheus.test.ts resource.test.ts scrubber.test.ts traceparent.test.ts
index.ts metrics.ts otel.ts pino-otel.ts prometheus.ts resource.ts scrubber.ts traceparent.ts
package.json README.md tsconfig.json vitest.config.ts
permissions/11
src/7index.ts levels.test.ts levels.ts resolve.test.ts resolve.ts rules.test.ts rules.ts
package.json README.md tsconfig.json vitest.config.ts
search/22
src/18chunking.test.ts chunking.ts client.test.ts client.ts embeddings.test.ts embeddings.ts hybrid.test.ts hybrid.ts index.ts indexer.test.ts indexer.ts mapping.test.ts mapping.ts queries.test.ts queries.ts rrf.test.ts rrf.ts types.ts
package.json README.md tsconfig.json vitest.config.ts
shared/61
src/57
dto/17ai.dto.ts auth.dto.test.ts auth.dto.ts block.dto.ts browser-safety.test.ts comment.dto.ts database.dto.test.ts database.dto.ts file.dto.ts formula-ast.ts index.ts notification.dto.ts page.dto.ts search.dto.ts share.dto.ts webhook.dto.ts workspace.dto.ts
events/8audit-catalog.test.ts audit-catalog.ts audit-csv.test.ts audit-csv.ts audit-scope.test.ts audit-scope.ts catalog.test.ts catalog.ts
realtime/6comment-events.ts frames.test.ts frames.ts notification-policy.ts notification-prefs.ts task-0094.test.ts
automation.test.ts automation.ts constants.ts crypto.test.ts crypto.ts env.ts errors.ts events.test.ts events.ts forms.test.ts forms.ts index.ts markdown.test.ts markdown.ts mentions.test.ts mentions.ts net.test.ts net.ts positions.test.ts positions.ts presence.test.ts presence.ts security-headers.ts webhook-delivery.test.ts webhook-delivery.ts webhook-events.ts
package.json README.md tsconfig.json vitest.config.ts
storage/16
src/12client.test.ts client.ts index.ts keys.test.ts keys.ts mime.test.ts mime.ts presign.test.ts presign.ts thumbnails.test.ts thumbnails.ts types.ts
package.json README.md tsconfig.json vitest.config.ts
ui/37
src/33
components/19avatar.tsx badge.tsx button.tsx checkbox.tsx command.tsx context-menu.tsx dialog.tsx dropdown-menu.tsx empty-state.tsx index.ts popover.tsx separator.tsx skeleton.tsx slider.tsx spinner.tsx switch.tsx tabs.tsx toast.tsx tooltip.tsx
color.ts command-filter.test.ts command-filter.ts focus.test.ts focus.ts formatters.test.ts formatters.ts index.ts theme.test.ts theme.ts toast-store.test.ts toast-store.ts tokens.test.ts tokens.ts
package.json README.md tsconfig.json vitest.config.ts
prisma/16
migrations/13
20260927000000_init/1migration.sql
20260928000000_search_documents_content_hash/1migration.sql
20260929000000_workspace_usage_storage_bytes/1migration.sql
20260930000000_form_submitted_notification_type/1migration.sql
20261001000000_ai_phase12/1migration.sql
20261002000000_webhooks_secret_encrypted_dlq/1migration.sql
20261002111436_webhook_delivery_latency/1migration.sql
20261002120000_org_admin_2fa_retention_unique/1migration.sql
20261002215124_audit_export/1migration.sql
20261003210000_perf_indexes_hot_paths/1migration.sql
20261004004500_perf_indexes_hot_paths_2/1migration.sql
migration_lock.toml README.md
schema.prisma seed.ts verify.ts
scripts/7backup-health.ts docs-completeness.mjs generate-openapi.mjs minio-init.ts opensearch-reindex.ts storage-orphans.ts verify-clean-clone.sh
tests/169
e2e/63
.auth/1user.json
fixtures/7
files/6clip.mp4 clip.wav clip.webm hero-1400.png note.docx note.txt
realtime.ts
mocks/2oidc-issuer.ts saml-idp.ts
playwright-report/3
data/2a6557bae9c2714a658968d4eb8534195c08ebda8.png e3092d07d00a16063e46385c02a559a9054fa847.webm
index.html
reports/1files-security.json
specs/34ai-database.spec.ts ai-generate.spec.ts ai-rag.spec.ts ai-security.spec.ts ai-writing.spec.ts ai.spec.ts api-keys.spec.ts appearance-theme.spec.ts auth.spec.ts automation.spec.ts collab-two-tab.spec.ts comments.spec.ts databases.spec.ts default-workspace-alias.spec.ts developers.spec.ts editor.spec.ts files.spec.ts final-flow.spec.ts forms.spec.ts oauth.spec.ts org-admin.spec.ts pages.spec.ts performance.spec.ts presence-cursors.spec.ts qa-paste-toggle.spec.ts realtime.spec.ts scim.spec.ts search-index-lag.spec.ts search.spec.ts sharing.spec.ts sso.spec.ts task-0094-comments-notifications.spec.ts webhooks.spec.ts workspace.spec.ts
test-results-final-flow/3
final-flow-Release-v1-0-fi-6c06b-w-state-carries-sequential--chromium-desktop/2test-failed-1.png trace.zip
.last-run.json
utils/4api.ts dnd.ts search-lag.ts wait.ts
.gitignore fixtures.ts global-setup.ts package.json playwright.config.ts playwright.final-flow.config.ts README.md tsconfig.json
fixtures/1
files/1make-sparse.ts
integration/60
ai-capability/2ai-app.capability.test.ts gateway.capability.test.ts
drill/2seed-drill.mjs verify-restore.mjs
fixtures/5
files/5clip.mp4 clip.wav doc.pdf hero-1400.png note.txt
helpers/3api.ts containers.ts seed.ts
realtime/11control-channel.test.ts convergence.test.ts flush-rebase-http.test.ts handshake.test.ts heartbeat-limits.test.ts lifecycle.test.ts presence.test.ts rebase.test.ts resume.test.ts rt-helpers.ts task-0094-fanout.test.ts
ai-chat.integration.test.ts ai-database.integration.test.ts ai-generate.integration.test.ts ai-rag.integration.test.ts ai-writing.integration.test.ts api-keys.integration.test.ts audit-completeness.integration.test.ts audit-export-s3.integration.test.ts auth.integration.test.ts automation-pipeline.integration.test.ts automations.integration.test.ts blocks.integration.test.ts cache-invalidation.integration.test.ts comments.integration.test.ts databases.integration.test.ts files-lifecycle.integration.test.ts files-pipeline.integration.test.ts files-security.integration.test.ts files.integration.test.ts forms-responses.integration.test.ts forms.integration.test.ts oauth.integration.test.ts openapi.contract.test.ts org-admin.integration.test.ts package.json pages.integration.test.ts permissions.integration.test.ts README.md replica-routing.integration.test.ts retention-engine.integration.test.ts scim.integration.test.ts search.integration.test.ts sso.integration.test.ts tsconfig.json vitest.config.ts webhooks.integration.test.ts workspace.integration.test.ts
performance/28
fixtures/1search-100k.ts
helpers/2seed-100k.mjs seed-1k-load.mjs
reports/7api-load-smoke.json database-load-smoke.json editor-local.json realtime-load.json search-full.json search-last.json search-reduced.json
api-load.js api.js archive.tar database-load.js database.js editor-local.mjs extract-100k-env.mjs package.json README.md realtime-1k.js realtime-load.js realtime.js run-realtime-load.sh search-search.k6.js search-summary.json seed-100k.mjs threshold-breach-demo.js verify-zero-op-loss.mjs
security/16
helpers/1app.ts
audit-report.test.ts auth-paths.test.ts deps.test.ts formula-fuzz.test.ts gitleaks-config.test.ts headers.test.ts images.test.ts oracle.ts package.json permission-fuzz.test.ts rate-limits.test.ts README.md tsconfig.json upload-abuse.test.ts vitest.config.ts
README.md
.dockerignore .env .env.bak-task0125 .env.example .eslintrc.json .gitignore .npmrc .prettierignore .prettierrc.json AGENTS.md ARCHITECTURE.md CHANGELOG.md CONTRIBUTING.md gitleaks.toml LICENSE package.json pnpm-lock.yaml pnpm-workspace.yaml PRODUCT-SPEC.md README.md ROADMAP.md SECURITY.md tsconfig.json turbo.json
ux-requirements.mddocs/product/ux-requirements.md← product28,010 B← Back to the app

UX Requirements — AI Software Factory

Interaction, layout, and usability requirements. Requirement IDs referenced here are canonical in product-requirements.md; functional detail in functional-requirements.md; tokens and component visuals in ../ui/design-system.md.


1. Application layout

1.1 Shell (desktop ≥ 1024 px)

┌────────────────────────────────────────────────────────────────────────────┐
│ ▣ Acme Inc.  ⌕ Search… (⌘K)   + New    ⬡ Share  ⋯   [👤 Ana ▾]      40 px │  ← top bar
├──────────────┬─────────────────────────────────────────────────────────────┤
│ ⌂ Home       │  📁 Website Redesign            ●●●   ⌕  ⋯        240 px   │
│ 📥 Inbox (3) │ ──────────────────────────────────────────────────────────  │
│ ⭐ Favorites │                                                             │
│              │   Title block (H1, inline editable)                         │
│ ▸ Engineering│   Description (muted, below title)                          │
│   ⌂ Home     │                                                             │
│   ▾ Projects │   [Table view ▾ | Board | Calendar]     [+ View]  [⚙]      │
│     Website… │   ┌─────────────────────────────────────────────────────┐   │
│     Mobile…  │   │ Name            │ Status     │ Owner │ Due    │ ⋯ │   │
│ ▸ Product    │   │ Website Redesign│ ● In Pro…  │ Ana   │ Sep 30 │ ⋯ │   │
│              │   │ Mobile App      │ ○ To Do    │ Ben   │ Dec 15 │ ⋯ │   │
│ Private      │   │ Data Platform   │ ◐ Review   │ Ana   │ Oct 31 │ ⋯ │   │
│ Shared       │   │ + New row                                     ⋯   │   │
│ 🗑 Trash      │   └─────────────────────────────────────────────────────┘   │
│              │                                                             │
│              │   Blocks (editor)                                           │
│              │   ┊ ⌫  Write something, type "/" for commands…              │
└──────────────┴─────────────────────────────────────────────────────────────┘
Zone Rules
Top bar (40 px, z-50) Left: workspace switcher (icon + name + chevron → workspace list, create). Center-left: global search field (read-only input; click or ⌘K opens palette). Right: + New menu, Share (when page open), ⋯ page menu, avatar menu (profile, theme, settings, sign out). Offline/realtime status chip appears center when degraded.
Sidebar (240 px default, 56–320 px resizable, collapsible to 56 px icon rail) Sections in fixed order: Home, Inbox (unread badge), Search, Favorites, Teamspaces (expandable), Private, Shared, Trash. Each page row: icon, title, hover actions (⋯ menu, + child). Active row highlighted (bg-accent). Drag to reorder/reparent (§ DnD). "More" footer → settings, help.
Content Max content width 900 px (pages) / 960 px (databases) centered; scroll container is the content pane only (top bar + sidebar fixed). Scrollbar: 12 px, auto-hiding on desktop.

1.2 Page anatomy (top → bottom)

┌──────────────────────────────────────────────────┐
│ [cover image — full-bleed, 150–400 px, drag to   │
│  resize, hover: ⚙ change / 🗑 remove]            │
│                                                  │
│        🚀  (icon — emoji or file, 48 px; click   │
│           to open icon picker)                   │
│  Website Redesign          ← title (H1, inline)  │
│  Redesign the marketing site…← description (muted│
│  , ≤ 2 lines, inline, collapsible)               │
│ ─────────────────────────────────────────────── │
│  [properties bar — if page is a record: chips/   │
│   inline property editor row, "Show more"]       │
│                                                  │
│  Block 1                                        │
│  Block 2        ← hover gutter: ⋮⋮ + "+"        │
│  Block 3                                        │
└──────────────────────────────────────────────────┘
Element UX rules
Cover Click cover → upload / pick from files / remove; height drag handle at bottom edge (snaps 150/250/400 px); lazy-loaded below the fold.
Icon Click (or + when absent) → emoji grid (searchable) or "upload image"; keyboard: Enter opens, Esc closes.
Title Placeholder "Untitled"; Enter in title → move to first block; Backspace on empty title does nothing (never deletes page); max 200 chars (soft warning at 180).
Description Collapses to one line + "…" expander; editable inline; max 500.
Properties bar (record pages) Horizontal wrap of property chips (icon + label + value); chip click → inline editor for that type; "Show more (n)" → popover with all properties; order follows property position.

2. Editor UX

2.1 Caret & selection

2.2 Block hover controls

   ┊⌫   Write something, type "/" for commands…      ← normal text
   [⋮⋮]  [+]   ← appear in the 40 px left gutter on hover (≥150 ms)

2.3 Slash menu UX

┌──────────────────────────────────────┐
│ /hea        ⌕ (fuzzy)                │
│ ─ Text ───────────────────────────── │
│ ▸ Heading 1        H1   (⌘⇧1)       │
│ ▸ Heading 2        H2   (⌘⇧2)       │
│ ▸ Heading 3        H3   (⌘⇧3)       │
│ ─ Data ───────────────────────────── │
│ ▸ Table            ⌗                │
│ ▸ Database         🗃  new properties│
│ ─ Media ──────────────────────────── │
│ ▸ Image            🖼               │
└──────────────────────────────────────┘
   ↑↓ navigate · Enter select · Esc close · Tab filter group

2.4 Context menu structure

Menu = flat list with dividers and submenus, 260 px wide, max 14 visible rows (scroll). Block menu (exact order — functional §4.3): Turn into ▸ · Duplicate · Copy · Copy link · Move to ▸ · Delete · ⎯ · Comment · Ask AI ▸ · ⎯ · Color ▸ · Background ▸ · ⎯ · Convert to ▸ · ⎯ · More ▸. Page menu (sidebar row hover → ⋯, or top-bar ⋯): Open · Open in new tab · Duplicate · Rename · Move ▸ · Copy link · Favorite (✓ when on) · Archive · Delete · ⎯ · Export ▸ · Share · Permissions. Rules: items the caller cannot perform are hidden (not disabled) for guests; destructive items (Delete, Archive) get text-danger; "Delete" opens a confirm dialog for pages, executes immediately for blocks (undo-able via ⌘Z + "Undo delete" toast action).

2.5 Undo/redo & copy/paste UX

3. Command palette (⌘K / Ctrl+K)

Single overlay (centered, 640 px, z-100), fuzzy over actions + pages + databases + commands, groups:

Group Items
Create New page, New page in… (submenu of top-level pages), New database, New team, New template, New dashboard, New form
Go to (pages/databases from fuzzy search, recent first, max 20)
Actions Invite people, Copy link to current page, Duplicate page, Move page, Export current page, Save as template, Toggle dark mode, Toggle sidebar, Go to Inbox, Go to Search, Go to Settings ▸ (Profile / Members / Security / Billing)
Workspace Switch workspace (list + "Manage workspaces"), Create workspace
AI Ask AI (opens chat), Summarize page, Improve selection, Generate database from selection
Data Import, Reindex search (admin), Rebuild cache (admin)

Behavior: type filters within + across groups; ↑↓ + Enter; Esc closes; palette remembers last-used group; every action has the same permission gating as its menu counterpart.

4. Database view UX

Common rules: view switcher tabs (left) + + (type picker); active tab border-b-2 border-accent text-primary; per-view settings gear (right) opens a right-side drawer (320 px) with tabs Filter · Sort · Group · Properties · Display; all drawer edits apply immediately (no Save button — 400 ms debounced autosave, "Saved" chip).

4.1 Table

4.2 Board

4.3 Calendar

4.4 Gallery

4.5 Timeline

4.6 Chart / Dashboard / Form views

5. States: empty, loading, error

State Rule
Loading (initial) Skeletons, never spinners, for: page body (3 line blocks), database table (12 ghost rows), sidebar tree (5 ghost rows), search (3 result ghosts). Shown only when a fetch exceeds 150 ms (avoid flash).
Loading (mutation) The exact control spins/disables (button opacity-60 pointer-events-none + 14 px spinner); row-level: cell keeps its value + subtle pulse overlay. Optimistic UI for: todo toggle, checkbox, board drag, comment send (sent state, then confirm).
Loading (background) Top-bar progress bar (2 px, accent, indeterminate) for bulk ops (import, reindex, export).
Empty Every list/table has a dedicated empty state: illustration (monochrome, 96 px) + one-line headline + primary CTA. Databases: "Add your first record". Search: no query → recent searches; no results → "No results for 'x'" + filter-reset. Inbox: "You're all caught up". Trash: "Trash is empty" + "Restore all" (when non-empty) / "Permanently delete" (admin).
Error (fetch) Inline error panel in the content area: icon + message + Retry button. For search: "Search is unavailable — try again" (degraded mode).
Error (permission) Page-level: 403 screen "You don't have access" + "Request access" (sends notification to owner) — never a blank page. Cell-level: value hidden, "Hidden" chip.
Error (validation) Inline field errors (below field, text-danger, 12 px) + field border-danger; focus first invalid field on submit; aria-live polite.
410 / deleted "This page was deleted" + (if owner) "Restore" / "View trash".

Toast rules (z-110, stack max 4, bottom-right desktop / bottom-center mobile, 4 000 ms default / 7 000 ms with action): kinds = info / success / warning / error; icon + message + optional action (Undo, Retry, View) + close; errors persist until dismissed unless they have a retry action (then 7 s); toasts are role=status (info/success) or role=alert (error) for screen readers.

6. Onboarding flow (first run, personal workspace)

Step Content
0 Post-login landing: "Welcome to <Name>" screen (no page yet) with 3 cards: Create your first page, Invite your team, Try a template.
1 "Create your first page" → creates Getting started page pre-filled with: welcome text, a todo list (type /, drag a block, try the slash menu — 3 checked-as-you-go items), a mini 3-row database ("Try a database"), a callout with tips.
2 Progress: each interaction (type in editor, open slash menu, drag a block, add a record) checks its todo in real time; all done → confetti-free success toast "You're ready 🎉" + button "Explore templates".
3 Team-workspace variant (invite-accept flow): skip step 1 (owner's Getting started visible if shared) → "Invite your team" card primary.
Skip "Skip for now" always visible; onboarding state persisted per user (user.settings.onboardedAt); re-openable via Help → "Getting started".

7. Responsive rules

Breakpoint Width Rules
Desktop ≥ 1024 px Full shell (§1). Columns render side-by-side. Context menus right-click + handle.
Laptop 768–1023 px Sidebar auto-collapses to 56 px icon rail (hover-expands, non-modal); database: table scrolls horizontally (sticky title col); board: horizontal scroll; calendar: week view default; columns: 2-up max.
Tablet 640–767 px Sidebar is an overlay drawer (hamburger, z-90, swipe to close); top bar search → icon (opens full-screen search); command palette full-screen; columns stack; context menu = long-press or ⋯ button on each block; DnD: drag handles enlarged (44 px hit area), drop targets snap to nearest edge.
Mobile < 640 px Single-column everything; editor: full-width blocks, ⋮⋮ always visible as ⋯ in the right gutter; database: table → list view forced (cards), board keeps horizontal scroll with 80 % viewport cards, calendar → day list; toasts bottom-full-width; modals → full-screen sheets (slide up, 24 px top grab handle).

Rules of thumb: minimum touch target 44 × 44 px below 1024 px; no hover-only functionality without a tap equivalent; text never scales below 14 px body; 1 px borders become border tokens that render at 1.5 px on coarse pointers.

8. Theming (UX contract — token detail in design-system.md)

9. High-contrast & accessibility

10. Keyboard shortcut master table

Mac ⌘ / Windows Ctrl shown as ⌘/Ctrl. Esc always: closes top-most overlay.

Category Shortcut Action
Global ⌘/Ctrl+K Command palette
⌘/Ctrl+P Quick open page (alias of palette, "Go to" group)
⌘/Ctrl+Shift+F Global search (opens search page)
g h / g i / g f / g t Go to Home / Inbox / Favorites / Trash (Vim-style, 1 s window)
n New page (in current location)
⌘/Ctrl+Shift+I Invite people
⌘/Ctrl+Shift+L Link (selection) / share current page (no selection)
? (in editor) Shortcuts help overlay
Editing Enter / Shift+Enter New block / soft break
Backspace / Delete Merge-prev / merge-next
Tab / Shift+Tab Indent / outdent
↑ ↓ ← → Caret & block navigation (with scrolling)
⌘/Ctrl+A (×3) Text → block → all blocks
⌘/Ctrl+C / X / V Copy / cut / paste (blocks)
⌘/Ctrl+Z / ⌘/Ctrl+Shift+Z / ⌘/Ctrl+Y Undo / redo / redo
⌘/Ctrl+B / I / U Bold / italic / underline
⌘/Ctrl+Shift+S Strikethrough
⌘/Ctrl+E Inline code
⌘/Ctrl+Shift+1/2/3/0 H1 / H2 / H3 / paragraph
⌘/Ctrl+Shift+8 Toggle block
/ Slash menu (at block start)
Blocks ⌘/Ctrl+Shift+D Duplicate selection
⌘/Ctrl+Shift+C Copy link to block
⌘/Ctrl+Shift+M Move block (opens "Move to")
Database (cell focus) Enter / Tab / Shift+Tab Commit+down / commit+right / commit+left
Esc Revert cell edit
⌘/Ctrl+Enter Open record page
⌘/Ctrl+Shift+A Select all rows (in view)
Views 1…9 (view focus) Switch to view #
f Focus filter drawer (in view)
Palette ↑ ↓ + Enter Navigate / select
Tab Cycle result groups
Non-drag DnD Space (on focused ⋮⋮) Lift block → ↑↓←→ move → Space drop, Esc cancel

All shortcuts are remappable (Settings → Shortcuts, v1.1) and none collide with browser defaults beyond the ⌘/Ctrl+letter set listed. Every shortcut has a menu equivalent (a11y).

11. Focus & overlays (dialog/menu contract)

12. Accessibility requirements (WCAG 2.2 AA)

Global: all interactive elements reachable by keyboard in a logical order; visible focus ring (2 px accent, 2 px offset) on every focusable; landmarks (banner, navigation, main, complementary, contentinfo); skip to content link first in tab order; lang attribute set from user locale; color contrast ≥ 4.5:1 (text) / 3:1 (large text, UI components) verified for every token pair in both themes.

Component type Requirements
Block editor Each block exposes ARIA: contenteditable region with role=textbox semantics per block; headings are real h1–h3; lists role=list/listitem; todo = role=checkbox with aria-checked; toggle = aria-expanded; drag alternative via Space lift (§10); "Move to" context-menu path for every drag; block selection announced (<n> blocks selected, role=status); paste results announced.
Slash menu / context menu / dropdowns role=menu + role=menuitem (or combobox pattern for slash), arrow-key navigation, aria-activedescendant or roving tabindex, aria-haspopup, aria-expanded on trigger, Esc closes & returns focus, items have accessible names (icon + text).
Command palette role=combobox input + role=listbox results; announces result count; results navigable by arrow; aria-controls links input → listbox.
Dialogs / drawers role=dialog aria-modal=true with aria-labelledby (headline) + aria-describedby (body); focus trap; Esc = cancel; focus restored to trigger on close.
Toasts role=status (info/success) / role=alert (error), auto-announced, dismissible, timer paused on hover/focus (2.5.8 Pointer Lock / timeout control).
Database table role=grid with role=row/columnheader/gridcell; cell editing exposes role=combobox/spinbutton/switch per widget type; column headers aria-sort; row selection announced; virtualized rows keep a stable aria-rowindex; keyboard: arrows move cells, Enter edits, Space selects row.
Board / kanban Cards focusable; Space lifts card (arrows move between columns, announce "Column: In Progress, 3 of 7"); drop announced with new column + position.
Calendar Day cells = role=gridcell with date label; "n more" is a button; today announced ("Today"); navigation keys (PageUp/PageDown month, Shift+PageUp/Down week).
Sidebar tree role=tree / treeitem, aria-expanded on parents, arrow-key tree navigation (up/down select, right expand, left collapse), Home key = first, End = last.
Forms (public + builder) Labels always associated (for/aria-labelledby), required marked (aria-required + visible *), errors aria-describedby + aria-invalid, live region for submit progress, file input has visible name + remove button.
Comments Thread = role=feed (aria-busy while loading); each comment labeled "Name, 2h ago, resolved"; reaction buttons have aria-pressed; mention popup = listbox.
Realtime presence Cursors: decorative (aria-hidden) — presence list is a role=status live region updated ≤ 1/s ("Ana is editing this page"); no reliance on color alone for cursor names (name label on cursor).
Media Images: alt required at upload (prompted, skippable → "Decorative" sets alt=""); video/audio have native controls + text alternatives; embeds get aria-label from the URL title.
Motion prefers-reduced-motion honored (auto) + manual toggle; no content flashes > 3×/s; auto-scroll during drag disabled in reduced motion (jump instead).
Touch targets ≥ 44 × 44 px at all breakpoints below 1024 px; adjacent targets ≥ 8 px apart (2.5.8).
Target size / hover (2.2) Hoverable controls (hover-only gutter buttons) have a tap/keyboard equivalent; hover-intent menus close on pointer exit with 300 ms grace (1.4.13).

Verification: axe-core scan in the E2E suite (0 critical/serious per MVP flow), manual screen-reader pass (VoiceOver + NVDA) on the 13 MVP flows before each release (checklist in ../development/testing.md).