Compare commits
25
Commits
87a4877596
...
main
@@ -18,7 +18,7 @@ on:
|
|||||||
- .gitea/workflows/deploy.yml
|
- .gitea/workflows/deploy.yml
|
||||||
|
|
||||||
env:
|
env:
|
||||||
PORTAL_RELEASE: v0.3.33
|
PORTAL_RELEASE: v0.6.20
|
||||||
INSTANCE: redoal-portal
|
INSTANCE: redoal-portal
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -57,6 +57,10 @@ jobs:
|
|||||||
KANIDM_URL=${{ vars.KANIDM_URL }}
|
KANIDM_URL=${{ vars.KANIDM_URL }}
|
||||||
OAUTH2_CLIENT_ID=${{ vars.OAUTH2_CLIENT_ID }}
|
OAUTH2_CLIENT_ID=${{ vars.OAUTH2_CLIENT_ID }}
|
||||||
OAUTH2_CLIENT_SECRET=${{ secrets.OAUTH2_CLIENT_SECRET }}
|
OAUTH2_CLIENT_SECRET=${{ secrets.OAUTH2_CLIENT_SECRET }}
|
||||||
|
# Onboarding from a desk (portal 0.3.40+, `invite:` alternatives): a
|
||||||
|
# Kanidm service-account token in idm_people_on_boarding. Empty
|
||||||
|
# means invites are not configured on this instance.
|
||||||
|
KANIDM_API_TOKEN=${{ secrets.KANIDM_API_TOKEN }}
|
||||||
PUBLIC_URL=${{ vars.PUBLIC_URL }}
|
PUBLIC_URL=${{ vars.PUBLIC_URL }}
|
||||||
COOKIE_SECURE=true
|
COOKIE_SECURE=true
|
||||||
# This repo is its own instance's content source; branding
|
# This repo is its own instance's content source; branding
|
||||||
|
|||||||
@@ -15,13 +15,18 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
# Same bare-metal runner/host as this repo's own Deploy workflow,
|
# The lint is portal itself (`portal lint`, since portal 0.6.0;
|
||||||
# which ships question_lint alongside the portal binary in every
|
# iris is no longer released), at the version this site runs
|
||||||
# pinned release - so content is validated by the exact portal
|
# (PORTAL_RELEASE in deploy.yml).
|
||||||
# version this instance runs, not a hand-maintained yq/jq subset
|
|
||||||
# of the same rules.
|
|
||||||
- name: Lint questions
|
- name: Lint questions
|
||||||
run: /srv/app/redoal-portal/current/question_lint --path questions
|
env:
|
||||||
|
PORTAL_RELEASE: v0.6.20
|
||||||
|
run: |
|
||||||
|
# The checkout is on a noexec mount for this runner; the cargo
|
||||||
|
# target dir is where it may run what it fetched.
|
||||||
|
bin="/var/local/cargo-target/portal-lint-$PORTAL_RELEASE"
|
||||||
|
[ -x "$bin" ] || { curl -sfL "${{ github.server_url }}/uhhm/portal/releases/download/$PORTAL_RELEASE/portal-x86_64-linux" -o "$bin" && chmod +x "$bin"; }
|
||||||
|
"$bin" lint --path questions
|
||||||
|
|
||||||
reload:
|
reload:
|
||||||
runs-on: bare
|
runs-on: bare
|
||||||
|
|||||||
@@ -38,3 +38,19 @@ aggregates:
|
|||||||
kept: { event: kept }
|
kept: { event: kept }
|
||||||
transitions:
|
transitions:
|
||||||
open: [removed, kept]
|
open: [removed, kept]
|
||||||
|
# TestFlight beta signups (index.yaml's "Test it on your iPhone").
|
||||||
|
# Attended by automation, not a human desk: a new "requested" signup
|
||||||
|
# is handed to the App Store Connect API to invite the Apple ID to the
|
||||||
|
# closed beta; "withdrawn" (the /joined-testers self-transition) drops
|
||||||
|
# them from the invite list.
|
||||||
|
- bucket: redoal_testers
|
||||||
|
attended_by: >
|
||||||
|
n8n TestFlight onboarding workflow — ops/n8n/testflight-onboarding
|
||||||
|
in redoal/redoal. Consumes NATS events.redoal_testers.* and calls
|
||||||
|
App Store Connect POST /v1/betaTesters.
|
||||||
|
initial: open
|
||||||
|
states:
|
||||||
|
open: { event: requested }
|
||||||
|
withdrawn: { event: withdrawn }
|
||||||
|
transitions:
|
||||||
|
open: [withdrawn]
|
||||||
|
|||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
/* 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.
|
After Width: | Height: | Size: 85 KiB |
@@ -0,0 +1,234 @@
|
|||||||
|
# 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"
|
||||||
+30
-22
@@ -1,29 +1,42 @@
|
|||||||
# The group exhibition at Podium, part of Attac's «Big Tech må vekk»
|
# «Atelic Antics», the group exhibition at Podium, part of Attac's
|
||||||
# 2026: opens 23 October 2026 at 19:00 and runs for a month. Announced
|
# «Big Tech må vekk» 2026: opens 24 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 the group exhibition at Podium, opening 23 October
|
redoal is part of «Atelic Antics», the group exhibition at Podium,
|
||||||
and running for a month — the art strand of the conference
|
opening 24 October and running for a month — the art strand of the
|
||||||
«Big Tech må vekk». Draw on the screens, leave a voice at a shape,
|
conference «Big Tech må vekk». Draw a shape at the podium, hear the
|
||||||
hear who came before you.
|
voices left there, and leave your own.
|
||||||
event:
|
event:
|
||||||
starts: 2026-10-23T19:00:00+02:00
|
starts: 2026-10-24T19:00:00+02:00
|
||||||
duration: 31d
|
# To 15 November, per the poster — not a month. The header announces
|
||||||
|
# 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: Come draw at the podium
|
||||||
description: >
|
description: >
|
||||||
The installation runs the same code as this site, on screens
|
A podium with a touch screen, running the same app you can
|
||||||
you can stand in front of together — the network at the scale
|
install yourself. The shape you draw on it is an address: it
|
||||||
of a room.
|
takes you to a place, and to the voices people have left there,
|
||||||
|
whether they stood here or drew it somewhere else.
|
||||||
features:
|
features:
|
||||||
- name: Opening 23 October, 19:00
|
- name: Opening 24 October, 19:00
|
||||||
description: >
|
description: >
|
||||||
At [Podium](https://podium.enterprises/), Hausmanns gate 34,
|
«Atelic Antics» opens at [Podium](https://podium.enterprises/),
|
||||||
and up for a month. Come to the opening, or any Saturday
|
Hausmanns gate 34, and is up until 15 November. Come to the
|
||||||
or Sunday after.
|
opening, or any Saturday or Sunday after between 13:00 and
|
||||||
|
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: >
|
||||||
@@ -34,12 +47,7 @@ alternatives:
|
|||||||
icon: lucide:megaphone
|
icon: lucide:megaphone
|
||||||
- name: Draw, then listen
|
- name: Draw, then listen
|
||||||
description: >
|
description: >
|
||||||
Draw a shape on the touch screen and arrive at a place.
|
Draw a shape on the 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
|
|
||||||
|
|||||||
+28
-66
@@ -37,70 +37,25 @@ alternatives:
|
|||||||
|
|
||||||
- name: Meet a network you carry in your hand
|
- name: Meet a network you carry in your hand
|
||||||
description: >
|
description: >
|
||||||
The one trick, and what it enables — the parts that run today,
|
The one trick, and what it enables — said plainly, with how far
|
||||||
said plainly.
|
each piece is.
|
||||||
|
action: /create
|
||||||
|
consequence: [Learn more]
|
||||||
features:
|
features:
|
||||||
- name: A drawing is an address
|
- name: A drawing is an address
|
||||||
description: >
|
description: >
|
||||||
The computer measures how your line curves, turns, and keeps
|
Draw a line and the shape itself is where you are. Similar
|
||||||
rhythm, and boils it down to a twenty-byte fingerprint.
|
lines land near each other, and everything else follows: the
|
||||||
Similar drawings get similar fingerprints — two spirals land
|
voices people left at a place, the ones standing there now,
|
||||||
like two houses on the same street, and that closeness is
|
a line drawn back in answer. No accounts, and no company in
|
||||||
the whole network.
|
the middle.
|
||||||
icon: lucide:map-pin
|
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
|
- name: Follow the build as it lands
|
||||||
description: >
|
description: >
|
||||||
The network as it is being built — and we need collaborators on
|
The network as it is being built — and we need collaborators on
|
||||||
every new surface it grows.
|
every new surface it grows. Desktop releases run free; the iPhone
|
||||||
|
beta is one tap away below.
|
||||||
features:
|
features:
|
||||||
- name: Communicate
|
- name: Communicate
|
||||||
description: >
|
description: >
|
||||||
@@ -112,19 +67,25 @@ alternatives:
|
|||||||
description: Start exploring by running one of our applications.
|
description: Start exploring by running one of our applications.
|
||||||
icon: lucide:package
|
icon: lucide:package
|
||||||
resource:
|
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:
|
source:
|
||||||
kind: gitea_releases
|
kind: url
|
||||||
owner: redoal
|
url: https://dl.redoal.com/releases.json
|
||||||
repo: redoal
|
|
||||||
public: true
|
public: true
|
||||||
empty: Nothing released yet — the first cut lands here.
|
empty: Nothing released yet — the first cut lands here.
|
||||||
# url pinned to null while the repo is private - a private
|
- name: Test the iPhone app
|
||||||
# release's html_url 404s for anonymous visitors, and the
|
description: >
|
||||||
# card renders an unlinked heading instead (same lesson as
|
The desktop releases above run free, no sign-up. The iPhone
|
||||||
# uhhm/questions 9b7162f).
|
build rides TestFlight (Apple's beta program) — [join the
|
||||||
jq: >
|
redoal testers](https://testflight.apple.com/join/eR9dvHkz)
|
||||||
.[] | {name: .name, description: .body, tag: .tag_name,
|
with one tap on your iPhone; no invitation, no email, no
|
||||||
published: .published_at, url: null}
|
waiting on us.
|
||||||
|
icon: lucide:smartphone
|
||||||
|
|
||||||
- name: Hear from us when it matters
|
- name: Hear from us when it matters
|
||||||
description: >
|
description: >
|
||||||
@@ -147,3 +108,4 @@ alternatives:
|
|||||||
- name: email
|
- name: email
|
||||||
label: Email
|
label: Email
|
||||||
type: email
|
type: email
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
id: /joined-testers
|
||||||
|
route: ^/joined-testers
|
||||||
|
followup: true
|
||||||
|
name: What happens next?
|
||||||
|
description: >
|
||||||
|
You asked for a place in the closed beta — here's the shape of it.
|
||||||
|
alternatives:
|
||||||
|
- name: Your invite is on its way
|
||||||
|
description: ""
|
||||||
|
features:
|
||||||
|
- name: Check your mail
|
||||||
|
description: >
|
||||||
|
A TestFlight invite goes to the Apple ID you left. Tap it on
|
||||||
|
your iPhone, install TestFlight if you don't have it, and
|
||||||
|
redoal lands on your home screen.
|
||||||
|
icon: lucide:mail
|
||||||
|
- name: It's rough on purpose
|
||||||
|
description: >
|
||||||
|
A beta, and an artwork before a product — the networked edges
|
||||||
|
are where the interesting questions live. Tell us what breaks.
|
||||||
|
icon: lucide:hammer
|
||||||
|
|
||||||
|
- name: Withdraw from the beta
|
||||||
|
description: >
|
||||||
|
Changed your mind? Confirm below and we'll drop your Apple ID from
|
||||||
|
the invite list.
|
||||||
|
self_transition:
|
||||||
|
bucket: redoal_testers
|
||||||
|
to: withdrawn
|
||||||
|
label: Remove me from the beta
|
||||||
Reference in New Issue
Block a user