Skip to content

Manage navigation, announcements, sponsors, redirects, and safe site settings #62

Description

@alexeygrigorev

Parent epic: #7

Normative specs: 01 — Data ownership, 06 — Studio sections

Scope

Implement database-owned versioned navigation overrides, announcements, sponsors, explicit redirect/retirement manifest records, SEO exceptions, and typed safe operational site settings through shared services with Studio/admin API CRUD/preview/publish/archive, revision/idempotency, permissions, audit, and cache invalidation. Clearly distinguish GitHub-owned content fields and bootstrap-only secret configuration.

Non-goals

No arbitrary template/HTML/script injection, secret editing/export, GitHub editorial override, unreviewed redirect, or settings that require DB availability before bootstrap.

Acceptance criteria

  • Each setting/content type has schema, validation, ownership, default/source badge, lifecycle, and cache behavior.
  • Redirect/410 records require exact source/destination/status/reason/owner/test and reject loops/chains/homepage catch-all.
  • Announcement/navigation/sponsor output is accessible and cannot introduce unsafe URLs/markup or break legacy links.
  • Studio/API parity and role/field permissions, stale edits, publish/archive, audit/redaction, and rollback pass.
  • Security-critical bootstrap values remain environment/Secrets Manager only.

Test scenarios

  1. Valid/invalid navigation tree, duplicate order/path, unsafe link/HTML, announcement schedule/timezone, sponsor lifecycle.
  2. Redirect loop/chain/case/query/fragment/unknown, stale/replayed publish, cache invalidation and rollback.
  3. Attempt to edit/export secret or GitHub-owned field is denied.

Playwright

Manage and preview/publish each type in Studio; verify public desktop/mobile navigation/announcement/sponsor and explicit redirect; test empty/error/stale/denied states and screenshots.

Dependencies

Depends on #31#35. Redirect behavior depends on cutover scope #29.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1Important follow-upadminArea: admincontentArea: contentseoArea: seo

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions