Recent Coding Expeditions
Mokuro
I’ve been toying with running Mokuro with an LLM that can OCR text.
So far, none of the models I can run locally (16 GB VRAM) can produce usable results.
Manga Kotoba
Build Processs
My build process for my website Manga Kotoba was terrible.
When I first started the site, I was new to Node.js and the AdonisJS framework.
As I was learning as I go (and wasn’t using an LLM for getting information on how to do things right), my process was:
- Sync code files to server.
- Build files on server.
- Restart server, causing downtime.
- Hope something didn’t break on the server that’s working locally.
The recently updated process is:
- Build files locally.
- Sync build to server.
- Start new build server.
- Switch from old build server to new build server, without downtime.
- Stop old build server.
- Hope something didn’t break that I missed locally.
Steps 1-5 are now a single script to run.
I have been working on creating more automated tests to help reduce the chances of things breaking. I just need to ensure I run them before doing a sync to live…
Query Optimizations
A few weeks ago, I finally found what was causing some really bad query performance that would sometimes take the site down for a while.
As it turns out, the way I was using views for filtering vocabulary lists was causing a lot of unnecessary work when users marked words as known, then viewed a lot of series (such as navigating through the browse pages).
E-mails to Users
I recently implemented the “password reset” option that I’ve had on my to-do list for a year and a half.
I originally intended to also implement a “e-mail user on sign-up and make them confirm their account”, but I found an easy method to determine with extremely high confidence whether an account is a legit account or a bot. If I’m 100% certain it’s a bot, I can now easily delete it.
Why is it important to delete bot-created accounts when they don’t do anything?
Having an accurate count of users gives me a bigger feeling of responsibility for making sure the site is up and I’m not breaking things.
BookWalker Screenshot Automation
The main source of content for Manga Kotoba is from time-limited free volumes.
I normally source these from Kobo, but sometimes Kobo doesn’t have a volume free that BookWalker does.
I have a script for automating downloads from BookWalker, but it’s a bit of effort to use.
Solution? Replace it with a minimal interface:
(I made good use of Claude Sonnet 4.5 for helping write the code.)
Streamlined Processing
Adding new volumes to Manga Kotoba used to mean running multiple scripts, navigating through folders for content check, and seeing if there’s furigana, and so on.
I had Claude Sonnet 4.5 convert my Python scripts to TypeScript and integrate them directly into my admin interface, then I handled the cleanup from there.
Discord
I’ve slipped a Disord link onto Manga Kotoba’s navigation menu (which some users will have hidden).
I don’t really advertise things much, but this will be an alternate place where people can point out bugs, suggest features, and contribute content, for both Manga Kotoba and my other Japanese language website Japanese By Example.
BookWalker Volume Downloader
Streamlining downloading from BookWalker for my own personal use is nice and all, but I’d love for people to be able to download their purchases in a more streamlined manner in hope that I’ll get more Mokuro output contributions for Manga Kotoba.
Granted, Manga Kotoba’s contribution page is currently not linked to on the site and it only supports importing from Kobo at the moment. That should be one of my upcoming updates, to make it more accessible and usable.
So I asked Claude Sonnet 4.5 to help out a bit.
It chose some inferior methods of implementing things, so I made sure to review everything it wrote and prompted it to make specific improvements.
The code can now be run as a UserScript:
The interface is fairly simple:
Once you have the correct settings in the viewer and are on page 1, all you need to do is click a button and wait for it to finish.