+ Open section
+
diff --git a/src/components/SectionMark.astro b/src/components/SectionMark.astro
new file mode 100644
index 0000000..a517cff
--- /dev/null
+++ b/src/components/SectionMark.astro
@@ -0,0 +1,129 @@
+---
+interface Props {
+ slug: string;
+ className?: string;
+}
+
+const { slug, className = "" } = Astro.props;
+---
+
+
+
+
diff --git a/src/data/ai-lab.ts b/src/data/ai-lab.ts
new file mode 100644
index 0000000..b388e28
--- /dev/null
+++ b/src/data/ai-lab.ts
@@ -0,0 +1,188 @@
+export type AILabMetric = {
+ value: string;
+ label: string;
+ detail: string;
+};
+
+export type AILabExample = {
+ industry: string;
+ title: string;
+ prompt: string;
+ outcome: string;
+};
+
+export type AILabWorkflowStep = {
+ step: string;
+ title: string;
+ summary: string;
+};
+
+export type AILabApiExample = {
+ title: string;
+ endpoint: string;
+ request: string;
+ response: string;
+};
+
+export const aiLabHero = {
+ eyebrow: "Section 08 / AI Lab",
+ title: "Private corpora, cited answers, and European infrastructure dressed like a cover story.",
+ lede:
+ "The AI Lab is not a pitch deck about intelligence in the abstract. It is a source-backed product desk built around CorpusAI, Blue Note Logic services, and the practical mechanics of turning company knowledge into something searchable, citable, and ultimately ownable.",
+ note:
+ "All product details below are paraphrased from official Blue Note Logic and CorpusAI pages. The visuals are newly made for this site.",
+};
+
+export const aiLabMetrics: AILabMetric[] = [
+ {
+ value: "1,100+",
+ label: "Do Better Norge demo docs",
+ detail:
+ "The public demo corpus is described as a Norwegian legal intelligence stack with ECHR case law, Norwegian statutes, EU regulations, and more.",
+ },
+ {
+ value: "4,754",
+ label: "Family law corpus docs",
+ detail:
+ "The free Norwegian Family Law corpus is presented as 4,754 documents, including 773 court decisions plus statutes and ECHR material.",
+ },
+ {
+ value: "3",
+ label: "Dedicated EU servers",
+ detail:
+ "The official infrastructure page describes three dedicated cloud servers in Hetzner locations across Helsinki and Nuremberg.",
+ },
+ {
+ value: "72B",
+ label: "Flagship reasoning model",
+ detail:
+ "The platform lists a 72B tier for reasoning and legal analysis, alongside 32B, 27B, and 768d embedding layers.",
+ },
+];
+
+export const aiLabExamples: AILabExample[] = [
+ {
+ industry: "Law Firms & Advocacy",
+ title: "Legal answers with citations, not vibes",
+ prompt:
+ "What precedent exists for Article 8 violations in Norwegian child welfare cases?",
+ outcome:
+ "The official site frames this as a cited answer returned in seconds from dozens of relevant legal documents rather than hours of manual research.",
+ },
+ {
+ industry: "Construction & Trades",
+ title: "On-site code lookup",
+ prompt:
+ "What's the minimum fire separation between residential units in TEK17?",
+ outcome:
+ "Blue Note Logic uses this as a construction example: building codes, safety regulations, manuals, and project specs become searchable from the field.",
+ },
+ {
+ industry: "Healthcare & Clinics",
+ title: "Protocols without hallway bottlenecks",
+ prompt:
+ "What's our protocol for patients presenting with chest pain after hours?",
+ outcome:
+ "The healthcare example positions CorpusAI as a way to retrieve patient-facing and compliance guidance without interrupting senior staff every time.",
+ },
+ {
+ industry: "Accounting & Finance",
+ title: "Junior staff with better footing",
+ prompt:
+ "What's the depreciation schedule for commercial vehicles under Norwegian tax law?",
+ outcome:
+ "The finance example is framed as expert-level answers during tax season, grounded in Skatteloven references, templates, and internal procedures.",
+ },
+];
+
+export const aiLabWorkflow: AILabWorkflowStep[] = [
+ {
+ step: "01",
+ title: "Upload the document reality",
+ summary:
+ "PDFs, Word files, internal policies, contracts, manuals, FAQs, and web pages go in first. The product language is clear: drag, drop, done.",
+ },
+ {
+ step: "02",
+ title: "Index the knowledge, not just the files",
+ summary:
+ "Blue Note Logic describes ingesting, cleaning, chunking, embedding, and in some cases scraping documents so the corpus stays current rather than fossilized.",
+ },
+ {
+ step: "03",
+ title: "Ask plain-language questions",
+ summary:
+ "The answer layer is grounded in your documents and returns with citations, which is the core difference between a corpus system and generic AI theatre.",
+ },
+ {
+ step: "04",
+ title: "Integrate into the workflow",
+ summary:
+ "The official site explicitly mentions website widgets, Slack, internal portals, and API access as ways to make the system operational instead of ornamental.",
+ },
+];
+
+export const aiLabApiExamples: AILabApiExample[] = [
+ {
+ title: "Chat endpoint",
+ endpoint: "POST /api/v2/chat.php",
+ request: `{
+ "message": "What is our return policy?",
+ "use_corpus": true
+}`,
+ response: `{
+ "answer": "Your return policy states...",
+ "model": "qwen2.5:72b",
+ "sources": ["returns-policy.pdf", "faq.html"],
+ "response_time_ms": 1840
+}`,
+ },
+ {
+ title: "Search endpoint",
+ endpoint: "POST /api/v2/search.php",
+ request: `{
+ "query": "fire safety regulations",
+ "top_k": 5
+}`,
+ response: `{
+ "results": [
+ { "title": "TEK17 Chapter 11", "score": 0.94 },
+ { "title": "Fire Safety Manual", "score": 0.87 }
+ ]
+}`,
+ },
+];
+
+export const aiLabInfraNotes = [
+ "100 percent EU and EEA hosting",
+ "No third-party API calls in the official infrastructure pitch",
+ "WireGuard-encrypted mesh between nodes",
+ "Tenant isolation framed as cryptographic ownership of the corpus",
+];
+
+export const aiLabVisuals = {
+ hero: "/images/ai-lab/hero-lab.svg",
+ corpus: "/images/ai-lab/corpus-grid.svg",
+ api: "/images/ai-lab/api-flow.svg",
+};
+
+export const aiLabDetailedSources = [
+ {
+ label: "CorpusAI homepage",
+ href: "https://ai.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",
+ 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",
+ note:
+ "Used for the consulting and implementation layer around private document intelligence.",
+ },
+];
diff --git a/src/data/cv.ts b/src/data/cv.ts
new file mode 100644
index 0000000..c3542ce
--- /dev/null
+++ b/src/data/cv.ts
@@ -0,0 +1,186 @@
+export type CvMandate = {
+ years: string;
+ role: string;
+ org: string;
+ location: string;
+ summary: string;
+ detail: string;
+ sourceLabel: string;
+ sourceUrl: string;
+};
+
+export type CvRole = {
+ years: string;
+ role: string;
+ org: string;
+ location: string;
+ summary: string;
+ bullets: string[];
+};
+
+export type CvSkillTrack = {
+ label: string;
+ items: string[];
+};
+
+export const cvHero = {
+ eyebrow: "Section 11 / curriculum vitae",
+ title: "The formal record, but still edited like a cover story.",
+ lede:
+ "Finance, reinsurance, systems engineering, private AI, multilingual business study, and children's-rights advocacy belong on one page only if the through-line is legible: build the machinery, understand the money, keep the language human.",
+ note:
+ "This desk combines the standing employment history from the current public profile with the live venture descriptions now used across the new site.",
+};
+
+export const cvMandates: CvMandate[] = [
+ {
+ years: "2026 to present",
+ role: "Owner",
+ org: "Blue Note Logic Inc",
+ location: "Philadelphia to Paris, with EU infrastructure",
+ summary:
+ "Private AI platforms, document intelligence, and sovereign infrastructure designed to turn working knowledge into owned systems rather than rented dependency.",
+ detail:
+ "Current work centers on CorpusAI, document-grounded retrieval, corporate memory extraction, and EU-hosted deployments that keep data, models, and outcomes under client control.",
+ sourceLabel: "Blue Note Logic official sites",
+ sourceUrl: "https://ai.bluenotelogic.com/",
+ },
+ {
+ years: "2025 to present",
+ role: "CEO & Founder",
+ org: "Do Better Norge",
+ location: "Kongsberg, Norway",
+ summary:
+ "A civic and advocacy organization focused on parental rights, children's rights, due process, and the treatment of immigrant and international families in Norway.",
+ detail:
+ "The public work includes rights explainers, source-based legal materials, media-facing advocacy, and a broader reform effort aimed at family unity and procedural fairness.",
+ sourceLabel: "Do Better Norge",
+ sourceUrl: "https://dobetternorge.no/",
+ },
+ {
+ years: "2018 to present",
+ role: "Owner",
+ org: "Gilligan TECH ENK",
+ location: "Kongsberg, Norway",
+ summary:
+ "AI systems engineering for Nordic SMBs: architectural audits, system builds, and fractional CTO support anchored in practical ROI rather than consultant theatre.",
+ detail:
+ "The current Gilligan Tech positioning is explicit about sovereign European AI, dedicated infrastructure, and the mix of strategy, SQL, RAG, transcription, and deployment work needed to make AI useful in the real world.",
+ sourceLabel: "Gilligan Tech",
+ sourceUrl: "https://gilligan.tech/",
+ },
+];
+
+export const cvTimeline: CvRole[] = [
+ {
+ years: "2013 to 2016",
+ role: "Technical Consultant - Finance",
+ org: "Kvaerner",
+ location: "Oslo, Norway",
+ summary:
+ "Worked with corporate finance, HR, purchasing, cost estimating, MS SQL Server, Promineo, and QlikView to make large industrial bid and cost systems more useful to decision-makers.",
+ bullets: [
+ "Reported to the Senior Vice President of Corporate Finance.",
+ "Helped build the Cost Estimating Project (CEM), a major change in how tenders were issued for offshore platforms and jackets.",
+ "Linked finance logic, operational data, and what-if analysis across multiple departments.",
+ ],
+ },
+ {
+ years: "2008 to 2011",
+ role: "Owner",
+ org: "Chloe & Colin",
+ location: "United States",
+ summary:
+ "Operated a general IT consultancy serving small businesses and organizations across practical technology needs before the current AI era.",
+ bullets: [
+ "Worked as a hands-on generalist across infrastructure, applications, websites, databases, and operational problem-solving.",
+ "Helped clients improve reliability, efficiency, and day-to-day use of their systems without unnecessary complexity.",
+ "A broad-spectrum owner-operator chapter that fills the gap between larger corporate roles and later venture work.",
+ ],
+ },
+ {
+ years: "2006 to 2007",
+ role: "Assistant Vice President",
+ org: "Ariel Re",
+ location: "Hamilton, Bermuda",
+ summary:
+ "Built the IT support structure for AIR and RMS catastrophe risk modeling and ran stochastic analysis on large insured property portfolios.",
+ bullets: [
+ "Worked at the junction of underwriters, analysts, and internal software teams.",
+ "Supported catastrophe modeling across hurricanes, earthquakes, storms, and other modeled events.",
+ ],
+ },
+ {
+ years: "2001 to 2006",
+ role: "Assistant Secretary",
+ org: "Folksamerica / White Mountains Re",
+ location: "New York City, New York",
+ summary:
+ "Analyzed property treaty reinsurance risk while helping design the infrastructure around large-scale actuarial and underwriting work.",
+ bullets: [
+ "Worked closely with senior management, underwriters, and actuarial staff on pricing and risk analysis.",
+ "Helped shape a multi-tiered risk management environment with roughly 30 data-analysis engines and 4 MS SQL database servers.",
+ "Supported both Windows client and IIS-based global web interfaces.",
+ ],
+ },
+ {
+ years: "1998 to 1999",
+ role: "Intern for CFO",
+ org: "Zurich France / Zurich Financial Services",
+ location: "Paris, France",
+ summary:
+ "Graduate internship in the CFO's orbit during the French Franc to Euro transition and the Year 2000 remediation cycle.",
+ bullets: [
+ "Worked on specialist project teams related to Euro conversion and Y2K readiness.",
+ "Built the \"Euro 1999\" client and partner sub-site in Lotus Notes.",
+ ],
+ },
+];
+
+export const cvSkillTracks: CvSkillTrack[] = [
+ {
+ label: "Operating languages",
+ items: ["English", "French", "Norwegian", "SQL", "the language of finance"],
+ },
+ {
+ label: "Technical stack",
+ items: ["MS SQL / MariaDB / MySQL", "PHP", "Python", "JavaScript / React / Astro", "RAG systems"],
+ },
+ {
+ label: "Working domains",
+ items: ["Global finance", "Reinsurance", "Private AI", "Document intelligence", "Family-rights advocacy"],
+ },
+];
+
+export const cvHighlights = [
+ "Dual Norwegian-American profile shaped across the United States and Europe.",
+ "Business education in Philadelphia, Brussels, Columbia, Paris, and Krakow.",
+ "Current work sits at the overlap of AI systems, civic advocacy, and cultural publishing.",
+];
+
+export const cvSourceNotes = [
+ {
+ label: "Current public profile API",
+ url: "http://davegilligan.local/api/content.php?lang=en",
+ note:
+ "Used for the standing public experience history, headline language, education chronology, and contact references from the current local site.",
+ },
+ {
+ label: "Gilligan Tech",
+ url: "https://gilligan.tech/",
+ note:
+ "Used for the current Gilligan TECH ENK positioning, Kongsberg-based identity, and the AI Dispatch / Systems Forge / Systems Command model.",
+ },
+ {
+ label: "Blue Note Logic / CorpusAI",
+ url: "https://ai.bluenotelogic.com/",
+ note:
+ "Used for the current Blue Note Logic mandate around private AI, document intelligence, and source-cited retrieval.",
+ },
+ {
+ label: "Do Better Norge",
+ url: "https://dobetternorge.no/",
+ note:
+ "Used for the public advocacy scope around parental rights, children, family unity, and due process in Norway.",
+ },
+];
diff --git a/src/data/education.ts b/src/data/education.ts
new file mode 100644
index 0000000..9657872
--- /dev/null
+++ b/src/data/education.ts
@@ -0,0 +1,187 @@
+export type DossierImage = {
+ src: string;
+ alt: string;
+ credit: string;
+ license: string;
+ sourceUrl: string;
+ sourceLabel: string;
+ note?: string;
+};
+
+export type SchoolDossier = {
+ slug: string;
+ school: string;
+ years: string;
+ program: string;
+ city: string;
+ mode: "Boris" | "Vernon";
+ logo: string;
+ dek: string;
+ quote: string;
+ signature: string;
+ signatureNote: string;
+ paragraphs: string[];
+ images: DossierImage[];
+};
+
+export const schoolDossiers: SchoolDossier[] = [
+ {
+ slug: "villanova",
+ school: "Villanova University",
+ years: "1991 to 1995",
+ program: "BSc, Business Administration",
+ city: "Philadelphia, Pennsylvania",
+ mode: "Vernon",
+ logo: "/images/schools/villanova.svg",
+ dek:
+ "The Main Line chapter, where ambition learned to wear a jacket and talk like it had read both the markets page and the record sleeve.",
+ quote:
+ "A campus is just a neighborhood that has agreed to dream in columns, ledgers, and late-night weather.",
+ signature: "Vernon Sullivan, apocryphally",
+ signatureNote: "Invented line for this page, not an actual Sullivan quote.",
+ paragraphs: [
+ "Villanova enters the dossier like a first brass hit on an old record: clean, confident, a little ceremonial, and already suspicious of small ambitions. Finance and communication were not enemies here. They were two styles of timing. One counted money and one counted silence, and the trick was to learn both without becoming boring.",
+ "In this retelling the campus becomes a disciplined American overture: limestone, routines, Catholic gravitas, and the pressure to convert raw appetite into usable form. The later international chapters make more sense because this one exists. It is the room where method first learned to keep company with voice.",
+ ],
+ images: [
+ {
+ src: "https://commons.wikimedia.org/wiki/Special:Redirect/file/Villanova_University_A_panoramic_shot.jpg",
+ alt: "Panoramic view of Villanova University.",
+ credit: "Alertjean at English Wikipedia",
+ license: "CC BY 3.0",
+ sourceUrl:
+ "https://commons.wikimedia.org/wiki/File:Villanova_University_A_panoramic_shot.jpg",
+ sourceLabel: "Wikimedia Commons",
+ },
+ ],
+ },
+ {
+ slug: "escp-darla-moore",
+ school: "ESCP and Darla Moore",
+ years: "1997 to 1999",
+ program: "International MBA and Master of International Business",
+ city: "Paris and Columbia, South Carolina",
+ mode: "Boris",
+ logo: "/images/schools/escp-moore.svg",
+ dek:
+ "A transatlantic double feature: French polish on one side, Southern scale and execution on the other.",
+ quote:
+ "Business schools should come with ashtrays, train timetables, and at least one language that seduces you into bad strategic decisions.",
+ signature: "Boris Vian, counterfeit edition",
+ signatureNote: "Invented line for this page, written in homage and clearly not authentic.",
+ paragraphs: [
+ "ESCP arrives in this magazine like a Paris night with better posture. It teaches that commerce can still carry perfume, irony, and architecture. Negotiation here is not merely a spreadsheet event. It is a social instrument, half performance, half geometry, and occasionally a duel conducted with excellent shoes.",
+ "Darla Moore changes the lighting. Columbia brings width, confidence, and a deeply American belief that institutions should be built large enough to advertise their seriousness from the street. Together the two schools form a useful contradiction: elegance and force, cafe intelligence and boardroom steel. The combination feels less like a degree and more like an arranged marriage that somehow became a working band.",
+ ],
+ images: [
+ {
+ src: "https://commons.wikimedia.org/wiki/Special:Redirect/file/Escp-Paris.jpg",
+ alt: "ESCP Paris campus facade.",
+ credit: "R-Hudit",
+ license: "CC BY-SA 3.0",
+ sourceUrl: "https://commons.wikimedia.org/wiki/File:Escp-Paris.jpg",
+ sourceLabel: "Wikimedia Commons",
+ },
+ {
+ src: "https://commons.wikimedia.org/wiki/Special:Redirect/file/Darla_Moore_School_of_Business%2C_University_of_South_Carolina%2C_Greene_Street_and_Assembly_Street%2C_Columbia%2C_SC_-_53398407679.jpg",
+ alt: "Darla Moore School of Business in Columbia, South Carolina.",
+ credit: "w_lemay",
+ license: "CC BY-SA 2.0",
+ sourceUrl:
+ "https://commons.wikimedia.org/wiki/File:Darla_Moore_School_of_Business,_University_of_South_Carolina,_Greene_Street_and_Assembly_Street,_Columbia,_SC_-_53398407679.jpg",
+ sourceLabel: "Wikimedia Commons",
+ },
+ ],
+ },
+ {
+ slug: "jagiellonian",
+ school: "Jagiellonian University",
+ years: "2010 to 2011",
+ program: "European Union Studies",
+ city: "Krakow, Poland",
+ mode: "Boris",
+ logo: "/images/schools/jagiellonian.svg",
+ dek:
+ "Europe, history, bureaucracy, and old stone gathered into a setting too grand to permit shallow thought.",
+ quote:
+ "Every old university knows the same trick: it lets the centuries do half the lecturing while the students pretend they are only studying policy.",
+ signature: "Boris Vian, forged in the margins",
+ signatureNote: "Invented line for this page, not a historical Vian quotation.",
+ paragraphs: [
+ "Krakow gives the mind a better wardrobe. Jagiellonian does the rest. It stages Europe not as a slogan but as a layered argument, equal parts cathedral, treaty, and administrative comedy. To study the Union in such a place is to feel that regulation, memory, empire, and renovation are all sitting in the same seminar and refusing to leave quietly.",
+ "In the Boris register the school becomes a republic of courtyards and paper. Every corridor hints that intellect can still afford ceremony. The point is not nostalgia. The point is scale. The institution keeps reminding you that ideas were already old before they acquired acronyms.",
+ ],
+ images: [
+ {
+ src: "https://commons.wikimedia.org/wiki/Special:Redirect/file/Jagiellonian_University_Collegium_Novum%2C_1882_designed_by_Feliks_Ksi%C4%99%C5%BCarski%2C_24_Go%C5%82%C4%99bia_street%2C_Old_Town%2C_Krak%C3%B3w%2C_Poland_%284%29.jpg",
+ alt: "Collegium Novum at Jagiellonian University in Krakow.",
+ credit: "Igor123121",
+ license: "CC BY 4.0",
+ sourceUrl:
+ "https://commons.wikimedia.org/wiki/File:Jagiellonian_University_Collegium_Novum,_1882_designed_by_Feliks_Ksi%C4%99%C5%BCarski,_24_Go%C5%82%C4%99bia_street,_Old_Town,_Krak%C3%B3w,_Poland_(4).jpg",
+ sourceLabel: "Wikimedia Commons",
+ },
+ ],
+ },
+ {
+ slug: "european-university",
+ school: "European University and Institut Cooreman",
+ years: "1996",
+ program: "MBA and Master of International Trade",
+ city: "Brussels, Belgium",
+ mode: "Boris",
+ logo: "/images/schools/european-university.svg",
+ dek:
+ "Brussels as classroom: trade, multilingual weather, and the kind of ambition that smells faintly of rail stations and treaties.",
+ quote:
+ "Brussels never asks whether you speak enough languages. It merely changes languages until your confidence becomes educational.",
+ signature: "Boris Vian, nightclub forgery",
+ signatureNote: "Invented line for this page, offered with a wink and clear labeling.",
+ paragraphs: [
+ "This Brussels chapter belongs to trade in the old continental sense: movement, tariffs, polished shoes, coffee taken standing up, and the suspicion that every serious conversation is happening one table over in another language. European University and Institut Cooreman sit here as training grounds for mobility, for thinking across borders before digital platforms made the phrase sound cheap.",
+ "The city itself does part of the teaching. Brussels is half institution, half weather system. It teaches that commerce is inseparable from translation, and that adulthood in Europe often begins when you stop expecting one vocabulary to be enough.",
+ ],
+ images: [
+ {
+ src: "https://commons.wikimedia.org/wiki/Special:Redirect/file/Hogeschool-Universiteit_Brussel_%284257785885%29.jpg",
+ alt: "University building in Brussels used here as a Brussels-era academic context image.",
+ credit: "William Murphy",
+ license: "CC BY-SA 2.0",
+ sourceUrl:
+ "https://commons.wikimedia.org/wiki/File:Hogeschool-Universiteit_Brussel_(4257785885).jpg",
+ sourceLabel: "Wikimedia Commons",
+ note: "Context image for the Brussels period while we source an exact Institut Cooreman photograph for your approval.",
+ },
+ ],
+ },
+ {
+ slug: "usn",
+ school: "University of South-Eastern Norway",
+ years: "2021 to present",
+ program: "MSc, Innovation and Technology Management",
+ city: "Kongsberg, Norway",
+ mode: "Vernon",
+ logo: "/images/schools/usn.svg",
+ dek:
+ "A late chapter with sharper tools: systems, management, and the mature pleasure of returning to theory with real scars.",
+ quote:
+ "The elegant thing about going back to school later is that the textbooks no longer frighten you. They negotiate.",
+ signature: "Vernon Sullivan, counterfeit field note",
+ signatureNote: "Invented line for this page, not a real Sullivan remark.",
+ paragraphs: [
+ "USN reads differently because it comes after life has already happened. By the time Kongsberg enters the score, education is no longer a prelude. It is calibration. Innovation and technology management are not abstractions here. They arrive carrying project baggage, family history, operational memory, and all the other facts that younger theory likes to ignore.",
+ "In the Vernon key this becomes the tough, grown-up school chapter: less campus myth, more hard-earned synthesis. The setting matters too. Kongsberg offers a Norwegian blend of industry, civility, and weather that keeps every grand idea honest. Study here feels less like self-invention and more like sharpening an instrument you already use in public.",
+ ],
+ images: [
+ {
+ src: "https://commons.wikimedia.org/wiki/Special:Redirect/file/Kongsberg_IMG_0357.JPG",
+ alt: "Kongsberg riverfront used as a context image for the USN chapter.",
+ credit: "Bjoertvedt",
+ license: "CC BY-SA 4.0",
+ sourceUrl: "https://commons.wikimedia.org/wiki/File:Kongsberg_IMG_0357.JPG",
+ sourceLabel: "Wikimedia Commons",
+ note: "Town image used as a Kongsberg-era stand-in until you approve a specific USN campus photo.",
+ },
+ ],
+ },
+];
diff --git a/src/data/jazz.ts b/src/data/jazz.ts
new file mode 100644
index 0000000..ac1cece
--- /dev/null
+++ b/src/data/jazz.ts
@@ -0,0 +1,159 @@
+export type JazzImage = {
+ src: string;
+ alt: string;
+ credit: string;
+ license: string;
+ sourceUrl: string;
+ sourceLabel: string;
+ note?: string;
+};
+
+export type JazzVenue = {
+ name: string;
+ href: string;
+ summary: string;
+};
+
+export const jazzHero = {
+ eyebrow: "Section 06 / jazz and music",
+ title: "Pataphysics by the silver river, with one ear still turned toward the Caveau.",
+ lede:
+ "The jazz desk now has a proper field note: half Latin Quarter memory, half Kongsberg route map, with a little smoke from rue Saint-Jacques still caught in the coat lining.",
+ note:
+ "Built around official Kongsberg Jazz Festival sources for 2026, with venue links and openly licensed imagery where possible.",
+};
+
+export const jazzArticle = {
+ title: "A Pataphysical Field Guide to Kongsberg Jazz 2026",
+ publishedAt: "2026-04-06 08:15:00",
+ excerpt:
+ "A personal route from the Caveau de la Huchette to Kongsberg Jazzfestival 2026, with notes on Samara Joy, Snarky Puppy, Mezzoforte, Kurt Rosenwinkel, Jazzbox free shows, and the venues that keep the town musically honest.",
+};
+
+export const jazzImages: JazzImage[] = [
+ {
+ src: "https://commons.wikimedia.org/wiki/Special:Redirect/file/Hans_Cato_Kristiansen_Kongsberg_Jazzfestival_2018_%28223526%29.jpg",
+ alt: "Concert photograph from Christians Kjeller during Kongsberg Jazzfestival 2018.",
+ credit: "Tore Saetre",
+ license: "CC BY-SA 4.0",
+ sourceUrl:
+ "https://commons.wikimedia.org/wiki/File:Hans_Cato_Kristiansen_Kongsberg_Jazzfestival_2018_(223526).jpg",
+ sourceLabel: "Wikimedia Commons",
+ note:
+ "Used here as an atmospheric Christians Kjeller / Kongsberg Jazz image rather than a 2026 festival still.",
+ },
+ {
+ src: "https://commons.wikimedia.org/wiki/Special:Redirect/file/Le_Caveau_de_la_Huchette.jpg",
+ alt: "Exterior view of Le Caveau de la Huchette in Paris.",
+ credit: "Richardprins",
+ license: "CC BY-SA 3.0",
+ sourceUrl: "https://commons.wikimedia.org/wiki/File:Le_Caveau_de_la_Huchette.jpg",
+ sourceLabel: "Wikimedia Commons",
+ },
+];
+
+export const jazzPicks = [
+ {
+ day: "Wednesday 1 July 2026",
+ artist: "Samara Joy",
+ detail: "Opening concert at Kongsberg Musikkteater, followed later that night by Ghosted at Energimolla.",
+ href: "https://kongsbergjazz.no/program/",
+ },
+ {
+ day: "Thursday 2 July 2026",
+ artist: "Bobo Stenson Trio / Snarky Puppy / Mezzoforte",
+ detail: "A day that moves from piano intelligence to large-room propulsion and then into late-night club lift at Christians Kjeller.",
+ href: "https://kongsbergjazz.no/program/",
+ },
+ {
+ day: "Friday 3 July 2026",
+ artist: "Wesseltoft-Andersen-Nilssen Trio / Wibutee / Matoma",
+ detail: "The sort of Friday where one can begin in church-space seriousness and end outdoors at Gamle Norge with the town in full chorus.",
+ href: "https://kongsbergjazz.no/program/",
+ },
+ {
+ day: "Saturday 4 July 2026",
+ artist: "Silya & Kongsberg Storband / Kurt Rosenwinkel / Nils Petter Molvaer / Silje Nergaard",
+ detail: "The last day plays like a designed crescendo: big-band daylight, guitar dusk, electric weather, then midnight vocals.",
+ href: "https://kongsbergjazz.no/program/",
+ },
+];
+
+export const jazzFreeNotes = [
+ {
+ title: "Jazzbox / Jazzboksen",
+ summary:
+ "Free concerts every day during the festival, with students, semi-professionals and amateurs onstage, no reservation required, and a proper social center in the middle of town.",
+ href: "https://kongsbergjazz.no/en/faq/jazzboksen/",
+ },
+ {
+ title: "Jazzmine",
+ summary:
+ "A free Friday session in the Jazzbox area that points toward the new Magasinet / Fellesbrukskrysset idea as a future festival midpoint.",
+ href: "https://kongsbergjazz.no/events/jazzmine/",
+ },
+];
+
+export const jazzVenues: JazzVenue[] = [
+ {
+ name: "Privat Bar",
+ href: "https://www.privatbar.no/",
+ summary:
+ "Privat Bar describes itself as scene, sport, cocktail bar, gastropub and courtyard venue, a place built for after-hours momentum.",
+ },
+ {
+ name: "Gamle Norge / Folkefestscenen",
+ href: "https://kongsbergjazz.no/spillesteder/folkefestscenen-gamle-norge/",
+ summary:
+ "The festival calls it an outdoor stage between Gamle Norge and Trattoria Madre, designed for familiar names, sing-along lift and party atmosphere.",
+ },
+ {
+ name: "Opsahlgarden / Christians Kjeller",
+ href: "https://kongsbergjazz.no/hei-christian-kjeller/",
+ summary:
+ "Christian's Kjeller sits inside Opsahlgarden on Vestsida: restaurant upstairs, gastro/music pub in the basement, brewery in the mix, and a long memory for late sets.",
+ },
+];
+
+export const jazzSources = [
+ {
+ label: "Kongsberg Jazzfestival programme 2026",
+ href: "https://kongsbergjazz.no/program/",
+ },
+ {
+ label: "Kongsberg Jazzfestival / Folkefestscenen Gamle Norge",
+ href: "https://kongsbergjazz.no/spillesteder/folkefestscenen-gamle-norge/",
+ },
+ {
+ label: "Kongsberg Jazzfestival / Hei Privat Bar",
+ href: "https://kongsbergjazz.no/hei-privat-bar/",
+ },
+ {
+ label: "Kongsberg Jazzfestival / Hei Christian Kjeller",
+ href: "https://kongsbergjazz.no/hei-christian-kjeller/",
+ },
+ {
+ label: "Kongsberg Jazzfestival / Jazzbox",
+ href: "https://kongsbergjazz.no/en/faq/jazzboksen/",
+ },
+ {
+ label: "Kongsberg Jazzfestival / Jazzmine",
+ href: "https://kongsbergjazz.no/events/jazzmine/",
+ },
+ {
+ label: "Caveau de la Huchette",
+ href: "https://www.caveaudelahuchette.fr/",
+ },
+];
+
+export const jazzBody = [
+ "There are people who approach a jazz festival with a spreadsheet, and there are people who approach it the way one enters a cellar in Paris after midnight: not to control the night, but to meet it properly. I belong to the second camp, even when the first camp pays the invoices. So yes, Kongsberg Jazzfestival 2026 deserves practical planning. But it also deserves a little pataphysics: the science of exceptions, the doctrine of beloved detours, the right to follow one brass phrase into another street and call that method.",
+ "My own measuring stick is still French and subterranean. For a time I lived at 23 rue Saint-Jacques, with the Caveau de la Huchette close enough to count as neighborhood weather. The Caveau at 5 rue de la Huchette still presents itself as the temple of swing, open all year, every night, a place where Paris and jazz agree to keep dancing without asking permission. Once you have learned to think of a city through such a room, every later festival is judged by whether it contains at least one staircase into a better mood.",
+ "Kongsberg, fortunately, understands this. The official 2026 programme already reads like a civilised argument between polish and danger. On Wednesday 1 July, Samara Joy opens at Kongsberg Musikkteater, and Ghosted follows at Energimolla. Thursday 2 July offers Bobo Stenson Trio, ganavya, Snarky Puppy and late-night Mezzoforte at Christians Kjeller. Friday 3 July runs from Wesseltoft-Andersen-Nilssen Trio and Wibutee to the larger public-weather of Rotlaus and Matoma at Gamle Norge. Saturday 4 July closes with Silya & Kongsberg Storband, Kurt Rosenwinkel, Nils Petter Molvaer and a midnight Silje Nergaard set. That is not a thin programme. That is a town temporarily edited by rhythm.",
+ "If one prefers the smaller rooms, the geography becomes even more interesting. The festival's JAZZpass explicitly names Privat Bar among the intimate indoor venues, while also noting that Gamle Norge and Christians Kjeller sit outside that pass logic, which is exactly right: some places belong to the tidy circuit, others belong to appetite. Privat Bar, in its own voice, is cocktail bar, scene, sports bar, nightclub and courtyard called Oasen; the festival's own venue portrait describes it as a place that thrives on quality, service, atmosphere and folkefest. In other words: not merely a bar, but a social accelerant.",
+ "Gamle Norge is the outdoor answer. The festival describes Folkefestscenen / Gamle Norge as the stage for familiar names, sing-along force and festive excess, placed between Gamle Norge and Trattoria Madre. That tells you almost everything you need to know. One does not go there to prove seriousness. One goes there because every serious festival needs one zone where the street becomes chorus. Espen Lind, Rotlaus, Matoma, No. 4 and Stavangerkameratene give that stage its 2026 face, and none of those bookings pretend to be austere. Good. Festivals need breadth if they are to feel like towns rather than coteries.",
+ "Then there is Christians Kjeller, which matters to me more than the poster typography. The festival's portrait of the venue places it inside Opsahlgarden on Vestsida, one of the town's older preserved houses, restored and reopened as restaurant in 2001. The house carries restaurant, brewery and basement music-pub energy all at once. That combination is morally sound. If Gamle Norge is the public square in summer clothes, Christians Kjeller is the lower room where style loosens its tie and means it. Mezzoforte on Thursday night, Poesioasen with Ine Hoem and Edvard Hoem on Saturday afternoon, and Pumpegris later that same night: this is exactly the kind of sequencing one wants from a compact jazz city.",
+ "And then there is the democratic correction: the free programme. Jazzbox / Jazzboksen is still one of the best arguments for the whole festival, because it gives students, semi-professionals and amateurs a real audience rather than an educational corner. The official festival note is clear: free concerts every day, no reservation, just turn up, with room to lounge, drift, listen, dance and discover tomorrow's names before they become brochure adjectives. Jazzmine, listed as a free Friday happening, extends that logic into the new Magasinet / Fellesbrukskrysset center. Every good festival needs paid monuments; every great one also needs zones where curiosity remains inexpensive.",
+ "So the proper route, at least in my private cosmology, is not to choose between the polished and the unruly. It is to move among them. Begin with shape and listening. Allow Samara Joy or Bobo Stenson to set the grammar. Slip into Privat Bar for the social murmur. Let Gamle Norge provide the public proof that joy also scales. End in Christians Kjeller when the evening starts to remember its own pulse. And if the day needs a reset, take the free path through Jazzbox and Jazzmine, where the future is usually less expensive and often more alive.",
+ "Boris Vian would probably recommend a trumpet, a bad idea and a better jacket. Vernon Sullivan would tell you to stay out too late and call it field research. I will settle for a calmer prescription: Kongsberg Jazzfestival, 1 to 4 July 2026, looks like the kind of week that lets a town become multiple versions of itself at once. That is close enough to pataphysics for me, and certainly close enough to jazz.",
+];
diff --git a/src/data/norway.ts b/src/data/norway.ts
new file mode 100644
index 0000000..30e88ef
--- /dev/null
+++ b/src/data/norway.ts
@@ -0,0 +1,219 @@
+export type NorwayImage = {
+ src: string;
+ alt: string;
+ credit: string;
+ sourceUrl: string;
+ sourceLabel: string;
+ note?: string;
+};
+
+export type NorwayCase = {
+ title: string;
+ date: string;
+ href: string;
+ sourceLabel: string;
+ summary: string;
+ significance: string;
+};
+
+export type NorwayOrganization = {
+ name: string;
+ href: string;
+ strap: string;
+ summary: string;
+};
+
+export const norwayFeature = {
+ eyebrow: "Section 09 / Norway",
+ title: "Family life, fathers, immigration, and the long Norwegian argument over Article 8.",
+ lede:
+ "This month’s Norway feature sits where advocacy, rights language, and lived family conflict meet: Do Better Norge’s campaign line, fathers’ rights groups, immigrant-family anxiety, and the official Strasbourg record against Norway.",
+ note:
+ "The argument here is deliberately two-track: advocacy claims are identified as advocacy, while the legal spine is anchored to official European Court of Human Rights material.",
+};
+
+export const norwayArticle = {
+ title: "April 2026: Norway's Family-Life Problem Still Has Faces, Fathers, and a Court Record",
+ publishedAt: "2026-04-06 10:20:00",
+ excerpt:
+ "A Norway dispatch about Do Better Norge, fathers' rights, immigrant families, and the official Article 8 case law showing why the argument over family life has not gone away.",
+};
+
+export const norwayImages: NorwayImage[] = [
+ {
+ src: "https://dobetternorge.no/images/humanRightsCollision.jpeg",
+ alt: "Do Better Norge infographic about ECHR judgments and visitation in Norwegian child welfare.",
+ credit: "Do Better Norge",
+ sourceUrl: "https://dobetternorge.no/images/humanRightsCollision.jpeg",
+ sourceLabel: "Do Better Norge",
+ note:
+ "Used to frame the article's central tension between legal standards, contact rights, and what advocacy groups say happens in practice.",
+ },
+ {
+ src: "https://dobetternorge.no/images/echrIntervention.jpeg",
+ alt: "Do Better Norge infographic about ECHR intervention and Norway's child-welfare case pattern.",
+ credit: "Do Better Norge",
+ sourceUrl: "https://dobetternorge.no/images/echrIntervention.jpeg",
+ sourceLabel: "Do Better Norge",
+ note:
+ "Used as a visual bridge between Strasbourg case law and Norway's domestic reunification debate.",
+ },
+ {
+ src: "https://dobetternorge.no/uploads/infographics/norwayLaw-vs-ECHR.png",
+ alt: "Infographic comparing Norwegian law and ECHR Article 8 family reunification principles.",
+ credit: "Do Better Norge",
+ sourceUrl: "https://dobetternorge.no/uploads/infographics/norwayLaw-vs-ECHR.png",
+ sourceLabel: "Do Better Norge",
+ note:
+ "Useful for the article's law-versus-practice section because it visualizes the reunification versus stability conflict directly.",
+ },
+ {
+ src: "https://dobetternorge.no/images/theBlackBox.jpeg",
+ alt: "Do Better Norge infographic about evidence, bias, and cultural blindness in Norwegian child welfare.",
+ credit: "Do Better Norge",
+ sourceUrl: "https://dobetternorge.no/images/theBlackBox.jpeg",
+ sourceLabel: "Do Better Norge",
+ note:
+ "Selected for the immigrant-family section because it explicitly depicts cultural blindness and interpretive bias as advocacy concerns.",
+ },
+];
+
+export const norwayCases: NorwayCase[] = [
+ {
+ title: "Strand Lobben and Others v. Norway",
+ date: "10 September 2019",
+ href: "https://www.echr.coe.int/w/strand-lobben-and-others-v.-norway-no.-37283/13-",
+ sourceLabel: "ECHR case page",
+ summary:
+ "Grand Chamber case concerning forced adoption and the severing of legal ties between mother and child.",
+ significance:
+ "The core signal was that reunification must remain the ultimate aim where possible and that permanently cutting family ties demands exceptional justification.",
+ },
+ {
+ title: "K.O. and V.M. v. Norway",
+ date: "19 November 2019",
+ href: "https://hudoc.echr.coe.int/app/conversion/pdf?filename=Judgment+K.O.+and+V.M.+v.+Norway+-+placement+in+foster+care+and+contact+rights.pdf&id=003-6566150-8690597&library=ECHR",
+ sourceLabel: "ECHR press release",
+ summary:
+ "The Court found no Article 8 violation in the placement itself, but did find a violation in the parents' contact regime.",
+ significance:
+ "That split matters: the recurring Norway problem is often not only removal, but low-contact decisions that let separation harden into estrangement.",
+ },
+ {
+ title: "Abdi Ibrahim v. Norway",
+ date: "10 December 2021",
+ href: "https://www.echr.coe.int/w/abdi-ibrahim-v.-norway-no.-15379/16-",
+ sourceLabel: "ECHR case page",
+ summary:
+ "Grand Chamber case about adoption by a foster family against the wishes of a Somali Muslim mother.",
+ significance:
+ "The Court held that Norway had not given sufficient weight to the family's cultural and religious background, making this one of the clearest immigrant-family Article 8 judgments.",
+ },
+ {
+ title: "A.L. and Others v. Norway",
+ date: "20 January 2022",
+ href: "https://hudoc.echr.coe.int/app/conversion/pdf/?filename=Two+judgments+concerning+care+orders+for+children+in+Norway.pdf&id=003-7235635-9843609&library=ECHR",
+ sourceLabel: "ECHR press release",
+ summary:
+ "Case involving Norwegian and Slovak family members and the handling of a care order plus restricted parental contact.",
+ significance:
+ "The Court found that the child had effectively been set on a foster-care trajectory without proper consideration of alternatives or genuine reconciliation work.",
+ },
+ {
+ title: "Country profile: Norway parental-rights line",
+ date: "Updated July 2024",
+ href: "https://www.echr.coe.int/documents/d/echr/CP_Norway_ENG",
+ sourceLabel: "ECHR country profile",
+ summary:
+ "The Court's official Norway profile groups together child-welfare, parental-rights, and immigration-family-life cases.",
+ significance:
+ "It records that on 14 September 2023 the Court dealt with 21 Norway public-care applications, declaring 12 inadmissible and finding Article 8 violations in nine others.",
+ },
+];
+
+export const norwayOrganizations: NorwayOrganization[] = [
+ {
+ name: "Do Better Norge",
+ href: "https://dobetternorge.no/",
+ strap: "rights education, reform pressure, and family-life advocacy",
+ summary:
+ "The site presents itself as a practical route for families navigating custody, contact, child-welfare process, and Article 8 questions, with guides, infographics, videos, and reform arguments.",
+ },
+ {
+ name: "MannsForum",
+ href: "https://mannsforum.no/kontaktinformasjon-mannsforum/",
+ strap: "boys, fathers, and men's equality voice",
+ summary:
+ "MannsForum describes itself as Norway's largest membership-based equality organization focused on boys, fathers, and men, which makes it a natural bridge into the fathers' rights side of the debate.",
+ },
+ {
+ name: "Foreningen 2 Foreldre",
+ href: "https://www.f2f.no/",
+ strap: "children with two homes, shared-parenting culture",
+ summary:
+ "F2F's own framing is concise and revealing: safe family conditions for children with two homes, which is almost a thesis statement for the contact-and-continuity side of the article.",
+ },
+];
+
+export const norwaySources = [
+ {
+ label: "ECHR country profile for Norway",
+ href: "https://www.echr.coe.int/documents/d/echr/CP_Norway_ENG",
+ note:
+ "Used for the official summary of Norway parental-rights and immigration-family-life judgments, including the 2023 line on 21 public-care applications.",
+ },
+ {
+ label: "ECHR case page: Strand Lobben and Others v. Norway",
+ href: "https://www.echr.coe.int/w/strand-lobben-and-others-v.-norway-no.-37283/13-",
+ note:
+ "Used for the Grand Chamber adoption and reunification reference point that reshaped the Norway debate.",
+ },
+ {
+ label: "ECHR case page: Abdi Ibrahim v. Norway",
+ href: "https://www.echr.coe.int/w/abdi-ibrahim-v.-norway-no.-15379/16-",
+ note:
+ "Used for the cultural and religious identity dimension in foster-care and adoption decisions.",
+ },
+ {
+ label: "ECHR press release: K.O. and V.M. v. Norway",
+ href: "https://hudoc.echr.coe.int/app/conversion/pdf?filename=Judgment+K.O.+and+V.M.+v.+Norway+-+placement+in+foster+care+and+contact+rights.pdf&id=003-6566150-8690597&library=ECHR",
+ note:
+ "Used for the contact-rights holding and the distinction between the placement decision and the visitation regime.",
+ },
+ {
+ label: "ECHR press release: A.L. and Others v. Norway / E.M. and Others v. Norway",
+ href: "https://hudoc.echr.coe.int/app/conversion/pdf/?filename=Two+judgments+concerning+care+orders+for+children+in+Norway.pdf&id=003-7235635-9843609&library=ECHR",
+ note:
+ "Used for the 2022 family-reconciliation and long-term foster-care analysis.",
+ },
+ {
+ label: "ECHR press release: 21 applications against Norway concerning children taken into public care",
+ href: "https://hudoc.echr.coe.int/app/conversion/pdf/?filename=21+applications+against+Norway+concerning+children+taken+into+public+care.pdf&id=003-7744629-10718629&library=ECHR",
+ note:
+ "Used for the official 2023 aggregation of admissibility outcomes and Article 8 violations against Norway.",
+ },
+ {
+ label: "ECHR factsheet: Parental rights",
+ href: "https://www.echr.coe.int/Documents/FS_Parental_ENG.pdf",
+ note:
+ "Used as the official thematic overview linking Norway decisions into the wider Article 8 parental-rights doctrine.",
+ },
+ {
+ label: "Do Better Norge homepage",
+ href: "https://dobetternorge.no/",
+ note:
+ "Used for the site's self-description, emphasis on Article 8, custody, child welfare, and reform work.",
+ },
+ {
+ label: "MannsForum contact/about page",
+ href: "https://mannsforum.no/kontaktinformasjon-mannsforum/",
+ note:
+ "Used for MannsForum's own description of itself as an organization focused on boys, fathers, and men.",
+ },
+ {
+ label: "Foreningen 2 Foreldre homepage",
+ href: "https://www.f2f.no/",
+ note:
+ "Used for F2F's own framing of children with two homes and shared-family stability.",
+ },
+];
diff --git a/src/data/profile.ts b/src/data/profile.ts
new file mode 100644
index 0000000..e0e7a93
--- /dev/null
+++ b/src/data/profile.ts
@@ -0,0 +1,231 @@
+export type RouteStop = {
+ place: string;
+ note: string;
+};
+
+export type SourceCredit = {
+ label: string;
+ url: string;
+ note: string;
+};
+
+export type Venture = {
+ slug: string;
+ years: string;
+ role: string;
+ name: string;
+ label: string;
+ location: string;
+ summary: string;
+ detail: string;
+ highlights: string[];
+ source: SourceCredit;
+};
+
+export type VentureSignal = {
+ name: string;
+ strap: string;
+ summary: string;
+ href: string;
+};
+
+export type CollageImage = {
+ src: string;
+ alt: string;
+ caption: string;
+};
+
+export type AILabCapability = {
+ title: string;
+ summary: string;
+};
+
+export type AILabProgramme = {
+ title: string;
+ summary: string;
+ bullets: string[];
+};
+
+export const routeStops: RouteStop[] = [
+ { place: "Ringwood, New Jersey", note: "born" },
+ { place: "Villanova, Pennsylvania", note: "undergraduate chapter" },
+ { place: "Brussels, Belgium", note: "trade and multilingual weather" },
+ { place: "New Jersey", note: "return passage" },
+ { 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: "Hamilton, Bermuda", note: "Atlantic detour" },
+ { place: "the Midwest", note: "American middle distance" },
+ { place: "Krakow, Poland", note: "EU studies" },
+ { place: "Oslo, Norway", note: "Nordic transition" },
+ { place: "Kongsberg, Norway", note: "current desk" },
+];
+
+export const ventureDesk: Venture[] = [
+ {
+ slug: "gilligan-tech",
+ years: "2018 to present",
+ role: "Owner",
+ name: "Gilligan TECH ENK",
+ label: "Norwegian ENK",
+ location: "Kongsberg, Norway",
+ summary:
+ "Local AI systems consulting for Nordic businesses, with strategy first, delivery second, and infrastructure only when it materially improves the result.",
+ detail:
+ "The Gilligan Tech line is practical and operator-minded: architectural audits, system builds, and fractional CTO guidance for Nordic SMBs that want useful AI without rented buzzwords.",
+ highlights: [
+ "AI Dispatch: fixed-fee architectural audit and strike map",
+ "Systems Forge: custom RAG, AI portals, and transcription services",
+ "Systems Command: fractional CTO support and board-ready AI strategy",
+ ],
+ source: {
+ label: "Gilligan Tech",
+ url: "https://gilligan.tech/",
+ note:
+ "Paraphrased from the official Gilligan Tech site, including the AI Dispatch, Systems Forge, and Systems Command descriptions.",
+ },
+ },
+ {
+ slug: "blue-note-logic",
+ years: "2026 to present",
+ role: "Owner",
+ name: "Blue Note Logic Inc",
+ label: "AI / IT Lab",
+ location: "Philadelphia to Paris, with EU infrastructure",
+ summary:
+ "Private AI platforms, document intelligence, and production infrastructure designed to turn working knowledge into owned systems rather than vendor dependency.",
+ detail:
+ "Blue Note Logic is the lab, forge, and infrastructure house behind the AI side of the publication: consultancy, sovereign model work, corpus design, and productized document intelligence with cited answers and European hosting.",
+ highlights: [
+ "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",
+ ],
+ source: {
+ label: "Blue Note Logic official sites",
+ url: "https://ai.bluenotelogic.com/",
+ note:
+ "Paraphrased from Blue Note Logic and CorpusAI official pages covering private AI, document intelligence, and owned infrastructure.",
+ },
+ },
+];
+
+export const ventureSignals: VentureSignal[] = [
+ {
+ name: "Trivia & Tunes",
+ strap: "live-hosted games and music-led connection",
+ summary:
+ "A cultural desk for knowledge, playlists, rooms full of people, and the social engineering of a good night.",
+ href: "https://triviaandtunes.com/",
+ },
+ {
+ name: "Do Better Norge",
+ strap: "children's rights, due process, and family life protections",
+ 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/",
+ },
+];
+
+export const collageImages: CollageImage[] = [
+ {
+ src: "https://commons.wikimedia.org/wiki/Special:Redirect/file/Villanova_University_A_panoramic_shot.jpg",
+ alt: "Panoramic view of Villanova University.",
+ caption: "Villanova / the first brass section",
+ },
+ {
+ src: "https://commons.wikimedia.org/wiki/Special:Redirect/file/Jagiellonian_University_Collegium_Novum%2C_1882_designed_by_Feliks_Ksi%C4%99%C5%BCarski%2C_24_Go%C5%82%C4%99bia_street%2C_Old_Town%2C_Krak%C3%B3w%2C_Poland_%284%29.jpg",
+ alt: "Collegium Novum at Jagiellonian University in Krakow.",
+ caption: "Krakow / bureaucracy and stone",
+ },
+ {
+ src: "https://commons.wikimedia.org/wiki/Special:Redirect/file/Kongsberg_IMG_0357.JPG",
+ alt: "Kongsberg riverfront in Norway.",
+ caption: "Kongsberg / present tense",
+ },
+];
+
+export const aiLabCapabilities: AILabCapability[] = [
+ {
+ title: "Private AI on your own corpus",
+ summary:
+ "Document intelligence built around a private corpus, with source-cited answers and search modes that stay anchored to the evidence.",
+ },
+ {
+ title: "European infrastructure by design",
+ summary:
+ "Dedicated European hosting, isolated telemetry, and a security posture built to reduce cloud leakage and shared-tenancy risk.",
+ },
+ {
+ title: "From retrieval to owned model",
+ summary:
+ "A path from daily retrieval work toward domain-tuned models shaped by verified expert interaction instead of disposable prompt theatre.",
+ },
+];
+
+export const aiLabProgrammes: AILabProgramme[] = [
+ {
+ title: "CorpusAI / CaveauAI",
+ summary:
+ "The product layer for private retrieval, cited answers, and document-grounded search from day one.",
+ bullets: [
+ "Vector, keyword, and hybrid search modes",
+ "Cited answers linked back to source paragraphs",
+ "Support for PDFs, DOCX, HTML, Markdown, and plain text",
+ ],
+ },
+ {
+ title: "Corporate Memory Extraction",
+ summary:
+ "A flagship service that turns daily document workflows into a proprietary training asset and an owned model trajectory.",
+ bullets: [
+ "EU-hosted RAG as the operational starting point",
+ "Verified interaction telemetry captured in isolated MariaDB",
+ "Sovereign model tuning and lower-cost deployment over time",
+ ],
+ },
+ {
+ title: "Related services",
+ summary:
+ "The working bench around the core platform: deployment, corpus architecture, and privacy-aware data engineering.",
+ bullets: [
+ "Document intelligence consulting",
+ "Knowledge corpus development",
+ "Synthetic data engineering",
+ ],
+ },
+];
+
+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: "Trivia & Tunes",
+ url: "https://triviaandtunes.com/",
+ 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.",
+ },
+];
diff --git a/src/data/projects.ts b/src/data/projects.ts
new file mode 100644
index 0000000..2a72614
--- /dev/null
+++ b/src/data/projects.ts
@@ -0,0 +1,164 @@
+export type ProjectImage = {
+ src: string;
+ alt: string;
+ credit: string;
+ sourceLabel: string;
+ sourceUrl: string;
+ note?: string;
+};
+
+export type ProjectSource = {
+ label: string;
+ href?: string;
+ note: string;
+};
+
+export const projectsFeature = {
+ eyebrow: "Section 10 / projects desk",
+ title: "The April project is a music-trivia machine with a rhinoceros in the judging booth.",
+ lede:
+ "Trivia & Tunes is the first full vibe-coded product in the portfolio: a live trivia platform built for homes, venues, tournaments, player identities, and now a genuinely theatrical AI layer.",
+ note:
+ "This desk distinguishes between what Trivia & Tunes says publicly today and what the working codebase already proves is built or actively being staged for release.",
+};
+
+export const projectsArticle = {
+ slug: "trivia-and-tunes-april-2026",
+ title: "Trivia & Tunes and the Arrival of True AI at the Pub Quiz",
+ excerpt:
+ "A spring 2026 project dispatch on music trivia, Blue Note Rhino, multiplayer formats, and the small matter of giving a quiz night an actual machine personality.",
+ publishedAt: "2026-04-06 10:15:00",
+};
+
+export const projectsImages: ProjectImage[] = [
+ {
+ src: "https://triviaandtunes.no/uploads/venues/venue_1768237941_ec432572.jpg",
+ alt: "Night exterior of a warm wood-fronted Kongsberg pub used as Trivia & Tunes project atmosphere imagery.",
+ credit: "Original Trivia & Tunes venue image",
+ sourceLabel: "Trivia & Tunes live uploads",
+ sourceUrl: "https://triviaandtunes.no/uploads/venues/venue_1768237941_ec432572.jpg",
+ note:
+ "Used here as project mood art: the right combination of room heat, street cold, and low-lit invitation.",
+ },
+ {
+ src: "https://triviaandtunes.no/uploads/teams/seed_team_microphone.png",
+ alt: "Microphone-themed team artwork from Trivia & Tunes.",
+ credit: "Original Trivia & Tunes team artwork",
+ sourceLabel: "Trivia & Tunes live uploads",
+ sourceUrl: "https://triviaandtunes.no/uploads/teams/seed_team_microphone.png",
+ note:
+ "A good emblem for the product itself: performance, scoring, personality, and room presence.",
+ },
+ {
+ src: "https://triviaandtunes.no/logoNew.png",
+ alt: "Trivia & Tunes logo artwork.",
+ credit: "Original Trivia & Tunes logo",
+ sourceLabel: "Trivia & Tunes live site",
+ sourceUrl: "https://triviaandtunes.no/logoNew.png",
+ note:
+ "The live public brand mark used by the current production site.",
+ },
+];
+
+export const projectsSignals = [
+ {
+ title: "Public truth, right now",
+ summary:
+ "The live site currently presents Trivia & Tunes as a three-format product: solo host, live display, and pro live, with strong music integrations and venue-facing play.",
+ },
+ {
+ title: "The stronger local build",
+ summary:
+ "The working codebase already goes further: AI Home, AI Live, AI Solo, Blue Note Rhino, commentary, wrapups, model selection, and call logging are all visible in the repo on April 6, 2026.",
+ },
+ {
+ title: "Voice is the next turn of the screw",
+ summary:
+ "A dedicated TTS service is already staged for testing, with English, Norwegian, French, and additional voices mapped and ready for use.",
+ },
+];
+
+export const projectsCapabilities = [
+ {
+ title: "One game, multiple room geometries",
+ body:
+ "The product is not just a quiz app. It is a room-design system. One-screen home play, host-plus-display nights, and phone-driven player lanes all exist as distinct social formats rather than accidental layouts.",
+ },
+ {
+ title: "Blue Note Rhino as judge and emcee",
+ body:
+ "The AI layer is not framed as vague assistance. It grades free-text answers, applies strictness levels, generates wrapups, reacts to how a round went, and speaks in a built persona instead of silent utility.",
+ },
+ {
+ title: "Music is treated as infrastructure",
+ body:
+ "Spotify, Apple Music, and YouTube are not ornamental add-ons. They sit inside the trivia flow itself, which is why the whole thing feels closer to a hosted night than a generic browser game.",
+ },
+ {
+ title: "A real management surface",
+ body:
+ "Questions, players, teams, events, tournaments, venue pages, and media links are all treated as editable operating material, not hard-coded brochure text.",
+ },
+ {
+ title: "The first real vibe-coded product",
+ body:
+ "The internal build notes tell the truth plainly: start with room feel, iterate fast, keep it useful, document everything, and let the software earn its style through use.",
+ },
+ {
+ title: "The April turn",
+ body:
+ "This month matters because the product crosses a line from 'music trivia with good UX' into 'music trivia with an actual AI performance layer,' and that changes the identity of the whole thing.",
+ },
+];
+
+export const projectsDeskBody = [
+ "Trivia nights usually suffer from one of two problems. Either they are dead administrative exercises disguised as fun, or they are charming little messes that collapse as soon as a room gets big, loud, or demanding. Trivia & Tunes is interesting because it refuses that choice. It wants proper room energy and proper system design at the same time.",
+ "The live public site still presents the older triptych: solo host, live display, and pro live. Even in that public form, the platform already reads as more than a hobby project. It speaks in formats, roles, display logic, music sources, venues, tournaments, and player identity. That is the vocabulary of an ecosystem, not a one-off game.",
+ "The working April build goes further. In the local codebase reviewed on April 6, 2026, Trivia & Tunes has already developed an AI vocabulary of its own: AI Home, AI Live, AI Solo, model selection, per-question commentary, round wrapups, game wrapups, and a named judging persona called Blue Note Rhino. That is not decorative AI sprayed over an old surface. It is a real change in product character.",
+ "What makes the Rhino interesting is not merely that it grades. Plenty of systems can call a model and pretend they have solved judgment. Here the ambition is theatrical. The Rhino has strictness levels, a configurable personality, free-text semantic grading, and the beginnings of a running relationship with the room. In other words, the machine is not only a checker. It is becoming part of the night.",
+ "That matters because music trivia is social timing more than raw database retrieval. A good night has pacing, tension, recovery, banter, and a little danger. The AI layer works best when it helps the host keep those qualities alive rather than replacing them. The most promising parts of the local build do exactly that: commentary between questions, wrapups between rounds, and mode-specific flows that respect the room rather than flatten it.",
+ "The codebase also reveals another practical truth: this is not a toy AI experiment sitting in isolation. There are management surfaces, player records, team structures, events, tournaments, login gates, model logs, and admin settings. Even voice is already staged, with a TTS service ready for testing across multiple languages. If the GPU and IIS side are not always awake yet, the architecture is nevertheless pointing in the right direction.",
+ "That is why this April project deserves the Projects desk rather than a casual mention elsewhere. Trivia & Tunes is the first full, opinionated, public-facing vibe-coded product in the portfolio: music-heavy, UX-led, multilingual, operationally serious, and now decisively AI-backed. It has enough room heat to feel alive, and enough systems underneath to survive contact with real users.",
+];
+
+export const projectsArticleBody = [
+ "The phrase 'true AI' is abused so often that it usually arrives smelling of stale venture decks. But once in a while a project earns the phrase by changing what the product is allowed to feel like. Trivia & Tunes has reached that threshold this spring.",
+ "On the public site today, Trivia & Tunes already presents itself as a layered trivia platform rather than a simple quiz toy. The live games page offers three recognizable public formats: a solo host edition for home use, a live game with a big-screen display, and a pro live version with mobile answering for players. That is the respectable front room, and it is already more ambitious than most trivia products ever become.",
+ "Behind that public face, the working local build tells a hotter story. The repo reviewed on April 6, 2026 shows a second life already under construction: AI Home, AI Live, AI Solo, model management, call logging, wrapup prompts, per-question commentary, and a fully named judging persona, Blue Note Rhino. In other words, this is no longer only a trivia platform with good screens. It is becoming a performance system with machine timing.",
+ "Blue Note Rhino is the right kind of overreach. The AI guide frames the Rhino not as a hidden utility but as an actual room character: a grader, commentator, and needling emcee who understands free-text answers semantically instead of forcing players into multiple-choice boxes. The host can adjust strictness. The machine can generate round and game wrapups. It can react to how players performed. That is product identity, not just API consumption.",
+ "The clever part is that the underlying architecture still respects the old truths of quiz nights. Music remains central, with Spotify, Apple Music, and YouTube embedded into the experience. Room geometry matters. One-screen living-room play is not treated the same as host-plus-display nights or the more competitive phone-plus-display format. This is where the vibe coding note becomes more than a slogan. The code follows the social feel of the room.",
+ "Even the build notes are unusually honest. They talk about starting with the desired feeling, iterating quickly, keeping the code organized without fetishizing perfection, and making the product work beautifully for non-technical people. Normally this kind of internal document is too earnest to quote. Here it belongs to the story, because the resulting product really does show the fingerprints of that method.",
+ "Then there is voice. The TTS service sitting in the local project is not yet a triumphant public launch, and I will not pretend otherwise. But it is real enough to matter: mapped voices for English, Norwegian, French, German, Spanish, Italian, Portuguese, Polish, Dutch, Swedish, Danish, and Finnish, all framed as part of the next testing layer. That means the Rhino is not only a text persona waiting in the shadows. It is edging toward an audible one.",
+ "So April's verdict is simple. Trivia & Tunes is the first full vibe-coded product in the broader Dave Gilligan orbit to step across the line from strong interface into living system. It already knows how to run a room. Now it is learning how to talk back.",
+];
+
+export const projectsSources: ProjectSource[] = [
+ {
+ label: "Trivia & Tunes live homepage",
+ href: "https://triviaandtunes.no/",
+ note:
+ "Used for the current public brand, tagline, and confirmation that the live production shell is active.",
+ },
+ {
+ label: "Trivia & Tunes games page",
+ href: "https://triviaandtunes.no/games/",
+ note:
+ "Used for the live public format breakdown: solo host, live game with big-screen display, and pro live with mobile answering.",
+ },
+ {
+ label: "Trivia & Tunes live image assets",
+ href: "https://triviaandtunes.no/uploads/venues/venue_1768237941_ec432572.jpg",
+ note:
+ "Used for original project imagery pulled from the live Trivia & Tunes installation.",
+ },
+ {
+ label: "Local Trivia & Tunes working repository",
+ note:
+ "Reviewed locally on April 6, 2026 for AI Home, AI Live, AI Solo, Blue Note Rhino, wrapups, per-question commentary, model management, call logging, and voice-service staging.",
+ },
+ {
+ label: "How We Built Trivia & Tunes",
+ note:
+ "Used for the internal product-development narrative around vibe coding, iterative delivery, UX-first decisions, and the explanation of the system for non-technical readers.",
+ },
+];
diff --git a/src/data/site.ts b/src/data/site.ts
new file mode 100644
index 0000000..af91060
--- /dev/null
+++ b/src/data/site.ts
@@ -0,0 +1,229 @@
+export type LaunchSection = {
+ slug: string;
+ label: string;
+ title: string;
+ summary: string;
+ tone: string;
+ strap: string;
+ coverline: string;
+ motif: string;
+ samples: string[];
+};
+
+export type SchoolDossier = {
+ slug: string;
+ institution: string;
+ years: string;
+ program: string;
+ city: string;
+ logo: string;
+ teaser: string;
+};
+
+export const hero = {
+ kicker: "Blue Note Logic presents",
+ title: "Dave Gilligan, a literary jazz magazine disguised as a personal site.",
+ lede:
+ "Writing, technology, music, languages, family history, consulting, and a little applied pataphysics, arranged as a bright editorial salon rather than a brochure.",
+ 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.",
+};
+
+export const launchSections: LaunchSection[] = [
+ {
+ slug: "business",
+ label: "01",
+ title: "Business",
+ summary: "Consulting notes, operator essays, client stories, and strategy with sleeves rolled up.",
+ tone: "Sharp, practical, anti-buzzword.",
+ strap: "Operator studies for adults who are tired of consultant vapor.",
+ coverline: "The anti-buzzword ledger.",
+ motif: "Pricing, systems, execution, and elegant refusal.",
+ samples: ["The one-laptop doctrine", "SME systems with teeth", "Boardroom notes without cologne"],
+ },
+ {
+ slug: "education",
+ label: "02",
+ title: "Education",
+ summary: "School dossiers, study notes, intellectual migrations, and academic detours worth keeping.",
+ tone: "Curious, rigorous, lightly mischievous.",
+ strap: "Degrees as cities, schools as chapters, study as migration.",
+ coverline: "The dossier issue.",
+ motif: "Memory, theory, institutions, and weather.",
+ samples: ["Villanova as overture", "Krakow and the bureaucracy sublime", "Kongsberg after experience"],
+ },
+ {
+ slug: "family",
+ label: "03",
+ title: "Family",
+ summary: "A warmer archive for memory, milestones, and the people who keep the music human.",
+ tone: "Private-minded, generous, alive.",
+ strap: "The soft archive, still edited like it matters.",
+ coverline: "Domestic front pages.",
+ motif: "Photographs, notes, kinship, and time.",
+ samples: ["Albums with captions worth reading", "Milestones without sentimentality", "A household in motion"],
+ },
+ {
+ slug: "fun-postings",
+ label: "04",
+ title: "Fun Postings",
+ summary: "Odd notices, cultural flyers, side projects, and delightfully unnecessary announcements.",
+ tone: "Playful, deadpan, collectible.",
+ strap: "The classified page gets strange and starts wearing cologne.",
+ coverline: "Useful nonsense, neatly set.",
+ motif: "Flyers, jokes, events, absurd notices.",
+ samples: ["Cultural dispatches", "Ridiculous but sincere", "Posters for improbable evenings"],
+ },
+ {
+ slug: "writing",
+ label: "05",
+ title: "Writing",
+ summary: "Features, columns, notebooks, and dispatches for readers who like style with backbone.",
+ 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"],
+ },
+ {
+ slug: "jazz-music",
+ label: "06",
+ title: "Jazz and Music",
+ summary: "Listening notes, deep cuts, rhythm studies, 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.",
+ motif: "Listening, memory, improvisation, timing.",
+ samples: ["Records after midnight", "Why groove beats branding", "A private history of swing"],
+ },
+ {
+ slug: "languages",
+ label: "07",
+ title: "Languages",
+ summary: "Translation, vocabulary, cross-border humor, and the pleasures of switching registers.",
+ tone: "Polyglot, sly, welcoming.",
+ strap: "A section for mistranslation, seduction, and grammatical diplomacy.",
+ coverline: "The multilingual cabinet.",
+ motif: "French, Norwegian, English, and elegant trouble.",
+ samples: ["Words that travel badly", "Translation as personality", "Syntax with a passport"],
+ },
+ {
+ slug: "ai-lab",
+ label: "08",
+ title: "AI Lab",
+ summary: "Built-in tools, experiments, prompt systems, and practical machine intelligence with taste.",
+ tone: "Forward-looking, grounded, open source friendly.",
+ strap: "Machine intelligence without the conference lanyard.",
+ coverline: "The atelier for useful futures.",
+ motif: "Prompts, tooling, agentic systems, humane interfaces.",
+ samples: ["AI that can write in-house style", "Editorial controls, not gimmicks", "Open tools with manners"],
+ },
+ {
+ slug: "norway",
+ label: "09",
+ title: "Norway",
+ summary: "Kongsberg dispatches, civic notes, local texture, and Scandinavian reality at street level.",
+ tone: "Observant, civic, place-aware.",
+ strap: "A local paper for one town and several realities.",
+ coverline: "Kongsberg, correctly observed.",
+ motif: "Place, policy, weather, Nordic texture.",
+ samples: ["Silver city dispatches", "The civic weather report", "Norway beyond brochure language"],
+ },
+ {
+ slug: "projects",
+ label: "10",
+ title: "Projects",
+ summary: "Things launched, repaired, modernized, or imagined into being across code, content, and data.",
+ tone: "Builder energy, clean receipts.",
+ strap: "The workshop floor, but art directed.",
+ coverline: "Built, fixed, and shipped.",
+ motif: "Case files, before/after, code and consequence.",
+ samples: ["From schema to interface", "Deployments with fingerprints", "Systems that survived contact"],
+ },
+ {
+ slug: "cv",
+ label: "11",
+ title: "CV",
+ summary: "The formal record, still elegant, still readable, and never trapped in a dusty PDF.",
+ tone: "Professional, legible, confident.",
+ strap: "The biography in pressed clothes.",
+ coverline: "A resume that behaves like publishing.",
+ motif: "Timeline, experience, proof, education.",
+ samples: ["Careers across countries", "A record without dead language", "Credentials with pulse"],
+ },
+];
+
+export const schoolDossiers: SchoolDossier[] = [
+ {
+ slug: "usn",
+ institution: "University of South-Eastern Norway",
+ years: "2021 to present",
+ program: "MSc, Innovation and Technology Management",
+ city: "Kongsberg, Norway",
+ logo: "/images/schools/usn.svg",
+ teaser:
+ "A systems laboratory where engineering discipline and lived experience meet over coffee, models, and unfinished questions.",
+ },
+ {
+ slug: "jagiellonian",
+ institution: "Jagiellonian University",
+ years: "2010 to 2011",
+ program: "European Union Studies",
+ city: "Krakow, Poland",
+ logo: "/images/schools/jagiellonian.svg",
+ teaser:
+ "History, bureaucracy, Europe, and the old civilizational habit of asking larger questions than the room can comfortably hold.",
+ },
+ {
+ slug: "escp-moore",
+ institution: "ESCP and Darla Moore",
+ years: "1997 to 1999",
+ program: "International MBA and Master of International Business",
+ city: "Paris and Columbia, South Carolina",
+ logo: "/images/schools/escp-moore.svg",
+ teaser:
+ "A dual orbit of French polish and American execution, where commerce learned to travel with style and consequence.",
+ },
+ {
+ slug: "european-university",
+ institution: "European University and Institut Cooreman",
+ years: "1996",
+ program: "MBA and Master of International Trade",
+ city: "Brussels, Belgium",
+ logo: "/images/schools/european-university.svg",
+ teaser:
+ "Trade, movement, and continental ambition, written in the language of deals, trains, and multilingual evenings.",
+ },
+ {
+ slug: "villanova",
+ institution: "Villanova University",
+ years: "1991 to 1995",
+ program: "BSc, Business Administration",
+ city: "Philadelphia, Pennsylvania",
+ logo: "/images/schools/villanova.svg",
+ teaser:
+ "The Main Line chapter, where finance, communication, and character first learned to share the same bandstand.",
+ },
+];
+
+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.",
+];
+
+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.",
+];
+
+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.",
+];
+
+export function getSectionHref(section: LaunchSection) {
+ return section.slug === "education" ? "/education" : `/${section.slug}`;
+}
diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro
new file mode 100644
index 0000000..c1f52e4
--- /dev/null
+++ b/src/layouts/BaseLayout.astro
@@ -0,0 +1,142 @@
+---
+import "../styles/global.css";
+import SectionMark from "../components/SectionMark.astro";
+import { getSectionHref, launchSections } from "../data/site";
+
+interface Props {
+ title?: string;
+ description?: string;
+ lang?: string;
+}
+
+const {
+ title = "Dave Gilligan | Blue Note Logic",
+ description = "A literary, jazzy, technically serious online magazine for writing, consulting, education, languages, family, and AI.",
+ lang = "en",
+} = Astro.props;
+
+const issueDate = new Intl.DateTimeFormat("en-US", {
+ month: "long",
+ day: "numeric",
+ year: "numeric",
+}).format(new Date());
+
+const pathname = Astro.url.pathname.replace(/\/+$/, "") || "/";
+const activeSlug = pathname === "/" ? "home" : pathname.split("/").filter(Boolean)[0];
+const primarySlugs = ["business", "education", "writing", "jazz-music", "ai-lab", "norway"];
+const primaryNav = launchSections.filter((section) => primarySlugs.includes(section.slug));
+const footerNav = launchSections.filter((section) => !primarySlugs.includes(section.slug));
+const currentSection = launchSections.find((section) => section.slug === activeSlug);
+const articleMeta = pathname.startsWith("/articles/norway")
+ ? {
+ label: "Article / Norway desk",
+ note: "Field report / family life / fathers / immigrants",
+ }
+ : pathname.startsWith("/articles/kongsberg-jazz-2026")
+ ? {
+ label: "Article / Jazz and Music",
+ note: "Field report / Kongsberg x Paris",
+ }
+ : pathname.startsWith("/articles/trivia-and-tunes-april-2026")
+ ? {
+ label: "Article / Projects desk",
+ note: "Field report / music trivia / Blue Note Rhino / April build",
+ }
+ : null;
+const issueLabel = currentSection
+ ? `Section ${currentSection.label} / ${currentSection.title}`
+ : articleMeta
+ ? articleMeta.label
+ : "Founding issue / Personal edition";
+const ribbonNote = currentSection?.tone
+ ?? (articleMeta
+ ? articleMeta.note
+ : "Ringwood / Villanova / Brussels / Paris / Krakow / Oslo / Kongsberg");
+---
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {title}
+
+
+
+
+ Founding issue / {issueDate}
+ {ribbonNote}
+
+
+
+
+
+
+ {issueLabel}
+ Jazz desk / machine room / family archive / pataphysical bulletin
+
+ This section is designed to read like a proper feature desk: larger typography, fewer
+ 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.
+
+
+
+
+
+
+
Elsewhere in the paper
+
+ The point is to make the whole publication feel edited, not merely assembled.
+
+ The official CorpusAI site does not hide behind a toy example. It says the live demo runs
+ on a Norwegian legal intelligence corpus built for Do Better Norge, with more than 1,100
+ documents spanning family law, ECHR case law, child welfare, and data privacy.
+
+
+ It also advertises a free Norwegian Family Law corpus with 4,754 documents, including 773
+ court decisions, plus Barneloven, Barnevernsloven, Supreme Court material, and ECHR case
+ law. That gives the AI Lab page something better than buzzwords: a demonstrable stack.
+
+
+
+
+
+
+
+
+
+
+
Detailed Examples
+
+ These are paraphrased from the official CorpusAI use-case examples. The point is not
+ generic “AI for everyone,” but specific document-heavy work that benefits from citations.
+
European compute, source-grounded systems, and a hard line on data export.
+
+ The infrastructure section on the official site is unusually specific: three dedicated
+ cloud servers, Hetzner locations in Helsinki and Nuremberg, RTX PRO 6000 Blackwell GPUs,
+ 96GB VRAM, encrypted inter-node traffic, and an explicit “zero data export” posture.
+
+
+ {aiLabInfraNotes.map((note) =>
{note}
)}
+
+
+
+
+
+
+
+
+
+
+
Developer Desk
+
+ These examples are adapted from the public CorpusAI REST API examples shown on the official site.
+
+
+
+
+ {aiLabApiExamples.map((example) => (
+
+
+ {example.title}
+ {example.endpoint}
+
+
+
Request
+
{example.request}
+
+
+
Response
+
{example.response}
+
+
+ ))}
+
+
+
+
+
+
Source Credits
+
+ Everything on this page is editorialized, but the examples, infrastructure claims, and API
+ framing are credited to the official Blue Note Logic properties below.
+
+ Do Better Norge is making one of the hardest arguments in contemporary Norway: that the
+ state speaks fluently about children's interests while too often letting fathers,
+ immigrant parents, and family continuity become negotiable. That is an advocacy argument,
+ not a court holding. But it is not floating in thin air. The official European Court of
+ Human Rights record shows repeated Article 8 trouble for Norway in family-life cases, and
+ that record is now too large to dismiss as anecdote.
+
+
+
+ The cleanest official summary appears in the Court's own
+
+ Norway country profile
+
+ . It notes that on 14 September 2023 the Court dealt with
+
+ 21 applications against Norway concerning children in public care
+
+ , declaring 12 inadmissible and finding Article 8 violations in nine other similar
+ applications. That does not prove every activist claim. It does prove there is a durable
+ and visible Strasbourg problem.
+
+
+
+ What keeps recurring in that problem is not always the original intervention by itself.
+ The Court often focuses on what comes after: reduced contact, weak reunification work,
+ long-term foster-care assumptions made too early, and a habit of letting time do the
+ state's severing work. In
+
+ Strand Lobben and Others v. Norway
+
+ , the Grand Chamber made reunification doctrine impossible to ignore. In
+
+ K.O. and V.M. v. Norway
+
+ , the placement itself survived Article 8 scrutiny while the contact regime did not. That
+ distinction matters enormously for fathers and non-resident parents: sometimes the legal
+ fracture is not the first decision, but the slow starvation of the bond afterward.
+
+
+
+ That is why fathers' rights groups remain part of this conversation. The Court's country
+ profile also includes
+
+ father-access cases such as Sanchez Cardenas v. Norway
+
+ and older Article 8 parental-rights litigation such as
+
+ Johansen v. Norway
+
+ . Advocacy groups like
+
+ MannsForum
+
+ and
+
+ Foreningen 2 Foreldre
+
+ are not citing the Court for decoration; they are intervening in a real problem-space
+ where contact can collapse long before anyone admits that contact has been structurally
+ undermined.
+
+
+
+ The immigrant-family dimension is equally difficult and equally real. The strongest single
+ Strasbourg reference point remains
+
+ Abdi Ibrahim v. Norway
+
+ , where the Grand Chamber held that Norway had violated Article 8 in a case involving a
+ Somali Muslim mother and the adoption of her child by a foster family. The significance of
+ that judgment is not merely emotional. It says, in practical terms, that culture and
+ religion are not decorative details to be mentioned late in the file. They are part of the
+ child's family life and identity, and they must be given real weight.
+
+
+
+ The Court's own Norway profile also reminds us that Article 8 trouble is not confined to
+ child-welfare cases. Immigration-family-life cases such as
+
+ Nunez v. Norway
+
+ and
+
+ Antwi and Others v. Norway
+
+ show that the family-life question also reaches deportation and immigration enforcement.
+ That matters here because one of the recurring claims from immigrant parents is that the
+ system reads cultural difference as instability, or foreignness as reduced credibility.
+ The Court does not endorse that sentence in those words, but the case law certainly keeps
+ family life on the table when state power meets cross-border families.
+
+
+
+ This is where
+
+ Do Better Norge
+
+ becomes more than a protest banner. The project has built a visual and educational
+ language around Article 8, samvar, oversight, cultural blindness, and the economic logic
+ inside Norwegian child welfare. One can disagree with parts of its interpretation and still
+ admit that it is doing something institutions often fail to do: making the structure legible
+ for ordinary families. The same goes for rights groups working the fathers' side of the
+ argument. Their claim is not that every mother wins unfairly, or that every public-care case
+ is illegitimate. Their claim is that fathers and immigrant parents can enter systems where
+ the presumption of distance arrives earlier than the presumption of repair.
+
+
+
+ The fairest way to put it is this. Norway does not have an imaginary problem. It has a
+ documented Article 8 problem, an argument over how deep that problem runs, and a growing
+ ecosystem of rights organizations trying to make sure the words family life keep meaning
+ something when the file is thick, the expert culture is confident, and the parent in front
+ of the state happens to be foreign, non-resident, or simply the father.
+
+
+
+
+
+
+
+
+
Rights Organizations
+
+ These are not court sources. They are part of the ecosystem making the Norway family-life
+ argument public, legible, and persistent.
+
+ Official legal assertions on this page are drawn from ECHR materials. Group descriptions
+ and visual material are credited to the organizations themselves.
+
+ Consulting, product work, AI infrastructure, live cultural formats, and advocacy all
+ belong here because the operating style is the same: build useful things, keep the
+ language clean, and make sure the system still stands up once the meeting ends.
+
+ Gilligan Tech is the local operating desk: close to clients, close to constraints, and
+ comfortable with the practical mess of real organizations. Blue Note Logic is the wider
+ lab: document intelligence, private corpora, AI services, and the harder technical
+ infrastructure needed to own outcomes instead of renting them.
+
+
+ Around that core, Trivia & Tunes proves the live-hosted entertainment and room-energy
+ side of the profile, while Do Better Norge carries the children's-rights and civic
+ seriousness that keeps the whole publication from turning into mere aesthetics.
+
+
+
+
+
+ Next issue
+ AI Lab
+
+
Read the machine room.
+
+ The AI Lab issue turns the Blue Note Logic and Gilligan Tech material into a dedicated
+ product and infrastructure story, with credited sources and a more technical editorial
+ voice.
+
+ Business copy on this page is paraphrased from official venture sites and labeled so the
+ editorial voice stays distinct from the source material.
+
+ Earlier chapters are kept compact here so the timeline stays readable without losing the hard details.
+
+
+
+
+
+ {cvTimeline.map((role) => (
+
+
{role.years}
+
+
+
+
{role.location}
+
{role.org}
+
+ {role.role}
+
+
+
{role.summary}
+
+
+ {role.bullets.map((bullet) => (
+
{bullet}
+ ))}
+
+
+
+ ))}
+
+
+
+
+
+
+
+
+
Source Notes
+
+ Current roles are paraphrased from official sites. Earlier employment history is grounded in the standing public profile and your supplied LinkedIn text.
+
+
+
+
diff --git a/src/pages/education.astro b/src/pages/education.astro
new file mode 100644
index 0000000..e68da89
--- /dev/null
+++ b/src/pages/education.astro
@@ -0,0 +1,42 @@
+---
+import SchoolDossier from "../components/SchoolDossier.astro";
+import { schoolDossiers } from "../data/education";
+import BaseLayout from "../layouts/BaseLayout.astro";
+---
+
+
+
+
+
+ Special issue / school dossiers
+
The schools, rewritten as a magazine of migration, trade, weather, and nerve.
+
+ This issue treats each school as a chapter in style, place, and formation. The quotes
+ are invented on purpose, signed in faux Boris or faux Vernon mode, and labeled so nobody
+ mistakes the joke for scholarship.
+
+ The new front page is organized around the recurring energies of the work: consultancy,
+ AI infrastructure, live cultural formats, and children's-rights advocacy.
+
+ AI Lab cover package
+ Credited to Blue Note Logic Inc
+
+
Special report / useful futures
+
Private AI, cited answers, and machine intelligence with a memory.
+
+ The AI Lab issue is the technical heart of the site: private corpora, document
+ intelligence, multilingual edition controls, and deployment paths that stay close to the
+ evidence instead of drifting into vendor theatre.
+
+ These sections stay distinct in tone, but the site now treats them like desks inside one
+ publication rather than equally weighted navigation blocks.
+
+ Venture descriptions are paraphrased from official sites. Image credits for school
+ photography live in the education issue, where the full dossier notes already appear.
+
+ The venues matter because jazz is never only a poster. It is also a staircase, a basement,
+ a courtyard, an outdoor stage, and the timing of who drifts where after the formal set.
+
+ Field note
+ Family life / fathers / immigrants
+
+
+ This Norway desk feature is built around one simple distinction. The advocacy layer comes
+ from groups such as Do Better Norge, MannsForum, and F2F, each of which argues that
+ Norwegian systems can sideline fathers, devalue contact, and mishandle immigrant-family
+ realities. The legal layer comes from Strasbourg, where the European Court of Human Rights
+ has repeatedly examined Norway under Article 8.
+
+
+ The resulting picture is not a slogan. It is a pattern. The Court has not said every
+ Norwegian intervention is unlawful, and it has also declared some applications
+ inadmissible or found no violation in some placements. But the official record still shows
+ a long-running family-life problem serious enough to deserve a proper desk, not just a
+ sidebar.
+
+ This desk separates advocacy framing from court material. Rights-group positions are
+ credited to the organizations themselves, while the legal analysis is anchored to official
+ ECHR sources.
+
+ Public claims come from the live Trivia & Tunes site. Build-state claims are explicitly grounded in the reviewed local repository on April 6, 2026.
+