Commit multilingual editorial frontend work
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
export const familyLabFeature = {
|
||||
eyebrow: "Family laboratory / private test issue",
|
||||
title: "A pataphysical family atlas built from one unruly folder and a boy called Dave Jr.",
|
||||
lede:
|
||||
"Not a neutral gallery. Not a cold database. A bright proof-sheet salon for father-and-son evidence, Villanova weather, sleep-heavy domestic grace, and the gentle bureaucratic miracle of naming things before they vanish.",
|
||||
note:
|
||||
"This first pass keeps the captions honest, lets the images breathe, and treats the archive as material for a future family desk rather than a pile of uploads.",
|
||||
};
|
||||
|
||||
export const familyLabStats = [
|
||||
{
|
||||
value: "94",
|
||||
label: "unique frames",
|
||||
note: "The duplicates are folded away so the room reads like an edit, not an export.",
|
||||
},
|
||||
{
|
||||
value: "Dave Jr",
|
||||
label: "central orbit",
|
||||
note: "Your son is the emotional anchor, which is why the named files lead the composition.",
|
||||
},
|
||||
{
|
||||
value: "Moustache era",
|
||||
label: "authenticated",
|
||||
note: "The father-and-son images stay explicit so the archive starts with recognisable truth.",
|
||||
},
|
||||
];
|
||||
|
||||
export const familyLabFeaturedFilenames = [
|
||||
"0meanddave1.jpg",
|
||||
"meAndDave.jpg",
|
||||
"jr_nova.jpg",
|
||||
"villanova1.jpg",
|
||||
"withGrandma.jpg",
|
||||
"fireman.jpg",
|
||||
];
|
||||
|
||||
export const familyLabNotes = [
|
||||
{
|
||||
title: "Poster logic, not gallery logic",
|
||||
body: "The first screen behaves like a cover: one big emotional claim, then a controlled spill of proof.",
|
||||
},
|
||||
{
|
||||
title: "Named frames first",
|
||||
body: "Files with human names carry the warmth, while the Facebook hashes recede into the archive layer.",
|
||||
},
|
||||
{
|
||||
title: "Private by temperament",
|
||||
body: "The design can mature into a family-only desk, but this test page already gives the photographs dignity.",
|
||||
},
|
||||
];
|
||||
|
||||
export const familyLabFilters = [
|
||||
{ key: "all", label: "All frames" },
|
||||
{ key: "named", label: "Named files" },
|
||||
{ key: "dave-jr", label: "Dave Jr" },
|
||||
{ key: "dave", label: "Father and son" },
|
||||
{ key: "villanova", label: "Villanova weather" },
|
||||
{ key: "family", label: "Family orbit" },
|
||||
];
|
||||
@@ -0,0 +1,336 @@
|
||||
export type LocaleCode = "en" | "fr" | "nb";
|
||||
|
||||
export const localeOrder: LocaleCode[] = ["en", "fr", "nb"];
|
||||
|
||||
export const localeMeta: Record<LocaleCode, { label: string; switcher: string; note: string }> = {
|
||||
en: {
|
||||
label: "English",
|
||||
switcher: "EN edition",
|
||||
note: "The interface changes language first. Long-form features stay in their original edition until translated.",
|
||||
},
|
||||
fr: {
|
||||
label: "Francais",
|
||||
switcher: "Cahier FR",
|
||||
note: "L'interface change de langue d'abord. Les longs articles restent dans leur edition d'origine pour l'instant.",
|
||||
},
|
||||
nb: {
|
||||
label: "Norsk bokmal",
|
||||
switcher: "NB utgave",
|
||||
note: "Grensesnittet skifter sprak forst. Langartiklene blir staende i originalutgaven til de er oversatt.",
|
||||
},
|
||||
};
|
||||
|
||||
export const localizedSections: Record<
|
||||
string,
|
||||
Record<LocaleCode, { title: string; tone: string }>
|
||||
> = {
|
||||
business: {
|
||||
en: { title: "Business", tone: "Sharp, practical, anti-buzzword." },
|
||||
fr: { title: "Affaires", tone: "Net, pratique, allergique au jargon." },
|
||||
nb: { title: "Naeringsliv", tone: "Skarpt, praktisk og anti-buzzword." },
|
||||
},
|
||||
education: {
|
||||
en: { title: "Education", tone: "Curious, rigorous, lightly mischievous." },
|
||||
fr: { title: "Etudes", tone: "Curieux, rigoureux, legerement malicieux." },
|
||||
nb: { title: "Utdanning", tone: "Nysgjerrig, grundig og litt rampete." },
|
||||
},
|
||||
family: {
|
||||
en: { title: "Family", tone: "Private-minded, generous, alive." },
|
||||
fr: { title: "Famille", tone: "Prive, genereux, bien vivant." },
|
||||
nb: { title: "Familie", tone: "Privat, varm og levende." },
|
||||
},
|
||||
"fun-postings": {
|
||||
en: { title: "Fun Postings", tone: "Playful, deadpan, collectible." },
|
||||
fr: { title: "Annonces Delicieuses", tone: "Ludique, pince-sans-rire, a collectionner." },
|
||||
nb: { title: "Leken Oppslagstavle", tone: "Leken, torrr og samleverdig." },
|
||||
},
|
||||
writing: {
|
||||
en: { title: "Writing", tone: "Literary, international, smoky." },
|
||||
fr: { title: "Ecriture", tone: "Litteraire, international, fumeux dans le bon sens." },
|
||||
nb: { title: "Skriving", tone: "Litteraer, internasjonal og litt roykfylt." },
|
||||
},
|
||||
"jazz-music": {
|
||||
en: { title: "Jazz and Music", tone: "Velvet, brassy, precise." },
|
||||
fr: { title: "Jazz et Musique", tone: "Velours, cuivre, precision." },
|
||||
nb: { title: "Jazz og Musikk", tone: "Fløyel, messing og presisjon." },
|
||||
},
|
||||
languages: {
|
||||
en: { title: "Languages", tone: "Polyglot, sly, welcoming." },
|
||||
fr: { title: "Langues", tone: "Polyglotte, malin, accueillant." },
|
||||
nb: { title: "Sprak", tone: "Polyglott, lur og inkluderende." },
|
||||
},
|
||||
"ai-lab": {
|
||||
en: { title: "AI Lab", tone: "Forward-looking, grounded, open source friendly." },
|
||||
fr: { title: "Laboratoire IA", tone: "Tourne vers l'avenir, solide, ami de l'open source." },
|
||||
nb: { title: "AI-lab", tone: "Fremtidsrettet, jordnaer og vennlig mot apen kildekode." },
|
||||
},
|
||||
norway: {
|
||||
en: { title: "Norway", tone: "Observant, civic, place-aware." },
|
||||
fr: { title: "Norvege", tone: "Observateur, civique, attentif au lieu." },
|
||||
nb: { title: "Norge", tone: "Observant, samfunnsbevisst og stedsnart." },
|
||||
},
|
||||
projects: {
|
||||
en: { title: "Projects", tone: "Builder energy, clean receipts." },
|
||||
fr: { title: "Projets", tone: "Energie d'atelier, comptes propres." },
|
||||
nb: { title: "Prosjekter", tone: "Byggerenergi og ryddige spor." },
|
||||
},
|
||||
cv: {
|
||||
en: { title: "CV", tone: "Professional, legible, confident." },
|
||||
fr: { title: "CV", tone: "Professionnel, lisible, assure." },
|
||||
nb: { title: "CV", tone: "Profesjonell, lesbar og trygg." },
|
||||
},
|
||||
"family-lab": {
|
||||
en: { title: "Family Lab", tone: "Private archive, atlas, memory room." },
|
||||
fr: { title: "Laboratoire Familial", tone: "Archive privee, atlas, chambre de memoire." },
|
||||
nb: { title: "Familielab", tone: "Privat arkiv, atlas og minnerom." },
|
||||
},
|
||||
};
|
||||
|
||||
type ChromeContext = {
|
||||
activeSlug: string;
|
||||
issueDate: Record<LocaleCode, string>;
|
||||
articleKey?: "norway" | "jazz" | "projects" | null;
|
||||
};
|
||||
|
||||
const articleLabels: Record<string, Record<LocaleCode, { label: string; note: string }>> = {
|
||||
norway: {
|
||||
en: { label: "Article / Norway desk", note: "Field report / family life / fathers / immigrants" },
|
||||
fr: { label: "Article / Cahier Norvege", note: "Reportage / famille / peres / immigration" },
|
||||
nb: { label: "Artikkel / Norge-desk", note: "Feltrapport / familieliv / fedre / innvandring" },
|
||||
},
|
||||
jazz: {
|
||||
en: { label: "Article / Jazz and Music", note: "Field report / Kongsberg x Paris" },
|
||||
fr: { label: "Article / Jazz et Musique", note: "Reportage / Kongsberg x Paris" },
|
||||
nb: { label: "Artikkel / Jazz og Musikk", note: "Feltrapport / Kongsberg x Paris" },
|
||||
},
|
||||
projects: {
|
||||
en: { label: "Article / Projects desk", note: "Field report / music trivia / Blue Note Rhino / April build" },
|
||||
fr: { label: "Article / Cahier Projets", note: "Reportage / quiz musical / Blue Note Rhino / chantier d'avril" },
|
||||
nb: { label: "Artikkel / Prosjekt-desk", note: "Feltrapport / musikktrivia / Blue Note Rhino / aprilbygg" },
|
||||
},
|
||||
};
|
||||
|
||||
export function getChromeCopy({ activeSlug, issueDate, articleKey }: ChromeContext) {
|
||||
const currentSection = localizedSections[activeSlug];
|
||||
const article = articleKey ? articleLabels[articleKey] : null;
|
||||
const sectionOrder = {
|
||||
business: "01",
|
||||
education: "02",
|
||||
family: "03",
|
||||
"fun-postings": "04",
|
||||
writing: "05",
|
||||
"jazz-music": "06",
|
||||
languages: "07",
|
||||
"ai-lab": "08",
|
||||
norway: "09",
|
||||
projects: "10",
|
||||
cv: "11",
|
||||
"family-lab": "12",
|
||||
} as const;
|
||||
const sectionNumber = sectionOrder[activeSlug as keyof typeof sectionOrder];
|
||||
|
||||
return {
|
||||
ribbonIssue: {
|
||||
en: `Founding issue / ${issueDate.en}`,
|
||||
fr: `Numero fondateur / ${issueDate.fr}`,
|
||||
nb: `Grunnutgave / ${issueDate.nb}`,
|
||||
},
|
||||
ribbonNote: currentSection
|
||||
? {
|
||||
en: currentSection.en.tone,
|
||||
fr: currentSection.fr.tone,
|
||||
nb: currentSection.nb.tone,
|
||||
}
|
||||
: article
|
||||
? {
|
||||
en: article.en.note,
|
||||
fr: article.fr.note,
|
||||
nb: article.nb.note,
|
||||
}
|
||||
: {
|
||||
en: "Ringwood / Villanova / Brussels / Paris / Krakow / Oslo / Kongsberg",
|
||||
fr: "Ringwood / Villanova / Bruxelles / Paris / Cracovie / Oslo / Kongsberg",
|
||||
nb: "Ringwood / Villanova / Brussel / Paris / Krakow / Oslo / Kongsberg",
|
||||
},
|
||||
issueLabel: currentSection
|
||||
? {
|
||||
en: `Section ${sectionNumber} / ${currentSection.en.title}`,
|
||||
fr: `Section ${sectionNumber} / ${currentSection.fr.title}`,
|
||||
nb: `Seksjon ${sectionNumber} / ${currentSection.nb.title}`,
|
||||
}
|
||||
: article
|
||||
? {
|
||||
en: article.en.label,
|
||||
fr: article.fr.label,
|
||||
nb: article.nb.label,
|
||||
}
|
||||
: {
|
||||
en: "Founding issue / Personal edition",
|
||||
fr: "Numero fondateur / Edition personnelle",
|
||||
nb: "Grunnutgave / Personlig utgave",
|
||||
},
|
||||
mastheadLine: {
|
||||
en: "Jazz desk / machine room / family archive / pataphysical bulletin",
|
||||
fr: "Cahier jazz / salle des machines / archive familiale / bulletin pataphysique",
|
||||
nb: "Jazzdesk / maskinrom / familiearkiv / pataphysisk bulletin",
|
||||
},
|
||||
domainPrompt: {
|
||||
en: "Private AI. Jazz rooms. Civic weather. Pataphysical field notes.",
|
||||
fr: "IA privee. Salles de jazz. Meteo civique. Notes de terrain pataphysiques.",
|
||||
nb: "Privat AI. Jazzrom. Samfunnsvaer. Pataphysiske feltnotater.",
|
||||
},
|
||||
domainLede: {
|
||||
en: "A bright retro paper for machine rooms, multilingual weather, Norway, family rights, live culture, and the deliberate misuse of the impossible.",
|
||||
fr: "Un journal retro-lumineux pour les salles des machines, le temps multilingue, la Norvege, les droits familiaux, la culture vivante et l'usage delibere de l'impossible.",
|
||||
nb: "Et lyst retroblad for maskinrom, flerspraklig vaer, Norge, familierett, levende kultur og bevisst misbruk av det umulige.",
|
||||
},
|
||||
languageNote: {
|
||||
en: localeMeta.en.note,
|
||||
fr: localeMeta.fr.note,
|
||||
nb: localeMeta.nb.note,
|
||||
},
|
||||
footerHeadline: {
|
||||
en: "Jazz desk, machine room, civic archive, and practical impossibility.",
|
||||
fr: "Cahier jazz, salle des machines, archive civique et impossibilite pratique.",
|
||||
nb: "Jazzdesk, maskinrom, samfunnsarkiv og praktisk umulighet.",
|
||||
},
|
||||
footerBody: {
|
||||
en: "Built in Astro with React islands, backed by PHP and SQL, and edited like a proper newspaper rather than a consultant PDF with lipstick.",
|
||||
fr: "Construit avec Astro et des ilots React, soutenu par PHP et SQL, puis edite comme un vrai journal plutot qu'un PDF de conseil maquille.",
|
||||
nb: "Bygget i Astro med React-oyer, drevet av PHP og SQL, og redigert som en ordentlig avis i stedet for en konsulent-PDF med leppestift.",
|
||||
},
|
||||
footerNoteLeft: {
|
||||
en: "Astro + React islands + PHP + SQL",
|
||||
fr: "Astro + ilots React + PHP + SQL",
|
||||
nb: "Astro + React-oyer + PHP + SQL",
|
||||
},
|
||||
footerNoteRight: {
|
||||
en: "Blue Note Logic / Gilligan TECH / Kongsberg / multilingual edition",
|
||||
fr: "Blue Note Logic / Gilligan TECH / Kongsberg / edition multilingue",
|
||||
nb: "Blue Note Logic / Gilligan TECH / Kongsberg / flerspraklig utgave",
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export const footerCallouts = {
|
||||
blueNoteLogic: {
|
||||
href: "https://bluenotelogic.com/",
|
||||
label: {
|
||||
en: "Blue Note Logic",
|
||||
fr: "Blue Note Logic",
|
||||
nb: "Blue Note Logic",
|
||||
},
|
||||
title: {
|
||||
en: "Private AI and document intelligence with a real memory.",
|
||||
fr: "IA privee et intelligence documentaire avec une vraie memoire.",
|
||||
nb: "Privat AI og dokumentintelligens med ekte hukommelse.",
|
||||
},
|
||||
body: {
|
||||
en: "Blue Note Logic frames AI as owned infrastructure: strategy, deployment, document intelligence, and source-aware systems that keep working knowledge inside the firm.",
|
||||
fr: "Blue Note Logic traite l'IA comme une infrastructure possedee : strategie, deploiement, intelligence documentaire et systemes cites a la source qui gardent la connaissance dans l'entreprise.",
|
||||
nb: "Blue Note Logic behandler AI som eid infrastruktur: strategi, utrulling, dokumentintelligens og kildebevisste systemer som holder kunnskapen i virksomheten.",
|
||||
},
|
||||
},
|
||||
gilliganTech: {
|
||||
href: "https://gilligan.tech/",
|
||||
label: {
|
||||
en: "Gilligan TECH",
|
||||
fr: "Gilligan TECH",
|
||||
nb: "Gilligan TECH",
|
||||
},
|
||||
title: {
|
||||
en: "Kongsberg-side systems engineering for Nordic SMBs.",
|
||||
fr: "Ingenierie de systemes depuis Kongsberg pour les PME nordiques.",
|
||||
nb: "Systemingeniorarbeid fra Kongsberg for nordiske SMB-er.",
|
||||
},
|
||||
body: {
|
||||
en: "Gilligan Tech is the Norwegian operating arm: AI audits, system builds, fractional CTO work, and sovereign European delivery for companies that want results before theatre.",
|
||||
fr: "Gilligan Tech est le bras norvegien d'operation : audits IA, constructions de systemes, travail de CTO fractionnaire et livraison souveraine europeenne pour les entreprises qui veulent des resultats avant le theatre.",
|
||||
nb: "Gilligan Tech er den norske operasjonsarmen: AI-audits, systembygging, fractional CTO-arbeid og suveren europeisk levering for selskaper som vil ha resultater foran teater.",
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const policyLinkCopy = {
|
||||
privacy: {
|
||||
href: "/privacy",
|
||||
title: {
|
||||
en: "Privacy policy",
|
||||
fr: "Politique de confidentialite",
|
||||
nb: "Personvern",
|
||||
},
|
||||
body: {
|
||||
en: "How the site handles accounts, family access, forms, and first-party data.",
|
||||
fr: "Comment le site gere les comptes, l'acces familial, les formulaires et les donnees de premiere main.",
|
||||
nb: "Hvordan nettstedet handterer kontoer, familieadgang, skjemaer og forstepartsdata.",
|
||||
},
|
||||
},
|
||||
cookies: {
|
||||
href: "/cookies",
|
||||
title: {
|
||||
en: "Cookie policy",
|
||||
fr: "Politique de cookies",
|
||||
nb: "Cookiepolicy",
|
||||
},
|
||||
body: {
|
||||
en: "Essential-first consent, optional analytics later, and external embeds only after permission.",
|
||||
fr: "Consentement essential d'abord, analyses optionnelles ensuite, et contenus externes seulement apres permission.",
|
||||
nb: "Forst essensielle cookies, valgfri analyse senere, og eksterne innbygginger bare etter samtykke.",
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const cookieBannerCopy = {
|
||||
eyebrow: {
|
||||
en: "Privacy desk / local build",
|
||||
fr: "Cahier vie privee / build local",
|
||||
nb: "Personverndesk / lokal bygg",
|
||||
},
|
||||
title: {
|
||||
en: "This paper keeps optional tracking turned off until you say yes.",
|
||||
fr: "Ce journal laisse le pistage optionnel eteint tant que vous ne dites pas oui.",
|
||||
nb: "Denne avisen holder valgfri sporing av til du sier ja.",
|
||||
},
|
||||
body: {
|
||||
en: "Essential cookies keep sign-in, family access, and language choice working. Analytics and future third-party embeds stay off by default.",
|
||||
fr: "Les cookies essentiels maintiennent la connexion, l'acces familial et le choix de langue. Les analyses et les futurs contenus tiers restent desactives par defaut.",
|
||||
nb: "Nodvendige cookies holder innlogging, familieadgang og sprakvalg i gang. Analyse og fremtidige tredjepartsinnbygginger er av som standard.",
|
||||
},
|
||||
acceptAll: {
|
||||
en: "Accept all",
|
||||
fr: "Tout accepter",
|
||||
nb: "Godta alt",
|
||||
},
|
||||
essentialOnly: {
|
||||
en: "Essential only",
|
||||
fr: "Essentiels seulement",
|
||||
nb: "Bare nodvendige",
|
||||
},
|
||||
customize: {
|
||||
en: "Customize",
|
||||
fr: "Personnaliser",
|
||||
nb: "Tilpass",
|
||||
},
|
||||
save: {
|
||||
en: "Save choices",
|
||||
fr: "Enregistrer les choix",
|
||||
nb: "Lagre valgene",
|
||||
},
|
||||
categories: {
|
||||
essential: {
|
||||
en: "Essential site operations",
|
||||
fr: "Fonctions essentielles du site",
|
||||
nb: "Essensiell drift",
|
||||
},
|
||||
analytics: {
|
||||
en: "Anonymous analytics later",
|
||||
fr: "Analyses anonymes plus tard",
|
||||
nb: "Anonym analyse senere",
|
||||
},
|
||||
embeds: {
|
||||
en: "External media embeds",
|
||||
fr: "Integrations medias externes",
|
||||
nb: "Eksterne medieinnbygginger",
|
||||
},
|
||||
},
|
||||
};
|
||||
+51
-8
@@ -27,6 +27,10 @@ export type VentureSignal = {
|
||||
strap: string;
|
||||
summary: string;
|
||||
href: string;
|
||||
imageSrc: string;
|
||||
imageAlt: string;
|
||||
imageNote: string;
|
||||
external?: boolean;
|
||||
};
|
||||
|
||||
export type CollageImage = {
|
||||
@@ -54,9 +58,10 @@ export const routeStops: RouteStop[] = [
|
||||
{ place: "Columbia, South Carolina", note: "business school orbit" },
|
||||
{ place: "Paris, France", note: "international MBA" },
|
||||
{ place: "Washington, DC", note: "capital interval" },
|
||||
{ place: "New York", note: "city tempo" },
|
||||
{ place: "Manhattan, New York", note: "city tempo" },
|
||||
{ place: "Hamilton, Bermuda", note: "Atlantic detour" },
|
||||
{ place: "the Midwest", note: "American middle distance" },
|
||||
{ place: "Washington, DC", note: "federal coda" },
|
||||
{ place: "Brooklyn, New York", note: "borough voltage" },
|
||||
{ place: "Krakow, Poland", note: "EU studies" },
|
||||
{ place: "Oslo, Norway", note: "Nordic transition" },
|
||||
{ place: "Kongsberg, Norway", note: "current desk" },
|
||||
@@ -113,11 +118,27 @@ export const ventureDesk: Venture[] = [
|
||||
|
||||
export const ventureSignals: VentureSignal[] = [
|
||||
{
|
||||
name: "Trivia & Tunes",
|
||||
strap: "live-hosted games and music-led connection",
|
||||
name: "Blue Note Logic",
|
||||
strap: "private AI, document intelligence, and source-cited memory",
|
||||
summary:
|
||||
"A cultural desk for knowledge, playlists, rooms full of people, and the social engineering of a good night.",
|
||||
href: "https://triviaandtunes.com/",
|
||||
"The machine room behind the paper: owned infrastructure, private corpora, multilingual controls, and AI that keeps its receipts.",
|
||||
href: "https://ai.bluenotelogic.com/",
|
||||
imageSrc: "/images/ai-lab/hero-lab.svg",
|
||||
imageAlt: "Illustrated AI lab diagram for Blue Note Logic.",
|
||||
imageNote: "Private corpus / cited answers / EU hosting",
|
||||
external: true,
|
||||
},
|
||||
{
|
||||
name: "Trivia & Tunes",
|
||||
strap: "live-hosted games, music rounds, and true AI in the loop",
|
||||
summary:
|
||||
"A culture product with venue instincts: playlists, game craft, AI grading, and voice features edging toward the microphone.",
|
||||
href: "https://triviaandtunes.no/",
|
||||
imageSrc:
|
||||
"https://commons.wikimedia.org/wiki/Special:Redirect/file/Level_42_Kongsberg_Jazzfestival_2017_%28214257%29.jpg",
|
||||
imageAlt: "Crowd-facing stage image from Kongsberg Jazzfestival.",
|
||||
imageNote: "Live rooms / music energy / quiz-night voltage",
|
||||
external: true,
|
||||
},
|
||||
{
|
||||
name: "Do Better Norge",
|
||||
@@ -125,6 +146,22 @@ export const ventureSignals: VentureSignal[] = [
|
||||
summary:
|
||||
"A civic and advocacy desk grounded in primary sources, practical guidance, and a refusal to treat children as procedural debris.",
|
||||
href: "https://dobetternorge.no/",
|
||||
imageSrc: "https://commons.wikimedia.org/wiki/Special:Redirect/file/Kongsberg_IMG_0357.JPG",
|
||||
imageAlt: "Riverfront view in Kongsberg, Norway.",
|
||||
imageNote: "Norway desk / family life / civic weather",
|
||||
external: true,
|
||||
},
|
||||
{
|
||||
name: "School dossier",
|
||||
strap: "Brussels, Krakow, Paris, Villanova, and the long route north",
|
||||
summary:
|
||||
"The education issue turns institutions into chapters, cities into footnotes, and degrees into a proper migration story.",
|
||||
href: "/education",
|
||||
imageSrc:
|
||||
"https://commons.wikimedia.org/wiki/Special:Redirect/file/Grand-Place,_Brussels_%2839528722772%29.jpg",
|
||||
imageAlt: "Grand-Place in Brussels.",
|
||||
imageNote: "Brussels / multilingual weather / first European chapter",
|
||||
external: false,
|
||||
},
|
||||
];
|
||||
|
||||
@@ -218,7 +255,7 @@ export const aiLabSources: SourceCredit[] = [
|
||||
},
|
||||
{
|
||||
label: "Trivia & Tunes",
|
||||
url: "https://triviaandtunes.com/",
|
||||
url: "https://triviaandtunes.no/",
|
||||
note:
|
||||
"Used for the live-hosted trivia and music angle on the homepage culture desk.",
|
||||
},
|
||||
@@ -226,6 +263,12 @@ export const aiLabSources: SourceCredit[] = [
|
||||
label: "Do Better Norge",
|
||||
url: "https://dobetternorge.no/",
|
||||
note:
|
||||
"Used for the advocacy and children’s-rights positioning on the homepage civic desk.",
|
||||
"Used for the advocacy and children's-rights positioning on the homepage civic desk.",
|
||||
},
|
||||
{
|
||||
label: "Wikimedia Commons",
|
||||
url: "https://commons.wikimedia.org/",
|
||||
note:
|
||||
"Used for the public-domain and openly licensed city, campus, and festival images woven through the homepage and section cards.",
|
||||
},
|
||||
];
|
||||
|
||||
+30
-26
@@ -21,12 +21,12 @@ export type SchoolDossier = {
|
||||
};
|
||||
|
||||
export const hero = {
|
||||
kicker: "Blue Note Logic presents",
|
||||
title: "Dave Gilligan, a literary jazz magazine disguised as a personal site.",
|
||||
kicker: "Pataphysical bulletin / Kongsberg edition",
|
||||
title: "A high-tech newsmagazine disguised as one man's improbable paper trail.",
|
||||
lede:
|
||||
"Writing, technology, music, languages, family history, consulting, and a little applied pataphysics, arranged as a bright editorial salon rather than a brochure.",
|
||||
"Private AI, jazz basements, multilingual weather, family rights, and systems work from Ringwood to Kongsberg, edited with equal parts brass, evidence, and deliberate mischief.",
|
||||
sublede:
|
||||
"Built for essays, dossiers, dispatches, experiments, job postings, and AI-assisted editions that can move between English, Norwegian, and French without losing their mood.",
|
||||
"Inside this issue: Blue Note Logic in the machine room, Gilligan Tech in the field, Do Better Norge in the civic file, Trivia & Tunes in the live-wire culture pages, and school dossiers written like contraband literature.",
|
||||
};
|
||||
|
||||
export const launchSections: LaunchSection[] = [
|
||||
@@ -34,7 +34,7 @@ export const launchSections: LaunchSection[] = [
|
||||
slug: "business",
|
||||
label: "01",
|
||||
title: "Business",
|
||||
summary: "Consulting notes, operator essays, client stories, and strategy with sleeves rolled up.",
|
||||
summary: "Consulting notes, AI architecture, and operator essays for people who prefer working systems to rented theater.",
|
||||
tone: "Sharp, practical, anti-buzzword.",
|
||||
strap: "Operator studies for adults who are tired of consultant vapor.",
|
||||
coverline: "The anti-buzzword ledger.",
|
||||
@@ -56,7 +56,7 @@ export const launchSections: LaunchSection[] = [
|
||||
slug: "family",
|
||||
label: "03",
|
||||
title: "Family",
|
||||
summary: "A warmer archive for memory, milestones, and the people who keep the music human.",
|
||||
summary: "A warmer archive for memory, milestones, and the private weather that keeps the machinery worth running.",
|
||||
tone: "Private-minded, generous, alive.",
|
||||
strap: "The soft archive, still edited like it matters.",
|
||||
coverline: "Domestic front pages.",
|
||||
@@ -67,7 +67,7 @@ export const launchSections: LaunchSection[] = [
|
||||
slug: "fun-postings",
|
||||
label: "04",
|
||||
title: "Fun Postings",
|
||||
summary: "Odd notices, cultural flyers, side projects, and delightfully unnecessary announcements.",
|
||||
summary: "Odd notices, cultural flyers, side projects, and the sort of elegant nonsense that deserves proper typesetting.",
|
||||
tone: "Playful, deadpan, collectible.",
|
||||
strap: "The classified page gets strange and starts wearing cologne.",
|
||||
coverline: "Useful nonsense, neatly set.",
|
||||
@@ -78,18 +78,22 @@ export const launchSections: LaunchSection[] = [
|
||||
slug: "writing",
|
||||
label: "05",
|
||||
title: "Writing",
|
||||
summary: "Features, columns, notebooks, and dispatches for readers who like style with backbone.",
|
||||
summary: "This month's writing desk runs on Boris Vian: novels with trapdoors, Vernon Sullivan weather, Saint-Germain smoke, and bibliography arranged like a contraband route.",
|
||||
tone: "Literary, international, smoky.",
|
||||
strap: "Columns with brass in the lungs and data in the pockets.",
|
||||
coverline: "Smoke, syntax, and reportage.",
|
||||
motif: "Essays, dispatches, notebook pages.",
|
||||
samples: ["On systems and sorrow", "Nordic field notes", "Paris after the spreadsheet"],
|
||||
strap: "A low-lit file on Boris Vian, jazz syntax, and the exact science of glorious exception.",
|
||||
coverline: "Boris Vian in the side door.",
|
||||
motif: "Novels, jazz, pataphysics, counterfeit signatures, and Paris after midnight.",
|
||||
samples: [
|
||||
"The engineer of exceptions",
|
||||
"Five doors into Boris Vian",
|
||||
"Why Saint-Germain still leaks into the prose",
|
||||
],
|
||||
},
|
||||
{
|
||||
slug: "jazz-music",
|
||||
label: "06",
|
||||
title: "Jazz and Music",
|
||||
summary: "Listening notes, deep cuts, rhythm studies, and the low-lit logic of serious groove.",
|
||||
summary: "Listening notes, Kongsberg nights, Caveau memories, and the low-lit logic of serious groove.",
|
||||
tone: "Velvet, brassy, precise.",
|
||||
strap: "For records, rooms, and players who understand that rhythm is governance.",
|
||||
coverline: "Blue notes and side doors.",
|
||||
@@ -100,7 +104,7 @@ export const launchSections: LaunchSection[] = [
|
||||
slug: "languages",
|
||||
label: "07",
|
||||
title: "Languages",
|
||||
summary: "Translation, vocabulary, cross-border humor, and the pleasures of switching registers.",
|
||||
summary: "English, French, and Norwegian switching places without losing the joke, the seduction, or the filing detail.",
|
||||
tone: "Polyglot, sly, welcoming.",
|
||||
strap: "A section for mistranslation, seduction, and grammatical diplomacy.",
|
||||
coverline: "The multilingual cabinet.",
|
||||
@@ -111,7 +115,7 @@ export const launchSections: LaunchSection[] = [
|
||||
slug: "ai-lab",
|
||||
label: "08",
|
||||
title: "AI Lab",
|
||||
summary: "Built-in tools, experiments, prompt systems, and practical machine intelligence with taste.",
|
||||
summary: "Private corpora, cited answers, multilingual agents, and practical machine intelligence with actual memory.",
|
||||
tone: "Forward-looking, grounded, open source friendly.",
|
||||
strap: "Machine intelligence without the conference lanyard.",
|
||||
coverline: "The atelier for useful futures.",
|
||||
@@ -122,7 +126,7 @@ export const launchSections: LaunchSection[] = [
|
||||
slug: "norway",
|
||||
label: "09",
|
||||
title: "Norway",
|
||||
summary: "Kongsberg dispatches, civic notes, local texture, and Scandinavian reality at street level.",
|
||||
summary: "Kongsberg dispatches, civic reporting, immigrant-family realities, and Norwegian life observed without brochure language.",
|
||||
tone: "Observant, civic, place-aware.",
|
||||
strap: "A local paper for one town and several realities.",
|
||||
coverline: "Kongsberg, correctly observed.",
|
||||
@@ -133,7 +137,7 @@ export const launchSections: LaunchSection[] = [
|
||||
slug: "projects",
|
||||
label: "10",
|
||||
title: "Projects",
|
||||
summary: "Things launched, repaired, modernized, or imagined into being across code, content, and data.",
|
||||
summary: "Things launched, repaired, modernized, or made slightly dangerous across code, content, venues, and data.",
|
||||
tone: "Builder energy, clean receipts.",
|
||||
strap: "The workshop floor, but art directed.",
|
||||
coverline: "Built, fixed, and shipped.",
|
||||
@@ -207,21 +211,21 @@ export const schoolDossiers: SchoolDossier[] = [
|
||||
];
|
||||
|
||||
export const fieldNotes = [
|
||||
"AI-backed edition controls for English, Norwegian, and French.",
|
||||
"A magazine structure ready for essays, archives, member access, and dossiers.",
|
||||
"A future-facing front end sitting on top of PHP, SQL, and role-based permissions.",
|
||||
"Blue Note Logic keeps the machine room full of private AI, cited answers, and document intelligence that behaves like evidence instead of theater.",
|
||||
"Trivia & Tunes is now a living product story: venue-grade quiz nights, real AI in the game loop, and voice layers warming up for live testing.",
|
||||
"Do Better Norge keeps the civic file open on family life, immigrant fathers, due process, and the legal weather in contemporary Norway.",
|
||||
];
|
||||
|
||||
export const editorialPromises = [
|
||||
"Keep the light background and the page breathable.",
|
||||
"Make AI visible as a craft tool, not a gimmick.",
|
||||
"Treat the CV, the essays, and the family archive with equal design seriousness.",
|
||||
"Keep the paper light, breathable, and a little dangerous around the edges.",
|
||||
"Make AI visible as a craft tool, a newsroom instrument, and never a plastic gimmick.",
|
||||
"Treat the CV, the jazz notebook, the civic archive, and the family pages with equal design seriousness.",
|
||||
];
|
||||
|
||||
export const coverLines = [
|
||||
"A literary technology salon with jazz smoke in the margins.",
|
||||
"Five school dossiers, each signed with a clearly counterfeit blessing.",
|
||||
"AI in the machinery, not sprayed on top like fresh cologne.",
|
||||
"A pataphysical field paper with jazz smoke in the margins and SQL under the floorboards.",
|
||||
"Five school dossiers, each signed with a clearly counterfeit blessing and a straight face.",
|
||||
"AI in the machinery, not sprayed on top like fresh conference cologne.",
|
||||
];
|
||||
|
||||
export function getSectionHref(section: LaunchSection) {
|
||||
|
||||
Reference in New Issue
Block a user