Commit c3271b3b by PLN (Algolia)

feat(parvagues): ontology seed + country flags in tour timeline

Seed venues.yaml, samples.yaml, events.yaml from artist domain knowledge.
Add country flag detection in TourTimeline (France/Germany/Online).
parent 53ac7dd2
...@@ -2,6 +2,20 @@ import Link from 'next/link'; ...@@ -2,6 +2,20 @@ import Link from 'next/link';
import { format } from 'date-fns'; import { format } from 'date-fns';
import { fr } from 'date-fns/locale'; import { fr } from 'date-fns/locale';
const COUNTRY_MAP = [
{ match: ['Hamburg', 'Berlin', 'Germany'], flag: '\u{1F1E9}\u{1F1EA}', name: 'Germany' },
{ match: ['Online', 'Stream'], flag: '\u{1F310}', name: 'Online' },
];
function detectCountry(location) {
if (!location) return { flag: '\u{1F1EB}\u{1F1F7}', name: 'France' };
const loc = location.toLowerCase();
for (const c of COUNTRY_MAP) {
if (c.match.some(m => loc.includes(m.toLowerCase()))) return c;
}
return { flag: '\u{1F1EB}\u{1F1F7}', name: 'France' };
}
export default function TourTimeline({ lives }) { export default function TourTimeline({ lives }) {
const now = new Date(); const now = new Date();
...@@ -44,9 +58,9 @@ export default function TourTimeline({ lives }) { ...@@ -44,9 +58,9 @@ export default function TourTimeline({ lives }) {
const isFuture = live._date > now; const isFuture = live._date > now;
const hasMedia = live.audio || live.video || live.archive; const hasMedia = live.audio || live.video || live.archive;
const bestLink = live.audio || live.video || live.archive; const bestLink = live.audio || live.video || live.archive;
const city = live.location?.includes(',') const locParts = live.location?.split(',').map(s => s.trim()) || [];
? live.location.split(',')[0].trim() const city = locParts[0] || live.location;
: live.location; const country = detectCountry(live.location);
return ( return (
<Link <Link
...@@ -76,12 +90,13 @@ export default function TourTimeline({ lives }) { ...@@ -76,12 +90,13 @@ export default function TourTimeline({ lives }) {
{live.title} {live.title}
</span> </span>
{/* City - hidden on mobile */} {/* City + Country flag - hidden on mobile */}
<span <span
className="hidden sm:block flex-shrink-0" className="hidden sm:flex items-center gap-1.5 flex-shrink-0"
style={{ fontSize: '11px', color: 'var(--text-muted)', letterSpacing: '0.05em' }} style={{ fontSize: '11px', color: 'var(--text-muted)', letterSpacing: '0.05em' }}
> >
{city} {city}
{country?.flag && <span className="text-[10px] opacity-60">{country.flag}</span>}
</span> </span>
{/* Recording available - direct link to best source */} {/* Recording available - direct link to best source */}
......
# ParVagues Event Ontology
# Maps recurring events, aliases, organizers
cosmicfest:
fullName: "CosmicFest"
recurring: true
editions:
- { version: "v0", year: 2025, location: "labenne" }
aliases: ["labenne"]
notes: "Bunker after-party may recur with v1"
algorave:
fullName: "AlgoRave"
recurring: true
editions:
- { year: 2025, city: "Lyon", venue: "GRRRND ZERO" }
organizer: "international algorave community"
ccc:
fullName: "Chaos Communication Congress"
recurring: true
editions:
- { name: "38C3", year: 2024, rooms: ["House of Tea", "Secret Toilet Rave", "Chaos Music Club"] }
- { name: "39C3", year: 2025, rooms: ["House of Tea", "Toilet Rave"] }
venue: "CCH Hamburg"
toplap:
fullName: "TOPLAP"
recurring: true
subEvents:
- { name: "TOPLAP Solstice", type: "stream", recurring: true, years: [2023, 2024] }
- { name: "TOPLAP 20 Years", type: "stream", year: 2024, collab: "z0rg" }
- { name: "TOPLAP From Scratch", type: "stream", year: 2025, theme: "Jungle" }
psc_teuf:
fullName: "PSC Teuf Series"
venue: "psc"
organizer: "PSC crew"
recurring: true
editions:
- { name: "VelociTeuf", year: 2024 }
- { name: "DiviniTeuf", year: 2024, postEvent: "divin-live" }
- { name: "Air ELEMENTEUF", year: 2025 }
- { name: "FairyTeuf", year: 2025 }
- { name: "MephisTeuf", year: 2023 }
fdlm_algolia:
fullName: "Fete de la Musique @ Algolia"
recurring: true
editions:
- { year: 2022 }
- { year: 2024 }
venue: "algolia_hq"
bazurto_tignes:
fullName: "Bazurto @ Tignes"
recurring: true
editions:
- { year: 2022 }
- { year: 2024 }
type: "apres-ski livecoding"
la_french_stack:
fullName: "La French Stack"
recurring: true
editions:
- { year: 2024 }
- { year: 2025 }
type: "tech collective"
opal_festival:
fullName: "Opal Festival"
recurring: true
editions:
- { year: 2024 }
- { year: 2025 }
url: "https://www.opal-festival.com/"
notes: "Listed in AsSeenAt but no dedicated live page yet"
cookie_collective:
fullName: "Cookie Collective"
recurring: true
subEvents:
- { name: "CCC LIVE", type: "stream", year: 2024 }
- { name: "Compilation Release Party", year: 2024, venue: "Secret Location, Paris" }
url: "https://ccc.cookie.paris/projects/ugo-parvague/"
# ParVagues Sample Ontology
# Maps sample directory names to real-world origins
# Enriched by artist corrections
# === CORE SYNTHS (Santa Clara Laptop Orchestra - SCLORK) ===
bassWarsaw:
source: "SCLORK (Santa Clara Laptop Orchestra)"
type: "open-source synth"
description: "Primary bass synth, used in 100% of gigs"
license: "open-source"
FMRhodes1:
source: "SCLORK"
type: "open-source synth"
description: "FM electric piano, melodic lead"
FMRhodes2:
source: "SCLORK"
type: "open-source synth"
description: "FM electric piano variant"
moogBass:
source: "SCLORK"
type: "open-source synth"
description: "Warm analog-style bass"
acidOto3091:
source: "SCLORK"
type: "open-source synth"
acidOto3092:
source: "SCLORK"
type: "open-source synth"
marimba1:
source: "SCLORK"
type: "open-source synth"
# === BREAKBEATS ===
jungle_breaks:
source: "BluMarTen - Jungle Jungle (1989-1999)"
type: "breakbeat archive"
description: "Classic jungle breaks, used in 83% of gigs"
breaks165:
source: "breakbeat collection"
type: "breaks"
description: "165 BPM breakbeats"
# === SAMPLED TRACKS (discreet attributions) ===
private_number:
source: "Judy Clay & William Bell"
track: "Private Number"
year: 1968
genre: "soul"
suns_keys:
source: "Leifur James"
track: "Suns of Gold"
type: "sampled keys"
suns_guitar:
source: "Leifur James"
track: "Suns of Gold"
type: "sampled guitar"
suns_voice:
source: "Leifur James"
track: "Suns of Gold"
type: "sampled vocals"
come_bass:
source: "that british band"
track: "Come Together"
type: "sampled bass"
notes: "lowkey attribution"
come_eguitar:
source: "that british band"
track: "Come Together"
type: "sampled guitar"
notes: "lowkey attribution"
come_voice:
source: "that british band"
track: "Come Together"
type: "sampled vocals"
notes: "lowkey attribution"
orage:
source: "that californian band"
track: "Riders on the Storm"
type: "sampled storm/atmosphere"
notes: "lowkey attribution"
giorgio_syn:
source: "Giorgio Moroder tribute"
type: "synth emulation"
genre: "italo-disco"
# === PRODUCER PACKS ===
rhadamanthe_melo:
source: "Rhadamanthe (French techno producer)"
type: "personal hard drive samples"
rhadamanthe_vocal:
source: "Rhadamanthe"
type: "personal hard drive samples"
# === COMMERCIAL PACKS ===
vec1_acid:
source: "Vengeance 909"
type: "commercial sample pack"
genre: "techno/acid"
vec2_synth_acid:
source: "Vengeance 909"
type: "commercial sample pack"
# === NU-JAZZ ===
nujazz_keys120:
source: "nu-jazz sample pack"
type: "pre-recorded loops"
bpm: 120
nujazz_bass125:
source: "nu-jazz sample pack"
type: "pre-recorded loops"
bpm: 125
nujazz_wahwah125:
source: "nu-jazz sample pack"
type: "pre-recorded loops"
bpm: 125
# === MISC ===
bogdan_grime:
source: "unknown"
type: "vocal sample"
description: "'I'm from Cardiff!' vocals"
cpluck:
source: "cello plucked samples"
type: "acoustic instrument"
# ParVagues Venue Ontology
# Each correction enriches future analysis
psc:
fullName: "Palais Sans Couronne"
city: "Villejuif"
country: "France"
type: "private party venue"
notes: "Hosts the XXXTeuf series (VelociTeuf, FairyTeuf, MephisTeuf, ElementeTeuf, DiviniTeuf)"
algolia_hq:
fullName: "Algolia HQ"
city: "Paris"
country: "France"
type: "corporate office"
notes: "Recurring FDLM + internal events"
cch_hamburg:
fullName: "Congress Center Hamburg (CCH)"
city: "Hamburg"
country: "Germany"
type: "conference center"
notes: "Chaos Communication Congress. Multi-room: House of Tea, Toilet Rave, Chaos Music Club"
grrrnd_zero:
fullName: "GRRRND ZERO"
city: "Vaulx-en-Velin"
country: "France"
type: "squat/venue"
notes: "AlgoRave Lyon host, 56-60 Avenue Bohlen"
bazurto:
fullName: "Bazurto"
city: "Tignes"
country: "France"
type: "bar/club"
notes: "Apres-ski livecoding, 2022 only. Check if 2024 entry is duplicate."
labenne:
fullName: "Labenne"
city: "Labenne"
country: "France"
type: "outdoor/festival"
notes: "CosmicFest v0 location"
bunker:
fullName: "Bunker"
city: "unknown"
country: "France"
type: "underground"
notes: "One-off post CosmicFest v0. May recur if v1 has 'off au bunker'"
cmny:
fullName: "CMNY"
city: "Paris"
country: "France"
type: "meetup/houseparty"
notes: "Private event, details uncertain"
divin:
fullName: "Divin"
city: "Villejuif"
country: "France"
type: "event name (not venue)"
venue: "psc"
notes: "Named after PSC DiviniTeuf. Track 'Lendemain Divin' composed the sunday after"
le_vortex:
fullName: "Le Vortex"
city: "Paris"
country: "France"
type: "venue"
la_french_stack:
fullName: "La French Stack"
city: "Paris"
country: "France"
type: "tech collective event"
notes: "Recurring 2024, 2025"
ensad:
fullName: "ENSAD Paris"
city: "Issy-les-Moulineaux"
country: "France"
type: "art school"
address: "20 cours Saint Vincent"
devcon23:
fullName: "DevCon23"
city: "Berlin"
country: "Germany"
type: "conference"
val_thorens:
fullName: "Val Thorens"
city: "Val Thorens"
country: "France"
type: "ski resort"
online:
fullName: "Online/Stream"
country: "Internet"
type: "stream"
notes: "TOPLAP streams, Cookie Collective streams"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment