Dynamic Documentation Visibility — Session-Based Backend Control

Backend-controlled project visibility via shared links. No new routes or components.

Dynamic Documentation Visibility — Session-Based Backend Control

Goal

When sharing the docs app with someone, control which projects they see from the backend. Keep current docs structure, routes, and components. Add a filter layer driven by session tokens.


Approach: URL + Backend Filter

  1. Create session (admin): POST /docs-api/sessions with allowedProjectIds
  2. Share link: docs.app.com?v=TOKEN or docs.app.com?session=TOKEN
  3. Frontend: On load, if v or session in URL, call GET /docs-api/sessions/:token
  4. Backend: Returns { allowedProjectIds: ["english/AI", "english/GoGrab-Space"] } or { allowedProjectIds: null } if invalid
  5. Frontend: Filter availableProjects to only those in allowedProjectIds (when present)

No new routes, no new components — only filter the existing project list.


Backend (backend-docs-api)

Endpoints

Method Path Auth Purpose
GET /docs-api/sessions/:token Public Resolve token → allowedProjectIds
POST /docs-api/sessions T0/T1 Create session
GET /docs-api/sessions T0/T1 List all sessions
DELETE /docs-api/sessions/:token T0/T1 Deactivate session

Schema (doc-view-sessions)

Field Type Description
token string Unique token (24-char hex)
allowedProjectIds string[] e.g. ["english/AI", "english/GoGrab-Space"]
name string Optional label
createdBy string User ID
isActive boolean Enable/disable
expiresAt Date Optional expiry

Files


Frontend (docs-angular)

Implementation (Done)

In LoadAvailableProjects (project-selection.state.ts):

  1. Read v or session query param from URL (supports hash routing: #/path?v=TOKEN)
  2. If present: call GET /docs-api/sessions/:token (base: /docs-api in dev via proxy, full docs-api URL in prod)
  3. If response has allowedProjectIds (array): filter projects to only those whose id is in allowedProjectIds
  4. If no token or invalid: show all projects (current behavior)

Proxy (dev)


Production


Flow (Unchanged for Normal Users)


Future: User-Assigned Visibility