Skip to content

feat(docs): self-host asciinema player to remove branding#705

Merged
raballew merged 2 commits into
jumpstarter-dev:mainfrom
raballew:499-remove-asciinema-branding
May 27, 2026
Merged

feat(docs): self-host asciinema player to remove branding#705
raballew merged 2 commits into
jumpstarter-dev:mainfrom
raballew:499-remove-asciinema-branding

Conversation

@raballew

Copy link
Copy Markdown
Member

Summary

  • Replace the asciinema.org embed script with a self-hosted asciinema player (v3.15.1), removing the "Recorded with asciinema" branding and the external dependency on asciinema.org
  • Player background/foreground colors match the Furo theme in both light and dark mode
  • Added timeline markers for key demo moments (lease device, power cycle, serial start, pytest)

Test plan

  • Build docs locally (cd python && uv run --group docs sphinx-build -M html docs/source docs/build) and verify the player renders on the landing page
  • Verify no "Recorded with asciinema" branding is visible
  • Verify the terminal background matches the page background in both light and dark mode
  • Verify timeline markers appear as dots on the progress bar
  • Verify the player shows a preview frame at 5 seconds before playback starts
  • Click play and verify the recording plays correctly with looping

🤖 Generated with Claude Code

Replace the asciinema.org embed script with a self-hosted asciinema
player (v3.15.1), eliminating the "Recorded with asciinema" branding
and the external dependency on asciinema.org. The player background
and foreground colors now match the Furo theme in both light and dark
mode.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@raballew, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 54 minutes and 17 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c6f83e8a-516b-485f-b9ad-46c2a4bf6774

📥 Commits

Reviewing files that changed from the base of the PR and between 6f5bd77 and 3900e4f.

📒 Files selected for processing (1)
  • typos.toml
📝 Walkthrough

Walkthrough

This PR adds an Asciinema player to the documentation homepage. It introduces a complete CSS stylesheet for the player with nine theme variants, integrates the player into the Sphinx build configuration, records an interactive Jumpstarter CLI session, and updates the homepage to display the recording with playback controls and markers.

Changes

Asciinema Demo Player

Layer / File(s) Summary
Asciinema player stylesheet and themes
python/docs/source/_static/css/asciinema-player.css
Complete stylesheet defining terminal rendering, text attributes, control bar UI with progress tracking and playback buttons, overlay system with loading/error/help screens, slide transitions, loader animations, and nine theme presets (Asciinema, Dracula, Monokai, Nord, Seti, Solarized Dark/Light, Tango, Gruvbox Dark) using CSS custom properties for colors.
Sphinx configuration and demo styling
python/docs/source/conf.py, python/docs/source/_static/css/custom.css
Sphinx build configuration extended to load Asciinema player JavaScript and CSS assets. Custom CSS rule added to override demo player terminal colors using the theme's primary background and foreground tokens.
Demo recording and homepage display
python/docs/source/_static/demo.cast, python/docs/source/index.md
Terminal recording captures interactive Jumpstarter CLI session showing help, resource listing, lease creation, power cycling, serial console output, and a pytest run. Homepage updated to replace external embed script with inline HTML demo container and JavaScript that initializes AsciinemaPlayer with local recording file, playback settings, and session markers.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

A rabbit hops through docs so bright, ✨
With terminal casts in glorious sight,
Nine themes paint the player in style,
Dracula, Solarized all the while—
The homepage dances, viewers beguiled! 🎬

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change: self-hosting the asciinema player to remove external branding.
Description check ✅ Passed The description clearly explains the objective to replace the external asciinema embed with a self-hosted player, addresses theme integration, and includes a concrete test plan.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@python/docs/source/_static/css/asciinema-player.css`:
- Around line 37-47: The fullscreen rules currently target only the standard
:fullscreen pseudo-class; add matching WebKit-prefixed selectors so
Safari/WebKit gets the same styles — specifically mirror the selectors
div.ap-wrapper:fullscreen, div.ap-wrapper:fullscreen .title-bar, and
div.ap-wrapper:fullscreen.hud .title-bar with their :-webkit-full-screen
equivalents (and also update the identical block mentioned around lines 320-325)
so the HUD/title/icon state renders correctly under WebKit fullscreen.
- Line 120: Replace the deprecated CSS property by changing the declaration that
currently uses "word-wrap: normal;" to use "overflow-wrap: normal;" instead
(locate the "word-wrap" declaration in the CSS block where word wrapping is set
and replace it), so the behavior remains the same and Stylelint no longer flags
the rule.

In `@python/docs/source/_static/demo.cast`:
- Around line 9-10: Sanitize all operator-identifiable data in the cast file by
replacing occurrences of the host/user/path and lease identifiers shown (e.g.
the ANSI title string "\u001b]0;raballew@silverblue", the file URI segment
"file://silverblue/var/home/raballew/jumpstarter", and any raw lease IDs
referenced elsewhere) with neutral placeholders like "USER@HOST",
"file:///home/user/project", and "LEASE_ID"; ensure you update every matching
ANSI escape sequence and plain-text occurrence (also check the other ranges
mentioned: 40-42, 93-97, 124-125, 165, 181) so no personal/system identifiers
remain before publishing.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e24101ba-173a-4c1b-97f5-665d78466c1d

📥 Commits

Reviewing files that changed from the base of the PR and between 4e27c7e and 6f5bd77.

⛔ Files ignored due to path filters (1)
  • python/docs/source/_static/js/asciinema-player.min.js is excluded by !**/*.min.js
📒 Files selected for processing (5)
  • python/docs/source/_static/css/asciinema-player.css
  • python/docs/source/_static/css/custom.css
  • python/docs/source/_static/demo.cast
  • python/docs/source/conf.py
  • python/docs/source/index.md

Comment thread python/docs/source/_static/css/asciinema-player.css
Comment thread python/docs/source/_static/css/asciinema-player.css
Comment thread python/docs/source/_static/demo.cast
The minified asciinema-player JS contains variable names (BA, seeked)
that trigger false positives in the typos spell checker.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@raballew raballew enabled auto-merge (squash) May 26, 2026 19:55
@raballew raballew merged commit ae354e5 into jumpstarter-dev:main May 27, 2026
33 of 35 checks passed
evakhoni pushed a commit to evakhoni/jumpstarter that referenced this pull request Jun 24, 2026
…r-dev#705)

## Summary
- Replace the asciinema.org embed script with a self-hosted asciinema
player (v3.15.1), removing the "Recorded with asciinema" branding and
the external dependency on asciinema.org
- Player background/foreground colors match the Furo theme in both light
and dark mode
- Added timeline markers for key demo moments (lease device, power
cycle, serial start, pytest)

## Test plan
- [ ] Build docs locally (`cd python && uv run --group docs sphinx-build
-M html docs/source docs/build`) and verify the player renders on the
landing page
- [ ] Verify no "Recorded with asciinema" branding is visible
- [ ] Verify the terminal background matches the page background in both
light and dark mode
- [ ] Verify timeline markers appear as dots on the progress bar
- [ ] Verify the player shows a preview frame at 5 seconds before
playback starts
- [ ] Click play and verify the recording plays correctly with looping

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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