From 5217c574e9706c6fabd21d78a47cfda6217ac38d Mon Sep 17 00:00:00 2001 From: Codex Date: Sun, 20 Sep 2026 19:43:33 +0200 Subject: [PATCH] Update interactive presentation and presenter console --- presentation/deck/ai-callouts.css | 39 ++ presentation/deck/artificial-brain.svg | 9 + presentation/deck/deck.css | 7 +- presentation/deck/index.html | 449 +++++++++++++----- presentation/deck/presenter-bridge.js | 76 +++ presentation/deck/screenshot-tour.css | 40 ++ presentation/deck/screenshot-tour.js | 39 ++ presentation/deck/screenshots/1-HomePage.png | Bin 0 -> 644879 bytes .../deck/screenshots/2-PatientList.png | Bin 0 -> 696670 bytes .../deck/screenshots/3-PatientGeneralData.png | Bin 0 -> 564625 bytes .../deck/screenshots/4-PatientDetail.png | Bin 0 -> 738152 bytes .../screenshots/5-PatientProcedureDetails.png | Bin 0 -> 740662 bytes .../deck/screenshots/6-DashboardsList.png | Bin 0 -> 853582 bytes .../deck/screenshots/7-Brugada-dashboard.png | Bin 0 -> 610159 bytes presentation/deck/slide-lens.css | 127 +++++ presentation/deck/slide-lens.js | 121 +++++ presentation/presenter/README.md | 64 +++ presentation/presenter/index.html | 41 ++ presentation/presenter/presenter.css | 86 ++++ presentation/presenter/presenter.js | 263 ++++++++++ presentation/slides/08-validation-sources.md | 69 +++ 21 files changed, 1318 insertions(+), 112 deletions(-) create mode 100644 presentation/deck/ai-callouts.css create mode 100644 presentation/deck/artificial-brain.svg create mode 100644 presentation/deck/presenter-bridge.js create mode 100644 presentation/deck/screenshot-tour.css create mode 100644 presentation/deck/screenshot-tour.js create mode 100644 presentation/deck/screenshots/1-HomePage.png create mode 100644 presentation/deck/screenshots/2-PatientList.png create mode 100644 presentation/deck/screenshots/3-PatientGeneralData.png create mode 100644 presentation/deck/screenshots/4-PatientDetail.png create mode 100644 presentation/deck/screenshots/5-PatientProcedureDetails.png create mode 100644 presentation/deck/screenshots/6-DashboardsList.png create mode 100644 presentation/deck/screenshots/7-Brugada-dashboard.png create mode 100644 presentation/deck/slide-lens.css create mode 100644 presentation/deck/slide-lens.js create mode 100644 presentation/presenter/README.md create mode 100644 presentation/presenter/index.html create mode 100644 presentation/presenter/presenter.css create mode 100644 presentation/presenter/presenter.js create mode 100644 presentation/slides/08-validation-sources.md diff --git a/presentation/deck/ai-callouts.css b/presentation/deck/ai-callouts.css new file mode 100644 index 00000000..310e775f --- /dev/null +++ b/presentation/deck/ai-callouts.css @@ -0,0 +1,39 @@ +/* Artificial-brain controls and clearly separated explanatory callouts. */ +.arit.flow-slide .fcol.ai-hit { flex-basis: 62px; } +.arit.flow-slide .brain-btn { + width: 56px; height: 56px; border-radius: 9px; + border: 1.5px solid var(--bordeaux); background: var(--surface); + box-shadow: 0 3px 8px oklch(26% .02 15 / .1); +} +.arit.flow-slide .fcol.ai > .brain-btn { top: -54px; right: 6px; } +.arit.flow-slide .brain-btn:hover, .arit.flow-slide .brain-btn:focus-visible { + transform: none; background: var(--bordeaux-tint); + box-shadow: 0 0 0 4px var(--bordeaux-tint); +} +.arit.flow-slide .brain-btn[aria-pressed="true"] { outline: 3px solid var(--bordeaux); outline-offset: 4px; } +.artificial-brain { display: block; width: 46px; height: 46px; } +.arit.flow-slide .brain-btn .ai-label { + position: absolute; left: 50%; top: -24px; transform: translateX(-50%); + display: grid; place-items: center; width: 42px; height: 25px; + border: 1.5px solid var(--bordeaux); border-radius: 5px 5px 0 0; + background: var(--bordeaux); color: var(--surface); + font: 800 18px/1 var(--sans); letter-spacing: .04em; +} +.arit.flow-slide .brain-btn .ai-number { + display: none; +} +/* The first AI control is in normal flow, but still anchors its AI label. */ +.arit.flow-slide .fcol.ai-hit .brain-btn { position: relative; top: auto; right: auto; } +.ai-pop.is-ai .ai-pop-card { + box-sizing: border-box; + width: min(540px, calc(100vw - 48px)); max-height: calc(100vh - 48px); + overflow-y: auto; border: 2px solid var(--bordeaux); background: var(--surface); + transform: none; transition: none; +} +.ai-pop.is-ai .ai-line line { stroke: var(--bordeaux); stroke-width: 4; } +.ai-pop.is-ai .ai-line circle { fill: var(--bordeaux); } +.ai-pop-title .artificial-brain { width: 40px; height: 40px; } +.ai-pop-title #aiPopBrain { flex: 0 0 44px; width: 44px; height: 44px; border: 0; background: none; } +@media (prefers-reduced-motion: reduce) { + .arit.flow-slide .brain-btn { transition: none; } +} diff --git a/presentation/deck/artificial-brain.svg b/presentation/deck/artificial-brain.svg new file mode 100644 index 00000000..7cbcf394 --- /dev/null +++ b/presentation/deck/artificial-brain.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/presentation/deck/deck.css b/presentation/deck/deck.css index 5f5be81d..dfb9f0bf 100644 --- a/presentation/deck/deck.css +++ b/presentation/deck/deck.css @@ -44,6 +44,7 @@ font: 600 10px/1.4 var(--sans); letter-spacing: .03em; color: var(--ink-muted); } .arit .foot span { white-space: nowrap; flex-shrink: 0; } +.presenter-preview .arit .foot { display: none; } .arit .foot span:first-child { overflow: hidden; text-overflow: ellipsis; flex-shrink: 1; min-width: 0; } .arit .foot span:first-child { overflow: hidden; text-overflow: ellipsis; flex-shrink: 1; } .arit .sbody { flex: 1; min-height: 0; display: flex; flex-direction: column; padding: 30px 48px 22px; text-align: left; } @@ -286,12 +287,12 @@ button.brain-btn { cursor: pointer; padding: 0; transition: transform .15s ease, button.brain-btn:hover, button.brain-btn:focus-visible { transform: scale(1.18); box-shadow: 0 0 0 5px rgba(203,51,59,.14); outline: none; } /* popup */ -.ai-pop { position: fixed; inset: 0; z-index: 100; background: rgba(42,36,38,.45); backdrop-filter: blur(2px); +.ai-pop { position: fixed; inset: 0; z-index: 100; background: rgba(42,36,38,.12); display: block; opacity: 0; pointer-events: none; transition: opacity .2s ease; } .ai-pop.open { opacity: 1; pointer-events: auto; } .ai-line { position: absolute; left: 0; top: 0; width: 100%; height: 100%; pointer-events: none; } -.ai-line line { stroke: var(--bordeaux); stroke-width: 2.5; } -.ai-line circle { fill: var(--bordeaux); } +.ai-line line { stroke: var(--bordeaux-deep); stroke-width: 5; stroke-linecap: round; filter: drop-shadow(0 0 2px #fff); } +.ai-line circle { fill: var(--bordeaux-deep); stroke: #fff; stroke-width: 1.5; } .ai-pop-card { position: absolute; width: min(580px, 92vw); background: #fff; border: 1px solid var(--line); border-radius: 12px; box-shadow: 0 18px 50px rgba(42,36,38,.28); padding: 24px 28px 22px; transform: translateY(14px) scale(.95); transition: transform .24s cubic-bezier(.2,.9,.3,1.15); text-align: left; } diff --git a/presentation/deck/index.html b/presentation/deck/index.html index bb141787..22ab1d30 100644 --- a/presentation/deck/index.html +++ b/presentation/deck/index.html @@ -5,7 +5,10 @@ AritmoLab — Role of AI in the Analysis of Unstructured Clinical Databases - + + + +
@@ -34,11 +37,11 @@

