feat(events): listing of public programs

Six event cards (picnic potluck, art walk, sauna soiree, spring
residency, yin yoga, vinyasa flow) with date / location / one-line
description. The spring residency card links into the dedicated
Symposium II.0 page; the others sit as static cards until a real
calendar source lands. A note flags the in-progress bouge.ariege.io
community calendar for the wider region.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Padreug 2026-06-08 17:46:51 +02:00
commit 00a3841646
3 changed files with 132 additions and 16 deletions

View file

@ -179,35 +179,48 @@
}
},
"events": {
"page": {
"kicker": "What's On",
"title": "Events & programs",
"lede": "Yoga, café and co-working, bonfire jams, afternoon picnics, sauna soirees and more. Public programming inaugurates in fall 2026.",
"calendarNote": "A community calendar app for the wider Ariège is in development at bouge.ariege.io — launching summer 2026.",
"noteHeading": "Note"
},
"saunaSoiree": {
"title": "Sauna Soiree",
"date": "First Sunday of the month",
"location": "Wellness Nook"
"location": "Wellness Nook",
"description": "Steam, hot tub and cold plunge under the stars, with live music, cacao, tea and food."
},
"springResidency": {
"title": "Spring Residency — The Spirit of Art",
"date": "March 1, 2027",
"location": "Main building, Temple"
"location": "Main building, Temple",
"description": "A short residency oriented around painting, drawing and craft, in the slow light of early spring."
},
"picnicJam": {
"title": "Picnic Potluck & Jam — Salad Buffet",
"date": "March 22, 2026",
"location": "Mad Hatter's Tea Party Table"
"location": "Mad Hatter's Tea Party Table",
"description": "A spring-equinox potluck and music jam — bring a salad, a tune, or both."
},
"artWalk": {
"title": "Evening Art Walk & Open-Air Concert",
"date": "May 15, 2026",
"location": "Main building, Temple"
"location": "Main building, Temple",
"description": "A walk through the sculpture garden with live musical accompaniment as the light falls."
},
"yinYoga": {
"title": "Cozy Yin Yoga & Tea",
"date": "Thursday evenings",
"location": "Wellness Nook"
"location": "Wellness Nook",
"description": "Slow yin shapes, long holds, and tea by candlelight."
},
"vinyasaFlow": {
"title": "Yoga Vinyasa Flow",
"date": "Wednesday mornings",
"location": "Wellness Nook"
"location": "Wellness Nook",
"description": "A morning flow to wake up the body, in tempo with the breath."
}
}
}

View file

@ -179,35 +179,48 @@
}
},
"events": {
"page": {
"kicker": "À l'affiche",
"title": "Événements & programmes",
"lede": "Yoga, café et coworking, jam au coin du feu, pique-niques d'après-midi, soirées sauna et plus encore. La programmation publique inaugurale ouvre à l'automne 2026.",
"calendarNote": "Une application de calendrier communautaire pour l'Ariège est en développement sur bouge.ariege.io — lancement été 2026.",
"noteHeading": "Note"
},
"saunaSoiree": {
"title": "Soirée sauna",
"date": "Premier dimanche du mois",
"location": "Coin bien-être"
"location": "Coin bien-être",
"description": "Étuve, bain chaud et plongée froide sous les étoiles, avec musique vivante, cacao, tisane et nourriture."
},
"springResidency": {
"title": "Résidence de printemps — L'esprit de l'art",
"date": "1er mars 2027",
"location": "Bâtiment principal, le Temple"
"location": "Bâtiment principal, le Temple",
"description": "Une courte résidence autour de la peinture, du dessin et de l'artisanat, dans la lumière douce du début de printemps."
},
"picnicJam": {
"title": "Pique-nique partagé & jam — Buffet de salades",
"date": "22 mars 2026",
"location": "Table du Chapelier fou"
"location": "Table du Chapelier fou",
"description": "Un pique-nique d'équinoxe de printemps et une jam musicale — apportez une salade, un air, ou les deux."
},
"artWalk": {
"title": "Promenade artistique & concert en plein air",
"date": "15 mai 2026",
"location": "Bâtiment principal, le Temple"
"location": "Bâtiment principal, le Temple",
"description": "Une promenade dans le jardin de sculptures, accompagnée de musique vivante, à la tombée du jour."
},
"yinYoga": {
"title": "Yin Yoga & tisane",
"date": "Les jeudis soir",
"location": "Coin bien-être"
"location": "Coin bien-être",
"description": "Postures lentes, étirements longs, et tisane à la lumière des bougies."
},
"vinyasaFlow": {
"title": "Vinyasa Flow",
"date": "Les mercredis matin",
"location": "Coin bien-être"
"location": "Coin bien-être",
"description": "Un flow matinal pour réveiller le corps, au rythme du souffle."
}
}
}

