Skip to content

[tech-debt] Wave 2a Cluster C SEO follow-ups #243

@rz1989s

Description

@rz1989s

Follow-ups from Wave 2a Cluster C (#206 SEO meta tags). Code-quality review flagged five related minors. Bundled into one issue with checklist items for tracking.

Tasks

  • Extract shared <SeoTags> component — 13 views currently hand-write 6 meta tags each (duplicated structure). Extract a <SeoTags title description /> component or useSeoTags hook so future additions (e.g., og:url, twitter:card, og:site_name) require touching 1 file instead of 13.

  • Reintroduce og:image with proper brand asset — Path A (drop og:image/og:type) chosen in Wave 2a to unblock cluster merge. When brand mark stabilizes: commit a 1200×630 PNG to app/public/icons/sipher-og.png, add og:image/og:image:width/og:image:height/og:image:alt, restore og:type=website.

  • Add og:url + og:site_name baseline meta tags — Standard OpenGraph completeness. Pairs with the <SeoTags> extraction above.

  • Hoist SEO meta tags before if (!isAdmin) return null guard in SquadView/HeraldViewSquadView.tsx:260 and HeraldView.tsx:471: SEO tags currently render AFTER the admin redirect guard. Non-admin users (redirected via useNavigate('/')) never have these tags hoisted. Either intentional (don't leak admin page existence — add comment) or unintentional (hoist before guard).

  • Document/enforce backend chat input length cap at 4000ChatSidebar.tsx:218 adds maxLength={4000} defensively but native input maxLength is bypassable. Document the agent's chat endpoint length cap and ensure it matches (or set proactively if absent).

  • Sync index.html static title with React 19-hoisted titlesapp/index.html:6 says "SIPHER — Privacy Command Center" (bypassed by JS hoisting for in-app routes, but visible to no-JS crawlers). Decide canonical default title.

Source

Wave 2a Cluster C code-quality review (10 minors total — most bundled here, two minor items skipped as cosmetic-only).

Priority

Low — purely tech-debt / polish. Phase D launch gate not affected.

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority:lowLow impact / nice-to-havetech-debtTechnical debt to address post-hackathon

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions