type: decision
status: active
timestamp: 2026-06-22
tags: [decision, legal, package, approval, adsense, play-store]

Legal pages package: @chirag127/astro-chrome/legal/* mounted in-domain per app

8+ legal pages in domain package /sitemap /security.txt) shipped as Astro page components in `@chirag127/astro-chrome/legal/`. Every app mounts them at its own domain (not external legal.oriz.in) so AdSense + Play Store + MS Store + Razorpay approval gates are satisfied. Single source of legal text; same content everywhere; design adapts to each app's theme.

Legal pages package — in-domain mount

Decision

@chirag127/astro-chrome/legal/* exports 8+ Astro page components. Each app mounts them as in-domain routes:

RouteComponentWhy required
/privacyPrivacy.astroAdSense + Play Store + MS Store + GDPR + DPDP all require
/termsTerms.astroAdSense + Razorpay + most app stores
/contactContact.astro (uses <ContactForm /> from oriz-ui)AdSense + Play Store
/aboutAbout.astro (slot for app-specific copy)AdSense
/refundsRefunds.astro (7-day money-back policy)Razorpay
/disclaimerDisclaimer.astro (financial/health/educational)AdSense + Play Store
/sitemap-index.xmlgenerated by @chirag127/oriz-seoSEO
/security.txtSecurityTxt.astro (well-known route)Security best practice

Why in-domain (not external legal.oriz.in)

AdSense’s policy explicitly checks that privacy/terms links resolve to same-origin URLs during review. External links count for low-risk approval, but in-domain is the universally safe path.

Also: Play Store + MS Store reviewers crawl the privacy URL declared in the manifest; if it points to a different domain than the app, some reviewers flag it for manual review.

Content shape

Mounting pattern in each app

---
// src/pages/privacy.astro
import Privacy from '@chirag127/astro-chrome/legal/Privacy.astro';
import BaseLayout from '~/layouts/BaseLayout.astro';
---
<BaseLayout title="Privacy Policy">
  <Privacy
    appName="Oriz NCERT"
    appDomain="ncert.oriz.in"
    contactEmail="[email protected]"
    jurisdiction="India"
  />
</BaseLayout>

~12 LOC per legal page per app × 8 pages × 26 apps = ~2,500 LOC of mount boilerplate. Acceptable — single-write per app, then auto-updated as package version bumps.

Initial draft via Termly/iubenda

First-draft legal text generated via Termly free, refined manually, committed to package source. Subsequent updates manual. No iframe embed.

Cross-refs


Edit on GitHub · Back to index