🌏 Project URLβ†—
https://offline-online.e-kezia.com
🐈 Githubβ†—
https://github.com/ekkezia/shared-minds/tree/main/online-offline
πŸ–οΈ Notes

Ride With Me

What if our calls are no longer as real time as before? What if our calls are adapting to the network connectivity in our environment?


This is aΒ voice calling application where users alternate between recording (when online) and playback (when offline). It plays on the preconceived notion that phone calls rely on stable network. With that in mind, this app inverted the network roles (at least on the frontend), by only playing back the callee's voice when user is on bad connection. The audio recording happen during the online time, as most users assume that it is online and the phone is supposed to be a listening device at that period. The recording is then uploaded to Supabase and the user also fetched the other user's recording within this period. When user goes offline, it shows the timeline view where it provides insight when both users have been online and offline and when they may have overlap their network status. User can also playback the other user's recording on the offline view.


This app is made with the network issues in underground MTA as inspiration. The rhythm that happen when user stops at one station (online) and move to the next station (offline) informs this asynchronous/synchronous hybrid phone call system.


You don't have to end the call with your loved one. You can stay on the call with them. You will wait for their voice. They will wait for yours. And there may be some time that you two are connected to network, but the system conditions you to wait for the disconnection in order to 'reconnect' with the other person.


Built with Preact, Supabase, and the Web Audio API.


Further reflection & thoughts for the future

Maybe we could stagger / alter the voice as if it's on bad connection when user is online? So the communication still happens in real time but the voice is staggered to simulate a bad connection.


Database Schema

Blog image

How long does the duration for the recording should be?

Well, ideally, the recording should be uploaded at X intervals and polled for every X seconds (as we could not predict when will the user be offline). However, the code doesn't work for now so I will max it at X seconds and only upload 1 chunk of recording.

Average of stop duration at a station: 15 seconds

Elizabeth Kezia Widjaja Β© 2026 πŸ™‚