diff --git a/.agents/skills/ci-and-devcontainer/SKILL.md b/.agents/skills/ci-and-devcontainer/SKILL.md index ac61aac..9903452 100644 --- a/.agents/skills/ci-and-devcontainer/SKILL.md +++ b/.agents/skills/ci-and-devcontainer/SKILL.md @@ -33,12 +33,13 @@ description: Use when changing Rust toolchain setup, Linux GUI dependencies, CI, starts the container and runs its lifecycle commands, so a broken environment fails before merge. - Landing (`landing.yml`): on every push to main, or by hand, runs `just landing-build` - and deploys `apps/landing/dist` to GitHub Pages under `/study/`. A fresh checkout has - no captures of the app, so the recipe first makes all of them (`just docs-media`, - `just demo`) on the showcase's private desktop with software Vulkan, as the setup - action's extra packages provide, then builds the site with Bun, pinned by - `packageManager` in `apps/landing/package.json` to the Dockerfile's `BUN_VERSION`. The - README's demo GIF is published with the site; nothing it makes is committed. + and deploys `apps/landing/dist` to GitHub Pages under `/study/`. It builds no Rust: the + captures of the app are committed, and the site builds with Bun alone, pinned by + `packageManager` in `apps/landing/package.json` to the Dockerfile's `BUN_VERSION`. + - Captures (`captures.yml`): by hand only. Runs `just captures` on the showcase's private + desktop with software Vulkan, as the setup action's extra packages provide, and opens + (or updates) a pull request from the `captures` branch with what changed, then starts + CI on it, since a pull request a workflow opens starts none itself. - Releases: Linux x64 and ARM64 build inside the devcontainer; macOS Intel/Apple Silicon and Windows x64 use native GitHub runners. They install Rust and pinned cargo-packager; they must never require a second devcontainer. diff --git a/.agents/team/roles/site.md b/.agents/team/roles/site.md index 0f5e2f0..a5c2e12 100644 --- a/.agents/team/roles/site.md +++ b/.agents/team/roles/site.md @@ -35,8 +35,8 @@ Then update what they affect: name in both languages (`.mdx` when it shows captures, `.md` otherwise); - the captures of the app: scenes in `crates/study-showcase/src/docs.rs`, made by `just docs-media` into `apps/landing/src/assets/shots/` and `clips/` as - `{scene}-{en|it}-{light|dark}`. They are never committed; the Landing workflow makes them - again on every deploy, so change the scene, never the file. + `{scene}-{en|it}-{light|dark}`. They are committed, but only as the scene makes them: change + the scene and make them again, never edit the file. ## Rules diff --git a/.github/workflows/captures.yml b/.github/workflows/captures.yml new file mode 100644 index 0000000..b8b652d --- /dev/null +++ b/.github/workflows/captures.yml @@ -0,0 +1,61 @@ +name: Captures + +# Makes every capture of the app the website shows again, from the code on the branch it runs +# on: the docs' stills and clips and the README's demo GIF (`just captures`), on the +# showcase's private desktop with software Vulkan. It takes a while, so it runs only by hand, +# when the app's look has changed. +# +# What changed goes to a pull request from the `captures` branch, opened or updated here, to +# look over and merge; nothing is pushed to main. A pull request a workflow opens starts no +# workflow itself, so this starts CI on it. +on: + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + actions: write + +concurrency: + group: captures + cancel-in-progress: true + +jobs: + captures: + name: Make the captures + runs-on: ubuntu-24.04 + steps: + - name: Check out + uses: actions/checkout@v7 + - name: Set up + uses: ./.github/actions/setup + with: + # The private headless desktop the showcase records on, with software Vulkan. + packages: >- + sway grim wtype wf-recorder ffmpeg + libvulkan1 mesa-vulkan-drivers libgl1-mesa-dri libegl-mesa0 + # The app runs for real here, so it is built as in development. + optimize-dependencies: 'true' + - name: Capture the app + run: just captures + - name: Open a pull request + env: + GH_TOKEN: ${{ github.token }} + BASE: ${{ github.ref_name }} + run: | + git add --all apps/landing/src/assets/shots apps/landing/src/assets/clips apps/landing/public/demo.gif + if git diff --cached --quiet; then + echo "The captures are current." + exit 0 + fi + git config user.name 'github-actions[bot]' + git config user.email '41898282+github-actions[bot]@users.noreply.github.com' + git switch -c captures + git commit -m "Make the website's captures again" -m "Made by the Captures workflow from $BASE at $GITHUB_SHA." + git push --force origin captures + if [ "$(gh pr view captures --json state -q .state 2>/dev/null)" != OPEN ]; then + gh pr create --base "$BASE" --head captures \ + --title "Make the website's captures again" \ + --body "The Captures workflow made every still, clip and the demo GIF again from \`$BASE\` at $GITHUB_SHA. Look them over before merging." + fi + gh workflow run ci.yml --ref captures diff --git a/.github/workflows/landing.yml b/.github/workflows/landing.yml index 57a24b0..810e040 100644 --- a/.github/workflows/landing.yml +++ b/.github/workflows/landing.yml @@ -3,10 +3,8 @@ name: Landing # Builds the website in apps/landing/ (Astro, static) and publishes it to GitHub Pages at # https://nicksan222.github.io/study/, so astro.config sets `base: '/study'`. # -# Every capture of the app on the site is made here, from the code being deployed: the docs' -# stills and clips (`just docs-media`) and the README's demo GIF (`just demo`), which the -# site publishes at /study/demo.gif. None of them is committed, so any change to the app -# runs this to keep them current. +# It builds no Rust: the captures of the app the site shows are committed, so a deploy takes +# about a minute. The Captures workflow makes them again, by hand, in a pull request. on: push: branches: [main] @@ -27,21 +25,16 @@ jobs: steps: - name: Check out uses: actions/checkout@v7 - - name: Set up - uses: ./.github/actions/setup + # The same pin as the setup action's, which this job does not otherwise need. + - name: Install just + uses: taiki-e/install-action@v2 with: - # The private headless desktop the showcase records on, with software Vulkan. - packages: >- - sway grim wtype wf-recorder ffmpeg - libvulkan1 mesa-vulkan-drivers libgl1-mesa-dri libegl-mesa0 - # The app runs for real here, so it is built as in development. - optimize-dependencies: 'true' + tool: just@1.40.0 - name: Set up Bun uses: oven-sh/setup-bun@v2 with: bun-version-file: apps/landing/package.json - # A fresh checkout has no captures, so this makes every one, then builds. - - name: Capture the app and build + - name: Build run: just landing-build - name: Upload uses: actions/upload-pages-artifact@v5 diff --git a/.gitignore b/.gitignore index 88bfb18..68a71a3 100644 --- a/.gitignore +++ b/.gitignore @@ -52,8 +52,3 @@ core.* /apps/landing/dist/ /apps/landing/.astro/ -# Captures of the app, made from sample data on every website build (`just docs-media`, -# `just demo`), never committed. -/apps/landing/src/assets/shots/ -/apps/landing/src/assets/clips/ -/apps/landing/public/demo.gif diff --git a/AGENTS.md b/AGENTS.md index 40c0702..4edff1f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -89,8 +89,9 @@ it and the app from zero, and `just desktop-watch` restarts the app on every cha - `just demo`: records the README's demo GIF from sample data on its own private desktop (no sign-in, no model, not the shared desktop), into `apps/landing/public/demo.gif`; the site publishes it and the README shows it from there. `just docs-media` makes the docs' - stills and clips the same way. None of them is committed: the Landing workflow makes all - of them on every deploy, and `just landing` makes any that are missing. Edit the tour in + stills and clips the same way, and `just captures` makes both. They are committed: the + website deploys them as they are, and the Captures workflow, run by hand, makes them all + again and opens a pull request with them. Edit the tour in `crates/study-showcase/src/tour.rs`, the docs' scenes in `src/docs.rs`. - `just agents`: maintainer tooling in the default devcontainer. Herdr runs one project-wide team: lead, developer, PM, QA, student, reviewer and pushback, diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9243d78..2e47dc1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -83,11 +83,12 @@ Both follow `XDG_DATA_HOME` and `XDG_CACHE_HOME`. `just run` uses `target/dev-da ## Captures of the app -The README's demo GIF and every still and clip on the website are made from the code, never -committed. The Landing workflow makes them all on every push to main, from sample data on a -private virtual desktop, and publishes them with the site; the README shows the GIF from -there. Locally, `just landing` and `just landing-build` make any that are missing, and -`just docs-media` and `just demo` make them again after a change. Edit the GIF's tour in +The README's demo GIF and every still and clip on the website are made from the code, on +sample data on a private virtual desktop, and committed; the Landing workflow publishes them +with the site as they are, and the README shows the GIF from there. When the app's look +changes, run the Captures workflow by hand: it makes them all again and opens a pull request +with them to look over and merge. Locally, `just captures` does the same, `just docs-media` +and `just demo` make one kind, and `just docs-media missing` makes only a new scene's. Edit the GIF's tour in `crates/study-showcase/src/tour.rs` and the docs' scenes in `crates/study-showcase/src/docs.rs`. ## The agent team diff --git a/Justfile b/Justfile index 1c70ba2..2a9ee6a 100644 --- a/Justfile +++ b/Justfile @@ -168,22 +168,23 @@ demo output="apps/landing/public/demo.gif": cargo build --locked -p study cargo run --locked -p study-showcase -- "$1" -# Make the website's docs stills and clips (apps/landing/src/assets/shots and clips) in every language and theme, the same way; name scenes or variants (`search it-dark`) to make only those, or `missing` for those not made yet. +# Make the website's docs stills and clips (apps/landing/src/assets/shots and clips) in every language and theme, the same way; name scenes or variants (`search it-dark`) to make only those, or `missing` for those not made yet, as for a new scene. docs-media *only: cargo build --locked -p study cargo run --locked -p study-showcase -- docs {{only}} -# Make the website's captures of the app that are missing: none is committed, so a fresh checkout (and every Landing workflow run) makes them all, and a new scene only its own. `just docs-media` and `just demo` make them again after a change. -landing-media: - just docs-media missing - [ -s apps/landing/public/demo.gif ] || just demo +# Make every capture of the app the website shows again, as the Captures workflow does: the docs' stills and clips, then the demo GIF. The old files go first, so a scene dropped from docs.rs leaves none behind. +captures: + rm -f apps/landing/src/assets/shots/* apps/landing/src/assets/clips/* + just docs-media + just demo # Serve the website (apps/landing: the landing page and docs) with live reload at localhost:4321/study/. -landing: landing-media +landing: cd apps/landing && bun install --frozen-lockfile && bun run dev --host -# Build the website into apps/landing/dist, as the Landing workflow publishes it, with every capture of the app. -landing-build: landing-media +# Build the website into apps/landing/dist, as the Landing workflow publishes it, from the committed captures; it fails if one is missing. +landing-build: cd apps/landing && bun install --frozen-lockfile && bun run build # Type-check the website's pages, components and content without building it, so it needs no captures. diff --git a/apps/landing/public/demo.gif b/apps/landing/public/demo.gif new file mode 100644 index 0000000..cb77a6d Binary files /dev/null and b/apps/landing/public/demo.gif differ diff --git a/apps/landing/src/assets/clips/citation-open-en-dark.mp4 b/apps/landing/src/assets/clips/citation-open-en-dark.mp4 new file mode 100644 index 0000000..31592de Binary files /dev/null and b/apps/landing/src/assets/clips/citation-open-en-dark.mp4 differ diff --git a/apps/landing/src/assets/clips/citation-open-en-dark.webp b/apps/landing/src/assets/clips/citation-open-en-dark.webp new file mode 100644 index 0000000..1878a43 Binary files /dev/null and b/apps/landing/src/assets/clips/citation-open-en-dark.webp differ diff --git a/apps/landing/src/assets/clips/citation-open-en-light.mp4 b/apps/landing/src/assets/clips/citation-open-en-light.mp4 new file mode 100644 index 0000000..319c44e Binary files /dev/null and b/apps/landing/src/assets/clips/citation-open-en-light.mp4 differ diff --git a/apps/landing/src/assets/clips/citation-open-en-light.webp b/apps/landing/src/assets/clips/citation-open-en-light.webp new file mode 100644 index 0000000..306f6fd Binary files /dev/null and b/apps/landing/src/assets/clips/citation-open-en-light.webp differ diff --git a/apps/landing/src/assets/clips/citation-open-it-dark.mp4 b/apps/landing/src/assets/clips/citation-open-it-dark.mp4 new file mode 100644 index 0000000..a12fe1b Binary files /dev/null and b/apps/landing/src/assets/clips/citation-open-it-dark.mp4 differ diff --git a/apps/landing/src/assets/clips/citation-open-it-dark.webp b/apps/landing/src/assets/clips/citation-open-it-dark.webp new file mode 100644 index 0000000..26e6924 Binary files /dev/null and b/apps/landing/src/assets/clips/citation-open-it-dark.webp differ diff --git a/apps/landing/src/assets/clips/citation-open-it-light.mp4 b/apps/landing/src/assets/clips/citation-open-it-light.mp4 new file mode 100644 index 0000000..061b91a Binary files /dev/null and b/apps/landing/src/assets/clips/citation-open-it-light.mp4 differ diff --git a/apps/landing/src/assets/clips/citation-open-it-light.webp b/apps/landing/src/assets/clips/citation-open-it-light.webp new file mode 100644 index 0000000..f65d90f Binary files /dev/null and b/apps/landing/src/assets/clips/citation-open-it-light.webp differ diff --git a/apps/landing/src/assets/clips/diagram-drag-en-dark.mp4 b/apps/landing/src/assets/clips/diagram-drag-en-dark.mp4 new file mode 100644 index 0000000..6a3e984 Binary files /dev/null and b/apps/landing/src/assets/clips/diagram-drag-en-dark.mp4 differ diff --git a/apps/landing/src/assets/clips/diagram-drag-en-dark.webp b/apps/landing/src/assets/clips/diagram-drag-en-dark.webp new file mode 100644 index 0000000..2abee08 Binary files /dev/null and b/apps/landing/src/assets/clips/diagram-drag-en-dark.webp differ diff --git a/apps/landing/src/assets/clips/diagram-drag-en-light.mp4 b/apps/landing/src/assets/clips/diagram-drag-en-light.mp4 new file mode 100644 index 0000000..154b7b1 Binary files /dev/null and b/apps/landing/src/assets/clips/diagram-drag-en-light.mp4 differ diff --git a/apps/landing/src/assets/clips/diagram-drag-en-light.webp b/apps/landing/src/assets/clips/diagram-drag-en-light.webp new file mode 100644 index 0000000..d7a4966 Binary files /dev/null and b/apps/landing/src/assets/clips/diagram-drag-en-light.webp differ diff --git a/apps/landing/src/assets/clips/diagram-drag-it-dark.mp4 b/apps/landing/src/assets/clips/diagram-drag-it-dark.mp4 new file mode 100644 index 0000000..adbbb81 Binary files /dev/null and b/apps/landing/src/assets/clips/diagram-drag-it-dark.mp4 differ diff --git a/apps/landing/src/assets/clips/diagram-drag-it-dark.webp b/apps/landing/src/assets/clips/diagram-drag-it-dark.webp new file mode 100644 index 0000000..ed2aace Binary files /dev/null and b/apps/landing/src/assets/clips/diagram-drag-it-dark.webp differ diff --git a/apps/landing/src/assets/clips/diagram-drag-it-light.mp4 b/apps/landing/src/assets/clips/diagram-drag-it-light.mp4 new file mode 100644 index 0000000..4a4186b Binary files /dev/null and b/apps/landing/src/assets/clips/diagram-drag-it-light.mp4 differ diff --git a/apps/landing/src/assets/clips/diagram-drag-it-light.webp b/apps/landing/src/assets/clips/diagram-drag-it-light.webp new file mode 100644 index 0000000..3cbea60 Binary files /dev/null and b/apps/landing/src/assets/clips/diagram-drag-it-light.webp differ diff --git a/apps/landing/src/assets/clips/flashcard-flip-en-dark.mp4 b/apps/landing/src/assets/clips/flashcard-flip-en-dark.mp4 new file mode 100644 index 0000000..75f8625 Binary files /dev/null and b/apps/landing/src/assets/clips/flashcard-flip-en-dark.mp4 differ diff --git a/apps/landing/src/assets/clips/flashcard-flip-en-dark.webp b/apps/landing/src/assets/clips/flashcard-flip-en-dark.webp new file mode 100644 index 0000000..900a8e0 Binary files /dev/null and b/apps/landing/src/assets/clips/flashcard-flip-en-dark.webp differ diff --git a/apps/landing/src/assets/clips/flashcard-flip-en-light.mp4 b/apps/landing/src/assets/clips/flashcard-flip-en-light.mp4 new file mode 100644 index 0000000..2896f63 Binary files /dev/null and b/apps/landing/src/assets/clips/flashcard-flip-en-light.mp4 differ diff --git a/apps/landing/src/assets/clips/flashcard-flip-en-light.webp b/apps/landing/src/assets/clips/flashcard-flip-en-light.webp new file mode 100644 index 0000000..91bde8e Binary files /dev/null and b/apps/landing/src/assets/clips/flashcard-flip-en-light.webp differ diff --git a/apps/landing/src/assets/clips/flashcard-flip-it-dark.mp4 b/apps/landing/src/assets/clips/flashcard-flip-it-dark.mp4 new file mode 100644 index 0000000..b53dd6e Binary files /dev/null and b/apps/landing/src/assets/clips/flashcard-flip-it-dark.mp4 differ diff --git a/apps/landing/src/assets/clips/flashcard-flip-it-dark.webp b/apps/landing/src/assets/clips/flashcard-flip-it-dark.webp new file mode 100644 index 0000000..6bb76e9 Binary files /dev/null and b/apps/landing/src/assets/clips/flashcard-flip-it-dark.webp differ diff --git a/apps/landing/src/assets/clips/flashcard-flip-it-light.mp4 b/apps/landing/src/assets/clips/flashcard-flip-it-light.mp4 new file mode 100644 index 0000000..094d696 Binary files /dev/null and b/apps/landing/src/assets/clips/flashcard-flip-it-light.mp4 differ diff --git a/apps/landing/src/assets/clips/flashcard-flip-it-light.webp b/apps/landing/src/assets/clips/flashcard-flip-it-light.webp new file mode 100644 index 0000000..31ef3be Binary files /dev/null and b/apps/landing/src/assets/clips/flashcard-flip-it-light.webp differ diff --git a/apps/landing/src/assets/clips/practice-answer-en-dark.mp4 b/apps/landing/src/assets/clips/practice-answer-en-dark.mp4 new file mode 100644 index 0000000..cfa2e44 Binary files /dev/null and b/apps/landing/src/assets/clips/practice-answer-en-dark.mp4 differ diff --git a/apps/landing/src/assets/clips/practice-answer-en-dark.webp b/apps/landing/src/assets/clips/practice-answer-en-dark.webp new file mode 100644 index 0000000..cafd413 Binary files /dev/null and b/apps/landing/src/assets/clips/practice-answer-en-dark.webp differ diff --git a/apps/landing/src/assets/clips/practice-answer-en-light.mp4 b/apps/landing/src/assets/clips/practice-answer-en-light.mp4 new file mode 100644 index 0000000..c71c326 Binary files /dev/null and b/apps/landing/src/assets/clips/practice-answer-en-light.mp4 differ diff --git a/apps/landing/src/assets/clips/practice-answer-en-light.webp b/apps/landing/src/assets/clips/practice-answer-en-light.webp new file mode 100644 index 0000000..2c6f614 Binary files /dev/null and b/apps/landing/src/assets/clips/practice-answer-en-light.webp differ diff --git a/apps/landing/src/assets/clips/practice-answer-it-dark.mp4 b/apps/landing/src/assets/clips/practice-answer-it-dark.mp4 new file mode 100644 index 0000000..fc2d1ce Binary files /dev/null and b/apps/landing/src/assets/clips/practice-answer-it-dark.mp4 differ diff --git a/apps/landing/src/assets/clips/practice-answer-it-dark.webp b/apps/landing/src/assets/clips/practice-answer-it-dark.webp new file mode 100644 index 0000000..ca02e29 Binary files /dev/null and b/apps/landing/src/assets/clips/practice-answer-it-dark.webp differ diff --git a/apps/landing/src/assets/clips/practice-answer-it-light.mp4 b/apps/landing/src/assets/clips/practice-answer-it-light.mp4 new file mode 100644 index 0000000..506b52c Binary files /dev/null and b/apps/landing/src/assets/clips/practice-answer-it-light.mp4 differ diff --git a/apps/landing/src/assets/clips/practice-answer-it-light.webp b/apps/landing/src/assets/clips/practice-answer-it-light.webp new file mode 100644 index 0000000..28a327a Binary files /dev/null and b/apps/landing/src/assets/clips/practice-answer-it-light.webp differ diff --git a/apps/landing/src/assets/clips/search-typing-en-dark.mp4 b/apps/landing/src/assets/clips/search-typing-en-dark.mp4 new file mode 100644 index 0000000..a546811 Binary files /dev/null and b/apps/landing/src/assets/clips/search-typing-en-dark.mp4 differ diff --git a/apps/landing/src/assets/clips/search-typing-en-dark.webp b/apps/landing/src/assets/clips/search-typing-en-dark.webp new file mode 100644 index 0000000..1405a4c Binary files /dev/null and b/apps/landing/src/assets/clips/search-typing-en-dark.webp differ diff --git a/apps/landing/src/assets/clips/search-typing-en-light.mp4 b/apps/landing/src/assets/clips/search-typing-en-light.mp4 new file mode 100644 index 0000000..24a25e5 Binary files /dev/null and b/apps/landing/src/assets/clips/search-typing-en-light.mp4 differ diff --git a/apps/landing/src/assets/clips/search-typing-en-light.webp b/apps/landing/src/assets/clips/search-typing-en-light.webp new file mode 100644 index 0000000..1ef0f64 Binary files /dev/null and b/apps/landing/src/assets/clips/search-typing-en-light.webp differ diff --git a/apps/landing/src/assets/clips/search-typing-it-dark.mp4 b/apps/landing/src/assets/clips/search-typing-it-dark.mp4 new file mode 100644 index 0000000..780fc9c Binary files /dev/null and b/apps/landing/src/assets/clips/search-typing-it-dark.mp4 differ diff --git a/apps/landing/src/assets/clips/search-typing-it-dark.webp b/apps/landing/src/assets/clips/search-typing-it-dark.webp new file mode 100644 index 0000000..1185d64 Binary files /dev/null and b/apps/landing/src/assets/clips/search-typing-it-dark.webp differ diff --git a/apps/landing/src/assets/clips/search-typing-it-light.mp4 b/apps/landing/src/assets/clips/search-typing-it-light.mp4 new file mode 100644 index 0000000..3a1cc7b Binary files /dev/null and b/apps/landing/src/assets/clips/search-typing-it-light.mp4 differ diff --git a/apps/landing/src/assets/clips/search-typing-it-light.webp b/apps/landing/src/assets/clips/search-typing-it-light.webp new file mode 100644 index 0000000..45e0965 Binary files /dev/null and b/apps/landing/src/assets/clips/search-typing-it-light.webp differ diff --git a/apps/landing/src/assets/clips/study-mention-en-dark.mp4 b/apps/landing/src/assets/clips/study-mention-en-dark.mp4 new file mode 100644 index 0000000..111bcdd Binary files /dev/null and b/apps/landing/src/assets/clips/study-mention-en-dark.mp4 differ diff --git a/apps/landing/src/assets/clips/study-mention-en-dark.webp b/apps/landing/src/assets/clips/study-mention-en-dark.webp new file mode 100644 index 0000000..035b015 Binary files /dev/null and b/apps/landing/src/assets/clips/study-mention-en-dark.webp differ diff --git a/apps/landing/src/assets/clips/study-mention-en-light.mp4 b/apps/landing/src/assets/clips/study-mention-en-light.mp4 new file mode 100644 index 0000000..c2c853c Binary files /dev/null and b/apps/landing/src/assets/clips/study-mention-en-light.mp4 differ diff --git a/apps/landing/src/assets/clips/study-mention-en-light.webp b/apps/landing/src/assets/clips/study-mention-en-light.webp new file mode 100644 index 0000000..b1659c2 Binary files /dev/null and b/apps/landing/src/assets/clips/study-mention-en-light.webp differ diff --git a/apps/landing/src/assets/clips/study-mention-it-dark.mp4 b/apps/landing/src/assets/clips/study-mention-it-dark.mp4 new file mode 100644 index 0000000..b796ca8 Binary files /dev/null and b/apps/landing/src/assets/clips/study-mention-it-dark.mp4 differ diff --git a/apps/landing/src/assets/clips/study-mention-it-dark.webp b/apps/landing/src/assets/clips/study-mention-it-dark.webp new file mode 100644 index 0000000..9971b9e Binary files /dev/null and b/apps/landing/src/assets/clips/study-mention-it-dark.webp differ diff --git a/apps/landing/src/assets/clips/study-mention-it-light.mp4 b/apps/landing/src/assets/clips/study-mention-it-light.mp4 new file mode 100644 index 0000000..2306c20 Binary files /dev/null and b/apps/landing/src/assets/clips/study-mention-it-light.mp4 differ diff --git a/apps/landing/src/assets/clips/study-mention-it-light.webp b/apps/landing/src/assets/clips/study-mention-it-light.webp new file mode 100644 index 0000000..d6cb9ad Binary files /dev/null and b/apps/landing/src/assets/clips/study-mention-it-light.webp differ diff --git a/apps/landing/src/assets/shots/activity-en-dark.webp b/apps/landing/src/assets/shots/activity-en-dark.webp new file mode 100644 index 0000000..03b9371 Binary files /dev/null and b/apps/landing/src/assets/shots/activity-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/activity-en-light.webp b/apps/landing/src/assets/shots/activity-en-light.webp new file mode 100644 index 0000000..4228471 Binary files /dev/null and b/apps/landing/src/assets/shots/activity-en-light.webp differ diff --git a/apps/landing/src/assets/shots/activity-it-dark.webp b/apps/landing/src/assets/shots/activity-it-dark.webp new file mode 100644 index 0000000..6d5e97f Binary files /dev/null and b/apps/landing/src/assets/shots/activity-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/activity-it-light.webp b/apps/landing/src/assets/shots/activity-it-light.webp new file mode 100644 index 0000000..7e44685 Binary files /dev/null and b/apps/landing/src/assets/shots/activity-it-light.webp differ diff --git a/apps/landing/src/assets/shots/activity-waiting-en-dark.webp b/apps/landing/src/assets/shots/activity-waiting-en-dark.webp new file mode 100644 index 0000000..f77af16 Binary files /dev/null and b/apps/landing/src/assets/shots/activity-waiting-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/activity-waiting-en-light.webp b/apps/landing/src/assets/shots/activity-waiting-en-light.webp new file mode 100644 index 0000000..aa09631 Binary files /dev/null and b/apps/landing/src/assets/shots/activity-waiting-en-light.webp differ diff --git a/apps/landing/src/assets/shots/activity-waiting-it-dark.webp b/apps/landing/src/assets/shots/activity-waiting-it-dark.webp new file mode 100644 index 0000000..1c6b093 Binary files /dev/null and b/apps/landing/src/assets/shots/activity-waiting-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/activity-waiting-it-light.webp b/apps/landing/src/assets/shots/activity-waiting-it-light.webp new file mode 100644 index 0000000..12f601c Binary files /dev/null and b/apps/landing/src/assets/shots/activity-waiting-it-light.webp differ diff --git a/apps/landing/src/assets/shots/add-files-en-dark.webp b/apps/landing/src/assets/shots/add-files-en-dark.webp new file mode 100644 index 0000000..7da8c7c Binary files /dev/null and b/apps/landing/src/assets/shots/add-files-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/add-files-en-light.webp b/apps/landing/src/assets/shots/add-files-en-light.webp new file mode 100644 index 0000000..fd881f6 Binary files /dev/null and b/apps/landing/src/assets/shots/add-files-en-light.webp differ diff --git a/apps/landing/src/assets/shots/add-files-it-dark.webp b/apps/landing/src/assets/shots/add-files-it-dark.webp new file mode 100644 index 0000000..e8d7a72 Binary files /dev/null and b/apps/landing/src/assets/shots/add-files-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/add-files-it-light.webp b/apps/landing/src/assets/shots/add-files-it-light.webp new file mode 100644 index 0000000..9a28e04 Binary files /dev/null and b/apps/landing/src/assets/shots/add-files-it-light.webp differ diff --git a/apps/landing/src/assets/shots/add-link-en-dark.webp b/apps/landing/src/assets/shots/add-link-en-dark.webp new file mode 100644 index 0000000..5be2087 Binary files /dev/null and b/apps/landing/src/assets/shots/add-link-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/add-link-en-light.webp b/apps/landing/src/assets/shots/add-link-en-light.webp new file mode 100644 index 0000000..c16f525 Binary files /dev/null and b/apps/landing/src/assets/shots/add-link-en-light.webp differ diff --git a/apps/landing/src/assets/shots/add-link-it-dark.webp b/apps/landing/src/assets/shots/add-link-it-dark.webp new file mode 100644 index 0000000..594ae25 Binary files /dev/null and b/apps/landing/src/assets/shots/add-link-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/add-link-it-light.webp b/apps/landing/src/assets/shots/add-link-it-light.webp new file mode 100644 index 0000000..56e81a1 Binary files /dev/null and b/apps/landing/src/assets/shots/add-link-it-light.webp differ diff --git a/apps/landing/src/assets/shots/citation-en-dark.webp b/apps/landing/src/assets/shots/citation-en-dark.webp new file mode 100644 index 0000000..1f46f10 Binary files /dev/null and b/apps/landing/src/assets/shots/citation-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/citation-en-light.webp b/apps/landing/src/assets/shots/citation-en-light.webp new file mode 100644 index 0000000..fcd3e6c Binary files /dev/null and b/apps/landing/src/assets/shots/citation-en-light.webp differ diff --git a/apps/landing/src/assets/shots/citation-it-dark.webp b/apps/landing/src/assets/shots/citation-it-dark.webp new file mode 100644 index 0000000..b22bf16 Binary files /dev/null and b/apps/landing/src/assets/shots/citation-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/citation-it-light.webp b/apps/landing/src/assets/shots/citation-it-light.webp new file mode 100644 index 0000000..c9f5219 Binary files /dev/null and b/apps/landing/src/assets/shots/citation-it-light.webp differ diff --git a/apps/landing/src/assets/shots/diagram-cells-en-dark.webp b/apps/landing/src/assets/shots/diagram-cells-en-dark.webp new file mode 100644 index 0000000..7e61b6a Binary files /dev/null and b/apps/landing/src/assets/shots/diagram-cells-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/diagram-cells-en-light.webp b/apps/landing/src/assets/shots/diagram-cells-en-light.webp new file mode 100644 index 0000000..4470c38 Binary files /dev/null and b/apps/landing/src/assets/shots/diagram-cells-en-light.webp differ diff --git a/apps/landing/src/assets/shots/diagram-cells-it-dark.webp b/apps/landing/src/assets/shots/diagram-cells-it-dark.webp new file mode 100644 index 0000000..686b6bc Binary files /dev/null and b/apps/landing/src/assets/shots/diagram-cells-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/diagram-cells-it-light.webp b/apps/landing/src/assets/shots/diagram-cells-it-light.webp new file mode 100644 index 0000000..5303b8a Binary files /dev/null and b/apps/landing/src/assets/shots/diagram-cells-it-light.webp differ diff --git a/apps/landing/src/assets/shots/diagram-en-dark.webp b/apps/landing/src/assets/shots/diagram-en-dark.webp new file mode 100644 index 0000000..f4759e7 Binary files /dev/null and b/apps/landing/src/assets/shots/diagram-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/diagram-en-light.webp b/apps/landing/src/assets/shots/diagram-en-light.webp new file mode 100644 index 0000000..460c2bf Binary files /dev/null and b/apps/landing/src/assets/shots/diagram-en-light.webp differ diff --git a/apps/landing/src/assets/shots/diagram-it-dark.webp b/apps/landing/src/assets/shots/diagram-it-dark.webp new file mode 100644 index 0000000..105ea86 Binary files /dev/null and b/apps/landing/src/assets/shots/diagram-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/diagram-it-light.webp b/apps/landing/src/assets/shots/diagram-it-light.webp new file mode 100644 index 0000000..94abaeb Binary files /dev/null and b/apps/landing/src/assets/shots/diagram-it-light.webp differ diff --git a/apps/landing/src/assets/shots/flashcard-deck-en-dark.webp b/apps/landing/src/assets/shots/flashcard-deck-en-dark.webp new file mode 100644 index 0000000..5194628 Binary files /dev/null and b/apps/landing/src/assets/shots/flashcard-deck-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/flashcard-deck-en-light.webp b/apps/landing/src/assets/shots/flashcard-deck-en-light.webp new file mode 100644 index 0000000..f98a1b5 Binary files /dev/null and b/apps/landing/src/assets/shots/flashcard-deck-en-light.webp differ diff --git a/apps/landing/src/assets/shots/flashcard-deck-it-dark.webp b/apps/landing/src/assets/shots/flashcard-deck-it-dark.webp new file mode 100644 index 0000000..35d3c97 Binary files /dev/null and b/apps/landing/src/assets/shots/flashcard-deck-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/flashcard-deck-it-light.webp b/apps/landing/src/assets/shots/flashcard-deck-it-light.webp new file mode 100644 index 0000000..ff79c4d Binary files /dev/null and b/apps/landing/src/assets/shots/flashcard-deck-it-light.webp differ diff --git a/apps/landing/src/assets/shots/flashcard-en-dark.webp b/apps/landing/src/assets/shots/flashcard-en-dark.webp new file mode 100644 index 0000000..071d090 Binary files /dev/null and b/apps/landing/src/assets/shots/flashcard-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/flashcard-en-light.webp b/apps/landing/src/assets/shots/flashcard-en-light.webp new file mode 100644 index 0000000..6c574fe Binary files /dev/null and b/apps/landing/src/assets/shots/flashcard-en-light.webp differ diff --git a/apps/landing/src/assets/shots/flashcard-it-dark.webp b/apps/landing/src/assets/shots/flashcard-it-dark.webp new file mode 100644 index 0000000..6b87d48 Binary files /dev/null and b/apps/landing/src/assets/shots/flashcard-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/flashcard-it-light.webp b/apps/landing/src/assets/shots/flashcard-it-light.webp new file mode 100644 index 0000000..124d23b Binary files /dev/null and b/apps/landing/src/assets/shots/flashcard-it-light.webp differ diff --git a/apps/landing/src/assets/shots/flashcards-en-dark.webp b/apps/landing/src/assets/shots/flashcards-en-dark.webp new file mode 100644 index 0000000..bcda176 Binary files /dev/null and b/apps/landing/src/assets/shots/flashcards-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/flashcards-en-light.webp b/apps/landing/src/assets/shots/flashcards-en-light.webp new file mode 100644 index 0000000..f7f4175 Binary files /dev/null and b/apps/landing/src/assets/shots/flashcards-en-light.webp differ diff --git a/apps/landing/src/assets/shots/flashcards-it-dark.webp b/apps/landing/src/assets/shots/flashcards-it-dark.webp new file mode 100644 index 0000000..a45499d Binary files /dev/null and b/apps/landing/src/assets/shots/flashcards-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/flashcards-it-light.webp b/apps/landing/src/assets/shots/flashcards-it-light.webp new file mode 100644 index 0000000..f54980b Binary files /dev/null and b/apps/landing/src/assets/shots/flashcards-it-light.webp differ diff --git a/apps/landing/src/assets/shots/graded-en-dark.webp b/apps/landing/src/assets/shots/graded-en-dark.webp new file mode 100644 index 0000000..5f0dcdf Binary files /dev/null and b/apps/landing/src/assets/shots/graded-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/graded-en-light.webp b/apps/landing/src/assets/shots/graded-en-light.webp new file mode 100644 index 0000000..ed1273a Binary files /dev/null and b/apps/landing/src/assets/shots/graded-en-light.webp differ diff --git a/apps/landing/src/assets/shots/graded-it-dark.webp b/apps/landing/src/assets/shots/graded-it-dark.webp new file mode 100644 index 0000000..9879c0b Binary files /dev/null and b/apps/landing/src/assets/shots/graded-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/graded-it-light.webp b/apps/landing/src/assets/shots/graded-it-light.webp new file mode 100644 index 0000000..d13bc0e Binary files /dev/null and b/apps/landing/src/assets/shots/graded-it-light.webp differ diff --git a/apps/landing/src/assets/shots/home-en-dark.webp b/apps/landing/src/assets/shots/home-en-dark.webp new file mode 100644 index 0000000..6b9325e Binary files /dev/null and b/apps/landing/src/assets/shots/home-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/home-en-light.webp b/apps/landing/src/assets/shots/home-en-light.webp new file mode 100644 index 0000000..c85a2e4 Binary files /dev/null and b/apps/landing/src/assets/shots/home-en-light.webp differ diff --git a/apps/landing/src/assets/shots/home-it-dark.webp b/apps/landing/src/assets/shots/home-it-dark.webp new file mode 100644 index 0000000..9ea9ec8 Binary files /dev/null and b/apps/landing/src/assets/shots/home-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/home-it-light.webp b/apps/landing/src/assets/shots/home-it-light.webp new file mode 100644 index 0000000..edc0fdb Binary files /dev/null and b/apps/landing/src/assets/shots/home-it-light.webp differ diff --git a/apps/landing/src/assets/shots/library-en-dark.webp b/apps/landing/src/assets/shots/library-en-dark.webp new file mode 100644 index 0000000..e57d3cf Binary files /dev/null and b/apps/landing/src/assets/shots/library-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/library-en-light.webp b/apps/landing/src/assets/shots/library-en-light.webp new file mode 100644 index 0000000..0a1fc77 Binary files /dev/null and b/apps/landing/src/assets/shots/library-en-light.webp differ diff --git a/apps/landing/src/assets/shots/library-it-dark.webp b/apps/landing/src/assets/shots/library-it-dark.webp new file mode 100644 index 0000000..49630fd Binary files /dev/null and b/apps/landing/src/assets/shots/library-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/library-it-light.webp b/apps/landing/src/assets/shots/library-it-light.webp new file mode 100644 index 0000000..3974f65 Binary files /dev/null and b/apps/landing/src/assets/shots/library-it-light.webp differ diff --git a/apps/landing/src/assets/shots/new-note-en-dark.webp b/apps/landing/src/assets/shots/new-note-en-dark.webp new file mode 100644 index 0000000..4218f6b Binary files /dev/null and b/apps/landing/src/assets/shots/new-note-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/new-note-en-light.webp b/apps/landing/src/assets/shots/new-note-en-light.webp new file mode 100644 index 0000000..4e62771 Binary files /dev/null and b/apps/landing/src/assets/shots/new-note-en-light.webp differ diff --git a/apps/landing/src/assets/shots/new-note-it-dark.webp b/apps/landing/src/assets/shots/new-note-it-dark.webp new file mode 100644 index 0000000..d922bee Binary files /dev/null and b/apps/landing/src/assets/shots/new-note-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/new-note-it-light.webp b/apps/landing/src/assets/shots/new-note-it-light.webp new file mode 100644 index 0000000..3ec3a81 Binary files /dev/null and b/apps/landing/src/assets/shots/new-note-it-light.webp differ diff --git a/apps/landing/src/assets/shots/new-project-en-dark.webp b/apps/landing/src/assets/shots/new-project-en-dark.webp new file mode 100644 index 0000000..6d69c3b Binary files /dev/null and b/apps/landing/src/assets/shots/new-project-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/new-project-en-light.webp b/apps/landing/src/assets/shots/new-project-en-light.webp new file mode 100644 index 0000000..f8bea72 Binary files /dev/null and b/apps/landing/src/assets/shots/new-project-en-light.webp differ diff --git a/apps/landing/src/assets/shots/new-project-it-dark.webp b/apps/landing/src/assets/shots/new-project-it-dark.webp new file mode 100644 index 0000000..3357ed7 Binary files /dev/null and b/apps/landing/src/assets/shots/new-project-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/new-project-it-light.webp b/apps/landing/src/assets/shots/new-project-it-light.webp new file mode 100644 index 0000000..3ca36b6 Binary files /dev/null and b/apps/landing/src/assets/shots/new-project-it-light.webp differ diff --git a/apps/landing/src/assets/shots/new-session-en-dark.webp b/apps/landing/src/assets/shots/new-session-en-dark.webp new file mode 100644 index 0000000..c560906 Binary files /dev/null and b/apps/landing/src/assets/shots/new-session-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/new-session-en-light.webp b/apps/landing/src/assets/shots/new-session-en-light.webp new file mode 100644 index 0000000..d238499 Binary files /dev/null and b/apps/landing/src/assets/shots/new-session-en-light.webp differ diff --git a/apps/landing/src/assets/shots/new-session-it-dark.webp b/apps/landing/src/assets/shots/new-session-it-dark.webp new file mode 100644 index 0000000..84c3c90 Binary files /dev/null and b/apps/landing/src/assets/shots/new-session-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/new-session-it-light.webp b/apps/landing/src/assets/shots/new-session-it-light.webp new file mode 100644 index 0000000..2711db5 Binary files /dev/null and b/apps/landing/src/assets/shots/new-session-it-light.webp differ diff --git a/apps/landing/src/assets/shots/practice-en-dark.webp b/apps/landing/src/assets/shots/practice-en-dark.webp new file mode 100644 index 0000000..81df630 Binary files /dev/null and b/apps/landing/src/assets/shots/practice-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/practice-en-light.webp b/apps/landing/src/assets/shots/practice-en-light.webp new file mode 100644 index 0000000..637fc75 Binary files /dev/null and b/apps/landing/src/assets/shots/practice-en-light.webp differ diff --git a/apps/landing/src/assets/shots/practice-feedback-en-dark.webp b/apps/landing/src/assets/shots/practice-feedback-en-dark.webp new file mode 100644 index 0000000..8d4f64b Binary files /dev/null and b/apps/landing/src/assets/shots/practice-feedback-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/practice-feedback-en-light.webp b/apps/landing/src/assets/shots/practice-feedback-en-light.webp new file mode 100644 index 0000000..b56bab8 Binary files /dev/null and b/apps/landing/src/assets/shots/practice-feedback-en-light.webp differ diff --git a/apps/landing/src/assets/shots/practice-feedback-it-dark.webp b/apps/landing/src/assets/shots/practice-feedback-it-dark.webp new file mode 100644 index 0000000..ea339c5 Binary files /dev/null and b/apps/landing/src/assets/shots/practice-feedback-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/practice-feedback-it-light.webp b/apps/landing/src/assets/shots/practice-feedback-it-light.webp new file mode 100644 index 0000000..75fe8b3 Binary files /dev/null and b/apps/landing/src/assets/shots/practice-feedback-it-light.webp differ diff --git a/apps/landing/src/assets/shots/practice-it-dark.webp b/apps/landing/src/assets/shots/practice-it-dark.webp new file mode 100644 index 0000000..5716334 Binary files /dev/null and b/apps/landing/src/assets/shots/practice-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/practice-it-light.webp b/apps/landing/src/assets/shots/practice-it-light.webp new file mode 100644 index 0000000..4db058d Binary files /dev/null and b/apps/landing/src/assets/shots/practice-it-light.webp differ diff --git a/apps/landing/src/assets/shots/search-en-dark.webp b/apps/landing/src/assets/shots/search-en-dark.webp new file mode 100644 index 0000000..436a704 Binary files /dev/null and b/apps/landing/src/assets/shots/search-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/search-en-light.webp b/apps/landing/src/assets/shots/search-en-light.webp new file mode 100644 index 0000000..55b48fd Binary files /dev/null and b/apps/landing/src/assets/shots/search-en-light.webp differ diff --git a/apps/landing/src/assets/shots/search-it-dark.webp b/apps/landing/src/assets/shots/search-it-dark.webp new file mode 100644 index 0000000..707faa3 Binary files /dev/null and b/apps/landing/src/assets/shots/search-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/search-it-light.webp b/apps/landing/src/assets/shots/search-it-light.webp new file mode 100644 index 0000000..cfbbb9d Binary files /dev/null and b/apps/landing/src/assets/shots/search-it-light.webp differ diff --git a/apps/landing/src/assets/shots/session-en-dark.webp b/apps/landing/src/assets/shots/session-en-dark.webp new file mode 100644 index 0000000..3921d0a Binary files /dev/null and b/apps/landing/src/assets/shots/session-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/session-en-light.webp b/apps/landing/src/assets/shots/session-en-light.webp new file mode 100644 index 0000000..6bb847d Binary files /dev/null and b/apps/landing/src/assets/shots/session-en-light.webp differ diff --git a/apps/landing/src/assets/shots/session-it-dark.webp b/apps/landing/src/assets/shots/session-it-dark.webp new file mode 100644 index 0000000..078749b Binary files /dev/null and b/apps/landing/src/assets/shots/session-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/session-it-light.webp b/apps/landing/src/assets/shots/session-it-light.webp new file mode 100644 index 0000000..90e3383 Binary files /dev/null and b/apps/landing/src/assets/shots/session-it-light.webp differ diff --git a/apps/landing/src/assets/shots/settings-appearance-en-dark.webp b/apps/landing/src/assets/shots/settings-appearance-en-dark.webp new file mode 100644 index 0000000..fce031f Binary files /dev/null and b/apps/landing/src/assets/shots/settings-appearance-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/settings-appearance-en-light.webp b/apps/landing/src/assets/shots/settings-appearance-en-light.webp new file mode 100644 index 0000000..1b47882 Binary files /dev/null and b/apps/landing/src/assets/shots/settings-appearance-en-light.webp differ diff --git a/apps/landing/src/assets/shots/settings-appearance-it-dark.webp b/apps/landing/src/assets/shots/settings-appearance-it-dark.webp new file mode 100644 index 0000000..2a45d6d Binary files /dev/null and b/apps/landing/src/assets/shots/settings-appearance-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/settings-appearance-it-light.webp b/apps/landing/src/assets/shots/settings-appearance-it-light.webp new file mode 100644 index 0000000..b110c13 Binary files /dev/null and b/apps/landing/src/assets/shots/settings-appearance-it-light.webp differ diff --git a/apps/landing/src/assets/shots/settings-en-dark.webp b/apps/landing/src/assets/shots/settings-en-dark.webp new file mode 100644 index 0000000..6bd9613 Binary files /dev/null and b/apps/landing/src/assets/shots/settings-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/settings-en-light.webp b/apps/landing/src/assets/shots/settings-en-light.webp new file mode 100644 index 0000000..aeced2a Binary files /dev/null and b/apps/landing/src/assets/shots/settings-en-light.webp differ diff --git a/apps/landing/src/assets/shots/settings-it-dark.webp b/apps/landing/src/assets/shots/settings-it-dark.webp new file mode 100644 index 0000000..f4944e2 Binary files /dev/null and b/apps/landing/src/assets/shots/settings-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/settings-it-light.webp b/apps/landing/src/assets/shots/settings-it-light.webp new file mode 100644 index 0000000..386bb46 Binary files /dev/null and b/apps/landing/src/assets/shots/settings-it-light.webp differ diff --git a/apps/landing/src/assets/shots/settings-models-en-dark.webp b/apps/landing/src/assets/shots/settings-models-en-dark.webp new file mode 100644 index 0000000..f0198ce Binary files /dev/null and b/apps/landing/src/assets/shots/settings-models-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/settings-models-en-light.webp b/apps/landing/src/assets/shots/settings-models-en-light.webp new file mode 100644 index 0000000..9c359c5 Binary files /dev/null and b/apps/landing/src/assets/shots/settings-models-en-light.webp differ diff --git a/apps/landing/src/assets/shots/settings-models-it-dark.webp b/apps/landing/src/assets/shots/settings-models-it-dark.webp new file mode 100644 index 0000000..741419e Binary files /dev/null and b/apps/landing/src/assets/shots/settings-models-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/settings-models-it-light.webp b/apps/landing/src/assets/shots/settings-models-it-light.webp new file mode 100644 index 0000000..dda1812 Binary files /dev/null and b/apps/landing/src/assets/shots/settings-models-it-light.webp differ diff --git a/apps/landing/src/assets/shots/settings-processing-en-dark.webp b/apps/landing/src/assets/shots/settings-processing-en-dark.webp new file mode 100644 index 0000000..c1fd54d Binary files /dev/null and b/apps/landing/src/assets/shots/settings-processing-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/settings-processing-en-light.webp b/apps/landing/src/assets/shots/settings-processing-en-light.webp new file mode 100644 index 0000000..fdf7fd4 Binary files /dev/null and b/apps/landing/src/assets/shots/settings-processing-en-light.webp differ diff --git a/apps/landing/src/assets/shots/settings-processing-it-dark.webp b/apps/landing/src/assets/shots/settings-processing-it-dark.webp new file mode 100644 index 0000000..44719b9 Binary files /dev/null and b/apps/landing/src/assets/shots/settings-processing-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/settings-processing-it-light.webp b/apps/landing/src/assets/shots/settings-processing-it-light.webp new file mode 100644 index 0000000..148b1d5 Binary files /dev/null and b/apps/landing/src/assets/shots/settings-processing-it-light.webp differ diff --git a/apps/landing/src/assets/shots/source-details-en-dark.webp b/apps/landing/src/assets/shots/source-details-en-dark.webp new file mode 100644 index 0000000..95a3d3c Binary files /dev/null and b/apps/landing/src/assets/shots/source-details-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/source-details-en-light.webp b/apps/landing/src/assets/shots/source-details-en-light.webp new file mode 100644 index 0000000..fd52cb1 Binary files /dev/null and b/apps/landing/src/assets/shots/source-details-en-light.webp differ diff --git a/apps/landing/src/assets/shots/source-details-it-dark.webp b/apps/landing/src/assets/shots/source-details-it-dark.webp new file mode 100644 index 0000000..6b9c806 Binary files /dev/null and b/apps/landing/src/assets/shots/source-details-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/source-details-it-light.webp b/apps/landing/src/assets/shots/source-details-it-light.webp new file mode 100644 index 0000000..8da8c82 Binary files /dev/null and b/apps/landing/src/assets/shots/source-details-it-light.webp differ diff --git a/apps/landing/src/assets/shots/study-menu-en-dark.webp b/apps/landing/src/assets/shots/study-menu-en-dark.webp new file mode 100644 index 0000000..392eeba Binary files /dev/null and b/apps/landing/src/assets/shots/study-menu-en-dark.webp differ diff --git a/apps/landing/src/assets/shots/study-menu-en-light.webp b/apps/landing/src/assets/shots/study-menu-en-light.webp new file mode 100644 index 0000000..30a48df Binary files /dev/null and b/apps/landing/src/assets/shots/study-menu-en-light.webp differ diff --git a/apps/landing/src/assets/shots/study-menu-it-dark.webp b/apps/landing/src/assets/shots/study-menu-it-dark.webp new file mode 100644 index 0000000..9512c99 Binary files /dev/null and b/apps/landing/src/assets/shots/study-menu-it-dark.webp differ diff --git a/apps/landing/src/assets/shots/study-menu-it-light.webp b/apps/landing/src/assets/shots/study-menu-it-light.webp new file mode 100644 index 0000000..c760a87 Binary files /dev/null and b/apps/landing/src/assets/shots/study-menu-it-light.webp differ diff --git a/crates/study-showcase/src/desktop.rs b/crates/study-showcase/src/desktop.rs index 13e1b6d..15857e7 100644 --- a/crates/study-showcase/src/desktop.rs +++ b/crates/study-showcase/src/desktop.rs @@ -435,10 +435,11 @@ impl Recording { /// Asks the recorder to finish the file and waits for it. A still screen sends the /// recorder no frame to notice the request on, so the pointer, resting at `at`, is - /// nudged until it ends and comes back there. + /// nudged until it ends and comes back there. On a small machine rendering in software + /// (a CI runner) it may still be encoding the frames it holds, so it gets a minute. pub fn stop(mut self, desktop: &Desktop, at: (u32, u32)) -> Result<()> { signal(&self.process.0, "INT").context("cannot stop wf-recorder")?; - let ended = wait(Duration::from_secs(10), "wf-recorder to finish", || { + let ended = wait(Duration::from_secs(60), "wf-recorder to finish", || { let moved = desktop .warp(at.0.saturating_sub(2), at.1) .and_then(|()| desktop.warp(at.0, at.1)); diff --git a/crates/study-showcase/src/docs.rs b/crates/study-showcase/src/docs.rs index 1a8966f..e39c27a 100644 --- a/crates/study-showcase/src/docs.rs +++ b/crates/study-showcase/src/docs.rs @@ -448,8 +448,8 @@ fn reset() -> Vec { vec![key("Escape"), key("Escape"), rail(HOME), Step::Pause(800)] } -/// The argument that makes only the scenes with a file missing, in every variant: what a -/// fresh checkout runs before building the site, so it never starts a desktop for nothing. +/// The argument that makes only the scenes with a file missing, in every variant: a new +/// scene's, without making again the ones already committed. pub const MISSING: &str = "missing"; /// Makes every scene whose name is in `only` (all if it is empty, or those with a file @@ -659,6 +659,36 @@ mod tests { } } + #[test] + fn the_committed_captures_are_every_scenes_files_and_no_others() { + let repo = Path::new(env!("CARGO_MANIFEST_DIR")).join("../.."); + let expected: HashSet = scenes() + .iter() + .flat_map(|scene| { + Variant::all() + .into_iter() + .flat_map(|variant| scene.files(&repo, variant)) + }) + .collect(); + for file in &expected { + assert!( + file.is_file(), + "{} is missing: make it with `just docs-media missing`", + file.display() + ); + } + for dir in [SHOTS, CLIPS] { + for entry in std::fs::read_dir(repo.join(dir)).unwrap() { + let file = entry.unwrap().path(); + assert!( + expected.contains(&file), + "{} is no scene's capture: delete it", + file.display() + ); + } + } + } + #[test] fn the_theme_codes_are_the_desktops() { let source = include_str!("../../../apps/desktop/src/app/preferences.rs"); diff --git a/crates/study-showcase/src/lib.rs b/crates/study-showcase/src/lib.rs index 5780c2c..510a367 100644 --- a/crates/study-showcase/src/lib.rs +++ b/crates/study-showcase/src/lib.rs @@ -1,6 +1,7 @@ //! Records the demo GIF in the README (`just demo`) and the website's docs media -//! (`just docs-media`). Both are build output, not sources: the Landing workflow makes them -//! again on every deploy and publishes the GIF with the site, where the README shows it. +//! (`just docs-media`). Both are output, not sources: they are committed so the website deploys +//! without building the app, and the Captures workflow makes them all again, by hand, in a +//! pull request. The site publishes the GIF, and the README shows it from there. //! //! The binary starts a private headless desktop (its own sway under `target/showcase`, never //! the shared one from `just desktop`), seeds a fresh database with the sample data, opens