Changelog
Newest first. Each release says what is new, what got better, what was fixed and what is still not true. Versions count up from 0.1, one step for each release.
Screens are from the product as it is today, shown with sample content.
For you, Watch and a new list of episodes on Listen are now ordered by the share of people who responded to a post, not by how many did. Every post says why it is there, and its author can see how far it went.


New
- A first audience. Every public post on a public account is shown to its first 100 people, whoever wrote it and however few followers they have. One place in five of For you is kept for these posts, until 100 people have seen one or it is 72 hours old.
- Rate, not volume. A post is placed by how many of the people who saw it responded. A post seen by 20 people with 8 reactions is placed above one seen by 100,000 with 800. Each person counts once.
- Small accounts doing well. A post that people responded to at least as much as usual is placed higher when its author has fewer than 100 followers. The lift is gone at 5,000, and being small earns nothing by itself.
- Lasting posts. A post between 3 and 180 days old that people responded to well can be shown again to someone who has not seen it.
- No account fills the feed: at most two posts in a row, and a tenth of the feed, come from one account.
- Nothing in the ordering reads time spent. A video counts once per person, when they watch past half.
- Why a post is there. Each post in For you, each video in Watch and each suggested episode says so in one line, such as From someone you follow, or A new post. Every post gets a first audience. The line leads to the page that explains the rules.
- Reach. On a post of your own, see how many people have seen it, how many responded, how that compares with what is usual here, and how much of its first audience is still to come. Under ten people it gives the count and no rate.
- Episodes to try, on Listen: episodes from other people's shows, ordered by the same rules, where responding means listening past a quarter of an episode or five minutes.
- Sample accounts. Ten sample accounts exist to show how the product looks. Each says Sample account on its profile, its posts, its comments and in lists of people. Nobody can sign in as one, the app will not open a message to one, nothing they do counts toward any post's rate, and all ten can be removed in one step.
Improved
- The page that explains how the feed is ordered was rewritten for these rules, with the numbers in use, a worked example, who does not count and what the rules do not stop.
- The player is a bar along the bottom at every width, and messages that appear at the bottom of the screen sit above it.
- A listening room's card says Listening room and who can join in plain text.
Fixed
- On a wide screen the player floated in the bottom corner, over the play button of whichever row on Listen was under it.
Under the hood
- The app tells the service a post was seen once at least half of it has been on screen for one second: once per post, in batches at most every five seconds, with one more as you leave the page. It reports nothing for your own posts and nothing when you are signed out.
- Only some people move a post's rate: an account must have a confirmed address, be active and at least 24 hours old, and have no block with the author.
- 28 end-to-end tests for all of this pass in two browser engines at phone and desktop width, against the real service: a card seen for a second is counted once and one scrolled past is not, a new account's post reaches a stranger's feed, and its reach goes from nobody, to too few to say, to measured as ten test accounts see it.
- Opening Home on a slowed phone profile was measured six times before and six times after: the largest paint moved from a middle value of 208 to 220 milliseconds, and blocking time stayed within its own spread, 75 before and 63 after.
Still not true
- The numbers are reasoned, not tuned. The 100 people, the 72 hours and every weight were chosen by argument, because there is no real use to tune them on yet.
- Real accounts acting together are not stopped. Ten confirmed accounts older than a day are ten people to these rules, whoever runs them. That is left to moderation, and suspending an account takes back what it counted.
- Posts made before this release start with rates that are too high. Nobody recorded who saw them, so the only people known to have seen one are those who responded.
- What was seen is reported by your browser. An app that reports nothing is not counted, and a changed app can report a post it never showed, for its own account only.
- Friends and Following do not print a reason on each post. They are in time order, and say so once above the list.
- Reach covers posts. An episode's author has no such panel.
- The sample accounts' pictures were made by an image generator and their audio was synthesised. None of it shows a real person or place.
- Episodes to try holds at most 50 episodes of the last 30 days and does not page.
Podcasts got their screens: Listen, a player that stays with you, and rooms where people hear the same episode at the same moment. The signed-in app was redesigned and the database is backed up every night. Most of this was built on 12 October and was missing from this page until now.


New
- Listen. One page with the rooms that are live, the episodes you have not finished, the newest episode from each show you follow, your saved episodes, 18 categories and new shows. Each part says so when it has nothing.
- A page for every show and every episode, readable without an account. Follow a show, play an episode, move through it on its waveform, change the speed, save it, share it, and comment under it as you would under a post.
- Transcripts. A timed transcript follows the episode as it plays, and pressing a line takes you to that second. A plain one is shown as text.
- A player that stays with you. It keeps playing as you move around the app, with 15 seconds back, 30 forward, speed, volume, and keys for play, back, forward and mute. It remembers your place in every episode, and offers the place you reached on another device when the two differ.
- A queue. Add an episode to it or play it next, reorder it by dragging or from the keyboard, remove one or clear it. When an episode ends, the next one starts.
- Publishing. Create a show with a cover, up to three categories and a language. Upload an episode's audio and watch it go up, add artwork and a transcript, then publish now or at a time you choose. A file that is not audio is refused with the reason.
- Listening rooms. Start a room from an episode, open to everyone, to your followers, or by invite link. Everyone in it hears the same second of the same recording. It is synchronised playback, not live audio: nobody's microphone is on.
- In a room the host plays, pauses, seeks, changes the speed and the episode for everyone, and can name a co-host. A guest has no controls. Everyone sees who is there and can talk in the chat beside the episode.
- When a room's host drops off, everyone sees a two minute countdown. If the host is not back by its end the room passes to the co-host, or ends when there is none.
- A guest whose connection drops catches up by itself, with the chat it missed and without a reload.
- Home's Listening Room card shows a room that is live, or says that none is.
Improved
- The signed-in app was redesigned: a lilac canvas with white cards, larger type, and avatars and controls at 44 pixels. Home, profiles, settings, Explore, search, the post page, the composer, Moments and Watch were rebuilt on it. Nothing moved and nothing works differently.
Fixed
- A room said its host was there before the host had connected. It no longer does, and a room nobody comes into ends after two minutes.
- A host opening their own room was told for a moment that they were away.
- A message or a notification that arrived in the instant before the page went live stayed unseen until something else happened. Counts, lists and an open conversation are now read again when the connection comes up.
- An episode whose audio could not be converted said its length was not known yet. It says what went wrong.
- In the staff console, text typed into the search and note fields before the page had finished loading was lost.
Under the hood
- A listening room was run on rivyra.com itself on 13 October, in ten steps: an episode's audio was processed in 2.0 seconds, two participants were counted, play and a seek reached both, a dropped host was noticed in 4 milliseconds, and the room ended. Everything the run made was removed.
- The test for rooms holds two browsers to within 150 milliseconds of each other. On one machine the middle gap was at most 39 milliseconds in Chromium and 85 in WebKit, where a single sample reached 238.
- 56 end-to-end tests for Listen, the player and rooms pass in two browser engines at phone and desktop width.
- The follow, feed, search, Moments and Watch screens from 0.5 have since been proven in both browser engines at phone and desktop width. In 0.5 they were proven in desktop Chromium only.
- The database is copied every night and the newest 14 copies are kept on the server. A copy that cannot be read back is deleted and the run fails. A separate check restores the newest copy into a scratch database and compares it with the live one.
- The server grew from 4 processors to 8 and from 8 GB of memory to 15 GB on 12 October.
- Every write to the service has a limit on how often it can be repeated, and every address was walked as a visitor, as a stranger and as a blocked account.
- A handle that would collide with one of the app's own pages cannot be chosen.
Still not true
- A room pauses for everyone the moment its host's connection drops, however briefly, and waits for the host.
- Rooms were proven with two people. Nobody has measured a full room.
- The sync figures come from two browsers on one machine. Two real devices on real networks have not been measured, and nobody has judged whether a correction can be heard.
- No real phone, no real Safari and no screen reader was used. Lock screen controls and playback in the background are untried.
- The longest audio tried was two minutes. Long episodes and large uploads are not proven.
- A room plays on its own page only. It does not follow you around the app as the player does.
- Search does not find shows or episodes. There is no page for your listening history, a show or an episode cannot be reported from its page, and a host cannot remove someone from a room.
- The backups sit on the same server as the database, and uploaded pictures, video and audio are not backed up at all.
- The legal pages are still drafts.
Messages and notifications got their screens, and so did two-step sign-in, the controls over your own account, and the tools staff use to review reports.


