Description
Publish a Dotabase to the Web creates an authenticated publication record for selected views, a stable public slug, and an explicit property whitelist. Anonymous readers can fetch a publication manifest, paginated view rows, individual rows, and the graph for a published view. Every response is projected through the whitelist and strips relation targets or internal fields that are not part of the public contract.
The public plane resolves strictly through a currently published record. Unknown slugs, unpublished content, views outside the publication, foreign rows, and malformed whitelists all collapse to the same non-disclosing 404. Successful reads carry public cache controls and content ETags, allowing browsers or CDNs to return 304 for unchanged content.
Selling Points
- Turns structured workspace knowledge into a public web/data surface without duplicating rows into another publishing system.
- Gives publishers control over exactly which views and properties leave the authenticated workspace.
- Serves list, detail, and graph representations from one publication contract.
- Supports cache-friendly anonymous delivery, reducing repeated server work for public traffic.
- Fails closed with uniform not-found behavior, preventing public callers from probing unpublished or tenant-private structure.
User Story
A product team maintains a roadmap in a private Dotabase. An authorized owner publishes the approved views under a memorable slug and whitelists title, status, and summary. Visitors can browse the manifest and rows without signing in, while internal notes, hidden lanes, and relation coordinates never appear in the public payload.
Extension Surface
This feature is configurable. packages/dotabases/src/services/publication-service.ts accepts the selected views, property whitelist, slug, status, renderer metadata, and engagement policy, while packages/api/src/routes/publications.ts exposes authenticated lifecycle operations and packages/api/src/routes/public.ts exposes the anonymous read plane. External clients can automate the lifecycle through HTTP, but the more-open supported seam is the owner-controlled publication configuration. Projection and authority rules remain fixed.
Capabilities & Limits
- Publishes selected views with a stable slug, property whitelist, renderer metadata, and engagement configuration.
- Serves manifests, paginated rows, row details, and view graphs with ETag caching.
- Injects company and actor server-side for admin writes and applies workspace authority checks.
- Limit: only explicitly selected views and whitelisted properties are public.
- Limit: the API provides structured public data; final page presentation is owned by consuming web surfaces.
Implementation Map
packages/api/src/routes/publications.tspackages/api/src/routes/public.tspackages/api/src/schemas/publications.tspackages/dotabases/src/services/publication-service.tspackages/db/src/schema/dotabases.ts