5d38312ef0
- New standalone Next.js marketing site under site/ (static export, SEO): landing, download/install guide (Bazaar/Myket/iOS-PWA/web), FAQ (JSON-LD), privacy, terms, support, /admin link editor. fa RTL, sitemap/robots/manifest. - Backend: SiteLinksService (JSON-file persisted) + GET /api/site/links (public) + POST /api/admin/site/links (X-Admin-Token). ADMIN_TOKEN + Site__DataDir via env. - compose: hokm-site service (:1520) + hokm_data volume for links JSON. - CI deploy job builds + deploys the site container. - deploy/SUBDOMAIN_SPLIT.md: nginx blocks, cert reissue, DNS, ENV split. - Exclude site/ from root tsc + web docker context. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
22 lines
613 B
TypeScript
22 lines
613 B
TypeScript
export function PageShell({
|
|
title,
|
|
subtitle,
|
|
children,
|
|
}: {
|
|
title: string;
|
|
subtitle?: string;
|
|
children: React.ReactNode;
|
|
}) {
|
|
return (
|
|
<section className="mx-auto max-w-3xl px-4 py-14">
|
|
<h1 className="text-3xl font-black sm:text-4xl gold-text">{title}</h1>
|
|
{subtitle && <p className="mt-3 text-cream/65">{subtitle}</p>}
|
|
<div className="mt-8 space-y-5 leading-8 text-cream/80">{children}</div>
|
|
</section>
|
|
);
|
|
}
|
|
|
|
export function Prose({ children }: { children: React.ReactNode }) {
|
|
return <div className="glass rounded-2xl p-6 leading-8 text-cream/80">{children}</div>;
|
|
}
|