Files
armarium-website/src/components/landing/HomePage.astro
T
Daniel Krähenbühl 724080b7c6 feat: link login/register buttons to app.armarium.ch (v0.8.1)
All hero, CTA, and footer login/register buttons now point to
https://app.armarium.ch/login and https://app.armarium.ch/register.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 00:20:04 +02:00

132 lines
5.0 KiB
Plaintext

---
/**
* Shared home page component — renders in all 4 locales.
*/
import { Hero } from '@/components/hero';
import Button from '@/components/ui/form/Button/Button.astro';
import Badge from '@/components/ui/data-display/Badge/Badge.astro';
import Card from '@/components/ui/data-display/Card/Card.astro';
import Icon from '@/components/ui/primitives/Icon/Icon.astro';
import { useTranslations } from '@/i18n/utils';
import type { Locale } from '@/i18n/ui';
interface Props {
locale: Locale;
}
const { locale } = Astro.props;
const t = useTranslations(locale);
const features = [
{ key: 'f1', icon: 'layout-dashboard' },
{ key: 'f2', icon: 'list' },
{ key: 'f3', icon: 'pie-chart' },
{ key: 'f4', icon: 'wallet' },
{ key: 'f5', icon: 'target' },
{ key: 'f6', icon: 'shield-check' },
] as const;
---
<!-- Hero -->
<Hero layout="centered" size="xl" class="hero-dark-gradient">
<Badge slot="badge" variant="brand" pill pulse class="dark:text-brand-200">
{t('hero.badge')}
</Badge>
<h1 slot="title">
<span class="text-foreground [-webkit-text-fill-color:currentColor]">Armarium Suite —</span><br />
<span class="text-brand-500 [-webkit-text-fill-color:var(--color-brand-500)] dark:text-foreground dark:[-webkit-text-fill-color:currentColor]">Budget</span><span class="text-foreground [-webkit-text-fill-color:currentColor]"> &amp; More</span>
</h1>
<p slot="description">{t('hero.description')}</p>
<Fragment slot="actions">
<Button size="lg" href="https://app.armarium.ch/register">
{t('hero.register')}
<Icon name="arrow-right" size="sm" />
</Button>
<Button size="lg" variant="outline" href="https://app.armarium.ch/login">
{t('hero.login')}
</Button>
</Fragment>
</Hero>
<!-- Trust bar -->
<div class="relative z-10 py-5 bg-background border-t border-border">
<div class="mx-auto max-w-6xl px-6">
<div class="flex flex-wrap justify-center gap-x-8 gap-y-3 text-sm text-foreground-muted">
<span class="flex items-center gap-2">
<svg class="w-5 h-6 shrink-0" viewBox="0 0 32 36" fill="none" xmlns="http://www.w3.org/2000/svg" aria-label="Zürich" role="img">
<defs><clipPath id="zh-home"><path d="M16 1L1 7V23L6 30L16 34L26 30L31 23V7L16 1Z"/></clipPath></defs>
<path d="M16 1L1 7V23L6 30L16 34L26 30L31 23V7L16 1Z" fill="white"/>
<polygon points="1,7 16,1 31,7 1,34" fill="#003DA5" clip-path="url(#zh-home)"/>
<path d="M16 1L1 7V23L6 30L16 34L26 30L31 23V7L16 1Z" fill="none" stroke="#003DA5" stroke-width="1.5"/>
</svg>
Made in Zürich, Switzerland
</span>
<span class="flex items-center gap-2">
<Icon name="shield-check" size="sm" class="text-brand-500" />
{t('trust.privacy')}
</span>
<span class="flex items-center gap-2">
<Icon name="check-circle" size="sm" class="text-brand-500" />
{t('trust.free')}
</span>
</div>
</div>
</div>
<!-- Features -->
<section id="features" class="relative z-10 py-[var(--space-section-md)] bg-background-secondary border-t border-border">
<div class="mx-auto max-w-6xl px-6 flex flex-col gap-8">
<div class="flex flex-col items-center gap-4 text-center" data-reveal>
<div class="flex flex-col items-center gap-6">
<Badge variant="brand" pill>{t('features.badge')}</Badge>
<h2 class="font-display text-3xl md:text-4xl font-bold text-foreground">
{t('features.title')}
</h2>
</div>
<p class="text-lg text-foreground-muted max-w-2xl mx-auto">
{t('features.description')}
</p>
</div>
<div class="grid gap-6 md:grid-cols-2 lg:grid-cols-3" data-reveal data-reveal-delay="1">
{features.map(({ key, icon }) => (
<Card hover>
<div class="flex items-start gap-4">
<div class="w-10 h-10 rounded-xl bg-gradient-to-br from-brand-500/20 to-brand-500/5 flex items-center justify-center text-brand-500 shrink-0">
<Icon name={icon} size="sm" />
</div>
<div class="flex-1 min-w-0">
<h3 class="text-base font-semibold text-foreground">{t(`${key}.title` as any)}</h3>
<p class="text-sm text-foreground-muted leading-relaxed mt-1.5">{t(`${key}.desc` as any)}</p>
</div>
</div>
</Card>
))}
</div>
</div>
</section>
<!-- CTA -->
<section class="relative z-10 py-[var(--space-section-md)] bg-background border-t border-border">
<div class="mx-auto max-w-2xl px-6 text-center" data-reveal>
<h2 class="font-display text-4xl font-bold text-foreground mb-4 text-balance">
{t('cta.title')}
</h2>
<p class="text-lg text-foreground-muted mb-8 text-balance">
{t('cta.desc')}
</p>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<Button size="lg" href="https://app.armarium.ch/register">
{t('cta.register')}
<Icon name="arrow-right" size="sm" />
</Button>
<Button size="lg" variant="outline" href="https://app.armarium.ch/login">
{t('cta.login')}
</Button>
</div>
</div>
</section>