New
- Messages. One conversation with each person, with text and up to four pictures, read receipts and a typing indicator. A message arrives without a reload, a retry never sends it twice, and a dropped connection catches up. Messages are not end-to-end encrypted: they are private to the two of you and stored on Rivyra's servers, and the app says so where you write them.
- Message requests. A first message from someone you do not follow waits under Requests until you accept or decline it. You choose who may message you at all, and a person you do not take messages from is told so plainly.
- Notifications, on the bell and on their own page: follows, requests, mentions, comments, replies, reactions, new episodes and rooms. Several people doing the same thing are one line. Each kind can be switched off.
- Two-step sign-in with an authenticator app and ten recovery codes, for any account.
- Account controls: change your email address by a link sent to the new one, download a copy of your data, and delete your account with 14 days to change your mind.
- Three more privacy settings: who may message you, who may mention you, and who may read your follower lists.
- A page listing what staff did to your account or content, with the category of the reason, and one appeal for each action.
- A console for staff: the report queue, the reported content, notes, actions with a written reason, appeals, and a log of every staff action that cannot be edited.
Improved
- Replying to a moment works. The reply is a message to its author and says which moment it answered.
- A message can be reported or deleted. Reporting one lets staff read it and up to three messages either side of it, and nothing else of the conversation.
- A suspended account is told why it cannot sign in and how to appeal.
Under the hood
- The staff console answers not found to anybody who is not staff, and opens only to a session that has passed two-step sign-in. Suspending an account and changing a role ask for a fresh code.
- A test run for all of it against the real service: two accounts messaging live, notifications arriving, codes computed from the secret, an export downloaded from its mailed link, and a report followed from filing to appeal.
Still not true
- Messages are between two people. There are no group conversations, and a message cannot be edited.
- There are no notifications by email and none when the app is closed.
- A handle cannot be changed.
- The console has no list of current staff, and a suspension has no end date.
- The data export holds the messages you sent, not the ones you received.
Rivyra now has a public face: a landing page for visitors who are not signed in, redesigned sign-in screens, this changelog and a roadmap.
New
- A landing page at rivyra.com for anyone who is not signed in. It says what is open today and what is still coming, and it is built from the product's own interface with drawn, plainly illustrative content. Signed-in visitors still land on Home.
- About, and drafts of the terms, the privacy text and the community guidelines. Each draft says at the top that it is not yet in force, and ends with what the owner has still to decide.
- A public roadmap with every planned capability and its true status, and this changelog, with an Atom feed at /changelog/feed.xml.
- Links to Rivyra now unfurl with a picture: one for the site, and one each for profiles and posts showing the name and handle only.
- A sitemap, robots rules, a web manifest and icons cut from the supplied logo.
Improved
- Sign in, sign up, check your email, email confirmation, forgotten password and new password share one layout: the form on one side and a calm brand panel on the other from 1024 pixels, a single column on a phone.
- The password field says how far you are from the minimum as you type. Length is the server's whole rule, so length is all it reports.
Under the hood
- Pages that carry a one-time token, and pages that only work signed in, ask search engines not to index them.
- A test run for the signed-out pages: both browser engines at five widths, automated accessibility checks, and a check of the page's metadata.
- One-to-one messages exist on the server: one conversation per pair, sends that cannot double, requests and read state. There is no screen for them yet.
Still not true
- The legal pages are drafts. They name no operator and no contact, because the owner has not published them.
- The sitemap lists the fixed public pages only. Profiles and posts are not listed, because the service has no cheap, complete list of public ones to give.
The social graph, the three feeds, search, Moments and Watch got their screens. Sections that used to say they were not built now work.
New
- Follow and unfollow, with lists of followers and following. A private account approves each follower, from a requests page.
- Block, mute and report from a profile or from the menu on a post, with the blocked and muted lists under Privacy.
- Three feeds on Home: For you, Friends and Following. Not interested hides a post and shows fewer like it, and a public page explains exactly how For you is ordered.
- Search for people and posts, and Explore with the most used hashtags and accounts to follow.
- Moments: share a picture or a clip for 24 hours, for everyone or for followers, and see who viewed your own.
- Watch: public short video in a tall frame, muted until you ask for sound.
- Captions on video, and uploads of large files in parts.
Under the hood
- Podcasts exist on the server: shows, episodes with processed audio and a waveform, transcripts, a queue, resume position, history and episode comments. There is no screen for any of it yet.
- Listening rooms exist on the server: playback held by the server, host controls, chat and presence, over an authenticated socket that can resume after a dropped connection. There is no screen for them yet either.
Still not true
- These screens were proven against the real service in desktop Chromium. The second browser engine and the phone width were not part of that proof.
- Replying to a moment is not possible: a reply is a private message, and messages are not built.
- Reports are recorded and nobody can review them yet. The moderation console is on the roadmap.
The service went from a development machine to its own address, running from committed code.
New
- Rivyra answers at rivyra.com.
Under the hood
- The web app is built as a self-contained server bundle, so the deployed image carries only the files it needs.
- One stack runs the site: the API, the worker, the web server, and its own database, cache and object storage, behind the host's web server.
Still not true
- A backup counts once a restore has been tested, and that has not been done. It is on the roadmap.
The service learned who follows whom, how to order a feed, how to search, and what a moment is. This release had no new screens: the app still said those sections were not built.
New
- On the server only: follows, private accounts with follow requests, blocks and mutes, applied everywhere something is shown.
- On the server only: For you ranked by a fixed, documented formula, with Friends and Following in plain time order, and Not interested.
- On the server only: search for people and posts, trending hashtags counted from real posts, and suggested accounts.
- On the server only: Moments that stop showing exactly 24 hours after they were shared, and the Watch feed with captions.
Improved
- Portrait video keeps its detail: the long side is capped at 1280 pixels and the short side at 720, instead of shrinking tall clips to fit a wide frame.
Under the hood
- The written contract between the app and the service grew to 73 operations, and the app's typed client is generated from it.
- The service's own tests were themselves tested: 59 deliberate faults were introduced one at a time and every one was caught.
Still not true
- Nothing in this release could be seen in the app. The screens came in 0.5.
Everything in the first release was driven through a real browser against the real service, and what that found was fixed.
New
- Signed-in devices: see every browser your account is signed in on, and sign out one or all the others.
- On a phone, saved posts, drafts, devices and sign out are reachable from your own profile.
- A video the browser cannot decode says so, instead of showing a dead player.
Improved
- Home is one column: the first post and every post after it share the same width.
- A dialog starts on the control you most likely want, and gives focus back to the button that opened it.
- Menus no longer lock the page behind them.
Fixed
- The feed jumped on a phone when more posts loaded. The placeholder is now part of the list, and the measured shift went from 0.48 to 0.
- File pickers had no name for a screen reader.
- The page behind an open dialog could scroll.
Under the hood
- A content security policy with a fresh key on every page: only the site's own scripts run, and the app cannot be framed by another site.
- 64 end-to-end tests in two browser engines at phone and desktop width: video, galleries with reordering, cancelled and retried uploads, drafts, editing, deleting, replies, saved posts, profile editing, password reset, devices and sign out.
- Automated accessibility checks on twelve screens with nothing serious left, and a repeatable performance measurement.
Still not true
- No real phone and no screen reader was used.
- The performance numbers are one visitor on one machine with no network delay. They compare one build with the next and say nothing about capacity.
The first version that works from one end to the other: create an account, confirm it, post a picture, and talk about it.
New
- Accounts: sign up with a live check that the handle is free, confirm by a mailed link, sign in, sign out, and reset a forgotten password.
- A two-step welcome, and a profile with a picture, a cover, a bio and links.
- Posts with text, up to ten pictures in your order, or one video. Uploads go straight to storage with progress, and can be cancelled and retried.
- Comments with one level of replies, six reactions, and saved posts.
- Home, with the feed loading as you scroll, on a phone and on a desktop.
Under the hood
- The service is one Go program for the API and one for background work, with PostgreSQL, a cache and object storage.
- Pictures and video are made again from their content by a background worker before anyone sees them, which also removes the location and camera data a file carries.
- A design system: colours, type, spacing and motion as shared tokens, and a set of accessible components.
Still not true
- Video was built and had not yet been played in a browser. That was proven in 0.2.
- Explore, Watch, Listen and Messages led to pages that said they were not built.