without-ai-lab-branding #1

Merged
aru merged 3 commits from without-ai-lab-branding into main 2026-06-11 12:01:42 +00:00
7 changed files with 104 additions and 183 deletions

View file

@ -1,210 +1,77 @@
# Fenja AI — Business Description # Fenja AI — Business Description
*A synthesis of the company and products described on the project-bifrost.fenja.ai web experience. Drawn entirely from on-site copy: the entrance, timeline, overview, and product deepdive pages.* *Synthesised from the on-site copy of the customer presentation (entrance, timeline, platform overview, deepdive, roadmap, advisory board). Updated to the current customer-facing deck.*
--- ---
## 1. At a glance ## At a glance
**Fenja AI** is a Danish company **and** an AI platform — one organisation, one product, one name. The platform is **client-managed**: it installs into the customer's own environment (on-prem or in their controlled cloud), runs on their hardware, and never sends data to a foreign provider. It is positioned as **"trusted, sovereign AI built in Denmark, for Europe"** and is backed by **Innovationsfonden** (the Danish national Innovation Fund). **Fenja AI** is a Danish company **and** an AI platform — one organisation, one product, one name: *"trusted, sovereign AI built in Denmark, for Europe."* The platform is **client-managed** it installs into the customer's own environment (on-prem or controlled cloud), runs on their hardware, and never sends data to a foreign provider.
The platform brings **language models, organisational knowledge, tools, and agents** together in a single architecture so that a customer can not just run an LLM, but actually get work done with AI under their own governance. It brings **language models, organisational knowledge, tools, and agents** together in one architecture so a customer doesn't just run an LLM — they get governed work done under their own control.
A parallel initiative, **Project Bifrost**, exists alongside the platform. It is the engagement programme through which a curated group of Danish and European organisations help shape Fenja's product roadmap and gain early access to the platform at a subsidised price. **Backing & provenance** (shown across the site):
- **Backed by Innofounder** (Innovationsfonden / Innovation Fund Denmark)
- **Part of AI Lab**, BioInnovation Institute
- **Part of The Regulatory AI-Sandbox** (Datatilsynet & Digitaliseringsstyrelsen)
--- ## The strategic thesis
## 2. The strategic thesis The pitch argues that **European digital sovereignty is now a security imperative, not a procurement preference**, via a 13-event timeline (Sep 2024 → Q1 2026):
Fenja AI's pitch is built on a sustained argument that **European digital sovereignty is no longer a procurement preference — it is a security imperative**. The site presents this argument as a 13-event timeline running from September 2024 through Q1 2026, drawn from public reporting on Danish and European institutions, the U.S. CLOUD Act, the Trump tariffs, and the migration of the International Criminal Court off Microsoft. 1. **Concentration risk** — 3 US firms run ~70% of Europe's cloud and almost all its AI capacity (Draghi Report).
2. **The "kill switch" is real** — Microsoft disabled the ICC prosecutor's email under a US executive order (May 2025); testified to the French Senate it could not guarantee sovereignty even for EU-soil data, because of the US CLOUD Act (June 2025).
3. **Governments treat dependence as a vulnerability** — Copenhagen's Microsoft bill +72% in 5 years; Copenhagen and Aarhus announced Microsoft exits; the Jan 2026 Danish threat assessment listed the US alongside Russia and China for the first time.
4. **Trade weaponisation** — Jan 2026 tariffs on Denmark and seven EU nations tied to Greenland; the DSA/DMA/AI Act reframed by the US as trade barriers.
5. **Regulation won't close the gap** — *"sovereign capacity has to be built, not legislated."*
The thesis can be summarised in five claims: Framing question: *"When AI runs Europe, who runs the AI?"*
1. **Concentration risk is now critical.** Three American firms run roughly 70% of Europe's cloud and almost all of its AI capacity (per the September 2024 Draghi Report). ## Audience
2. **The "kill switch" is real, not theoretical.** In May 2025, Microsoft disabled the email of the ICC chief prosecutor in compliance with a U.S. executive order. In June 2025, Microsoft testified under oath to the French Senate that it could not guarantee European sovereignty even for data stored on European soil with European staff and European keys, because of the U.S. CLOUD Act.
3. **European governments now treat dependence as a vulnerability.** Copenhagen's Microsoft bill rose 72% in five years (313→538M DKK). Copenhagen and Aarhus announced full Microsoft exits. The Danish Minister of Emergency Preparedness has urged every Danish company to "create exit plans for cloud services". The official Danish threat assessment in January 2026 listed the U.S. alongside Russia and China for the first time in history.
4. **Tariffs and trade weaponisation make U.S. dependency a foreign-policy risk.** The January 2026 tariffs on Denmark and seven European nations were tied to demands over Greenland. The DSA, DMA, and AI Act have been reframed by the U.S. administration as discriminatory trade barriers.
5. **Regulation alone will not close the gap.** Europe is "writing rules for infrastructure it does not own" — U.S. hyperscalers add €10B/quarter of European capacity, more than Gaia-X spent in a decade. **Sovereign capacity has to be built, not legislated.**
Fenja AI positions itself as the practical answer to that gap for regulated and security-sensitive Danish and European organisations: not a research project, not an EU policy lever, but a working AI platform a customer can install and run today. Danish and European organisations that need full control of their own AI — **both public sector and highly-regulated private organisations** (protecting their data, IP, and regulated workflows from US-vendor dependency). The deck is **customer-facing** — an introduction shown to prospects — that also explains Project Bifrost in context.
The site's framing question — *"When AI runs Europe, who runs the AI?"* — captures the pitch in one line. ## The platform — four layers
--- Positioned against two insufficient alternatives: renting AI from US firms (sovereignty risk) and DIY open-source LLM deployment (*"a model alone isn't enough"*).
## 3. The company 1. **Foundation — language model.** A state-of-the-art open-source model, deployed on-prem. The starting point, but not yet Fenja.
2. **Foundation — knowledge.** What makes it Fenja. **Wiki** (organisational/departmental/personal knowledge, captured via the *Fenja AI Compiler* into the structured *Fenja Wiki* with citations) + **routines & memory** (stand-ups, recurring tasks, working memory) — *"a coworker who knows how things get done."*
3. **Tools — how Fenja acts.** Document retrieval (RAG), structured-data/SQL query, system actions (read/write across systems), custom tools.
4. **Agents — how Fenja scales.** Supervisor (orchestration), specialists (subagents), skills (portable capability), workflows (customer-composed, governed end-to-end).
**Fenja AI** is the company name and the product name. The site is explicit that this is intentional: *"Fenja AI is both our company and our platform — one mission, one name."* *"Everything you need, with full control"* — one client-managed stack from foundation model up through governed multi-agent workflows.
Stated identity: ## Capabilities ("Choose your Capability")
- **Origin:** Built in Denmark. Four progressively-bundled tiers:
- **Audience:** Danish and European organisations that need full control over their own AI.
- **Backer:** Innovationsfonden (the Danish Innovation Fund). The phrase "Backed by Innovationsfonden" appears on the welcome screen, the hero, and the join footer; the pilot subsidy explicitly references the same fund.
- **Stance:** Trusted, sovereign, client-managed. Throughout the site, "client-managed" is the operative phrase — Fenja is not a SaaS, not a hyperscaler resale, not a hosted product. It runs in the customer's environment.
The site does not name founders, headcount, or revenue figures. - **Fenja Core** (foundational) — essential LLM capabilities with **Fenja Semantic**, a safe custom chatbot that understands the organisation.
- **Fenja Dev** (developer toolset, + Core) — secure AI-supported development platform.
- **Fenja Analyze** (strategic intel, + Core) — agents that find, analyze, and present insights.
- **Fenja Agentic** (automation, + Core/Dev/Analyze) — the complete framework; governed agents collaborate on critical processes.
--- ## Implementation roadmap
## 4. The platform — architecture in four layers *"One foundation, many use cases."* — **Setup** (platform live in your environment: model, SSO, brand voice, baseline policies) → **Knowledge** (capture tacit expertise via AI-led interviews) → **Tools** (wire into warehouses, SharePoint, APIs) → **Agents** (governed end-to-end workflows). A continuous **Govern & scale** band runs alongside all stages (security, compliance, change management, training, advisory-council feedback).
The site introduces the platform as **"The Fenja AI platform in four steps"** and reinforces three parallel framings: ## Project Bifrost — the engagement programme
- **One complete platform:** *"Fenja AI brings models, knowledge, tools, and agents together in one platform for using and scaling AI across your organisation."* A parallel initiative (not a product) that brings a curated group of Danish/European organisations into Fenja's product design — *"built with them, not just for them."* Members get three inseparable things: **Community** (a peer network on the sovereignty problem), **Advisory Council** (regular sessions shaping the roadmap), and **Pilot Projects** (early platform access at a reduced price, subsidised by the Innovation Fund). After joining: the team reaches out, the participant gets a project-portal invite, a first advisory-council meeting is scheduled, and pilot participation is discussed individually.
- **Full control:** *"Fenja AI is installed in your own client-managed environment, giving you full control over data, security, and governance."*
- **Sovereignty:** *"Fenja AI is built in Denmark for European organisations that want trusted, sovereign AI on their own terms."*
The architecture itself is then described both at the timeline-overview level (four layers) and in the deepdive (a more detailed five-beat build with specific cards inside each layer). The deepdive version is the canonical, more-precise statement. ## Advisory Board
### Layer 1 — Foundation: the language model A real, named board — *"Bridging industry & sovereign AI"* — drawn from regulated Danish institutions and major enterprises:
A **state-of-the-art, open-source language model**, deployed **on-prem** in the customer's environment. No data leaves the customer's perimeter. The site frames this as the necessary starting point but explicitly *not yet Fenja* on its own — *"Installing an open-source language model isn't enough."* - **Søren Friis** — IT Director, DSB
- **William Irving** — Chief Data & Analytics Officer, Norlys
- **Ulla Nygaard Eliassen** — Associate Improvement Project Director, Novo Nordisk
- **Anna Jessen** — Director, Process Excellence & Digitalization, Novo Nordisk
- **Mathies Laursen** — CDO, Nationalbanken
- **Torben Schütt** — Office Director, Center for Cyber and Digitalization, Forsvarsministeriet
- **Mads Nyborg** — Chief Consultant, Data & Analytics, Københavns Kommune
- **Håkon Daltveit** — Chief Consultant, Data & Analytics, Københavns Kommune
### Layer 2 — Foundation: knowledge ## In one paragraph
What turns a generic open-source model into *Fenja*. Two sub-components are called out as cards: **Fenja AI is a Danish-built, client-managed AI platform — backed by Innofounder/Innovationsfonden, part of the BioInnovation Institute AI Lab and the Regulatory AI-Sandbox — for public-sector and highly-regulated private organisations that need full control of their own AI. It combines an on-prem open-source model, an organisational knowledge layer (Fenja Wiki + routines/memory), a tools layer, and a governed agent framework into one stack inside the customer's environment, sold as four bundled capabilities (Core, Dev, Analyze, Agentic) and delivered via a Setup → Knowledge → Tools → Agents roadmap. The customer-facing pitch is grounded in a concrete thesis — US cloud/AI dependency is now a security and trade-policy risk Europe must answer by building sovereign capacity — and is reinforced by Project Bifrost (community, advisory council, subsidised pilots) and a named advisory board from DSB, Norlys, Novo Nordisk, Nationalbanken, Forsvarsministeriet, and Københavns Kommune.**
- **Wiki** — Company and domain knowledge captured in a wiki the customer's team can read and edit. Three scopes: **organisational, departmental, personal**.
- **Routines & memory** — How Fenja works inside the organisation: **stand-ups, recurring tasks, working memory**. The framing positions Fenja as "a coworker who knows how things get done", not a chatbot.
### Layer 3 — Tools: how Fenja acts
Four tool families are listed:
- **Document retrieval** — Find and cite. (RAG.)
- **Structured data (e.g. SQL)** — Query and extract. Natural language → SQL.
- **System actions** — Read and write across the customer's systems. APIs and integrations.
- **Custom tools** — Defined by the customer for their specific work.
The framing: *"How knowledge becomes work. Fenja uses tools to find documents, query data, take action across your systems. Some are obvious; others depend on what your work needs."*
### Layer 4 — Agents: how Fenja scales
Four agent constructs:
- **Supervisor** — Plan and dispatch. Orchestration.
- **Specialists** — Focused expertise. Subagents.
- **Skills** — Reusable capability, portable across specialists.
- **Workflows** — Composed by the customer. Governed end-to-end.
The framing: *"Real work isn't one task. Fenja becomes a team — a supervisor and specialists, each focused, each governed, all dispatched by workflows you've designed."*
### The summary claim
Once the four layers are assembled, the deepdive closes with: *"Everything you need and with full control. Fenja brings together all the pieces to solve simple and complex AI use cases across your organisation."*
This is the core differentiation argument: not "we sell you an LLM" and not "we sell you a chatbot", but a complete on-prem stack from foundation model up through governed multi-agent workflows.
---
## 5. The products — four capabilities
Fenja is sold as four named capability tiers that build on each other. The deployment story: a customer starts with **Core** and adds **Dev**, **Analyze**, and/or **Agentic** as their needs grow. The dark-tile **Agentic** tier is the full bundle.
### Fenja Core
**Tier:** Foundational.
**Includes:** Essential LLM capabilities with Fenja Semantic — a safe and custom chatbot that understands the customer's organisation.
**Audience:** Any customer starting their sovereign-AI journey. The baseline.
### Fenja Dev
**Tier:** Developer toolset.
**Includes:** Fenja Core, plus an AI-supported development platform.
**Promise:** *"Code faster and better with your own secure AI-supported development platform."*
**Audience:** Engineering teams who want a coding-assistant capability without sending source code to an external provider.
### Fenja Analyze
**Tier:** Strategic intel.
**Includes:** Fenja Core, plus an analytics and insights capability.
**Promise:** *"Bring real insights to your people. You ask for an insight, and your agents will find, analyze, and present the relevant data."*
**Audience:** Analysts, decision-makers, knowledge workers — anyone whose value comes from synthesising data across the organisation.
### Fenja Agentic
**Tier:** Automation. The complete framework.
**Includes:** Core + Dev + Analyze.
**Promise:** *"The complete framework. Fully governed and controlled agents collaborate to solve your most important processes."*
**Audience:** Customers ready to operationalise AI as governed multi-agent workflows across critical processes — not just assist humans, but run end-to-end work under human oversight.
---
## 6. Project Bifrost — the engagement programme
**Project Bifrost** is positioned as a parallel initiative, not a product:
> *"Project Bifrost is the bridge between an industrial-grade AI platform and the realities of regulated organisations — built with them, not just for them."*
The Norse-mythology naming is deliberate: Bifrost is the bridge between worlds. In Fenja's framing, the two worlds are (a) a fast-moving, industrial-grade AI platform and (b) the slower-moving operational, legal, and security realities of regulated European organisations. Project Bifrost is the structured way the two are reconciled in product design.
Members of Project Bifrost get **three things** — and the site is explicit that these are inseparable, not a menu:
### 6.1 Community — shape the future together
> *"Join a select community of organisations helping define the future of trusted sovereign AI in Denmark and Europe. At a time when Europe needs greater technological independence, this is an opportunity to contribute to an AI platform built on trust, shared ambition, and a common mission."*
A peer network of like-minded Danish and European organisations engaged in the same sovereignty problem. The framing emphasises **trust, shared ambition, and a common mission** rather than transactional vendor/customer dynamics.
### 6.2 Advisory Council — turn insight into influence
> *"Take part in regular advisory council sessions where your input directly shapes the product and platform roadmap. Gain first-hand insight into cutting-edge AI developments and help influence what is built, which capabilities are prioritised, and how the platform evolves to meet real organisational needs."*
A formal feedback channel into the product. Members influence which capabilities are prioritised, how governance is built in, how the platform fits into regulated environments. This is the mechanism that makes the "*built with you, not just for you*" claim concrete.
### 6.3 Pilot Projects — access the platform before others
> *"A select number of Project Bifrost participants will have the opportunity to join pilot projects and gain early access to the platform at a significantly reduced price, subsidised by the Innovation Fund. This gives your organisation the chance to explore cutting-edge sovereign AI early, realise value at low cost, and help shape the platform through real-world use."*
Early commercial access. Crucially, the **pricing is subsidised by Innovationsfonden**, which materially lowers the cost of the pilot for the participant and is part of why participation is positioned as "selectivity" rather than a sales motion.
### 6.4 What happens after a customer joins
The post-join confirmation panel commits to a specific sequence:
1. The Fenja AI team reaches out shortly.
2. The participant receives an invitation to the **project portal**, where all communication, materials, and updates live.
3. A date is being set for the **first advisory council meeting**; the participant will be invited.
4. Pilot-project participation is discussed individually shortly after.
---
## 7. The invitation framing
The web experience itself is invite-gated — visitors land on an email entry, the email is checked against an invite list, and only invited contacts get past the welcome step. The welcome copy makes this explicit:
> *"This is a personal invitation because we believe your perspective can make a meaningful contribution to an important mission: building trusted, sovereign AI for Denmark and Europe. In this short web experience, we will explain why this matters, what Fenja AI is, and how you, through Project Bifrost, can help shape its future."*
Two terms are then defined for the visitor:
- **Fenja AI** — *"The company and platform for sovereign and safe AI."*
- **Project Bifrost** — *"The initiative created to ensure that Fenja AI is built not just for organisations like yours, but with you."*
This invite-only positioning reinforces the selectivity narrative around Project Bifrost: it is not a sign-up form, it is a curated cohort.
---
## 8. Differentiation — what Fenja is not
The deepdive's framing question makes the negative space explicit:
> *"Renting a few AI capabilities from American companies isn't enough. Installing an open-source language model isn't enough. You need a platform you control — with the tools, the knowledge, and the framework to make AI actually do the work your organization needs done."*
This positions Fenja against three implicit alternatives:
1. **U.S. AI APIs (OpenAI, Anthropic, etc.)** — rejected on sovereignty grounds. The CLOUD Act narrative on the timeline is the supporting argument: even European-soil U.S.-vendor data is reachable by U.S. authorities.
2. **DIY open-source LLM deployment** — acknowledged as necessary but insufficient. A model alone is "the starting point — but not yet Fenja". Without the knowledge layer, tool integrations, and agent framework, the customer has running infrastructure but no actual capability to do work.
3. **EU-policy-led sovereignty (Gaia-X, regulation)** — implicitly framed as too slow on the timeline ("Europe writes rules for infrastructure it does not own"). Fenja's argument is that sovereign capacity has to be **built and shipped**, not merely legislated.
Fenja's positive claim is the combination: **on-prem foundation model + organisational knowledge + tool integrations + governed agent framework**, all from one vendor, all in one client-managed deployment, all under the customer's control.
---
## 9. Backing and provenance
- **Innovationsfonden** (Innovation Fund Denmark) — the consistent backer reference across every page of the site. It appears in the entrance footer, the platform hero, the join footer, and is named explicitly in the Pilot Projects pricing description.
- **Built in Denmark** — surfaced in the hero, the architecture rotating taglines, and the join footer ("Built in Denmark. Supported by the Innovation Fund.").
- **For Europe** — the consistent geographic scope. Customer language is always "Danish and European organisations", and the strategic thesis is European, not just Danish.
---
## 10. Summary in one paragraph
**Fenja AI is a Danish-built, client-managed AI platform for Danish and European organisations that need full control over their own AI. The platform combines an on-prem open-source language model, an organisational knowledge layer (wiki, routines, working memory), a tools layer (document retrieval, structured-data query, system actions, custom tools), and an agent framework (supervisor, specialists, skills, workflows) into a single architecture deployed inside the customer's environment. It is sold as four progressively-bundled capabilities — Fenja Core, Fenja Dev, Fenja Analyze, and Fenja Agentic. A parallel initiative, Project Bifrost, brings a curated group of regulated organisations into the product's design through a community, an advisory council, and subsidised pilot projects funded by Innovationsfonden. The pitch is grounded in a concrete strategic argument: U.S. cloud and AI dependency is now a security and trade-policy risk for Europe, regulation alone will not close the gap, and sovereign AI capacity has to be built in-region — which is what Fenja AI is.**

