From 08f42a5f48a404ab660eac5d320e5761ba561411 Mon Sep 17 00:00:00 2001 From: Codex Date: Thu, 24 Sep 2026 22:28:58 +0200 Subject: [PATCH] Refine presentation flow and speaker notes --- PROJECT_STATE.md | 36 ++- presentation/deck/index.html | 353 +++++++++----------------- presentation/deck/screenshot-tour.css | 3 +- presentation/presenter/README.md | 23 +- presentation/presenter/index.html | 4 +- presentation/presenter/presenter.js | 19 +- 6 files changed, 162 insertions(+), 276 deletions(-) diff --git a/PROJECT_STATE.md b/PROJECT_STATE.md index 15c52b8f..f7aed2cf 100644 --- a/PROJECT_STATE.md +++ b/PROJECT_STATE.md @@ -1,6 +1,6 @@ # ThothII — Project State -Last updated: 2026-09-24 (slide 11 PNG numbering aligned with popups). +Last updated: 2026-09-24 (11-slide deck, consolidated project opening and final contacts). This file is the short operational snapshot. Stable commands and the architecture mental model live in `AGENTS.md`; current design and runtime contracts live under `docs/architecture/`, @@ -14,18 +14,42 @@ requirements as mandatory; do not replace the running server stack in place. ## Presentation publishing +The deck now has 11 slides. The cover remains; “Where we started” is folded into +“What we wanted to build”, now slide 2. Its speaker notes open with the four goals, +and its existing popups include the disconnected sources and missing capabilities. +Speaker notes now read as continuous prose without titles. On slide 2 and slides +7–10, parenthesized cues identify the corresponding popup button at the start of +its paragraph or dedicated popup text. The closing slide has no popup cues. +The console reading area also omits slide and popup headings; popup controls +remain below the preview. Edits preserve the content and keep the spoken text close +to its previous length; actual delivery time still depends on rehearsal. The former +penultimate “One datamart — many questions answered” slide is removed. The ThothII +tour leads directly to “Thank you”, with both contact emails in bold 32px type. + +Slide 8 now has four popups: Home page, Patient data (original PNG 3), +Dashboard catalogue (PNG 6), and Brugada dashboard (PNG 7), numbered 1–4. +Each has dedicated presenter notes; the opening explains the portal's breadth, +the limited time, and Marco and Sara's availability for an in-person or remote +follow-up. The overview uses a two-by-two grid; unused PNGs remain on disk. + Presentation PNG source (user instruction, 2026-09-23): all PNGs to import come from `/Users/mp/Desktop/ScreenshotPresentation/ThothIIScreens/`. This is the verified on-disk path the user refers to as `desktop/screenshot/presentation/thothIIscreens`. Copy supplied files unchanged into `presentation/deck/screenshots/thothii/`, preserving -their embedded annotations. The 12 slide 11 PNGs are numbered `01` through `12` in -popup order, in both the source folder and the deck. The first popup uses +their embedded annotations. The 12 source PNGs retain their `01` through `12` filenames. +The shortened slide 10 tour uses PNGs 01, 02, 05, 07, 08 and 09, numbered 1–6 +in the interface; unused images remain on disk. The 284-word presenter script +covers all eight phases, explicitly introduces Human in the Loop, and includes +the invitation to a longer presentation at the conference or remotely. +The planned duration is 2:50, to be confirmed by rehearsal. +Slide 11 prominently displays Marco Pancotti's and Sara Paratico's email addresses. +Local preview uses `python3 -m http.server 8000 --bind 127.0.0.1 --directory presentation`. +The first popup uses `01-StartingPoint.png`; popup 2 uses `02-Disambiguation01.png`. Refresh the image cache version when replacing a PNG. During the current editing session, refresh both operational browser windows after every modification, as explicitly requested. -Popup 3 uses `03-DisambiguationFinal.png`, popup 4 uses `04-SchemaLinking01.png`, -and popup 5 uses `05-CloseSchemaLinking.png`. Popups 6–12 are CTE planning, CTE 1, -Final SQL, Datamart, Saving memory, Final step, and Back to start. +Popup 3 uses `05-CloseSchemaLinking.png`, popup 4 uses `07-CTE01.png`, +popup 5 uses `08-FinalSQL.png`, and popup 6 uses `09-DatamartProduction.png`. The HTML references PNGs by relative URL: they are external static assets, not compiled or embedded. Keep `presentation/deck/screenshots/thothii/` with the deck; the Desktop source folder is not a runtime dependency. diff --git a/presentation/deck/index.html b/presentation/deck/index.html index 2d7b8134..62947ce1 100644 --- a/presentation/deck/index.html +++ b/presentation/deck/index.html @@ -8,7 +8,7 @@ - +
@@ -37,7 +37,7 @@

