Compare commits
1
Commits
main
..
plain-titles
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
531dbbf2de |
@@ -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:
|
||||||
|
|||||||
@@ -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
@@ -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 |
+15
-22
@@ -1,30 +1,19 @@
|
|||||||
# «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 23 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 23 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 on the screens, leave a voice at a shape,
|
«Big Tech må vekk». Draw on the screens, leave a voice at a shape,
|
||||||
hear who came before you.
|
hear who came before you.
|
||||||
event:
|
event:
|
||||||
starts: 2026-10-23T19: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 on the wall
|
- name: See it in person at Podium
|
||||||
description: >
|
description: >
|
||||||
The installation runs the same code as this site, on screens
|
The installation runs the same code as this site, on screens
|
||||||
you can stand in front of together — the network at the scale
|
you can stand in front of together — the network at the scale
|
||||||
@@ -32,10 +21,9 @@ alternatives:
|
|||||||
features:
|
features:
|
||||||
- name: Opening 23 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: >
|
||||||
@@ -50,3 +38,8 @@ alternatives:
|
|||||||
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
-121
@@ -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,124 +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 — the parts that run today,
|
|
||||||
said plainly.
|
|
||||||
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: A drawing is an address
|
|
||||||
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.
|
|
||||||
icon: lucide:map-pin
|
|
||||||
- name: Your machine asks the room
|
|
||||||
description: >
|
|
||||||
To find someone, your machine asks the machines around it:
|
|
||||||
"has anyone been near this shape?" Your spiral finds my
|
|
||||||
spiral directly, peer to peer. The whole directory is the
|
|
||||||
shapes people know, passed along on a napkin.
|
|
||||||
icon: lucide:users
|
|
||||||
- name: Voices stay where you left them
|
|
||||||
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 — live, machine to machine.
|
|
||||||
icon: lucide:mic
|
|
||||||
- name: Sealed by your own hand
|
|
||||||
description: >
|
|
||||||
Every recording and every stored stroke carries a signature
|
|
||||||
from the leaver's own machine — proof that it arrived
|
|
||||||
intact and that the same hand made the same things. The key
|
|
||||||
lives only with you: keep it and you're recognized, delete
|
|
||||||
it and you were never here.
|
|
||||||
icon: lucide:stamp
|
|
||||||
- name: Draw and speak, and you're in
|
|
||||||
description: >
|
|
||||||
The primitives are the drawn line and the human voice. A
|
|
||||||
child, an elder, or a newcomer still learning the local
|
|
||||||
script arrives on the same terms as everyone else — that is
|
|
||||||
the whole entry requirement.
|
|
||||||
icon: lucide:hand
|
|
||||||
- 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.
|
|
||||||
icon: lucide:anvil
|
|
||||||
|
|
||||||
- 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.
|
||||||
@@ -173,4 +157,3 @@ alternatives:
|
|||||||
- name: email
|
- name: email
|
||||||
label: Email
|
label: Email
|
||||||
type: email
|
type: email
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user