Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
Format follows [Keep a Changelog](https://keepachangelog.com/). This project
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.18.2] - 2026-07-22

### Changed

- Real photographs replace all three placeholder slates in the presentation deck: a Reachy Mini table portrait (hero), a Reachy Mini close-up mid-gesture (action), and the SO-ARM101 arm reaching in side profile (hero). Converted to WebP at the manifest's existing pixel targets, so the drop-in contract held with no path or dimension change. Alt text and `subject` descriptions rewritten to describe the photographs that actually ship — the previous text described intended shots that differ from these frames.

## [0.18.1] - 2026-07-22

### Changed
Expand Down
51 changes: 27 additions & 24 deletions docs/presentation-photos.md
Original file line number Diff line number Diff line change
@@ -1,55 +1,58 @@
# Presentation deck photos

The symbolic deck at `/presentations/mind-nervous-system-body/` anchors each
robot slide on a real photograph. Until those photographs are taken, the deck
ships three **placeholder** images — duotone slates in the site palette — so the
built site looks intentional, with zero broken-image icons.
robot slide on a real photograph. **All three slots now carry real photographs**
— the duotone placeholder slates they shipped with are gone.

This page is the shot brief. The typed manifest the deck imports lives at
This page describes what is in each slot and how to replace it. The typed
manifest the deck imports lives at
`site-astro/src/data/presentation-photos.ts`; the two must stay in step.

## The three shots

Every file lives under `site-astro/public/presentations/`. Each slot has a
full-size image and a thumbnail. The placeholders ship at these exact filenames
so a real photo is a drop-in replacement (see below).
full-size image and a thumbnail, at these exact filenames — so a re-shoot is a
drop-in replacement (see below).

| Slot | Full file | Thumb file | Subject | Orientation | Full / thumb px |
| Slot | Full file | Thumb file | What's in it | Orientation | Full / thumb px |
| --- | --- | --- | --- | --- | --- |
| `reachy-mini-hero` | `reachy-mini-hero.webp` | `reachy-mini-hero-thumb.webp` | Reachy Mini on a clean desk, three-quarter view, head toward the lens, antennas up, warm key light | landscape 16:9 | 1920×1080 / 480×270 |
| `reachy-mini-action` | `reachy-mini-action.webp` | `reachy-mini-action-thumb.webp` | Reachy Mini mid-gesture, head tilted and antennas in motion, a hand near it for scale | landscape 3:2 | 1800×1200 / 480×320 |
| `so101-hero` | `so101-hero.webp` | `so101-hero-thumb.webp` | SO-ARM101 arm at rest in its home pose, gripper open, clean side profile on a plain backdrop | landscape 16:9 | 1920×1080 / 480×270 |
| `reachy-mini-hero` | `reachy-mini-hero.webp` | `reachy-mini-hero-thumb.webp` | Reachy Mini on a wooden table facing the lens, antennas rising out of frame, blurred marble fireplace behind | landscape 16:9 | 1920×1080 / 480×270 |
| `reachy-mini-action` | `reachy-mini-action.webp` | `reachy-mini-action-thumb.webp` | Reachy Mini close-up mid-gesture, head tilted up and back, antennas angled out, warm blurred interior | landscape 3:2 | 1800×1200 / 480×320 |
| `so101-hero` | `so101-hero.webp` | `so101-hero-thumb.webp` | SO-ARM101 in side profile on a white surface, raised and reaching forward, gripper open | landscape 16:9 | 1920×1080 / 480×270 |

Reachy Mini is a small expressive desk robot with a movable head, two antennas,
a camera and a speaker. The SO-ARM101 is a hobby robot arm
with a two-finger gripper.

### Alt text

The alt text below rides with each slot in the manifest. It describes the
*intended* photo, so it is already correct once the real image is dropped in —
you do not need to touch it.
The alt text below rides with each slot in the manifest and describes the photo
that actually ships. **If you re-shoot a slot, re-read its alt text** — a
screen-reader user is told what the alt says, so it has to match the new frame.

