managarten/docs
Till JS 92bee0d71a feat(unlisted): M8.1 — backend foundation for shareable-link snapshots
First milestone of the unlisted-share rollout plan (docs/plans/
unlisted-sharing.md). Adds the server-side infrastructure that backs
`visibility='unlisted'` — previously the flag was stamped locally but
led nowhere. After this commit, a token points at an actual snapshot
the SSR share-page will render (M8.3+).

Scope: backend only. No client-side publish/revoke calls yet, no
share-route, no UI. That lands in M8.2/M8.3. Anyone hitting the
endpoints manually with curl can exercise the full publish-fetch-
revoke cycle.

Changes:
- New pgSchema `unlisted` with table `snapshots`:
    token (pk, 32-char base64url)
    user_id, space_id, collection, record_id, blob (jsonb)
    created_at, updated_at, expires_at (nullable), revoked_at
  Partial unique index on (user_id, collection, record_id) WHERE
  revoked_at IS NULL so one record has at most one active token.
  Partial btree on expires_at for the cron-cleanup path.
- Hand-authored SQL migration `apps/api/drizzle/unlisted/0000_init.sql`
  (manual-apply per the repo's feedback_api_hand_authored_migrations
  memory). Already applied to the local mana_platform.
- Drizzle schema `apps/api/src/modules/unlisted/schema.ts`. All id
  fields are `text` not uuid — Better-Auth nanoids aren't UUIDs, same
  trap we hit with the website module's publish bug.
- mana-api module `apps/api/src/modules/unlisted/`:
    POST   /api/v1/unlisted/:collection/:recordId (auth)
      Body: { spaceId, blob, expiresAt? }. Re-publish reuses the
      existing active token (by (user,collection,record) lookup); a
      revoke-then-republish mints a fresh token row. Response includes
      a fully-qualified share URL built from Origin/Referer/env.
    DELETE /api/v1/unlisted/:collection/:recordId (auth)
      Soft-revoke. Idempotent — already-revoked returns
      { revoked: 0 } cleanly so client stores can call it
      unconditionally on setVisibility-away.
    GET    /api/v1/unlisted/public/:token (public)
      Rate-limited 20/min/token + 60/min/ip so token enumeration is
      impractical. 404 for unknown, 410 Gone for revoked or expired.
      Cache-Control: private, max-age=60 + X-Robots-Tag: noindex for
      SEO isolation. Returns { token, collection, blob, createdAt,
      updatedAt, expiresAt }.
- ALLOWED_COLLECTIONS hardcoded allowlist in POST handler
  (events, libraryEntries, places — the M8.3+M8.4 scope). Unknown
  collection -> 400 COLLECTION_NOT_ALLOWED. Keeps the schema honest
  about what the server accepts.
- drizzle.config extended to include the new schema in managed
  migrations.
- index.ts wires unlistedPublicRoutes pre-auth (before
  authMiddleware) and unlistedRoutes post-auth.

Verified:
- Migration applied to mana_platform — `unlisted.snapshots` exists
  with both partial indexes.
- pnpm run type-check (api): clean
- pnpm run validate:all: theme-tokens, theme-parity, crypto-registry,
  encrypted-tools all green