View file

@ -2681,7 +2681,7 @@ html {
<span class="support-credit-name">Innofounder</span> <span class="support-credit-name">Innofounder</span>
<span class="support-credit-auth">Innovationsfonden</span> <span class="support-credit-auth">Innovationsfonden</span>
</div> </div>
<div class="support-credit"> <div class="support-credit" data-ailab>
<span class="support-credit-label">Part of</span> <span class="support-credit-label">Part of</span>
<span class="support-credit-name">AI Lab</span> <span class="support-credit-name">AI Lab</span>
<span class="support-credit-auth">BioInnovation Institute</span> <span class="support-credit-auth">BioInnovation Institute</span>

View file

@ -166,7 +166,7 @@
<span class="m-credit-name">Innofounder</span> <span class="m-credit-name">Innofounder</span>
<span class="m-credit-auth">Innovationsfonden</span> <span class="m-credit-auth">Innovationsfonden</span>
</div> </div>
<div class="m-credit"> <div class="m-credit" data-ailab>
<span class="m-credit-label">Part of</span> <span class="m-credit-label">Part of</span>
<span class="m-credit-name">AI Lab</span> <span class="m-credit-name">AI Lab</span>
<span class="m-credit-auth">BioInnovation Institute</span> <span class="m-credit-auth">BioInnovation Institute</span>

View file

@ -21,12 +21,30 @@
// protected/mobile/index.html and never by the desktop view. // protected/mobile/index.html and never by the desktop view.
// ───────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────
/* AI Lab credit visibility
The "Part of AI Lab" affiliation credit is shown to everyone except
one viewer, who has asked that it never appear while they present.
Hidden client-side once /auth/me returns the email. Compared
lower-cased so casing doesn't matter; the container is display:flex,
so an inline display:none is used (it beats the stylesheet rule,
where the [hidden] attribute would not). */
const AILAB_HIDE_EMAIL = 'alz@bii.dk';
function applyAilabVisibility(email) {
if (!email || email.trim().toLowerCase() !== AILAB_HIDE_EMAIL) return;
document.querySelectorAll('[data-ailab]').forEach((el) => {
el.style.display = 'none';
});
}
(async function checkSession() { (async function checkSession() {
try { try {
const res = await fetch('/auth/me', { credentials: 'same-origin' }); const res = await fetch('/auth/me', { credentials: 'same-origin' });
if (!res.ok) { if (!res.ok) {
window.location.href = '/'; window.location.href = '/';
return;
} }
const data = await res.json().catch(() => ({}));
applyAilabVisibility(data.email);
} catch { } catch {
// Network error — do not boot the user out; desktop behaviour is // Network error — do not boot the user out; desktop behaviour is
// the same. If the next action actually needs the server, we'll // the same. If the next action actually needs the server, we'll

View file

@ -465,6 +465,22 @@ document.querySelectorAll('.dot-btn').forEach(btn => {
}); });
/*
AI Lab credit visibility the "Part of AI Lab" affiliation in the
hero foot is shown to everyone except one viewer, who has asked that
it never appear while they present. Hidden client-side once /auth/me
returns the email. Compared lower-cased so casing doesn't matter;
the container is display:flex, so an inline display:none is used (it
beats the stylesheet rule, where the [hidden] attribute would not).
*/
const AILAB_HIDE_EMAIL = 'alz@bii.dk';
function applyAilabVisibility(email) {
if (!email || email.trim().toLowerCase() !== AILAB_HIDE_EMAIL) return;
document.querySelectorAll('[data-ailab]').forEach((el) => {
el.style.display = 'none';
});
}
/* /*
First name propagation fetched from /auth/me on load. First name propagation fetched from /auth/me on load.
Used by Scene 3 ("This is why we've invited you, [Name]."). Used by Scene 3 ("This is why we've invited you, [Name].").
@ -477,6 +493,7 @@ document.querySelectorAll('.dot-btn').forEach(btn => {
if (res.ok) { if (res.ok) {
const data = await res.json().catch(() => ({})); const data = await res.json().catch(() => ({}));
window.__fenjaFirstName = data.firstName || null; window.__fenjaFirstName = data.firstName || null;
applyAilabVisibility(data.email);
} }
} catch { } catch {
// Offline — leave undefined; bifrost.js falls back to the // Offline — leave undefined; bifrost.js falls back to the

View file

@ -377,7 +377,7 @@
<span class="welcome-credit-name">Innofounder</span> <span class="welcome-credit-name">Innofounder</span>
<span class="welcome-credit-auth">Innovationsfonden</span> <span class="welcome-credit-auth">Innovationsfonden</span>
</div> </div>
<div class="welcome-credit"> <div class="welcome-credit" data-ailab>
<span class="welcome-credit-label">Part of</span> <span class="welcome-credit-label">Part of</span>
<span class="welcome-credit-name">AI Lab</span> <span class="welcome-credit-name">AI Lab</span>
<span class="welcome-credit-auth">BioInnovation Institute</span> <span class="welcome-credit-auth">BioInnovation Institute</span>

View file

@ -53,6 +53,21 @@
requestAnimationFrame(() => setTimeout(() => wrap.classList.add('is-ready'), 120)); requestAnimationFrame(() => setTimeout(() => wrap.classList.add('is-ready'), 120));
})(); })();
/* AI Lab credit visibility
The "Part of AI Lab" affiliation credit is shown to everyone except
one viewer, who has asked that it never appear while they present.
Hidden client-side once we know the email compared lower-cased so
casing in the invite list or the typed address doesn't matter. The
container is display:flex, so an inline display:none is used (it beats
the stylesheet rule; the [hidden] attribute would not). */
const AILAB_HIDE_EMAIL = 'alz@bii.dk';
function applyAilabVisibility(email) {
if (!email || email.trim().toLowerCase() !== AILAB_HIDE_EMAIL) return;
document.querySelectorAll('[data-ailab]').forEach((el) => {
el.style.display = 'none';
});
}
/* ───── Step transitions ───── */ /* ───── Step transitions ───── */
const steps = { const steps = {
email: document.getElementById('step-email'), email: document.getElementById('step-email'),
@ -146,6 +161,9 @@ emailForm.addEventListener('submit', async (e) => {
// welcome step and advance. // welcome step and advance.
const data = await res.json().catch(() => ({})); const data = await res.json().catch(() => ({}));
setWelcomeTitle(data.firstName || null); setWelcomeTitle(data.firstName || null);
// /auth/login returns {ok, firstName} — no email — so use the
// address the visitor just authenticated with.
applyAilabVisibility(email);
setAck(emailAck, '', false); setAck(emailAck, '', false);
showStep('welcome'); showStep('welcome');
} catch (err) { } catch (err) {
@ -173,6 +191,7 @@ document.getElementById('welcome-continue').addEventListener('click', () => {
authed = true; authed = true;
const data = await res.json().catch(() => ({})); const data = await res.json().catch(() => ({}));
firstName = data.firstName || null; firstName = data.firstName || null;
applyAilabVisibility(data.email);
} }
} catch { /* offline — fall through to email */ } } catch { /* offline — fall through to email */ }