| Slot | Alt text |
| --- | --- |
| `reachy-mini-hero` | Reachy Mini, a small expressive desk robot with a rounded movable head, two antennas, a single camera eye and a speaker in its base, seen in three-quarter view on a desk. |
| `reachy-mini-action` | Reachy Mini mid-gesture, its head tilted and antennas swinging, a person's hand beside it for scale, background softly out of focus. |
| `so101-hero` | The SO-ARM101 hobby robot arm at rest in a clean side profile, its jointed segments folded into the home pose and its two-finger gripper open, against a plain backdrop. |
| `reachy-mini-hero` | Reachy Mini, a small white desk robot with a rounded movable head and a pair of dark camera lenses, facing the viewer on a wooden table, its two thin antennas rising out of the top of the frame and a marble fireplace blurred behind it. |
| `reachy-mini-action` | Reachy Mini in close-up mid-gesture, its head tilted up and back on a jointed metal neck and its two antennas angled out, the pair of dark camera lenses reflecting the room, against a warm interior softly out of focus. |
| `so101-hero` | The SO-ARM101 robot arm in side profile on a white surface, its black 3D-printed segments raised and reaching forward, its two-finger gripper open with one white jaw and one black jaw, against a plain pale backdrop. |

## Replacing a placeholder with a real photo
## Replacing a photo

The drop-in contract is: **save the real photo over the same filename, in the
The drop-in contract is: **save the new photo over the same filename, in the
same folder, as WebP** — nothing in code changes.

1. Take the shot at (or above) the target full-size dimensions and crop it to
the slot's aspect ratio.
2. Export it as WebP at the slot's `Full file` name (for example
`reachy-mini-hero.webp`), overwriting the placeholder in
`reachy-mini-hero.webp`), overwriting the current image in
`site-astro/public/presentations/`.
3. Make a downscaled thumbnail and export it as WebP at the `Thumb file` name
(for example `reachy-mini-hero-thumb.webp`), same folder.
4. Rebuild: `cd site-astro && npm run build`. The manifest already points at
these paths, so the deck picks the real photo up with no code edit.
4. Update that slot's `subject` and `alt` in
`site-astro/src/data/presentation-photos.ts` (and the tables above) if the
new frame shows something different from the old one.
5. Rebuild: `cd site-astro && npm run build`. The manifest already points at
these paths, so the deck picks the new photo up with no code edit.

If you would rather ship JPEGs, that is a code change (the manifest `src` /
`thumbSrc` paths and these filenames end in `.webp`), so keep to WebP for a
Expand All @@ -60,6 +63,6 @@ true drop-in.
The thumbnails load below the first slide (lazily) as a quick-scan strip, so
they should stay small for fast loading — target roughly 480 px on the long
edge and **under ~30 KB** each. The full images stay well under ~200 KB and
far below the Cloudflare Pages 25 MiB per-file limit. The shipped placeholders
already meet this (full images ~30–40 KB, thumbnails ~5–7 KB); match that order
of magnitude when you replace them so the deck stays fast.
far below the Cloudflare Pages 25 MiB per-file limit. The shipped photographs
meet this (full images ~39–98 KB, thumbnails ~6–11 KB); match that order of
magnitude when you replace them so the deck stays fast.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "org"
version = "0.18.1"
version = "0.18.2"
description = "The AgentCulture org site — source of the web presence published to AgentCulture.org. Replaces the deleted landing-page repo. Not distributed on PyPI: the CLI stays repo-local; the deliverable is the published site."
readme = "README.md"
license = "Apache-2.0"
Expand Down
Binary file modified site-astro/public/presentations/reachy-mini-action-thumb.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified site-astro/public/presentations/reachy-mini-action.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified site-astro/public/presentations/reachy-mini-hero-thumb.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified site-astro/public/presentations/reachy-mini-hero.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified site-astro/public/presentations/so101-hero-thumb.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified site-astro/public/presentations/so101-hero.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
30 changes: 15 additions & 15 deletions site-astro/src/data/presentation-photos.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
// Photo manifest for the symbolic presentation deck (/presentations/).
//
// The deck anchors each robot slide on a real photograph. Those photographs do
// not exist in the repo yet, so this module ships three intentional *placeholder*
// images — duotone slates in the site palette — under public/presentations/,
// and names, for each slot, exactly what the real photo should be.
// The deck anchors each robot slide on a real photograph. All three slots now
// carry real photographs under public/presentations/ — the duotone placeholder
// slates they replaced are gone. Each slot's `subject` and `alt` describe the
// photograph that actually ships, not an intended shot.
//
// Drop-in contract: the site owner exports a real photo over the same filename
// (same WebP format, same public path) and nothing in code changes. The `src`
// / `thumbSrc` paths, the pixel targets, and the alt text are the brief for the
// shoot; see docs/presentation-photos.md for the human-facing guidance.
// Drop-in contract (still live for re-shoots): export a new photo over the same
// filename — same WebP format, same public path, same pixel target — and
// nothing in code changes. Only `subject` and `alt` need revisiting, and only
// if the new frame shows something different; see docs/presentation-photos.md.
//
// Three slots — a hero + action pair for Reachy Mini, and a hero for SO-ARM101 —
// one robot per slot, so the deck can guarantee "one robot per slide" (plan
Expand Down Expand Up @@ -51,7 +51,7 @@ export interface PresentationPhoto {
/** e.g. "480×270". */
thumb: string;
};
/** Real alt text describing the *intended* photo (not the placeholder). */
/** Alt text describing the photograph that actually ships in this slot. */
alt: string;
}

