The poster goes under the exhibition question as a slideshow slide —
989×1400 webp, 85K, sized to the "around 1400 pixels tall is plenty"
the content reference asks for.
It also settles a date this page had wrong. The poster runs 24.10 to
15.11; the event here said `duration: 31d` from the 23rd, which reaches
23 November. The header announces the exhibition for as long as the
event window lasts, so that would have kept inviting people to a closed
room for eight days. It is 23d now, and the opening hours the poster
gives — Saturdays and Sundays, 13:00 to 17:00 — are on the feature that
tells people when to come.
The 23rd at 19:00 stays as the start: that is the opening, and the 24th
is the first day the doors are open to everyone else.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ByshXuDEzH8hXh5qp4VgGk
redoal.com is read and answered without an account, so the invitation
to sign in has no audience. Portal's header nav keeps it next to the
wordmark on every page; a skin hides it.
The rule only takes the link in: signed in, the nav still carries the
name and the way out, and the gate on /review still offers its own way
in. First custom.css here, wired through site.yaml's stylesheet key.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
iris stopped at v0.5.10; the lint has been portal itself since 0.6.0,
fetched from the portal release this site runs, as uhhm/questions does.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The front door's releases card read the private repo's Gitea releases
with its link nulled, since those 404 for visitors. It now reads the
public manifest redoal's release job writes to dl.redoal.com, which
portal renders as a download card with this device's file first. The
pins move from v0.5.2 to v0.6.20 for both the instance and the lint;
the content lints clean on it.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
One card per release made the section grow forever, and the newest cut
is the one a visitor should actually run — the rest are history, not an
invitation.
`limit` is the portal's mechanism for this (uhhm/portal 22d086f) and
this site is pinned to PORTAL_RELEASE v0.5.2, which predates it, so the
jq takes `.[0]` instead of `.[]` and that is what does the work today.
`limit: 1` is declared alongside it: v0.5.2 ignores fields it does not
know, so it costs nothing now and takes over when the pin moves
forward, at which point the jq goes back to `.[]`.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ByshXuDEzH8hXh5qp4VgGk
Attachments both ways, rate limiting, sessions that survive a deploy,
and an upload route that asks the policy like every other way in.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Four releases on from v0.3.36: maps and `place:`, a reply to a case
mail becoming a note on its record, and the access policy's newer
rules. iris moves with it, since it is the lint for exactly this
portal.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The 'redoal testers' external group now has a public link
(https://testflight.apple.com/join/eR9dvHkz) — one tap on an iPhone,
no invitation flow. Replace the Apple-ID form (and its action/
record_as plumbing) with the link; no email collection, nothing for
us to process. The n8n named-invite workflow stays shelved in
redoal/redoal ops/ for a future curated group.
Lint: OK (9 questions, 5 aggregates).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ByshXuDEzH8hXh5qp4VgGk
Desktop releases run free (the gitea_releases listing, no sign-up); a
'Join the public testers' form on the same alternative collects the
Apple ID for a TestFlight invite, recorded to redoal_testers. New
confirmation page /joined-testers, and an aggregates entry with
attended_by pointing at the n8n TestFlight onboarding automation
(events.redoal_testers.* → App Store Connect).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ByshXuDEzH8hXh5qp4VgGk
The portal's apply_jq collects the jq output stream into an array
itself. The wrapping [ … ] made the filter emit one array-valued
output, which nested to [[{…}]] and failed the array-of-objects card
renderer, dumping raw JSON. Emit a bare object like the releases jq
does, so it collects into [{…}] and renders as a card.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ByshXuDEzH8hXh5qp4VgGk
A 'The count so far' feature in the index's 'Meet a network' alternative
fetches https://relay.redoal.com/pulse (redoal ADR-0023) with a kind:url
resource and shapes { voices_echoed: N } into one card — the number as
the heading, 'voices echoed so far' beneath. Lint-clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Every recording card links to /report/<digest>. Filing opens a
redoal_reports record; the Reports desk decides — Remove it acts for
real (the relay deletes the recording everywhere), Keep it closes
with the voice in place. Pins portal v0.3.17 for markdown in cards.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y42TyF8Zu7NGRR2893vNcZ
redoal_watchers starts pending; /watching (the confirmation mail's
landing page) confirms to open or drops. Only open watchers are told.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The landing gesture leads to /shape/{curve.key} - the place page:
what was left there (the relay's /place, playable), leave your voice
(type: voice at value "{key}"), hear from exactly this address
(redoal_watchers, exact key), and the cards. Email leaves the landing
page. A card for iroh through varde. Desks for voices and watchers.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
25% overscan on every side, drawing scaled to the piece so nothing
grows; html overflow-x: clip keeps the bleed from scrolling sideways.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>