1 Commits
Author SHA1 Message Date
Bendik Aagaard LynghaugandClaude Fable 5.1 531dbbf2de The front door opens modestly, with plain titles
The first card says what redoal is, in two features for the two people
it exists for (the one who draws, the one who leaves a voice) and no
button; the second is a look around (the live count, releases, the
iPhone beta, varde, UHHM); only then the drawing and the notes. Bold
statement titles become what-you-get titles: "Meet a network you
carry in your hand" and "Follow the build as it lands" fold into the
opener and the look-around, "Hear from us when it matters" is "Get a
note when something lands", "Hear from this address" is "Get a note
when a voice lands here", "What just happened" is "What your drawing
became", "Come draw on the wall" is "See it in person at Podium".

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L4jrCgLiKKHAEFuZUJjckH
2026-09-23 18:25:04 +02:00
9 changed files with 136 additions and 346 deletions
+1 -1
View File
@@ -18,7 +18,7 @@ on:
- .gitea/workflows/deploy.yml - .gitea/workflows/deploy.yml
env: env:
PORTAL_RELEASE: v0.6.20 PORTAL_RELEASE: v0.3.36
INSTANCE: redoal-portal INSTANCE: redoal-portal
jobs: jobs:
+7 -7
View File
@@ -15,18 +15,18 @@ jobs:
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
# The lint is portal itself (`portal lint`, since portal 0.6.0; # iris (uhhm/iris) is the lint: it reads content with the portal
# iris is no longer released), at the version this site runs # release it is pinned to, so IRIS_RELEASE should match the portal
# (PORTAL_RELEASE in deploy.yml). # this site runs (PORTAL_RELEASE in deploy.yml).
- name: Lint questions - name: Lint questions
env: env:
PORTAL_RELEASE: v0.6.20 IRIS_RELEASE: v0.3.39
run: | run: |
# The checkout is on a noexec mount for this runner; the cargo # The checkout is on a noexec mount for this runner; the cargo
# target dir is where it may run what it fetched. # target dir is where it may run what it fetched.
bin="/var/local/cargo-target/portal-lint-$PORTAL_RELEASE" bin="/var/local/cargo-target/iris-$IRIS_RELEASE"
[ -x "$bin" ] || { curl -sfL "${{ github.server_url }}/uhhm/portal/releases/download/$PORTAL_RELEASE/portal-x86_64-linux" -o "$bin" && chmod +x "$bin"; } [ -x "$bin" ] || { curl -sfL "${{ github.server_url }}/uhhm/iris/releases/download/$IRIS_RELEASE/iris" -o "$bin" && chmod +x "$bin"; }
"$bin" lint --path questions "$bin" check --path questions
reload: reload:
runs-on: bare runs-on: bare
-15
View File
@@ -1,15 +0,0 @@
/* redoal - the skin over portal's own stylesheet
(site.yaml `stylesheet`, loaded after main.css, so these rules win). */
/* The way in sits beside the wordmark on every page. redoal.com is read
and answered without an account, so the invitation is not shown.
Whoever edits the site still signs in at /auth/login directly, and
once signed in the nav keeps its name and its way out. */
.session:has(a[href^="/auth/login"]) {
display: none;
}
/* Without :has(), the link alone goes and the empty nav stays. */
.session a[href^="/auth/login"] {
display: none;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

-234
View File
@@ -1,234 +0,0 @@
# What you can make with redoal, and how far each piece is. Every card
# is cut to the same measure: one sentence for what it is, one for
# where it stands, opening with a status word that the accent repeats:
# Running (green) - in your hands today
# Landing (amber) - on the desktop since 0.1.20, phones get it with
# the next beta; flip to Running after that build
# Planned (grey) - decided, not built
# The two live cards (the pulse, the releases) keep themselves current.
name: What can you make with redoal?
description: >
A drawing is an address. What you make is what you leave at it, what
you teach it to do, or the piece of the network you carry yourself.
Each card says what a thing is, then how far it is: running today,
landing on the phone next, or planned.
alternatives:
- name: Draw your way in
description: >
Making with nothing but a finger and a voice. Everything here runs
in the apps, in the browser on this page, or both.
features:
- name: The count so far
description: >
Live from the front door: how many voices have been left at
places so far.
icon: lucide:activity
color: "#6cc08b"
resource:
source:
kind: url
url: https://relay.redoal.com/pulse
public: true
jq: >
{ "name": (.voices_echoed | tostring),
"description": "voices echoed so far" }
empty: The first voice hasn't echoed yet.
- name: A line is an address
description: >
Draw a line and the shape itself is where you are; draw it
again anywhere and you are back. Running everywhere.
icon: lucide:map-pin
color: "#6cc08b"
- name: The line comes back
description: >
The address redraws the shape, so a place looks like the line
that made it. Running everywhere.
icon: lucide:pen-line
color: "#6cc08b"
- name: Neighbours at the line's foot
description: >
The nearest places line up under your drawing, fainter the
further off they are, and your ink settles on the best one.
Running in the apps.
icon: lucide:route
color: "#6cc08b"
- name: A place holds voices
description: >
Recordings stay at the drawing they were left at, for whoever
draws their way there. Running everywhere.
icon: lucide:archive
color: "#6cc08b"
- name: Leave a voice
description: >
Record on top of what is there; it carries your machine's
seal, not your name. Running in the apps and the browser.
icon: lucide:mic
color: "#6cc08b"
- name: Who is here
description: >
The people standing at the same drawing right now, counted
only once they have reached you. Landing: on the desktop now,
on the phone with the next beta.
icon: lucide:users
color: "#e0b04a"
- name: Talk, live
description: >
Hold to speak to the people here, from your machine to theirs,
nothing in between. Running whenever there is company.
icon: lucide:audio-lines
color: "#6cc08b"
- name: Answer with a drawing
description: >
A reply is a second line, anchored at the voice it answers.
Running in the apps.
icon: lucide:reply
color: "#6cc08b"
- name: One place across hands
description: >
The same line drawn facing another way is the same place.
Landing: on the desktop now, on the phone next.
icon: lucide:rotate-ccw
color: "#e0b04a"
- name: Voices that find you
description: >
Listen once, and the author's next voice at that place is sent
to you. Landing: on the desktop now, on the phone next.
icon: lucide:send
color: "#e0b04a"
- name: Favourites and recents
description: >
The places you keep, and the ones you passed on the way.
Running in the apps.
icon: lucide:star
color: "#6cc08b"
- name: Forget
description: >
Only the one who left a voice can erase it, and the erasure
travels as far as the voice did. Running everywhere.
icon: lucide:eraser
color: "#6cc08b"
- name: Draw in the browser
description: >
This site's canvas finds the place and who is near, without
installing anything. Running here.
icon: lucide:globe
color: "#6cc08b"
- name: Two lines at once
description: >
Two shapes added into one address. Planned.
icon: lucide:combine
color: "#8b9099"
- name: Teach a place a behaviour
description: >
A place can do more than hold voices. Behaviour is written in a
small language of twenty-four words and left at a drawing like
anything else, for every visitor's device to run.
features:
- name: A place that does something
description: >
A doorbell, a counter, a turn-taker: a small machine that runs
on the device of whoever arrives. Running from the command
line.
icon: lucide:bell
color: "#6cc08b"
- name: Twenty-four words
description: >
The whole language can send, remember, publish and change
state, and nothing else, so it can never do harm. Running.
icon: lucide:spell-check
color: "#6cc08b"
- name: Events, states, handlers
description: >
Name what can happen, where the thing can be, and what to do
when. Running.
icon: lucide:git-branch
color: "#6cc08b"
- name: Check it, then make the bytes
description: >
One command says whether the file is sound and how big it is
on the wire; another turns it into the bytes for a place.
Running.
icon: lucide:terminal
color: "#6cc08b"
- name: Try it dry
description: >
Fire events at it on your own machine and watch each one move,
before anyone else sees it. Running from the command line.
icon: lucide:flask-conical
color: "#6cc08b"
- name: The bench in the app
description: >
The other side of a place's sheet: how it works with its
surroundings. Running on personal devices; the installation
keeps it closed.
icon: lucide:wrench
color: "#6cc08b"
- name: Publish from the app
description: >
Leaving a behaviour at a place from the app itself, with no
command line. Planned.
icon: lucide:upload
color: "#8b9099"
- name: A whole experience at a place
description: >
A game, a service, an app, found by drawing near it. Planned.
icon: lucide:sparkles
color: "#8b9099"
- name: Carry a piece of the network
description: >
Nothing here belongs to a company. Install it, hold a copy of what
people leave, or run a door of your own.
features:
- name: Install it
description: >
Desktop for Linux and Mac, iPhone through the beta program.
Running.
icon: lucide:package
color: "#6cc08b"
resource:
source:
kind: url
url: https://dl.redoal.com/releases.json
public: true
empty: Nothing released yet — the first cut lands here.
- name: varde holds the bytes
description: >
A small daemon that keeps recordings and moves them between
machines that agreed to it. Running on the desktop, and built
into the phone app.
icon: lucide:hard-drive
color: "#6cc08b"
- name: The front door
description: >
The first node answers the browser, introduces phones to each
other and keeps a copy of what is left. Running on one machine
in Oslo.
icon: lucide:door-open
color: "#6cc08b"
- name: Two phones meet through it
description: >
Introduced at the door, two phones reach each other directly
and keep that path open. Landing: on the desktop now, on the
phone next.
icon: lucide:smartphone
color: "#e0b04a"
- name: Nothing arrives uninvited
description: >
A voice is only sent to you after you have listened to its
author. Landing: on the desktop now, on the phone next.
icon: lucide:hand
color: "#e0b04a"
- name: Same room, no door
description: >
Two desktops on one network find each other without the front
door at all. Running.
icon: lucide:wifi
color: "#6cc08b"
- name: A door of your own
description: >
Run a second front door that helps people meet and learns
nothing about them. Planned.
icon: lucide:key-round
color: "#8b9099"
+22 -30
View File
@@ -1,42 +1,29 @@
# «Atelic Antics», the group exhibition at Podium, part of Attac's # The group exhibition at Podium, part of Attac's «Big Tech må vekk»
# «Big Tech må vekk» 2026: opens 24 October 2026 at 19:00 and runs for a month. Announced # 2026: opens 23 October 2026 at 19:00 and runs for a month. Announced
# in every header while it runs (portal's event: window); afterwards a # in every header while it runs (portal's event: window); afterwards a
# followup, and a "post what happened" task lands on /review. # followup, and a "post what happened" task lands on /review.
name: Where can you see it in person? name: Where can you see it in person?
description: > description: >
redoal is part of «Atelic Antics», the group exhibition at Podium, redoal is part of the group exhibition at Podium, opening 23 October
opening 24 October and running for a month — the art strand of the and running for a month — the art strand of the conference
conference «Big Tech må vekk». Draw a shape at the podium, hear the «Big Tech må vekk». Draw on the screens, leave a voice at a shape,
voices left there, and leave your own. hear who came before you.
event: event:
starts: 2026-10-24T19:00:00+02:00 starts: 2026-10-23T19:00:00+02:00
# To 15 November, per the poster — not a month. The header announces duration: 31d
# this while it runs, so a duration that overshoots keeps inviting
# people to a closed room.
duration: 23d
place: Podium, Hausmanns gate 34, Oslo place: Podium, Hausmanns gate 34, Oslo
slideshow:
slides:
- image: images/atelic-antics.webp
caption: >
«Atelic Antics» — suggestions on digital resistance. Podium,
Hausmanns gate 34, 24 October to 15 November 2026.
width: 989
height: 1400
alternatives: alternatives:
- name: Come draw at the podium - name: See it in person at Podium
description: > description: >
A podium with a touch screen, running the same app you can The installation runs the same code as this site, on screens
install yourself. The shape you draw on it is an address: it you can stand in front of together — the network at the scale
takes you to a place, and to the voices people have left there, of a room.
whether they stood here or drew it somewhere else.
features: features:
- name: Opening 24 October, 19:00 - name: Opening 23 October, 19:00
description: > description: >
«Atelic Antics» opens at [Podium](https://podium.enterprises/), At [Podium](https://podium.enterprises/), Hausmanns gate 34,
Hausmanns gate 34, and is up until 15 November. Come to the and up for a month. Come to the opening, or any Saturday
opening, or any Saturday or Sunday after between 13:00 and or Sunday after.
17:00.
icon: lucide:calendar-days icon: lucide:calendar-days
- name: Part of «Big Tech må vekk» - name: Part of «Big Tech må vekk»
description: > description: >
@@ -47,7 +34,12 @@ alternatives:
icon: lucide:megaphone icon: lucide:megaphone
- name: Draw, then listen - name: Draw, then listen
description: > description: >
Draw a shape on the screen and arrive at a place. Draw a shape on the touch screen and arrive at a place.
Listen to the voices left there, add your own, and watch Listen to the voices left there, add your own, and watch
your line find the lines drawn before it. your line find the lines drawn before it.
icon: lucide:hand icon: lucide:hand
- name: Take the zine with you
description: >
The printed zine sits in the room — six short pieces on what
a network like this could mean. Fold one, hand it on.
icon: lucide:book-open
+104 -56
View File
@@ -1,14 +1,115 @@
id: / id: /
name: What shapes us? name: What is redoal, and what can you do here?
description: > description: >
redoal is a gesture-addressed network. Draw a line and it becomes redoal is a gesture-addressed network. Draw a line and it becomes
an address — the drawing itself, ready to use the moment your hand an address — the drawing itself, ready to use the moment your hand
lifts. Similar drawings land near each other, and everything else lifts. Similar drawings land near each other, and everything else
follows from that. Draw one below and see who's near. follows from that. What it is comes first; the drawing is further
down the page.
responsible: responsible:
name: Bendik Aagaard Lynghaug name: Bendik Aagaard Lynghaug
contact: bl@uhhm.no contact: bl@uhhm.no
alternatives: alternatives:
# The opener: what redoal is, in two features and no button. The
# two people it exists for are the one who draws and the one who
# leaves a voice; both keep what they made.
- name: What redoal is
description: >
The one trick, and what it enables — the parts that run today,
said plainly.
features:
- name: A drawing is an address, and yours to use
description: >
The computer measures how your line curves, turns, and keeps
rhythm, and boils it down to a twenty-byte fingerprint.
Similar drawings get similar fingerprints — two spirals land
like two houses on the same street, and that closeness is
the whole network. Your machine asks the machines around it,
"has anyone been near this shape?", and your spiral finds my
spiral directly, peer to peer.
icon: lucide:map-pin
- name: A voice stays where you left it, sealed by your own hand
description: >
A drawing is a place, and places hold voices. Listen to the
recordings people left at a gesture, leave your own on top,
and when someone stands at the same drawing right now, just
talk. Every recording carries a signature from the leaver's
own machine: keep the key and you're recognized, delete it
and you were never here. A child, an elder, or a newcomer
still learning the local script arrives on the same terms.
icon: lucide:mic
# The look around: nothing to fill in.
- name: Have a look around first
description: >
The network as it runs right now, and where it is going.
features:
- name: The count so far
description: >
Live from the front-door relay — the running tally of what's
been left at places.
icon: lucide:activity
resource:
source:
kind: url
url: https://relay.redoal.com/pulse
public: true
# /pulse (redoal ADR-0023) returns { voices_echoed: N }; shape
# it into one card — the number as the heading, the phrase
# beneath. Emit a bare object, not a wrapped [ … ]: the portal
# collects the jq output stream into an array itself, so a
# wrapping [ ] nests it ([[{…}]]) and drops to a raw JSON dump.
jq: >
{ "name": (.voices_echoed | tostring),
"description": "voices echoed so far" }
empty: The first voice hasn't echoed yet.
- name: Releases
description: Run one of the desktop applications, free, no sign-up.
icon: lucide:package
resource:
source:
kind: gitea_releases
owner: redoal
repo: redoal
public: true
empty: Nothing released yet — the first cut lands here.
# url pinned to null while the repo is private - a private
# release's html_url 404s for anonymous visitors, and the
# card renders an unlinked heading instead (same lesson as
# uhhm/questions 9b7162f).
jq: >
.[] | {name: .name, description: .body, tag: .tag_name,
published: .published_at, url: null}
- name: The iPhone app, in beta
description: >
The iPhone build rides TestFlight (Apple's beta program) —
[join the redoal testers](https://testflight.apple.com/join/eR9dvHkz)
with one tap on your iPhone; no invitation, no email, no
waiting on us.
icon: lucide:smartphone
- name: Carried by iroh, through varde
description: >
What is left at a place is kept and mirrored by
[varde](https://project.uhhm.no/uhhm/varde), a small
daemon that moves bytes between consenting machines over
[iroh](https://iroh.computer) — verified, rate-limited, and
legible to the network it runs on. Recordings travel that way,
with no company carrying them.
icon: lucide:waypoints
- name: Built in the open at UHHM
description: >
[UHHM](https://uhhm.no) builds and carries the gesture math,
the relay, and the portal this page runs on — and hosts the
network's first node. It is a prototype and an artwork before
it is a product: what you can touch is real and running, the
transport that reaches across the internet is being built
now, and the rough edges are where the interesting questions
live. A client, a relay, an instrument — if you want to put
the network on a surface it isn't on yet, say so through the
path below.
icon: lucide:anvil
# The offers.
- name: Draw a path and see who's near - name: Draw a path and see who's near
description: > description: >
By associating similar movements while facilitating discourse we By associating similar movements while facilitating discourse we
@@ -35,59 +136,7 @@ alternatives:
relay: wss://relay.redoal.com relay: wss://relay.redoal.com
optional: true optional: true
- name: Meet a network you carry in your hand - name: Get a note when something lands
description: >
The one trick, and what it enables — said plainly, with how far
each piece is.
action: /create
consequence: [Learn more]
features:
- name: A drawing is an address
description: >
Draw a line and the shape itself is where you are. Similar
lines land near each other, and everything else follows: the
voices people left at a place, the ones standing there now,
a line drawn back in answer. No accounts, and no company in
the middle.
icon: lucide:map-pin
- name: Follow the build as it lands
description: >
The network as it is being built — and we need collaborators on
every new surface it grows. Desktop releases run free; the iPhone
beta is one tap away below.
features:
- name: Communicate
description: >
A client, a relay, an instrument — if you want to put the
network on a surface it isn't on yet, say so through the
path above and we'll find each other.
icon: lucide:message-circle
- name: Releases
description: Start exploring by running one of our applications.
icon: lucide:package
resource:
# The public manifest redoal's release job writes to
# dl.redoal.com (the repo is private; its own release assets
# 404 for visitors). Portal renders a manifest of this shape as
# one download card: the newest version, this device's file
# first, the Arch repo lines and TestFlight folded with the
# rest (content-reference, "A releases manifest").
source:
kind: url
url: https://dl.redoal.com/releases.json
public: true
empty: Nothing released yet — the first cut lands here.
- name: Test the iPhone app
description: >
The desktop releases above run free, no sign-up. The iPhone
build rides TestFlight (Apple's beta program) — [join the
redoal testers](https://testflight.apple.com/join/eR9dvHkz)
with one tap on your iPhone; no invitation, no email, no
waiting on us.
icon: lucide:smartphone
- name: Hear from us when it matters
description: > description: >
Notes from the build — sent only when there is something worth Notes from the build — sent only when there is something worth
saying. saying.
@@ -108,4 +157,3 @@ alternatives:
- name: email - name: email
label: Email label: Email
type: email type: email
+2 -2
View File
@@ -54,7 +54,7 @@ alternatives:
value: "{key}" value: "{key}"
optional: true optional: true
- name: Hear from this address - name: Get a note when a voice lands here
description: > description: >
The fallback for a phone without the app: one note when The fallback for a phone without the app: one note when
something is left at exactly this shape — and nothing about something is left at exactly this shape — and nothing about
@@ -81,7 +81,7 @@ alternatives:
type: hidden type: hidden
value: "{key}" value: "{key}"
- name: What just happened - name: What your drawing became
description: "" description: ""
features: features:
- name: An address, not an upload - name: An address, not an upload
-1
View File
@@ -5,4 +5,3 @@ hero:
kind: module kind: module
module: hero.js # this repo's sine-swings piece, served at /site/hero.js module: hero.js # this repo's sine-swings piece, served at /site/hero.js
wordmark_invert: true wordmark_invert: true
stylesheet: custom.css