Transmits logoTransmits
Follow the Journey

001 — Introducing, Transmits

Listen on

Show Notes

This is a crossover episode that was originally posted on, All Play, where I introduce, Transmits, and explain what it is and why I am working on it. Enjoy.

I have finally settled on the project that I will be documenting on this podcast. I would like to introduce you to, Transmits. transmits.io is domain I have been sitting on for the past 4 years. When I had originally registered it I was working on a React Native prototype of an app that I was exploring, which was essentially an iOS Voice Memos app that was going to be platform agnostic. That prototype still lives on my machine, but work and life got in the way from taking it any further than a very rough example of getting some basic audio recording capturing and reviewing within the app.

Since then, I have worked on a bunch of different stuff, both for clients and personally, but this idea of a simple app that lets you quickly record some audio and easily share it with friends—or beyond—has remained constant over that time. Although, the one thing that has changed is my thoughts on what makes the most sense for how to build the app.

Over the last 4 years a lot of advancements have been made in the browser space to better support progressive web apps, things like local SQLite instances running in the browser, push notifications on Mobile Safari, and generally more packages and tools that make it easier to build a good PWA experiences that can truly rival native apps. So, with that said, this version of Transmits is going to be built with 100% progressive web app support from the beginning.

At this point, I already have basic PWA support for the app. You can turn off wifi and cellular and browse all the pages you had originally viewed while being online. And, I have some basic recording support setup via the Web Audio/MediaStream Recording API’s. Both the marketing site and app are built in React/NextJS, and I am going to explore building the API with NestJS (since this is a stack pairing that I have been wanting to explore).

Next on my list to tackle includes:

  • Get local file saving setup via the File System API
  • Setup local-first data handling (probably using electric-sql, or something similar)
  • Audio filters to apply to recordings in real-time via Web Audio API
  • Real-time transcription support via local automatic speech recognition (ASR) model
  • Integrations to make it easy to take recordings captured via Transmits and distribute them (looking at you, transistor.fm!)
  • Some other odds and ends to make the app feel more native, like Push Notifications and what not

I was definitely debating which project to really commit to, and this one ticked all the boxes of the type of app and technologies that I wanted to dig into more. Not to mention, if it turns out how I think it will, I will probably be able to drop my Adobe Audition setup and record all of my podcast episodes via this app, with a simple flow for distributing them to Transistor, Substack, Medium, and beyond.

I hope this project seems interesting to you, and I look forward to sharing my learnings from building it along the way.

To follow along, you can find me at ryanhefner.com, follow me on Twitter @ryanhefner, and keep up with the show on allplay.fm and @allplayfm.

Help yourself, while supporting the show, by trying some of the services that I use, and highly recommend:
Transistor FM
Fathom Analytics

Transcript

00:00 - 00:09

Hey. How's it going? This is Ryan Hefner. Welcome to Transmits. This episode is actually a crossover episode from, the All Play podcast that I do.

00:09 - 00:30

This is the first episode where I introduce transmits as the project that I'm working on, and I give a little background about what it is, why I'm doing it, and all that jazz. So here it is, the episode introducing transmits from Allplay. Hope you enjoy it. Hey. How's it going?

00:30 - 00:58

This is Ryan Hefner, and this is the Allplay podcast. So I'm finally gonna do it. I'm finally going to, I guess, announce or officially announce the project that I'm working on. I've actually already added it to my website a while ago, and I do have a landing page with, email sign up so you can get notified, as updates are made for it. And really, it's just kinda some kinda generic, capture thing just to I don't know.

00:58 - 01:41

I mean, hopefully, people do sign up for it. I don't think there's any legitimate reason to immediately, but, you know, I am gonna try to move fast on this at least as fast as I'm possible while trying to juggle contracting gigs and, family stuff. And also try not to get too hung up on the, analysis paralysis as far as things that I can move forward with, as I kinda continue to churn on stuff in the background. So with that said, the project is called Transmits. You can find the website at transmits.i0.

01:42 - 02:33

That's transmit s.i0. The current scope of the project right now is it's going to be a really streamlined audio recording, audio app that essentially allows you to either, like, upload or record directly in the browser and then make that available via sharing link. So this is me. It's basically kind of like, in some ways, the the Vimeo for audio. This the background of this project, actually, I started working on it well, I've had the name for a really long time, just the domain name.

02:33 - 03:31

Like a lot of my domain names, they were purchased with some motivation, and then that motivation waned. Or I just, you know I, originally actually, a couple years ago, I should have to have to look at the timeline. I think it was probably maybe 2018 or 2019, I was actually trying to, like, resurface this idea. And at the time, I was building I I figured I'd try to, you know, build this app in React Native, which actually has decent, you know, microphone access and file stuff, but I I never got beyond just a working prototype that you could record a few tracks and then replay them in the app. And then it started opening up all this other stuff of, like, you know, APIs and file storage and CDNs and all this other stuff.

03:31 - 04:23

And it never really went where anywhere. So transmits originally is kind of a response to maybe the lack of stuff that you can do with the native voice memos app on on Apple iOS. The, there's just really no good way to be, like, a simple u a simple URL or having something embedded from a voice memo to share it. You'd have to upload it to, like, another service. I wanted a way to where I could essentially capture voice memos or, you know, sitting around jamming on a guitar riff or something and be able to share that with someone and have them just access that, recording via a simple link.

04:24 - 05:06

And so that's kind of the premise of what Transmitz is. Actually, by working on this podcast, I think I have some other plans for ways that I can add some functionality around the audio uploading and then how that can then be shared or distributed. You know, I'm I'm definitely thinking it would be cool to have an integration with to, Transistor to be able to basically, like, kick off or create a new episode from a from a transmit, which could be kinda cool. I also have some ideas for incorporating, obviously, like, maybe some, like, auto transcription stuff. I don't know.