“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 / 13
+
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 / 11
- + @@ -268,10 +217,12 @@ - + @@ -314,11 +265,11 @@
Audited. A new rule set goes live only after it proves ≥95% accuracy on 100 records reviewed by hand.
- + @@ -367,10 +318,11 @@ - + @@ -410,12 +362,12 @@ - + @@ -486,13 +438,13 @@ - + @@ -508,26 +460,29 @@
The portal, today

AritmoLab — a quick tour

-
+
- - - - - - + + +
-

Select a screen to enlarge · Follow the tour from 1 to 7

+

Select a screen to enlarge · Follow the tour from 1 to 4

-
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 202609 / 13
+
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 202608 / 11
@@ -579,14 +534,14 @@
The gapTwenty years of data, one warehouse — and no fast road from a research question to an answer.
- + @@ -600,136 +555,53 @@ A tour of ThothII
-
ThothII, step by step
-

From question to datamart — the app

-
- - - - - - - - - - - -
-

Select a screen to enlarge · Follow the tour from 1 to 12

+

AI proposes. People review, correct and approve. · Select a screen to enlarge

- + - -
-
- - AritmoLab · Policlinico San Donato -
- -
-
From datamart to discovery
-

One datamart — many questions answered

-
-
Multivariate analysis[SVG chart — next step]
-
Machine learning[SVG chart — next step]
-
-

[Illustrative data, modeled on published arrhythmology predictors — Brugada focus]

-
-
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 202612 / 13
- -
-
@@ -742,15 +614,17 @@
Questions?

Thank you

-

Want the deep dives? The technical walkthroughs of the text miner, the mapping agents and ThothII are coming as videos on our Substack.

+

We are available to explore AI in data reorganization and clinical text analysis,
and datamart generation from natural-language requests with ThothII.
Meet us during the conference or arrange a remote session.

Dr. Marco Pancotti - MultiPhysixLab + mpancotti@mpxlab.org Dr. Sara Paratico - I.R.C.C.S. Policlinico San Donato + sara.paratico@grupposandonato.it
-
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 202613 / 13
+
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 202611 / 11
@@ -780,10 +654,10 @@ }); // jump dropdown — one select per slide, in the red band - const JUMP_TITLES = ['Title', 'Where we started', 'What we wanted to build', + const JUMP_TITLES = ['Title', 'What we wanted to build', 'The problem', 'What the text miner reads', 'Hard problems of clinical NLP', 'The clinical ontology', 'Trust the text', 'AritmoLab today', 'All good? Not yet', 'A tour of ThothII', - 'From datamarts to models', 'Thank you']; + 'Thank you']; document.querySelectorAll('.arit .band').forEach((band) => { const sel = document.createElement('select'); sel.className = 'jump'; @@ -1128,7 +1002,6 @@ notes: slide.querySelector('aside.notes')?.innerHTML || '', popupNotes: [...slide.querySelectorAll('aside.notes [data-popup-notes]')].map(note => ({ key: note.dataset.popupNotes, - title: note.querySelector('h3').textContent, html: note.querySelector('[data-popup-notes-body]').innerHTML, })), popups: [...slide.querySelectorAll(popupSelector)].map(el => { diff --git a/presentation/deck/screenshot-tour.css b/presentation/deck/screenshot-tour.css index 1e1efc76..349517f4 100644 --- a/presentation/deck/screenshot-tour.css +++ b/presentation/deck/screenshot-tour.css @@ -3,6 +3,7 @@ display: grid; grid-template-columns: repeat(4, 1fr); grid-template-rows: repeat(2, minmax(0, 1fr)); gap: 16px; flex: 1; min-height: 0; margin-top: 10px; } +.arit .screenshot-tour-four { grid-template-columns: repeat(2, minmax(0, 1fr)); } .arit .screenshot-tour button { display: flex; flex-direction: column; min-width: 0; min-height: 0; padding: 0; overflow: hidden; border: 1px solid var(--line-strong); border-radius: 8px; @@ -20,7 +21,7 @@ } .arit .screenshot-tour b { color: var(--bordeaux); font: 700 22px/1 var(--sans); } .arit .screenshot-tour-compact { - grid-template-columns: repeat(6, minmax(0, 1fr)); + grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-rows: repeat(2, minmax(0, 1fr)); gap: 10px; } .arit .screenshot-tour-compact span { gap: 8px; padding: 6px 10px; font-size: 14px; } diff --git a/presentation/presenter/README.md b/presentation/presenter/README.md index c213c347..127a20d2 100644 --- a/presentation/presenter/README.md +++ b/presentation/presenter/README.md @@ -29,25 +29,28 @@ buttons and disappear entirely on slides without popups. The current preview omi the 34px slide footer; the audience slide remains unchanged. Arrow keys change slides; Escape closes the popup. Changing slide closes any open popup. Notes scroll independently and -return to the beginning when the slide changes. +return to the beginning when the slide changes. The reading area contains only the +spoken narrative, without slide titles or popup headings. Parenthesized numbers +on slide 2 and slides 7–10 identify the popup button for each passage. +Screenshot-specific notes still follow the selected popup; use the controls below +the preview to open popups. -Popup controls, clickable images and speaker-note headings open only on click +Popup controls and clickable images open only on click or explicit keyboard activation (Enter, Space or the numbered shortcuts). Hover and keyboard focus may highlight a control but never open or switch a popup. -On slide 08, -the five numbered headings in the speaker notes also open the corresponding -Validation detail, centered on the slide with the shared lens effect. The fifth +On slide 07, +the five numbered controls open the corresponding Validation detail, centered on +the slide with the shared lens effect. The fifth detail explains all three advantages; on the slide, the advantages panel highlights on hover and opens on click. A detail stays open when the pointer leaves, until another detail is selected, Escape or Close is used, or the slide changes. The preview and audience show the same detail. -Slide 09 has seven numbered screenshot controls, in the supplied tour order. -Click a thumbnail, a console button or a numbered heading in its notes to open -the original screenshot almost full screen. Keys 1–7 also select screenshots; +Slide 08 has four numbered screenshot controls, in the supplied tour order. +Click a thumbnail or a console button to open +the original screenshot almost full screen. Keys 1–4 also select screenshots; Escape or Close returns to the slide. Preview and audience share the selection. -The seven English descriptions form one short script (about 90 seconds including -brief pauses to change screens). +The four English descriptions form one continuous script. The preview and audience communicate over a session-specific `BroadcastChannel`. The session is in the console URL; the latest slide and popup are retained in local diff --git a/presentation/presenter/index.html b/presentation/presenter/index.html index 521c3e71..d8ff2d7d 100644 --- a/presentation/presenter/index.html +++ b/presentation/presenter/index.html @@ -6,7 +6,7 @@ AritmoLab | Presenter console - +
@@ -33,7 +33,7 @@

