Some checks failed
Main Confidence / confidence (push) Failing after 42s
## Summary - establish the initial Astro website foundation for `apps/website` with explicit TypeScript, Tailwind CSS v4, and reusable layout/content primitives - ship the v0 public route set for home, product, solutions, security & trust, integrations, contact, legal, privacy, and terms - add SEO/discovery basics, Playwright browser smoke coverage, and the full Spec 213 planning bundle under `specs/213-website-foundation-v0` - extend ignore rules for website test artifacts and refresh Copilot agent context for the new website stack ## Validation - `corepack pnpm build:website` - `cd apps/website && corepack pnpm exec playwright test` ## Notes - branch: `213-website-foundation-v0` - commit: `020d416d0d8af4d16a981ff4f4f6d90153b9c603` Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #249
111 lines
4.5 KiB
TypeScript
111 lines
4.5 KiB
TypeScript
import type {
|
|
CalloutContent,
|
|
FeatureItemContent,
|
|
HeroContent,
|
|
MetricItem,
|
|
PageSeo,
|
|
} from '@/types/site';
|
|
|
|
export const productSeo: PageSeo = {
|
|
title: 'TenantAtlas | Product',
|
|
description:
|
|
'TenantAtlas connects inventory, snapshots, restore safety, drift visibility, findings, exceptions, and evidence into one governance model.',
|
|
path: '/product',
|
|
};
|
|
|
|
export const productHero: HeroContent = {
|
|
eyebrow: 'Product model',
|
|
title: 'One operating model for change history, drift visibility, and review readiness.',
|
|
description:
|
|
'TenantAtlas treats Microsoft tenant governance as one connected system: observe the current state, preserve immutable history, detect meaningful change, and support reviews or restores with the context operators actually need.',
|
|
primaryCta: {
|
|
href: '/solutions',
|
|
label: 'See audience fit',
|
|
},
|
|
secondaryCta: {
|
|
href: '/contact',
|
|
label: 'Talk through your current operating model',
|
|
variant: 'secondary',
|
|
},
|
|
highlights: [
|
|
'Inventory first, snapshots second.',
|
|
'Restore flows stay previewable and attributable.',
|
|
'Evidence and review posture stay connected to real change history.',
|
|
],
|
|
};
|
|
|
|
export const productMetrics: MetricItem[] = [
|
|
{
|
|
value: '4',
|
|
label: 'Operator questions',
|
|
description: 'What changed? Why does it matter? What can be restored? What needs review now?',
|
|
},
|
|
{
|
|
value: '100%',
|
|
label: 'Queryable versions',
|
|
description: 'Version semantics stay tied to who changed what, when, and in which tenant context.',
|
|
},
|
|
];
|
|
|
|
export const productModelBlocks: FeatureItemContent[] = [
|
|
{
|
|
eyebrow: 'Connected governance model',
|
|
title: 'Inventory creates the starting point for every other decision.',
|
|
description:
|
|
'The product begins with the last observed tenant state so teams can compare real configuration truth instead of relying on partial memory or exported spreadsheets.',
|
|
},
|
|
{
|
|
eyebrow: 'Connected governance model',
|
|
title: 'Snapshots add immutable history without replacing current truth.',
|
|
description:
|
|
'Backups and versions are explicit artifacts. They preserve what was seen at a point in time while keeping the present-tense inventory readable.',
|
|
},
|
|
{
|
|
eyebrow: 'Connected governance model',
|
|
title: 'Restore is handled as a governed operation, not as a blind push.',
|
|
description:
|
|
'Preview, validation, selective scope, and confirmation reduce the risk of turning a recovery step into a new incident.',
|
|
},
|
|
{
|
|
eyebrow: 'Drift visibility',
|
|
title: 'Differences become reviewable signals instead of noisy raw deltas.',
|
|
description:
|
|
'Human-readable summaries and structured differences help operators and reviewers decide what changed and what needs action.',
|
|
},
|
|
{
|
|
eyebrow: 'Exceptions & evidence',
|
|
title: 'Findings, exceptions, and evidence stay anchored to operational truth.',
|
|
description:
|
|
'Governance discussions stay attached to the real object, version, and review context instead of drifting into separate manual trackers.',
|
|
},
|
|
{
|
|
eyebrow: 'Operator safety',
|
|
title: 'Auditability is part of the product shape, not a later add-on.',
|
|
description:
|
|
'The product is built so teams can explain actions afterward, not just execute them quickly in the moment.',
|
|
},
|
|
];
|
|
|
|
export const productNarrative: CalloutContent[] = [
|
|
{
|
|
eyebrow: 'Why it is not a feature list',
|
|
title: 'The point is not “backup plus reporting plus restore.”',
|
|
description:
|
|
'The point is to reduce operator uncertainty by keeping those capabilities connected through the same source material and the same decision flow.',
|
|
tone: 'accent',
|
|
},
|
|
{
|
|
eyebrow: 'What teams get',
|
|
title: 'A calmer path from observation to action.',
|
|
description:
|
|
'Teams can move from understanding the current tenant state to comparing history, planning remediation, or reviewing restore options without leaving the product model behind.',
|
|
},
|
|
{
|
|
eyebrow: 'What teams avoid',
|
|
title: 'No generic dashboard theater.',
|
|
description:
|
|
'The product story avoids pretending that another alerting page or compliance badge alone solves governance discipline.',
|
|
tone: 'subtle',
|
|
},
|
|
];
|