05:06 - 05:39

It kinda starts blurring into was this just like Descript? But I don't really wanna make it like an editor. I want things to kinda just be these recordings and really just open up the shareability of this stuff and well, not this stuff. Shareability of of of an audio recording. And that's when my mind also starts going into, like, oh, how cool would it be to actually not have to fire up Adobe Audition, but just basically kick open this browser and maybe there'd be some native.

05:42 - 06:14

They're actual I mean, they're actually as ways in in JavaScript via via via the web audio API to actually create filters and and some other stuff. So would it be possible to essentially you know, for the voice settings that I have set up in Adobe Audition, would it be possible to almost, like, recreate those same filters via this web, recording app and and and do everything just there and just have everything set up. So I don't know. Mine's going all over the place. Like I said, I have the landing page.

06:14 - 06:57

You can find that at transmit.io. I've already kinda broke ground on the app, so I can talk about the stack that I'm gonna be using, at least, what I foresee being being used, as I build this. And we'll see if anything changes along the way. But the, you know, the marketing site or the site itself is just gonna be static, Next JS app. Currently hosted on Vercel, but I might end up moving the hosting to render because I might end up well, for 1, I just wanna test out, their service, but their hosted postgres stuff could be interesting for this.

06:58 - 07:26

And, I have some ideas there as well. So the app itself, I also is also just gonna be a Next JS app, and I also have a package, running already that adds the progressive web app stuff to it. So you can just add this to your home screen, and it does seem to be doing what it says. It you know, I can basically turn the phone offline. I can navigate between pages.

07:27 - 08:09

Everything transitions there. So that seems to be working. Currently, I'm looking into electric, SQL as a way of allowing for a local, actually, like, like I said, it's 2 different flavors. You could either do a SQLite or a a a local Postgres even. My gut says to just go with the SQLite and then have the replication go up to, like, a central, you know, central Postgres, database, which is, like, I believe, like, the the initial, the initial electric SQL kind of, like, offering.

08:11 - 08:54

So we'll see. I'm still kinda trying to wrap my head around whether that makes sense or just going whether I even need the electric SQL or if I can just do, like, a WASM based SQLite and and just write to it directly and then figure out that stuff. But I'm just trying to figure out, like, what the magic that Electric SQL adds other than obviously the auto syncing and replication stuff. So I I'm exploring that. But in the meantime, the other thing that I'm looking into or or gonna be diving into is just the files API via JavaScript and making sure that I can store these recordings into a local file store.

08:55 - 09:39

And then, obviously, you still have access to them to then do, you know, like background uploading and syncing and all this other stuff. So so far so good. The PWA is up and supports offline. I kinda was going down and exploring push notifications, but that just seemed like it was too much of a lift and also not really the biggest value to be gained until I have things like, recording and some other stuff, you know, going on. And and to be honest, I'm not really sure even how push notifications would be utilized initially for the first version of the app.

09:39 - 10:22

I, but I think they would be useful. It was really more of a just, testing the PWA ness of of the app and and making sure that all the future things that I would want to do will work. But I'm just gonna have faith that the push notification stuff will work. So then I started transitioning more towards the data model structure. And, actually, I think I might even let that kind of background job for a little bit while I just focus on storing the recordings to a local, file system and making sure that I can basically just, like, pull those back up after you relaunch the app.

10:24 - 11:03

So yeah. So that's the app I'm gonna be working on. That's kind of some where my headspace is at on it as well as some of the features and or functionality that I'm I plan on coding into it. The a lot of questions to be answered as far as what happens with these recordings, what runs locally within the app versus what gets offloaded, to something running, you know, out on some, distributed service. Still haven't necessarily settled on a CDN, but I'll probably end up using Cloudflare or something or the like.

11:04 - 12:08

And, you know, I I do foresee potentially offering some text to speech, and I think it'd be really interesting to have something like, like the Whisper text to speech, like, transcription model running locally within the app so you could actually record and and get all the the text right in the app and then have that all synced up and utilize, you know, some of the some of the clients' CPU and GPU to do that and not necessarily have to have a remote service that gets those files. So that way, it's a little bit more secure and private depending on what you're talking about. So, yeah, that's gonna be transmits. I wish I could really, like, pin down when I want to do, like, the initial launch or, like, the initial beta release, but I I'm not quite there yet. But, I do already have the code running as far as, like, to do the recording.

12:08 - 12:47

I'm just not really saving it off to a file right now. So I'll get that up and running, and then I guess we'll see where it starts to make sense when the UI starts coming together with some of this underlying, infrastructure stuff to make it work. But, yeah, that's the project I'm gonna be focusing on, and, you know, I'll probably also veer off on future episodes, but I'll also be giving updates on this. I'm also toying around with the idea of any of the transmit specific stuff that I might be talking about, maybe throwing that off into another feed and just explore, like, what that means. Feed and a podcast, really, is what I'm saying.

12:48 - 13:04

What that means as far as just providing updates and whether those could then live on that marketing site. So, yeah, I am over my time. I'm gonna wrap it up here. I'm Ryan Heffner. This is the All Play podcast.

13:05 - 13:19

Follow me @ryanhefner on Twitter. Follow the show @allplayfm . You can find me on or my personal site at ryanhefner.com and the podcast at allplay.fm. Alright. Have a great one.

13:19 - 13:21

Talk to you later. Bye.

Episodes

© 2024 — Transmits by Ryan Hefner

With Open-source Software