--- import BaseLayout from '../layouts/BaseLayout.astro'; import TechIcon from '../components/TechIcon.astro'; import ComponentShowcase from '../components/showcase/ComponentShowcase.astro'; import InfraScene from '../components/scenes/InfraScene.astro'; import BlueprintScene from '../components/scenes/BlueprintScene.astro'; import SorterScene from '../components/scenes/SorterScene.astro'; import { Badge, Button, Breadcrumb, BreadcrumbItem, Link } from '@unkn0wndo3s/nova-design-system'; import { projects, type Project } from '../data/projects'; import { breadcrumbLd, projectLd } from '../lib/seo'; import { getLocaleFromUrl, useTranslations, localizePath } from '../i18n'; export interface Props { project: Project; } const { project } = Astro.props; const locale = getLocaleFromUrl(Astro.url); const t = useTranslations(locale); const statusType = { live: 'success', maintained: 'info', wip: 'warning' } as const; const statusLabel = { live: t('work.status.live'), maintained: t('work.status.maintained'), wip: t('work.status.wip'), } as const; const crumbs = [ { name: t('nav.home'), url: localizePath('/', locale) }, { name: t('nav.work'), url: localizePath('/work', locale) }, { name: project.name, url: localizePath(`/work/${project.slug}`, locale) }, ]; const pageUrl = new URL(Astro.url.pathname, Astro.site ?? 'https://louis-potevin.dev').href; const jsonLd = [breadcrumbLd(crumbs), projectLd(project, locale, pageUrl)]; const title = `${project.name} - ${t('meta.work.title')}`; const next = projects[(projects.findIndex((p) => p.slug === project.slug) + 1) % projects.length]!; ---
{statusLabel[project.status]}

{project.name}

{project.tagline[locale]}

{project.slug === 'nova-infra' && } {project.slug === 'portfolio' && } {project.slug === 'file-organizer' && }
{project.body.map((paragraph) =>

{paragraph[locale]}

)}

{t('work.highlights')}

    {project.highlights.map((h) =>
  • {h[locale]}
  • )}
{project.slug === 'nova-design-system' && }