Skip to content

Add speaker notes viewer and how-it-works docs - #2

Merged
chris-colinsky merged 2 commits into
mainfrom
feature/speaker-notes-and-docs
Sep 18, 2026
Merged

chris-colinsky merged 2 commits into
mainfrom
feature/speaker-notes-and-docs

Conversation

@chris-colinsky

Copy link
Copy Markdown
Member

Summary

Adds private speaker notes to Akceo and a detailed explanation of how it works.

  • akceo viewer writes md-viewer.html, a self-contained Markdown viewer. Open your deck in one tab and your notes in the viewer in another, put them side by side with Chrome's split view, and share only the deck tab in Meet or Zoom.
  • Live refresh: in Chrome and Edge the viewer watches the notes file and re-renders on save, keeping your scroll position. It works when the viewer is opened straight from disk; no server is needed.
  • Docs: docs/speaker-notes.md covers the setup. docs/how-it-works.md explains Akceo in plain terms, from the user's side, and under the hood, with Mermaid diagrams.
  • Example: examples/demo/speaker-notes.md has notes for the demo's seven slides.

Viewer changes from the Omnis Actual copy

  • Opening a file with the button or by drag-and-drop both watch it (before, only a separate "Open (watch)" button did)
  • A moved or deleted file shows "file unavailable · open it again" instead of failing silently
  • Link targets are restricted to http(s), mailto and relative URLs, with quotes escaped, so javascript: links and attribute injection don't work
  • Parentheses inside URLs are matched in pairs, so Wikipedia-style links work
  • Lists nest by indentation, and indented continuation lines stay with their item
  • Images render (http(s), data:image/ and relative sources)
  • Underscores inside URLs are no longer italicized

Testing

  • uv run pytest: 73 tests, including the viewer command and a guard against raw control characters in the packaged assets (a raw NUL in a JavaScript regex breaks the whole viewer script)
  • Headless Chrome probes, not committed:
    • rendering and link and image sanitizing
    • nested and mixed lists
    • a relative image loaded from disk
    • live refresh with a fake file handle: refresh on change, scroll kept, file loss reported
  • All 12 Mermaid diagrams render with Mermaid 11
  • Not covered automatically: a real drag-and-drop in Chrome, which should also show "● watching"

akceo viewer writes md-viewer.html, a self-contained Markdown viewer
for reading speaker notes in a second browser tab while only the deck
tab is shared in a call. In Chrome and Edge it watches the notes file
and re-renders on save, keeping the scroll position; this works when
the page is opened straight from disk.

The viewer comes from the Omnis Actual repo, reviewed for reuse:
opening and dropping a file both watch it, a lost file is reported,
unsafe link targets are rejected, links may contain parentheses,
lists nest, and images render.

The demo gains example speaker notes. New docs cover the notes setup
and how Akceo works in plain terms, from the user's side and under the
hood, with Mermaid diagrams. A test guards the packaged assets against
raw control characters, which break the viewer's script.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Asynchronous file reads can race and leave the viewer displaying an older file after a newer one is selected.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Adds a standalone speaker-notes viewer and supporting documentation.

Changes:

  • Adds the akceo viewer command and self-contained Markdown viewer.
  • Adds speaker notes guidance, architecture documentation, and demo notes.
  • Adds CLI and asset-safety tests.
File summaries
File Description
src/akceo/cli.py Adds viewer generation.
src/akceo/assets/md-viewer.html Implements Markdown rendering and live refresh.
tests/test_cli.py Tests viewer output and asset safety.
README.md Introduces notes and architecture docs.
docs/speaker-notes.md Documents speaker-notes setup.
docs/how-it-works.md Documents architecture and workflows.
examples/demo/speaker-notes.md Adds demo notes.
CLAUDE.md Updates repository guidance.
CHANGELOG.md Records the new features.
Review details
  • Files reviewed: 9/9 changed files
  • Comments generated: 4
  • Review effort level: Balanced

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread src/akceo/assets/md-viewer.html Outdated
Comment thread docs/how-it-works.md Outdated
Comment thread docs/speaker-notes.md Outdated
Comment thread src/akceo/assets/md-viewer.html Outdated
Reads in the notes viewer could finish out of order and render an
older file over a newer selection. Each open now bumps a generation
that every read rechecks before rendering, and only one poll runs at
a time. The status line is a live region for screen readers.

The docs no longer promise a line number on every error or full
Markdown support in the viewer.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The implementation, documentation, and tests are consistent, and previously identified issues are resolved.

Review details
  • Files reviewed: 9/9 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@chris-colinsky
chris-colinsky merged commit 438e3ee into main Sep 18, 2026
2 checks passed
@chris-colinsky
chris-colinsky deleted the feature/speaker-notes-and-docs branch September 18, 2026 06:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants