AO3 Tracker, Drizzle Extensions and Funky Keyboards

Published At: 2025-05-30 08:02:29 UTC

My first working package that I have made public, a native app that I made for at least 1 person and a way to potentially do these things faster in the future.

React Native AO3 Reading Progress Tracker

I spend an unreasonable amount of time reading fanfiction, AO3 is the best place for that, unfortunately, it lacks on, in my opinion, the most crucial UX feature, tracking where you are at across the multiple works you may be reading.

Here is a link to the app on the Play Store & the GitHub if this is something that sounds interesting to you (it is fully alpha alpha stage so idk if I would recommend using it). I probably won’t make an IOS version because I don't use an iPhone and it would be a lot more effort to make it work on both platforms + I don't want to use my Mac.

GitHub: https://github.com/qcksys/ao3tracker-native-app

Google Play (Internal Testing):

Now for the things I learned along the way!

  • Building native apps is an awful experience!

    • In the sense of compilation, I think everyone everywhere complains about this but my first gradlew setup in android studio took 17 mins with gigabit internet and a 7800X3D, 64GB DDR5 system.

  • Developing native apps is an awful experience!

  • When using pnpm as the package manager, need a .npmrc with node-linker=hoisted

    • In the end I just switched to bun and haven't faced any issues

  • Thinking about DB's is interesting when the DB is sqlite on a client device.

  • Best way I found to build apps is with expo prebuild in the React Native repo and then cd android and ./gradlew app:assembleRelease (for APK's) and (on a mac or linux box) eas build --platform android --local to build the aab for the play store

  • You can view the logs of an app running in a simulated device with Android Studio -> logcat

    • None of my builds were working till I used this to find that there was an infinite loop on render, which helped me identify where the issue was coming from (even though no errors at all in dev mode :D)

There will be more updates to come on this project, I've been using it for a while and its already been very usable and fulfilled the intended function.

Drizzle ORM Extensions

https://github.com/qcksys/drizzle-extensions

https://www.npmjs.com/package/@qcksys/drizzle-extensions

Across many of the things I have been working on these bits of code have come up over and over. Here they are now bundled for future use.

Upsert helpers (so that you don't need to specify all cols AND so that you can do it in a type safe way, using the table refs, see README for more)

onDuplicateKeyUpdate (MySQL, SingleStore)

onConflictDoUpdate (PostgreSQL, SQLite)

also included a helper for Expo SQLite while I was at it (lets you subscribe to multiple tables)

useLiveTablesQuery (Expo SQLite)

Funky keyboards

I'm very bad at typing. Despite doing it for hours a day every day I still can barely touch type. When I try to use a keyboard properly (eg pointer fingers resting on F and J) my arms and shoulders get sore. On top of this since I'm bad at it anyway I may as well skill up on a good layout, thus my plan: get a indented split keyboard and apply a custom layout. moergo glove80 cyboard.digital imprint. This is just the early forming's of a plan at this stage so no promises!