TenantAtlas/apps/website/public/images/hero-product-visual.svg
ahmido 40039337d8
Some checks failed
Main Confidence / confidence (push) Failing after 45s
feat: implement homepage structure spec 216 (#254)
## Summary

Implements Spec 216 for the public website homepage in `apps/website`.

This reworks the homepage into the required narrative flow:
- hero with one dominant CTA, one secondary CTA, product-near visual, and bounded trust subclaims
- outcome framing section
- grouped capability model section
- explicit trust block before the final CTA
- dated progress teaser backed by changelog entries
- final CTA transition to contact

It also adds the full spec-kit artifact set for `specs/216-homepage-structure` and updates the smoke suite to prove section order, CTA hierarchy, onward route reachability, and mobile readability.

## Validation

- `corepack pnpm build:website`
- `cd apps/website && corepack pnpm exec playwright test`

## Notes

- Branch: `216-homepage-structure`
- Commit: `097f8e70`
- Remote branch has been pushed and is ready for review.

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #254
2026-04-19 12:56:05 +00:00

82 lines
6.4 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<svg xmlns="http://www.w3.org/2000/svg" width="800" height="500" viewBox="0 0 800 500">
<defs>
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#f8fafc;stop-opacity:1" />
<stop offset="100%" style="stop-color:#e2e8f0;stop-opacity:1" />
</linearGradient>
<linearGradient id="header" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#2f6fb7;stop-opacity:1" />
<stop offset="100%" style="stop-color:#8eaed1;stop-opacity:1" />
</linearGradient>
</defs>
<rect width="800" height="500" rx="16" fill="url(#bg)" stroke="#e2e8f0" stroke-width="2"/>
<!-- Header bar -->
<rect x="0" y="0" width="800" height="48" rx="16" fill="url(#header)"/>
<rect x="0" y="16" width="800" height="32" fill="url(#header)"/>
<text x="24" y="30" font-family="system-ui" font-size="14" fill="white" font-weight="600">TenantAtlas</text>
<!-- Sidebar -->
<rect x="0" y="48" width="180" height="452" fill="#f1f5f9"/>
<rect x="16" y="68" width="148" height="32" rx="8" fill="#2f6fb7" opacity="0.12"/>
<text x="28" y="89" font-family="system-ui" font-size="12" fill="#2f6fb7" font-weight="600">Inventory</text>
<rect x="16" y="112" width="148" height="28" rx="8" fill="transparent"/>
<text x="28" y="130" font-family="system-ui" font-size="12" fill="#64748b">Backup History</text>
<rect x="16" y="148" width="148" height="28" rx="8" fill="transparent"/>
<text x="28" y="166" font-family="system-ui" font-size="12" fill="#64748b">Restore</text>
<rect x="16" y="184" width="148" height="28" rx="8" fill="transparent"/>
<text x="28" y="202" font-family="system-ui" font-size="12" fill="#64748b">Drift Detection</text>
<rect x="16" y="220" width="148" height="28" rx="8" fill="transparent"/>
<text x="28" y="238" font-family="system-ui" font-size="12" fill="#64748b">Governance</text>
<!-- Main content area -->
<rect x="196" y="64" width="588" height="420" rx="12" fill="white" stroke="#e2e8f0"/>
<!-- Stats row -->
<rect x="212" y="80" width="130" height="64" rx="8" fill="#f8fafc" stroke="#e2e8f0"/>
<text x="228" y="104" font-family="system-ui" font-size="22" fill="#1e293b" font-weight="700">247</text>
<text x="228" y="130" font-family="system-ui" font-size="11" fill="#64748b">Policies tracked</text>
<rect x="358" y="80" width="130" height="64" rx="8" fill="#f8fafc" stroke="#e2e8f0"/>
<text x="374" y="104" font-family="system-ui" font-size="22" fill="#16a34a" font-weight="700">98.4%</text>
<text x="374" y="130" font-family="system-ui" font-size="11" fill="#64748b">Compliance rate</text>
<rect x="504" y="80" width="130" height="64" rx="8" fill="#f8fafc" stroke="#e2e8f0"/>
<text x="520" y="104" font-family="system-ui" font-size="22" fill="#2f6fb7" font-weight="700">12</text>
<text x="520" y="130" font-family="system-ui" font-size="11" fill="#64748b">Versions stored</text>
<rect x="650" y="80" width="118" height="64" rx="8" fill="#f8fafc" stroke="#e2e8f0"/>
<text x="666" y="104" font-family="system-ui" font-size="22" fill="#f59e0b" font-weight="700">3</text>
<text x="666" y="130" font-family="system-ui" font-size="11" fill="#64748b">Drift alerts</text>
<!-- Table header -->
<rect x="212" y="160" width="556" height="36" rx="0" fill="#f8fafc"/>
<text x="228" y="183" font-family="system-ui" font-size="11" fill="#64748b" font-weight="600">POLICY NAME</text>
<text x="440" y="183" font-family="system-ui" font-size="11" fill="#64748b" font-weight="600">TYPE</text>
<text x="560" y="183" font-family="system-ui" font-size="11" fill="#64748b" font-weight="600">STATUS</text>
<text x="670" y="183" font-family="system-ui" font-size="11" fill="#64748b" font-weight="600">LAST BACKUP</text>
<!-- Table rows -->
<line x1="212" y1="196" x2="768" y2="196" stroke="#e2e8f0"/>
<text x="228" y="220" font-family="system-ui" font-size="12" fill="#1e293b">Windows Compliance Baseline</text>
<text x="440" y="220" font-family="system-ui" font-size="12" fill="#64748b">Compliance</text>
<rect x="560" y="208" width="56" height="20" rx="10" fill="#dcfce7"/>
<text x="572" y="222" font-family="system-ui" font-size="10" fill="#16a34a" font-weight="500">Synced</text>
<text x="670" y="220" font-family="system-ui" font-size="12" fill="#64748b">2 min ago</text>
<line x1="212" y1="236" x2="768" y2="236" stroke="#f1f5f9"/>
<text x="228" y="260" font-family="system-ui" font-size="12" fill="#1e293b">BitLocker Encryption Policy</text>
<text x="440" y="260" font-family="system-ui" font-size="12" fill="#64748b">Config</text>
<rect x="560" y="248" width="56" height="20" rx="10" fill="#dcfce7"/>
<text x="572" y="262" font-family="system-ui" font-size="10" fill="#16a34a" font-weight="500">Synced</text>
<text x="670" y="260" font-family="system-ui" font-size="12" fill="#64748b">15 min ago</text>
<line x1="212" y1="276" x2="768" y2="276" stroke="#f1f5f9"/>
<text x="228" y="300" font-family="system-ui" font-size="12" fill="#1e293b">Conditional Access MFA</text>
<text x="440" y="300" font-family="system-ui" font-size="12" fill="#64748b">Access</text>
<rect x="560" y="288" width="48" height="20" rx="10" fill="#fef3c7"/>
<text x="569" y="302" font-family="system-ui" font-size="10" fill="#d97706" font-weight="500">Drift</text>
<text x="670" y="300" font-family="system-ui" font-size="12" fill="#64748b">1 hr ago</text>
<line x1="212" y1="316" x2="768" y2="316" stroke="#f1f5f9"/>
<text x="228" y="340" font-family="system-ui" font-size="12" fill="#1e293b">Autopilot Deployment Profile</text>
<text x="440" y="340" font-family="system-ui" font-size="12" fill="#64748b">Enrollment</text>
<rect x="560" y="328" width="56" height="20" rx="10" fill="#dcfce7"/>
<text x="572" y="342" font-family="system-ui" font-size="10" fill="#16a34a" font-weight="500">Synced</text>
<text x="670" y="340" font-family="system-ui" font-size="12" fill="#64748b">30 min ago</text>
<line x1="212" y1="356" x2="768" y2="356" stroke="#f1f5f9"/>
<text x="228" y="380" font-family="system-ui" font-size="12" fill="#1e293b">App Protection iOS Managed</text>
<text x="440" y="380" font-family="system-ui" font-size="12" fill="#64748b">Protection</text>
<rect x="560" y="368" width="56" height="20" rx="10" fill="#dcfce7"/>
<text x="572" y="382" font-family="system-ui" font-size="10" fill="#16a34a" font-weight="500">Synced</text>
<text x="670" y="380" font-family="system-ui" font-size="12" fill="#64748b">45 min ago</text>
</svg>