From 0d8fe04e09f9884327ab4af582ea09884f6524f3 Mon Sep 17 00:00:00 2001 From: Elmehdi Aitbrahim Date: Fri, 21 Aug 2026 21:03:44 -0400 Subject: [PATCH] =?UTF-8?q?feat(guides):=20first=20three=20deep=20explaine?= =?UTF-8?q?rs=20=E2=80=94=20screening,=20qabd,=20attestation=20(#12)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CONTENT-CALENDAR items 2-4: three long-form explainer guides in the guides lane, EN + AR, 1,200-1,800 words each, definition-first ledes, honest-context boxes, FR-8 rev markers on the AR twins. - How Shariah crypto screening actually works — computed vs attested, fail-closed, absence != pass, the one waivable criterion, the premise caveat (IIFA 237 non-ruling). - Qabd (constructive possession) in spot crypto — the tri-sourced §65.4 operative test in plain words, withdrawal capability as its one practical proxy, rail 17 mechanics (7-day TTL, entries-only), what the rail does not claim. - Attestation is not a fatwa — the governance boundary: where rulings live, the review that has not happened, what a reviewer would and would not endorse, how to disagree. Machinery: a minimal article variant beside the step-model Get Started guides — same lane, same sidebar, prev/next chained across the whole lane (the last Get Started guide now continues into the explainers). Sidebar gains a "Deep explainers" group (AR links to the AR twins); the EN guides index lists them; explainers carry en/ar hreflang alternates and Article JSON-LD. Every fiqh/compliance claim traces to the engine's glossary and fiqh-basis docs; result claims mirror the honest posture (no rule family net-positive at venue taker fees). Zero client JS. --- src/components/docs/DocsSidebar.astro | 33 +- src/components/pages/ArticlePage.astro | 146 +++++ src/components/pages/GuidePage.astro | 23 +- src/i18n/guides/explainers.ts | 560 ++++++++++++++++++ src/i18n/guides/lane.ts | 43 ++ .../guides/attestation-is-not-a-fatwa.astro | 4 + .../how-shariah-crypto-screening-works.astro | 4 + ...-constructive-possession-spot-crypto.astro | 4 + .../guides/attestation-is-not-a-fatwa.astro | 4 + .../how-shariah-crypto-screening-works.astro | 4 + src/pages/en/guides/index.astro | 33 +- ...-constructive-possession-spot-crypto.astro | 4 + 12 files changed, 846 insertions(+), 16 deletions(-) create mode 100644 src/components/pages/ArticlePage.astro create mode 100644 src/i18n/guides/explainers.ts create mode 100644 src/i18n/guides/lane.ts create mode 100644 src/pages/ar/guides/attestation-is-not-a-fatwa.astro create mode 100644 src/pages/ar/guides/how-shariah-crypto-screening-works.astro create mode 100644 src/pages/ar/guides/qabd-constructive-possession-spot-crypto.astro create mode 100644 src/pages/en/guides/attestation-is-not-a-fatwa.astro create mode 100644 src/pages/en/guides/how-shariah-crypto-screening-works.astro create mode 100644 src/pages/en/guides/qabd-constructive-possession-spot-crypto.astro diff --git a/src/components/docs/DocsSidebar.astro b/src/components/docs/DocsSidebar.astro index 9279e93..49a1775 100644 --- a/src/components/docs/DocsSidebar.astro +++ b/src/components/docs/DocsSidebar.astro @@ -2,6 +2,7 @@ import { loadDocsMeta, sectionIconSvg, sectionLabel } from "./nav"; import { localePath, type Locale } from "../../i18n/config"; import { guides } from "../../i18n/guides/content"; +import { explainers } from "../../i18n/guides/explainers"; /** * Aiven-style docs sidebar: grouped sections with line icons, a Quickstart @@ -14,9 +15,11 @@ interface Props { current?: string; /** Slug of the current Get Started guide, if rendering a guide page. */ guideSlug?: string; + /** Slug of the current explainer article, if rendering an article page. */ + articleSlug?: string; } -const { locale, current, guideSlug } = Astro.props; +const { locale, current, guideSlug, articleSlug } = Astro.props; const meta = loadDocsMeta(); const quickstartLabel = @@ -26,6 +29,8 @@ const quickstartLabel = ? "Essayez keel en cinq minutes" : "Try keel in five minutes"; const guidesLabel = locale === "ar" ? "دليل البداية" : locale === "fr" ? "Premiers pas" : "Get started guides"; +const explainersLabel = + locale === "ar" ? "شروحات معمّقة" : locale === "fr" ? "Approfondissements" : "Deep explainers"; ---