“Multidimensional Characterization of Cardiac Arrhythmias: Role of Electrocardiology in the Artificial Intelligence Era”

San Donato Milanese, Milan, Italy · 2–3 October 2026

-
Role of AI in the Analysis of Unstructured Clinical DatabasesDr. Marco Pancotti - MultiPhysixLabDr. Sara Paratico - Gruppo San DonatoSan Donato Milanese, Milan, Italy · 2–3 October 202601 / 14
+
Role of AI in the Analysis of Unstructured Clinical DatabasesDr. Marco Pancotti - MultiPhysixLabDr. Sara Paratico - Gruppo San DonatoSan Donato Milanese, Milan, Italy · 2–3 October 202601 / 13
@@ -52,7 +55,7 @@ Where we started
-

Four islands and four missing pieces

+

Where we started - Four islands and four missing pieces

?Clinical Intelligencedashboards on the clinical history of the Unit and its patients
@@ -68,7 +71,7 @@ Genetic dataDNA instruments — results typed into Excel by hand + Aritmolab Portalmeant to host Cardioref + genetics — still immature @@ -76,9 +79,20 @@

▸ click a system: how it was used — and what held it back · click a missing piece: what it would have given

-
Role of AI in the Analysis of Unstructured Clinical DatabasesDr. Marco Pancotti - MultiPhysixLabDr. Sara Paratico - Gruppo San DonatoSan Donato Milanese, Milan, Italy · 2–3 October 202602 / 14
+
Role of AI in the Analysis of Unstructured Clinical DatabasesDr. Marco Pancotti - MultiPhysixLabDr. Sara Paratico - Gruppo San DonatoSan Donato Milanese, Milan, Italy · 2–3 October 202602 / 13
@@ -94,37 +108,72 @@
The plan

