Skip to main content

Developer Page Specifications

QC Checklist

Per-page gates for all 6 routes. Arabic bidirectional, sanitised body, JSON-LD validation, translation hreflang, /editorial/{slug} → /insights/{slug-id} redirect.

Complete

Per-page acceptance gates for all 5 routes. Severity per §11.1.

Listing page

  • ED-LIST-001 · blocker · /en/editorial + /ar/editorial return 200.
  • ED-LIST-002 · blocker · Featured spotlight renders 1 large + 2 supporting. Fallback to 3 latest IsActive when fewer IsFeatured exist.
  • ED-LIST-003 · critical · Latest feed renders 12 cards excluding featured, infinite-scroll triggers correctly.
  • ED-LIST-004 · critical · Categories grid shows IsActive categories with correct article counts.
  • ED-LIST-005 · critical · Most-read sidebar top 5 by ViewCount.
  • ED-LIST-006 · major · Newsletter form validation + POST + success state.
  • ED-LIST-007 · blocker · Mobile + RTL parity.

Category + topic pages

  • ED-CAT-001 · blocker · /en/editorial/categories/{slug} + AR return 200. Unknown slug → 404 (no fallback to listing).
  • ED-TOP-001 · blocker · /en/editorial/topics/{slug} + AR return 200. Unknown slug → 404.
  • ED-TOP-002 · critical · Connected ecosystem signals surfaces Opportunities/Files/Startups with same topic. Each sub-rail hides on 0.

Article details page

  • ED-ART-001 · blocker · /en/editorial/{slug} + AR return 200 for every published article. Unknown slug → 404.
  • ED-ART-002 · blocker · Header shows type chip, category badge, topic badges, H1 title (only H1), dek, byline row.
  • ED-ART-003 · critical · Featured image 16:9 desktop / 4:3 mobile. SVG fallback when CoverImageUrl null.
  • ED-ART-004 · critical · Body sanitised HTML — only whitelisted tags. No XSS.
  • ED-ART-005 · critical · Body typography: max-width 720px desktop, font 18px LTR/RTL, line-height 1.7 LTR / 1.85 RTL.
  • ED-ART-006 · critical · Arabic body wraps English brand names in <span dir="ltr">. Bidirectional rendering correct.
  • ED-ART-007 · critical · Author card renders avatar + name + role + bio + social + "View all articles" CTA.
  • ED-ART-008 · critical · Connected signals rail caps at 8. isPractical=true SUPPRESSES Files sub-rail.
  • ED-ART-009 · critical · Related articles — manual first, auto-fill second, cap 6. Hides on 0.
  • ED-ART-010 · critical · Share works via navigator.share / copy-link / Twitter / LinkedIn.
  • ED-ART-011 · blocker · JSON-LD validates against Google Rich Results Test for Article/NewsArticle/BlogPosting per type.
  • ED-ART-012 · critical · IsTranslated=true emits hreflang alternates pointing to CanonicalArticleId’s slug in other locale.
  • ED-ART-013 · blocker · Mobile + RTL parity. Sticky share/save bar appears after 25% scroll on mobile.

Author page

  • ED-AUT-001 · blocker · /en/editorial/authors/{slug} + AR return 200. Unknown slug → 404.
  • ED-AUT-002 · critical · ProfilePage + Person JSON-LD validates. sameAs[] includes all social URLs.
  • ED-AUT-003 · critical · Stats strip counts match database.

Integration

  • ED-INT-001 · critical · Every cross-module mention resolves. Integrity sweep reports 0 broken.
  • ED-INT-002 · major · sitemap.xml contains every IsActive published article URL in both locales.
  • ED-INT-003 · major · Scheduled articles flip to Published at ScheduledFor exactly. Drift = critical.
  • ED-INT-004 · major · ViewCount denormalisation reconciles nightly with analytics.