customer-presentation/protected/deepdive.html
Jonathan Hvid e3439d6c8f deepdive: add Beat-5 'Everything Client-Managed' frame around platform stack
Why: closes the Beat-5 summary with a visible boundary + label so the
"client-managed" point lands visually, not just in copy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 15:11:05 +02:00

396 lines
17 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Fenja AI Platform — Product Deepdive</title>
<link rel="stylesheet" href="/fenja/colors_and_type.css" />
<link rel="stylesheet" href="/platform.css" />
<style>
/* ───── Page scaffolding ─────
Standalone subpage — no SPA page-switching. The deepdive section
is the only "page" here; its internal scroller
(#product-deepdive-scroll) handles all scrolling, so the body
itself stays clipped (matches the timeline page's pattern). */
*, *::before, *::after { box-sizing: border-box; }
html, body {
margin: 0; padding: 0;
height: 100%;
background: var(--background);
color: var(--on-surface);
font-family: var(--font-sans);
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
body {
/* Same warm radial wash as the timeline page so the two surfaces
feel like the same paper. */
background:
radial-gradient(1200px 800px at 18% 45%,
var(--surface-container-lowest) 0%,
var(--background) 55%,
var(--surface-container-low) 100%);
}
/* Reproduce the .page / .is-active contract platform.js expects.
There's only one page here, so it's active from frame 0. */
.page {
position: fixed; inset: 0;
opacity: 0;
pointer-events: none;
transition: opacity 380ms cubic-bezier(0.2, 0, 0, 1);
}
.page.is-active {
opacity: 1;
pointer-events: auto;
}
/* Site wordmark — top-left, links back to the entrance. Mirrors the
masthead pattern from /timeline so the two pages feel paired. */
.site-mark,
.site-mark:link,
.site-mark:visited,
.site-mark:hover,
.site-mark:active,
.site-mark:focus,
.site-mark:focus-visible {
text-decoration: none;
border-bottom: 0;
}
.site-mark {
position: fixed;
top: 28px;
left: 36px;
width: 118px;
height: auto;
z-index: 50;
opacity: 0.85;
display: block;
cursor: pointer;
transition: opacity 200ms ease;
}
.site-mark img {
display: block;
width: 100%;
height: auto;
pointer-events: none;
}
.site-mark:hover,
.site-mark:focus-visible { opacity: 1; }
.site-mark:focus-visible {
outline: 2px solid #785f53;
outline-offset: 6px;
}
@media (max-width: 720px) {
.site-mark { width: 90px; top: 20px; left: 22px; }
}
</style>
</head>
<body data-screen-label="03 Product Deepdive">
<a class="site-mark" href="/timeline" aria-label="Back to the timeline">
<img src="/fenja/fenja-wordmark-black.svg" alt="Fenja" />
</a>
<!-- ───── PRODUCT DEEPDIVE — standalone page ─────
Self-contained page reached at /deepdive. Uses the same internal
scroller (#product-deepdive-scroll) the timeline's deepdive used,
so Lenis + ScrollTrigger.scrollerProxy can be wired without
touching the window scroll. All behaviour lives in /platform.js,
all styles in /platform.css. Pre-set `is-active` so platform.js's
init observer fires immediately on load. -->
<section class="page page-product-deepdive is-active" id="page-product-deepdive" data-screen-label="03 Product Deepdive">
<div id="product-deepdive-scroll">
<!-- ============================================================
"The Question" intro — first section of the Deepdive page.
Full-viewport framing statement, fades in on scroll like
the cards stagger.
============================================================ -->
<section id="platform-question" aria-labelledby="platform-question-head">
<div class="pq-wrap">
<!-- Two-part typographic rhythm: italic serif for the
parallel "isn't enough" rejection (problem), upright
serif for the affirmative resolution. Reads as one
flowing statement, not headline + sub. -->
<h2 id="platform-question-head" class="pq-title">
Renting a few AI capabilities from American companies isn't enough.<br>
Installing an open-source language model isn't enough.
</h2>
<p class="pq-body">
You need a <em>platform you control</em> &mdash; with the
tools, the knowledge, and the framework to make AI
actually do the work your organization needs done.
</p>
</div>
</section>
<!-- ============================================================
"The Layers" entry section — pinned scrubbed five-beat
build. Two columns inside the pin: a copy stage on the left
whose five text panels swap per beat, and an architecture
canvas on the right that assembles progressively (Foundation
in Beat 1+2, Tools in Beat 3, Agents in Beat 4; Beat 5 is
the closing summary against the fully assembled diagram).
A static title sits above the body from the moment the pin
engages.
Layout invariant: the canvas reserves its full final
assembled height from frame 0. Each .pl-group occupies its
final vertical slot from the start (opacity 0 until its
beat). Cards inside reveal in place — settled elements
never move.
All behaviour in /platform.js (initLayers), all styles in
/platform.css (.pl-* selectors).
============================================================ -->
<section id="platform-layers" aria-labelledby="platform-layers-head">
<h2 id="platform-layers-head" class="sr-only" style="position:absolute;left:-9999px;">The Fenja architecture, layer by layer</h2>
<div class="pl-pin">
<!-- HEADER — section title + subtitle. Statically rendered
from the moment the pin engages; visible before any
beat fires. Stays in place while the beats play below. -->
<header class="pl-pin-header">
<p class="pl-pin-title">Fenja AI Platform Architecture</p>
<p class="pl-pin-subtitle">Simply Explained</p>
</header>
<!-- BODY — two-column build. Copy stage (left) and the
diagram canvas (right) live here. -->
<div class="pl-pin-body">
<!-- LEFT — text panel stage. Five beats; each panel is
absolutely positioned, vertically centred within the
stage so shorter panels (Beats 1, 3) read as deliberate
rather than top-anchored fragments. -->
<div class="pl-copy-stage" aria-live="polite">
<!-- Beat 1 — Foundation begins -->
<div class="pl-copy-step" data-beat="1">
<p class="pl-eyebrow">The foundation</p>
<h3 class="pl-headline"><em>A model in your environment.</em></h3>
<p class="pl-body">
A state-of-the-art open-source language model, running
entirely on your hardware. No data leaves your
perimeter. The starting point &mdash; but not yet
Fenja.
</p>
</div>
<!-- Beat 2 — Knowledge added -->
<div class="pl-copy-step" data-beat="2">
<p class="pl-eyebrow">The foundation</p>
<h3 class="pl-headline"><em>Knowledge.</em></h3>
<p class="pl-body">
What makes the model <em>Fenja</em> &mdash; an
understanding of your organization, captured in a wiki
your team can read and edit. Plus the routines and
working memory that turn Fenja into a coworker who
knows how things get done.
</p>
</div>
<!-- Beat 3 — Tools layer arrives -->
<div class="pl-copy-step" data-beat="3">
<p class="pl-eyebrow">What Fenja can do</p>
<h3 class="pl-headline"><em>Tools.</em></h3>
<p class="pl-body">
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.
</p>
</div>
<!-- Beat 4 — Agents layer arrives -->
<div class="pl-copy-step" data-beat="4">
<p class="pl-eyebrow">When one becomes a team</p>
<h3 class="pl-headline"><em>Agents.</em></h3>
<p class="pl-body">
Real work isn't one task. Fenja becomes a team
&mdash; a supervisor and specialists, each focused,
each governed, all dispatched by workflows you've
designed.
</p>
</div>
<!-- Beat 5 — final summary. Diagram is fully assembled
by now; this panel speaks for the whole stack. -->
<div class="pl-copy-step" data-beat="5">
<p class="pl-eyebrow">The full picture</p>
<h3 class="pl-headline"><em>Everything you need and with full control.</em></h3>
<p class="pl-body">
Fenja brings together all the pieces to solve simple
and complex AI use cases across your organisation.
Every component hosted in your infrastructure with
full traceability and governance. Secure and sovereign
by design.
</p>
</div>
</div>
<!-- RIGHT — diagram canvas. Three layer slots, each at its
final vertical position from the start. .pl-canvas-wrap
holds the column; .pl-canvas is the flex container that
stacks the three layers with a 20px gap (per spec). -->
<div class="pl-canvas-wrap">
<div class="pl-canvas">
<!-- Beat-5 frame: thin border around all three layers
with a top-right label. Hidden until Beat 5 fires;
platform.js fades opacity to 1. -->
<div class="pl-canvas-frame" aria-hidden="true">
<span class="pl-canvas-frame-label">Everything Client-Managed</span>
</div>
<!-- Foundation — 3 equal cards (corrects the original
handoff's tall-Knowledge asymmetry: that asymmetry
was for a single Knowledge concept; we've split
Knowledge into Wiki + Routines & memory, so all
three Foundation cards balance). -->
<section class="pl-group" data-layer="foundation" aria-hidden="true">
<header class="pl-group-head">
<span class="pl-group-label">Foundation</span>
<span class="pl-group-caption">Sovereign by design</span>
</header>
<div class="pl-cards pl-cards--3 pl-cards--stretch">
<article class="pl-card" data-card="lm">
<h4 class="pl-card-name">Language model</h4>
<p class="pl-card-italic">State-of-the-art, open-source</p>
<p class="pl-card-mono">On-prem</p>
</article>
<article class="pl-card" data-card="wiki">
<h4 class="pl-card-name">Wiki</h4>
<p class="pl-card-italic">Company and domain knowledge</p>
<p class="pl-card-mono">Organizational &middot; Departmental &middot; Personal</p>
</article>
<article class="pl-card" data-card="routines">
<h4 class="pl-card-name">Routines &amp; memory</h4>
<p class="pl-card-italic">How Fenja works inside it</p>
<p class="pl-card-mono">Stand-ups &middot; Recurring tasks &middot; Working memory</p>
</article>
</div>
</section>
<!-- Tools -->
<section class="pl-group" data-layer="tools" aria-hidden="true">
<header class="pl-group-head">
<span class="pl-group-label">Tools</span>
<span class="pl-group-caption">How Fenja acts</span>
</header>
<div class="pl-cards pl-cards--4 pl-cards--stretch">
<article class="pl-card">
<h4 class="pl-card-name">Document retrieval</h4>
<p class="pl-card-italic">Find and cite</p>
<p class="pl-card-mono">RAG</p>
</article>
<article class="pl-card">
<h4 class="pl-card-name">Structured data (ie SQL)</h4>
<p class="pl-card-italic">Query and extract</p>
<p class="pl-card-mono">NL &rarr; SQL</p>
</article>
<article class="pl-card">
<h4 class="pl-card-name">System actions</h4>
<p class="pl-card-italic">Read and write</p>
<p class="pl-card-mono">APIs &middot; integrations</p>
</article>
<article class="pl-card">
<h4 class="pl-card-name">Custom tools</h4>
<p class="pl-card-italic">Your specific work</p>
<p class="pl-card-mono">Defined by you</p>
</article>
</div>
</section>
<!-- Agents -->
<section class="pl-group" data-layer="agents" aria-hidden="true">
<header class="pl-group-head">
<span class="pl-group-label">Agents</span>
<span class="pl-group-caption">How Fenja scales</span>
</header>
<div class="pl-cards pl-cards--4 pl-cards--stretch">
<article class="pl-card">
<h4 class="pl-card-name">Supervisor</h4>
<p class="pl-card-italic">Plan and dispatch</p>
<p class="pl-card-mono">Orchestration</p>
</article>
<article class="pl-card">
<h4 class="pl-card-name">Specialists</h4>
<p class="pl-card-italic">Focused expertise</p>
<p class="pl-card-mono">Subagents</p>
</article>
<article class="pl-card">
<h4 class="pl-card-name">Skills</h4>
<p class="pl-card-italic">Reusable capability</p>
<p class="pl-card-mono">Portable across specialists</p>
</article>
<article class="pl-card">
<h4 class="pl-card-name">Workflows</h4>
<p class="pl-card-italic">Composed by you</p>
<p class="pl-card-mono">Governed end-to-end</p>
</article>
</div>
</section>
</div>
</div>
</div><!-- /.pl-pin-body -->
</div>
</section>
<!-- "Choose your Capability" — 4 product cards. Final section. -->
<section id="platform-cards" aria-labelledby="platform-cards-head">
<header class="platform-cards-head">
<p class="platform-eyebrow">Deployment options</p>
<h2 id="platform-cards-head" class="platform-title">Choose your <em>Capability.</em></h2>
</header>
<div class="platform-card-grid" role="list">
<article class="platform-card" role="listitem">
<h3 class="platform-card-name">Fenja <em>Core.</em></h3>
<p class="platform-card-tier">Foundational</p>
<p class="platform-card-body">Essential LLM capabilities with Fenja Semantic. Your safe and custom chatbot that understands your organization.</p>
</article>
<article class="platform-card" role="listitem">
<h3 class="platform-card-name">Fenja <em>Dev.</em></h3>
<p class="platform-card-tier">Developer toolset</p>
<p class="platform-card-body">Code faster and better with your own secure AI-supported development platform.</p>
<p class="platform-card-includes">+ Core</p>
</article>
<article class="platform-card" role="listitem">
<h3 class="platform-card-name">Fenja <em>Analyze.</em></h3>
<p class="platform-card-tier">Strategic intel</p>
<p class="platform-card-body">Bring real insights to your people. You ask for an insight, and your agents will find, analyze, and present the relevant data.</p>
<p class="platform-card-includes">+ Core</p>
</article>
<article class="platform-card is-dark" role="listitem">
<h3 class="platform-card-name">Fenja <em>Agentic.</em></h3>
<p class="platform-card-tier">Automation</p>
<p class="platform-card-body">The complete framework. Fully governed and controlled agents collaborate to solve your most important processes.</p>
<p class="platform-card-includes">+ Core. Dev. Analyze.</p>
</article>
</div>
</section>
</div><!-- /#product-deepdive-scroll -->
</section>
<script src="/vendor/lenis.min.js" defer></script>
<script src="/vendor/gsap.min.js" defer></script>
<script src="/vendor/scrolltrigger.min.js" defer></script>
<script src="/platform.js" defer></script>
</body>
</html>