What we wanted to build

-

One platform, two destinations: the 360° patient portal and a research-ready warehouse. Built on open-source pillars, with AI coding agents wherever they helped. This talk follows the hardest piece — the unstructured data.

+

One platform, two destinations: the 360° patient portal and a research-ready warehouse. Built on open-source pillars, with AI coding agents wherever they helped. Next, we’ll look at the hardest part: unstructured data.

-
+
+ + Cardiorefcardiology records · procedures · letters + Genetic datalabs · variants · nomenclature + ECGsignals · device follow-up + +Future sourcesnew subsystems can be connected as sources + + +
- +
→
What we built
-
Stagingraw replica of the sources
+
→
- -
Integrationcleaned, normalized, deduplicated
+ +
AI reads the clinical text: pathologies, procedures, drug-challenge outcomes
→
-
Star schemadimensional transformation
+
→
- -
Datamartsresearch-ready marts
+ +
AI builds them on demand from plain-English questions (ThothII)
→
@@ -143,11 +192,23 @@ Authentik · auth — GSD LDAP
-
Role of AI in the Analysis of Unstructured Clinical DatabasesDr. Marco Pancotti - MultiPhysixLabDr. Sara Paratico - Gruppo San DonatoSan Donato Milanese, Milan, Italy · 2–3 October 202603 / 14
+
Role of AI in the Analysis of Unstructured Clinical DatabasesDr. Marco Pancotti - MultiPhysixLabDr. Sara Paratico - Gruppo San DonatoSan Donato Milanese, Milan, Italy · 2–3 October 202603 / 13
@@ -207,9 +268,9 @@
-
Role of AI in the Analysis of Unstructured Clinical DatabasesDr. Marco Pancotti - MultiPhysixLabDr. Sara Paratico - Gruppo San DonatoSan Donato Milanese, Milan, Italy · 2–3 October 202604 / 14
+
Role of AI in the Analysis of Unstructured Clinical DatabasesDr. Marco Pancotti - MultiPhysixLabDr. Sara Paratico - Gruppo San DonatoSan Donato Milanese, Milan, Italy · 2–3 October 202604 / 13
@@ -253,7 +314,7 @@
Audited. A new rule set goes live only after it proves ≥95% accuracy on 100 records reviewed by hand.
- +