As I've struggled in the current job market, a friend advised me to work on my brand and I've been doing just that. On a personal level, that means shifting my focus on shipping and sharing more of my work. As far as the company goes, that means improving the look and feel of the website and sharing release notes on its blog. The mission has focused more on open source and local-first, instead of explicitly related to mental health (though I can't help but want to make things that are as useful and as helpful as possible).
I've got three major projects to talk about. For some context, my overarching professional goal this year has been to release more of my projects in an effort to become a self-funded open source app developer. On top of that, since basically abandoning reddit as my source of knowledge, a lot of my learning journeys start from BlueSky and Tangled, and because of that I think, building on top of ATProto or integrating with it has become a staple on my more serious work.
Though, the real rebranding may be taking my experiments and getting over the hangups I have around shipping. While writing the next section I felt confident enough and released Twister (release notes here).
Developing on Protocol
My AT protocol projects, by design, aren't quite local-first but do have offline-first features.
Twisted/r
Twisted and Twister are two, as I've described, love letters to . More specifically they're a mobile application (being built with Ionic and Vue), and a public API with interconnected services for search.
When I started this, I pictured it as a small companion to Lazurite as a simple way to browse and review projects, issues, and PRs on Tangled. It's really ballooned into quite a bit more than that, largely due to positive feedback.
There's a lot of cool stuff in and around the AT Proto ecosystem and great projects to learn from. Pub Search by was a big inspiration and help. Like pub search, I've deployed a Tap instance that subscribes to Tangled's firehose/jetstream events.
Initially I did a lot of the work on the client, relying heavily on atcute to setup the client and have types for Tangled's lexicons. This got the first demo off the ground that let me view profiles and browse code. But to look at relationships between Tangled profiles (like following) and who starred a repo, I'm using 's constellation API. I don't know how they're storing request data, but it's a little funny that there are requests coming from me with an authentication header that includes Twisted and my name. Going back to client-side requests, I decided to consolidate everything into the Go web service. I'm spending a lot of time writing and thinking about architecture. There's a good chance this ends up self-hosted with an escape hatch to deploy elsewhere.
It's on Railway and I've already burned through most of my hobby plan usage.
This was also pretty cool (big thanks!):
The Ionic part of the project is my first real dive into Vue 3. I've worked on production level Vue 2 codebases though. There's a lot I can't speak confidently about, but I will say that refs and computed values feel like Svelte's runes. It is weird to not be using the Options API but the speed of development has been pretty nice between the intuitiveness of setup scripts and composables all inside of Ionic's components.
Lazurite
I'll admit, I'm pretty far along on the goal of feature parity with some flourishes but I find myself worrying about this project. I think the niche I wanted to fill has been done better by Heron, a Kotlin Multiplatform, offline-first BlueSky app. It's a really well made app with neat inspiration.
I think BlueSky benefits from lots of cool web clients and in the mobile space, we can only make the experience better. Plus, I've poured a lot of myself into this and really do think it'll be useful for anyone wanting a different-ish BlueSky experience.
There's a lot about mobile DevOps that I'm not as comfortable with as I thought I was. Automation in particular. I like manually, slowly, and painstakingly releasing things so I retain control over each part of the process and know exactly what I'm shipping to people. That being said, it's remarkable what Fastlane can do for us.
I've been procrastinating setting up my signing keys but expect some news about this one soon!
Writer Commonplace
I've just about cut the next release of this app minus the fact that I'm going to rename it from Writer to Commonplace. The big features here are downloading/pulling documents from Leaflet and strings from Tangled, images in documents and exports (PDFs), and a partial redesign with darker colors, and in my opinion, better typography.
Next release I plan to figure out Greengale and pckt, and make sure DOCX exports have image support.
More in the weeds here: my big focus on this before knocking out the 0.4 features is refactoring the colossal SQLite and FileSystem indexing module I've created. It's at ~3000 lines right now.
You can download the app currently called Writer on Github or check out its website.
Baseball API
Adding a little bit here about my baseball API project from a few months ago. I'm aiming for a release soon, in honor of opening day, and if I'm being honest, releasing Twister has been a little empowering.
The utility of this project remains to be seen and almost contradicts what I said in the introduction, but I think having advanced stats available at your fingertips while doing data analysis would be helpful, and I find open APIs to be great tools to back projects built by new engineers.
If you want to support my increasingly available-to-use projects, sponsoring me on Github or a cup of coffee would help a ton! If you can't, any feedback/feature requests/bug reports are helpful and welcome.