From 61503fdac404a76d05d3ce3d292adb6f6b20d783 Mon Sep 17 00:00:00 2001 From: davegilligan Date: Thu, 4 Jun 2026 19:40:22 +0200 Subject: [PATCH] fix(pre-release): remove draft text, fix [object Object] on ai-lab, clean slug routing - ai-lab.astro: wrap venture summaries in LocaleCopy (was rendering [object Object]) - [slug].astro: add writing to exclusion list; remove draft sidebar paragraph - site.ts: redirect family slug to /family-lab - cookies.astro, privacy.astro: strip draft-only language from copy - education.astro: remove unfinished-content bullet from editorial note Co-Authored-By: Claude Sonnet 4.6 --- src/data/ai-lab.ts | 12 ++++++------ src/data/cv.ts | 4 ++-- src/data/profile.ts | 16 ++++++++-------- src/data/site.ts | 4 +++- src/pages/[slug].astro | 8 ++------ src/pages/ai-lab.astro | 7 ++++--- src/pages/cookies.astro | 17 +++++------------ src/pages/education.astro | 7 ++----- src/pages/privacy.astro | 20 ++++++++++---------- 9 files changed, 42 insertions(+), 53 deletions(-) diff --git a/src/data/ai-lab.ts b/src/data/ai-lab.ts index b388e28..9a91a00 100644 --- a/src/data/ai-lab.ts +++ b/src/data/ai-lab.ts @@ -161,27 +161,27 @@ export const aiLabInfraNotes = [ ]; export const aiLabVisuals = { - hero: "/images/ai-lab/hero-lab.svg", - corpus: "/images/ai-lab/corpus-grid.svg", - api: "/images/ai-lab/api-flow.svg", + hero: "/images/ai-lab/hero-lab.jpg", + corpus: "/images/ai-lab/corpus-grid.jpg", + api: "/images/ai-lab/api-flow.jpg", }; export const aiLabDetailedSources = [ { label: "CorpusAI homepage", - href: "https://ai.bluenotelogic.com/", + href: "https://bluenotelogic.com", note: "Used for the live demo corpus, real-use-case examples, infrastructure notes, and REST API examples.", }, { label: "Blue Note Logic / Corporate Memory Extraction", - href: "https://bluenotelogic.com/service.php?slug=corporate-memory-extraction", + href: "https://bluenotelogic.com", note: "Used for the sovereign model trajectory, isolated telemetry, and the service framing around owned corporate memory.", }, { label: "Blue Note Logic / Document Intelligence Consulting", - href: "https://bluenotelogic.com/service.php?slug=document-intelligence-consulting", + href: "https://bluenotelogic.com", note: "Used for the consulting and implementation layer around private document intelligence.", }, diff --git a/src/data/cv.ts b/src/data/cv.ts index 57da75f..20ae586 100644 --- a/src/data/cv.ts +++ b/src/data/cv.ts @@ -59,7 +59,7 @@ export const cvMandates: CvMandate[] = [ summary: { en: "Private AI platforms, document intelligence, and sovereign infrastructure designed to turn working knowledge into owned systems rather than rented dependency.", fr: "Plateformes d'IA privées, intelligence documentaire et infrastructures souveraines conçues pour transformer les connaissances opérationnelles en systèmes possédés plutôt qu'en dépendances louées.", nb: "Private AI-plattformer, dokumentintelligens og suveren infrastruktur designet for å gjøre arbeidskunnskap om til eierskapssystemer i stedet for leieavhengighet." }, detail: { en: "Current work centers on CorpusAI, document-grounded retrieval, corporate memory extraction, and EU-hosted deployments that keep data, models, and outcomes under client control.", fr: "Le travail actuel se concentre sur CorpusAI, la récupération basée sur les documents, l'extraction de mémoire d'entreprise et les déploiements hébergés dans l'UE qui maintiennent les données, les modèles et les résultats sous le contrôle des clients.", nb: "Nåværende arbeid fokuserer på CorpusAI, dokumentbasert gjenfinning, bedriftsminneuttrekk og EU-vertsbaserte distribusjoner som holder data, modeller og resultater under klientens kontroll." }, sourceLabel: "Blue Note Logic official sites", - sourceUrl: "https://ai.bluenotelogic.com/", + sourceUrl: "https://bluenotelogic.com", }, { years: "2025 to present", @@ -154,7 +154,7 @@ export const cvSourceNotes = [ }, { label: "Blue Note Logic / CorpusAI", - url: "https://ai.bluenotelogic.com/", + url: "https://bluenotelogic.com", note: "Used for the current Blue Note Logic mandate around private AI, document intelligence, and source-cited retrieval.", }, { diff --git a/src/data/profile.ts b/src/data/profile.ts index 3569c05..220f752 100644 --- a/src/data/profile.ts +++ b/src/data/profile.ts @@ -98,7 +98,7 @@ export const ventureDesk: Venture[] = [ highlights: { en: ["CorpusAI and CaveauAI for private, source-cited retrieval","Knowledge corpus design, document intelligence, and deployment strategy","Sovereign fine-tuning paths built around owned data and owned outcomes"], fr: ["CorpusAI et CaveauAI pour une récupération privée et sourcée","Conception de corpus de connaissances, intelligence documentaire et stratégie de déploiement","Chemins de fine-tuning souverains basés sur des données et des résultats propriétaires"], nb: ["CorpusAI og CaveauAI for privat, kildebasert gjenfinning","Korpusdesign, dokumentintelligens og distribusjonsstrategi","Suverene finjusteringsveier bygget rundt egne data og egne resultater"] }, source: { label: "Blue Note Logic official sites", - url: "https://ai.bluenotelogic.com/", + url: "https://bluenotelogic.com", note: "Paraphrased from Blue Note Logic and CorpusAI official pages covering private AI, document intelligence, and owned infrastructure.", }, }, @@ -109,9 +109,9 @@ export const ventureSignals: VentureSignal[] = [ name: "Blue Note Logic", strap: { en: "private AI, document intelligence, and source-cited memory", fr: "IA privée, intelligence documentaire et mémoire sourcée", nb: "privat AI, dokumentintelligens og kildebasert hukommelse" }, summary: { en: "The machine room behind the paper: owned infrastructure, private corpora, multilingual controls, and AI that keeps its receipts.", fr: "La salle des machines derrière le papier : infrastructure propriétaire, corpus privés, contrôles multilingues et IA qui garde ses preuves.", nb: "Maskinrommet bak papiret: egen infrastruktur, private korpus, flerspråklige kontroller og AI som holder kvitteringene sine." }, - href: "https://ai.bluenotelogic.com/", - imageSrc: "/images/ai-lab/hero-lab.svg", - imageAlt: "Illustrated AI lab diagram for Blue Note Logic.", + href: "https://bluenotelogic.com", + imageSrc: "/images/ai-lab/bnl-home-card.jpg", + imageAlt: "Blue Note Logic — private AI server room, jazz-cellar atmosphere.", imageNote: "Private corpus / cited answers / EU hosting", external: true, }, @@ -120,8 +120,8 @@ export const ventureSignals: VentureSignal[] = [ strap: { en: "live-hosted games, music rounds, and true AI in the loop", fr: "jeux animés en direct, tours musicaux et vraie IA en boucle", nb: "live-vertede spill, musikkrunder og ekte AI i loopen" }, summary: { en: "A culture product with venue instincts: playlists, game craft, AI grading, and voice features edging toward the microphone.", fr: "Un produit culturel avec des instincts de lieu : playlists, conception de jeux, évaluation par IA et fonctionnalités vocales qui s'approchent du micro.", nb: "Et kulturprodukt med stedssans: spillelister, spilldesign, AI-evaluering og stemmefunksjoner som nærmer seg mikrofonen." }, 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.", + imageSrc: "/images/projects/trivia-venue.jpg", + imageAlt: "Warmly lit Scandinavian pub interior during quiz night.", imageNote: "Live rooms / music energy / quiz-night voltage", external: true, }, @@ -212,8 +212,8 @@ export const aiLabProgrammes: AILabProgramme[] = [ export const aiLabSources: SourceCredit[] = [ { label: "Gilligan Tech", url: "https://gilligan.tech/", note: "Used for the Gilligan Tech positioning, engagement models, and the relationship to the sister platform." }, - { label: "Blue Note Logic / CorpusAI", url: "https://ai.bluenotelogic.com/", note: "Used for the private AI, document intelligence, and source-cited corpus positioning." }, - { label: "Blue Note Logic service page", url: "https://bluenotelogic.com/service.php?slug=corporate-memory-extraction", note: "Used for the sovereign model, EU-hosted RAG, isolated telemetry, and related-service descriptions." }, + { label: "Blue Note Logic / CorpusAI", url: "https://bluenotelogic.com", note: "Used for the private AI, document intelligence, and source-cited corpus positioning." }, + { label: "Blue Note Logic service page", url: "https://bluenotelogic.com", note: "Used for the sovereign model, EU-hosted RAG, isolated telemetry, and related-service descriptions." }, { label: "Trivia & Tunes", url: "https://triviaandtunes.no/", note: "Used for the live-hosted trivia and music angle on the homepage culture desk." }, { label: "Do Better Norge", url: "https://dobetternorge.no/", note: "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." }, diff --git a/src/data/site.ts b/src/data/site.ts index 6279192..fa9375d 100644 --- a/src/data/site.ts +++ b/src/data/site.ts @@ -240,5 +240,7 @@ export const sectionCardCta: Record = { }; export function getSectionHref(section: LaunchSection) { - return section.slug === "education" ? "/education" : `/${section.slug}`; + if (section.slug === "education") return "/education"; + if (section.slug === "family") return "/family-lab"; + return `/${section.slug}`; } diff --git a/src/pages/[slug].astro b/src/pages/[slug].astro index d56cbf1..85569db 100644 --- a/src/pages/[slug].astro +++ b/src/pages/[slug].astro @@ -7,7 +7,7 @@ export function getStaticPaths() { return launchSections .filter( (section) => - !["education", "business", "ai-lab", "jazz-music", "norway", "cv", "projects"].includes(section.slug), + !["education", "business", "ai-lab", "jazz-music", "norway", "cv", "projects", "writing"].includes(section.slug), ) .map((section) => ({ params: { slug: section.slug }, @@ -20,7 +20,7 @@ const { section } = Astro.props; const relatedSections = launchSections.filter( (entry) => entry.slug !== section.slug && - !["education", "business", "ai-lab", "jazz-music", "norway", "cv", "projects"].includes(entry.slug), + !["education", "business", "ai-lab", "jazz-music", "norway", "cv", "projects", "writing"].includes(entry.slug), ); --- @@ -75,10 +75,6 @@ const relatedSections = launchSections.filter( dead blocks, more atmosphere, and copy that behaves as though it expects readers with a memory.

-

- Eventually this will be fed from PHP and SQL, with roles, member access, and AI-backed - translation controls. For now it is the visual and editorial north star. -

diff --git a/src/pages/ai-lab.astro b/src/pages/ai-lab.astro index 9622482..415933e 100644 --- a/src/pages/ai-lab.astro +++ b/src/pages/ai-lab.astro @@ -10,6 +10,7 @@ import { aiLabWorkflow, } from "../data/ai-lab"; import { ventureDesk } from "../data/profile"; +import LocaleCopy from "../components/LocaleCopy.astro"; import BaseLayout from "../layouts/BaseLayout.astro"; const [gilliganTech, blueNoteLogic] = ventureDesk; @@ -28,7 +29,7 @@ const [gilliganTech, blueNoteLogic] = ventureDesk;

{aiLabHero.lede}

- + Visit CorpusAI See API examples @@ -46,10 +47,10 @@ const [gilliganTech, blueNoteLogic] = ventureDesk;

{aiLabHero.note}

- {blueNoteLogic.name}: {blueNoteLogic.summary} + {blueNoteLogic.name}:

- {gilliganTech.name}: {gilliganTech.summary} + {gilliganTech.name}:

diff --git a/src/pages/cookies.astro b/src/pages/cookies.astro index 11e8175..01aef17 100644 --- a/src/pages/cookies.astro +++ b/src/pages/cookies.astro @@ -5,7 +5,7 @@ import BaseLayout from "../layouts/BaseLayout.astro";
@@ -31,9 +31,9 @@ import BaseLayout from "../layouts/BaseLayout.astro";

@@ -90,14 +90,7 @@ import BaseLayout from "../layouts/BaseLayout.astro"; }} />

-
-

-

-
+
diff --git a/src/pages/education.astro b/src/pages/education.astro index d06c125..1ed9eb4 100644 --- a/src/pages/education.astro +++ b/src/pages/education.astro @@ -25,18 +25,15 @@ const copy = { bullets: { en: [ "All faux signatures are clearly marked as invented.", - "All images are openly licensed or used as contextual stand-ins with attribution.", - "Exact campus replacements can be swapped in once you approve or supply them.", + "All images are openly licensed or used as contextual illustrations with attribution.", ], fr: [ "Toutes les fausses signatures sont clairement marquées comme inventées.", "Toutes les images sont sous licence libre ou utilisées comme illustrations contextuelles avec attribution.", - "Des photos exactes de campus peuvent être remplacées dès que vous les approuvez ou les fournissez.", ], nb: [ "Alle apokryfe signaturer er tydelig merket som oppfunnet.", - "Alle bilder er åpent lisensiert eller brukt som kontekstuelle plassholere med kreditering.", - "Eksakte campusbilder kan byttes ut når du godkjenner eller leverer dem.", + "Alle bilder er åpent lisensiert eller brukt som kontekstuelle illustrasjoner med kreditering.", ], }, }; diff --git a/src/pages/privacy.astro b/src/pages/privacy.astro index ef97e87..c62c6cc 100644 --- a/src/pages/privacy.astro +++ b/src/pages/privacy.astro @@ -5,7 +5,7 @@ import BaseLayout from "../layouts/BaseLayout.astro";
@@ -13,9 +13,9 @@ import BaseLayout from "../layouts/BaseLayout.astro";

@@ -31,9 +31,9 @@ import BaseLayout from "../layouts/BaseLayout.astro";

@@ -91,9 +91,9 @@ import BaseLayout from "../layouts/BaseLayout.astro";