- URL build uses Origin/Referer before the env fallback so dev
  (http://localhost:5173) and prod (https://mana.how) both work
  without env churn.

Next: M8.2 — shared-privacy client helper + SharedLinkControls
component.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 17:12:13 +02:00
..
architecture docs: update tool coverage table + server-side research + templates 2026-04-16 12:35:40 +02:00
central-services refactor(arcade, shared-ui): migrate CommandBar to GlobalSpotlight, delete CommandBar 2026-04-15 01:17:55 +02:00
decisions chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
future docs: add langfristige Roadmap-Punkte zu AI_AGENTS_IDEAS.md 2026-04-16 15:27:38 +02:00
modules feat(sleep): add sleep module with tracking, hygiene checklists, and stats 2026-04-13 21:19:52 +02:00
observability feat(wardrobe): module foundation — garments + outfits space-scoped data layer (M1) 2026-04-23 18:27:37 +02:00
optimizable docs(website): smoketest walkthrough + manual-test-backlog entry 2026-04-23 18:42:42 +02:00
plans feat(unlisted): M8.1 — backend foundation for shareable-link snapshots 2026-04-24 17:12:13 +02:00
postmortems chore: tidy root files + reorganize a few stale docs 2026-04-08 12:15:27 +02:00
reports feat(agent-loop): M1 — policy gate + reminder channel + parallel reads 2026-04-23 13:56:40 +02:00
test-examples chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
ANALYTICS.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
APP_GAP_ANALYSIS.md chore: misc fixes, new services, lockfile cleanup 2026-03-28 10:27:35 +01:00
APP_ONBOARDING.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
ARCHITECTURE_MIGRATION_REPORT.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
CAPACITY_PLANNING.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
CARDS_POSTGRES_MIGRATION.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
CLOUDFLARE_DOMAINS.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
CLOUDFLARE_FALLBACK.md refactor: rename nutriphi module to food (Essen) 2026-04-14 15:30:07 +02:00
CLUSTER_HARDWARE_ANALYSE.md rename(taktik): rebrand to Times 2026-03-30 15:44:18 +02:00
complexity-hotspots.md chore(audit): module complexity reports + workbench map 2026-04-14 19:47:42 +02:00
complexity-map.html chore(audit): module complexity reports + workbench map 2026-04-14 19:47:42 +02:00
CONTEXT_INTELLIGENCE_REPORT.md docs: add Context Intelligence research report 2026-04-14 19:50:25 +02:00
DATABASE_MIGRATIONS.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
DEPLOYMENT.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
DEVELOPMENT_SCRIPTS.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
DEVLOG_GUIDELINES.md feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
DISCORD_NOTIFICATIONS_SETUP.md feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
DOCKER_GUIDE.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
ENVIRONMENT_VARIABLES.md feat(env): persistent dev secrets via .env.secrets override 2026-04-08 17:50:37 +02:00
ERROR_TRACKING.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
EXPO_SDK_UPGRADE.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
EXTERNAL_SERVICES.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
EXTERNAL_SSD_OPPORTUNITIES.md refactor: rename nutriphi module to food (Essen) 2026-04-14 15:30:07 +02:00
FIX_COLIMA_MOUNTS.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
GIT_WORKFLOW.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
I18N.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
LOCAL_DEVELOPMENT.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
LOCAL_LLM_MODELS.md feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
LOCAL_STT_MODELS.md 📝 docs: add design UX guidelines and local model documentation 2026-01-27 01:32:31 +01:00
MAC_MINI_SERVER.md fix(mana-auth) + chore: rewrite /api/v1/auth/login JWT mint, remove Matrix stack 2026-04-08 16:32:13 +02:00
MAIL_SERVER.md feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
MANA_BOX_HARDWARE.md rename(taktik): rebrand to Times 2026-03-30 15:44:18 +02:00
MANA_EARNING_SYSTEM.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
MANA_VALUES.md feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
MICROSERVICES_API_OVERVIEW.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
MOBILE_DESKTOP_APP_STRATEGY.md feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
module-coupling.md chore(audit): module complexity reports + workbench map 2026-04-14 19:47:42 +02:00
module-health.md chore(audit): module complexity reports + workbench map 2026-04-14 19:47:42 +02:00
MODULE_REGISTRY.md feat(invoices): close Phase-2 gaps — finance cross-link + structured addresses 2026-04-20 18:58:18 +02:00
MONETIZATION_REPORT.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
MONITORING.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
OBSERVABILITY_GAPS.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
OLLAMA_MODELS.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
PLAN_TAURI_V2.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
PORT_SCHEMA.md feat(personas): M3.a — scaffold mana-persona-runner service on :3070 2026-04-23 14:00:43 +02:00
POSTGRES_BACKUP.md fix(infra): simplify PostgreSQL backup to pg_dumpall + pg_basebackup 2026-03-24 11:39:20 +01:00
PRE_LAUNCH_CLEANUP.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
PROD_READINESS_SCORE.md feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
PROJECT_OVERVIEW.md refactor: rename nutriphi module to food (Essen) 2026-04-14 15:30:07 +02:00
PWA_GUIDE.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
RECOMMENDED_SERVICES.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
REFACTORING_AUDIT_2026_04.md refactor: rename nutriphi module to food (Essen) 2026-04-14 15:30:07 +02:00
SEPA_ACTIVATION_CHECKLIST.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
SETUP_TEMPLATES.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
SHARED_PACKAGES_ROADMAP.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
SYNC_BILLING_PLAN.md feat(credits): add sync billing — monthly credit subscription for cloud sync 2026-04-10 22:21:58 +02:00
TECH_STACK_INDEPENDENCE.md refactor: rename nutriphi module to food (Essen) 2026-04-14 15:30:07 +02:00
TECHNOLOGY_AUDIT_2026_03.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
TESTING_DEPLOYMENT_CHECKLIST.md chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
URL_SCHEMA.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
USER_SETTINGS.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
VERSIONING.md refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
WHO_MODULE.md docs(who): RFC for the historical-figure guessing module 2026-04-09 13:08:07 +02:00
WINDOWS_GPU_SERVER_SETUP.md fix(mana-voice-bot): move default port 3050 → 3024 + Windows GPU deployment notes 2026-04-08 13:14:57 +02:00