Speaker notes

-
SLIDE 01

Preparing your presentation

The slide and its speaker notes will appear here.
+
The slide and its speaker notes will appear here.
diff --git a/presentation/presenter/presenter.js b/presentation/presenter/presenter.js index 362ce9d6..c2129298 100644 --- a/presentation/presenter/presenter.js +++ b/presentation/presenter/presenter.js @@ -19,20 +19,8 @@ let lastPreviewSeen = 0; let notesSize = 25; let blocked = false; - const urlFor = role => `../deck/index.html?v=18&view=${role}&session=${encodeURIComponent(session)}`; + const urlFor = role => `../deck/index.html?v=19&view=${role}&session=${encodeURIComponent(session)}`; const pad = value => String(value).padStart(2, '0'); - function showNoteLens(event) { - const cue = event.target.closest('[data-note-lens]'); - if (!cue || !slides[current?.index]?.popups.some(popup => popup.kind === 'lens' && popup.key === cue.dataset.noteLens)) return; - if (current?.popup?.key !== cue.dataset.noteLens) command('popup', { popup: { kind: 'lens', key: cue.dataset.noteLens } }); - } - $('notes').addEventListener('click', showNoteLens); - $('notes').addEventListener('click', event => { - const cue = event.target.closest('[data-note-screenshot]'); - if (cue && slides[current?.index]?.popups.some(popup => popup.kind === 'screenshot' && popup.key === cue.dataset.noteScreenshot)) { - command('popup', { popup: { kind: 'screenshot', key: cue.dataset.noteScreenshot } }); - } - }); function renderNotes(html) { const template = document.createElement('template'); template.innerHTML = html; @@ -99,8 +87,6 @@ $('next').disabled = state.index === slides.length - 1; $('close-popup').disabled = !state.popup; if (changed) { - $('notes-number').textContent = `SLIDE ${pad(state.index + 1)}`; - $('notes-title').textContent = slide.title; // Trusted, same-origin authored notes, never channel-provided HTML. if (!slide.popupNotes?.length) renderNotes(slide.notes); currentNoteKey = null; @@ -157,7 +143,6 @@ || slide.popupNotes[0]; if (note.key !== currentNoteKey) { currentNoteKey = note.key; - $('notes-title').textContent = note.title; renderNotes(note.html); $('reading').scrollTop = 0; } @@ -208,7 +193,7 @@ updateNextPreview(); }); // No session token: the thumbnail must never navigate or publish to the audience. - nextPreview.src = '../deck/index.html?v=18&view=thumbnail#/1'; + nextPreview.src = '../deck/index.html?v=19&view=thumbnail#/1'; const stage = document.querySelector('.stage'); function sizeCurrentPreview() { const style = getComputedStyle(stage);