Skip to content

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

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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