View file

@ -1,12 +1,102 @@
<script setup lang="ts">
import { useI18n } from 'vue-i18n'
import { RouterLink } from 'vue-router'
const { t } = useI18n()
const events = [
{
key: 'picnicJam' as const,
image: 'https://static.wixstatic.com/media/08f3f751545c44bfab292af3adb102d1.jpg',
},
{
key: 'artWalk' as const,
image: 'https://static.wixstatic.com/media/11062b_edc66ac2dfa1418da85d7acc418f6ecb~mv2.jpeg',
},
{
key: 'saunaSoiree' as const,
image: 'https://static.wixstatic.com/media/nsplsh_f31fc52f9db74bb0b09d2902ba8bface~mv2.jpg',
},
{
key: 'springResidency' as const,
image: 'https://static.wixstatic.com/media/11062b_3ecb0cd90cee43e48b5aef5351766bc7~mv2.jpg',
to: '/symposium',
},
{
key: 'yinYoga' as const,
image: 'https://static.wixstatic.com/media/11062b_6b9c5a85b7bc46cfa66445c0b34fd9fd~mv2.jpeg',
},
{
key: 'vinyasaFlow' as const,
image: 'https://static.wixstatic.com/media/11062b_3fa5e444f3de4fcea4e3593ac3f6f2b4~mv2.jpg',
},
]
</script>
<template>
<article class="mx-auto max-w-4xl px-4 py-16">
<h1 class="font-serif text-4xl font-semibold tracking-tight">{{ t('nav.events') }}</h1>
<p class="mt-4 text-muted-foreground">{{ t('common.comingSoon') }}</p>
</article>
<div>
<section class="border-b border-border bg-secondary/40">
<div class="mx-auto max-w-4xl px-4 py-16 lg:px-6 lg:py-20">
<p class="text-xs uppercase tracking-[0.2em] text-accent">
{{ t('events.page.kicker') }}
</p>
<h1 class="mt-3 font-serif text-5xl font-semibold leading-tight tracking-tight md:text-6xl">
{{ t('events.page.title') }}
</h1>
<p class="mt-6 max-w-prose text-lg leading-relaxed text-foreground/90">
{{ t('events.page.lede') }}
</p>
<aside
class="mt-8 max-w-prose rounded-md border border-border bg-card p-4 text-sm text-foreground/85"
>
<p class="text-xs font-semibold uppercase tracking-wider text-accent">
{{ t('events.page.noteHeading') }}
</p>
<p class="mt-1">{{ t('events.page.calendarNote') }}</p>
</aside>
</div>
</section>
<section class="mx-auto max-w-7xl px-4 py-16 lg:px-6">
<ul class="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
<li v-for="e in events" :key="e.key">
<component
:is="e.to ? 'RouterLink' : 'article'"
v-bind="e.to ? { to: e.to } : {}"
class="group block h-full overflow-hidden rounded-lg border border-border bg-card transition hover:shadow-md"
>
<img
:src="e.image"
alt=""
class="aspect-[4/3] w-full object-cover transition group-hover:scale-[1.02]"
loading="lazy"
/>
<div class="p-5">
<p class="text-xs uppercase tracking-wider text-accent">
{{ t(`events.${e.key}.date`) }}
</p>
<h2 class="mt-1 font-serif text-xl font-semibold">
{{ t(`events.${e.key}.title`) }}
</h2>
<p class="mt-1 text-xs text-muted-foreground">
{{ t(`events.${e.key}.location`) }}
</p>
<p class="mt-3 text-sm leading-relaxed text-foreground/85">
{{ t(`events.${e.key}.description`) }}
</p>
</div>
</component>
</li>
</ul>
<div class="mt-12 text-center">
<RouterLink
to="/symposium"
class="inline-block rounded-md border border-border px-5 py-3 text-sm font-medium hover:bg-muted"
>
{{ t('nav.symposium') }}
</RouterLink>
</div>
</section>
</div>
</template>