Expand All @@ -63,10 +63,10 @@ export const presentationPhotos = [
subjectRobot: "Reachy Mini",
role: "hero",
subject:
"Reachy Mini on a clean desk in three-quarter view, head turned toward the lens with antennas up, lit by a warm key light.",
"Reachy Mini on a wooden table, facing the lens with antennas up, a marble fireplace softly out of focus behind it.",
orientation: "landscape 16:9",
targetDimensions: { full: "1920×1080", thumb: "480×270" },
alt: "Reachy Mini, a small expressive desk robot with a rounded movable head, two antennas, a single camera eye and a speaker in its base, seen in three-quarter view on a desk.",
alt: "Reachy Mini, a small white desk robot with a rounded movable head and a pair of dark camera lenses, facing the viewer on a wooden table, its two thin antennas rising out of the top of the frame and a marble fireplace blurred behind it.",
},
{
id: "reachy-mini-action",
Expand All @@ -75,10 +75,10 @@ export const presentationPhotos = [
subjectRobot: "Reachy Mini",
role: "action",
subject:
"Reachy Mini mid-gesture with its head tilted and antennas in motion, a human hand near it for scale, shallow depth of field.",
"Reachy Mini in close-up mid-gesture, head tilted up and back on its jointed neck, antennas angled out, shallow depth of field.",
orientation: "landscape 3:2",
targetDimensions: { full: "1800×1200", thumb: "480×320" },
alt: "Reachy Mini mid-gesture, its head tilted and antennas swinging, a person's hand beside it for scale, background softly out of focus.",
alt: "Reachy Mini in close-up mid-gesture, its head tilted up and back on a jointed metal neck and its two antennas angled out, the pair of dark camera lenses reflecting the room, against a warm interior softly out of focus.",
},
{
id: "so101-hero",
Expand All @@ -87,10 +87,10 @@ export const presentationPhotos = [
subjectRobot: "SO-ARM101",
role: "hero",
subject:
"The SO-ARM101 robot arm at rest in its home pose, gripper open, in a clean side profile against a plain seamless backdrop.",
"The SO-ARM101 robot arm in side profile on a white surface, raised and reaching forward with its gripper open, plain pale backdrop.",
orientation: "landscape 16:9",
targetDimensions: { full: "1920×1080", thumb: "480×270" },
alt: "The SO-ARM101 hobby robot arm at rest in a clean side profile, its jointed segments folded into the home pose and its two-finger gripper open, against a plain backdrop.",
alt: "The SO-ARM101 robot arm in side profile on a white surface, its black 3D-printed segments raised and reaching forward, its two-finger gripper open with one white jaw and one black jaw, against a plain pale backdrop.",
},
] as const satisfies readonly PresentationPhoto[];

Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading