Blog / Archive

  • 7 October 2026 Working on Dark Mode

    I'm working on adding Dark Mode to the site. And then, while we're at it, it might be fun to add a theme switcher and have additional color themes just to changes things up.

    No promises though! Hopefully I won't have to abandon this feature, but it's a lot of work. I asked Claude to identify all unique colors in the codebase and it found ~300+ colors. All these small variations of colors accumulated over the last 20 years in the codebase.

    rtk3 progress

    In theory I could ask Claude Code to merge it all into a small palette that is more manageable for writing themes, but it would probably do a bunch of things I don't want. So it's more of a gradual process.

    For example today I asked Claude to identify all the green/lime colors in the unique colors list we made, and then merge them into a smaller lime scale of just 5 steps. It worked pretty well!

    So I'm down to about 200 colors atm. A bunch of refactoring happens on the way, some dead code (unused php/css).

    This is Phase 2. Phase 1 was identifying all the unique colors. Phase 3 is when I have a manageable palette of ~50 theme-able colors. I will then implement a theme switcher drop-down somewhere, or maybe put it in the Settings, with a live preview.

    I will start with a Dark Mode theme which has been requested. Designing a good dark mode is not trivial, but we'll see. There's a bunch of places where you have "use this color but lighter" for the background, where I am guessing it will break in Dark Mode, where you'd want darker instead. So it will be more refactoring, in theory I might have to deduplicate some colors into their lighter/darker variants so I can fully theme them.

    I'm working with the cheaper Claude Pro subscription which is ~ 20 EUR. I was using Claude Sonnet before but now I switched to Opus 5.5 which is more powerful and I am not running into the usage limits so that's good. Obviously here I am not "vibe coding" something where I let Claude run for 1h on some complex problem so that helps.

    So yeah. Moving on with the times. I for one, welcome our AI overlords. I think it's amazing, at least for developers. I am still fascinated now and then by how the AI figures out things. People say "it just predicts the next word"... that is obviously a massive over simplification of what is going on. And with multi-modal input it's just nuts.

    So I'm trying to do more complex things gradually with AI. Learning curve. I thought it was pretty neat Claude used "headless chrome" basically to screenshot a page before/after and evaluate if the merged colors did not move too much visually. Whoah. I didn't even now I could run "headless chrome" on the command line.

    Somehow this reminded me of Beastie Boys - Intergalactic. :P

    PS: if you have any requests / comments related to Dark Mode please comment in Github Issue Implement Dark Mode #403. If you have favorite websites in Dark Mode I can use as inspiration, those are welcome.

  • 1 October 2026 RTK Volume 3 tracking on the dashboard

    Once you've completed Volume 1 now instead of a generic "Go to Study" button the study button continues tracking into Volume 3:

    rtk3 progress

    Once you add the first RTK Vol 3 kanji to your flashcards, the progress bar switches over to track RTK Vol 3 progress:

    rtk3 progress

    Note: because Volume 3 is just one big 800 characters lesson, I figured it wouldn´t help much to show the lesson on the dashboard so when tracking progress in Vol 3, the lesson shown below is the last one from Vol 1 ("Lesson 56 of RTK New Edition").

    Old Edition has also been tested. In Old Edition you can add kanji #3008-3030 for the RTK Supplement as mentioned on the Kanji Sequence settings page. This does not cause issue, the tracking will still track Vol 1 until index #2042. Once you add kanji #2043 (old index), the progress bar switches to Vol 3, showing "1 of 965" (#2043 - #3007).

    Using Claude Code

    I heard about people doing some work with Claude Code on their phone so I tried it last weekend. This is a relatively small feature so I thought it would be a good test. I pulled up Claude Code with the iOS app, while I was sitting in a cafe. Told it to clone the repository and described the feature. This worked fine, although there was no easy way to navigate my code base (I noticed since the desktop web version has a file browser, but not the iOS app). I was able to review the changes in the diff. Claude created a PR. I completed this on the PC so I can properly test and write this post.

    I have a Claude Pro subscription since last April. I've been hesitating for a while because I wasn't sure I would use it much, and I didn't have a lot of use cases for it yet. But then I figured I can afford it with the support on Patreon, and as a developer I need to keep up with the times. I'm actually really excited about AI. I use all 4 apps on my phone : Grok, Claude, Gemini and ChatGPT. For coding obviously it is a tremendously useful tool, although I've not had experience with "vibe" coding anything substantial so far.

    Since then I used Claude Code quite a bit. It was really helpful to implement the new Patrons table you can see on the Support page. This is the kind of work AI is perfect for because it is really not rewarding as a developer to write code that hits an API to retrieve data, and honestly it would have taken me so long so scour the docs and figure out how to properly parse the XML I might have just postponed it indefinitely. But since APIs are generally well documented, AI is really good at writing that code. So I asked Claude to write me a tool that connects to the Patreon API and retrieves patron info, feed it into the database so I can display it on the page. The PHP script was then added as a job on the server which runs once a day to refresh the data.

  • 4 May 2026 Server update

    Thought I´d give a little update on the last post.

    I am contemplating moving Kanji Koohii to a fully self-managed server. To be fair the shared hosting at HostGator is pretty decent, but it has occasional issues like recently the Php sessions are not working properly which causes login issues (do check the "Remember me" option for now).

    It's also something interesting for me to learn. In theory the response time of the server on a VPS will be more stable.

    I tried first with managed VPS on Cloudways and didn't like it. Next I tried Digital Ocean and my experience was pretty bad: dashboard wasn't working at all. Couldn't create a "droplet". Then I moved to Linode and it's great! The dashboard on Linode (Akamai) is super clear and easy to use.

    I created a 2vCPU 4GB Linode, which should comfortable run Kanji Koohii. Some years ago I would never have tried this because it felt overwhelming but now with ChatGPT and Gemini I'm a lot more confident. I created a full checklist of all the steps to go through like basic security, enabling Ubuntu Pro, firewall, virtual hosts, SSL etc.

    I picked a datacenter on the US West Coast (Los Angeles). I did some basic ping tests and in theory it should give the best compromise for US and Japan which are the top two countries for Kanji Koohii users. So compared to current server in central US the ping for Japan should be a little better like ~150 ms, should be lower for US. For EU it should be about the same than it is now anywhere from 200-350ms. If I picked a datacenter in Frankfurt for example of course EU users would have a very low ping, but US and Japan would be worse.

    Right now I setup all the basic security stuff including SSH, firewall, changing the default ports, etc. Now I am learning about setting up the SSL certificates for HTTPS.

    Next I will set up the database. It will run on mariadb instead of MySQL.

    So far, for the nerd in me at least, it's pretty exciting. Finally I can install useful tools like fzf (fuzzy search), mc (Midnight Commander) etc.

    For monitoring I think I will use Uptime Robot and maybe Netdata, so I can have health checks on a mobile app and be alerted if the site goes down.

    I will publish the full checklist of all the steps I took to set up the server so anyone experienced can review it and give me some tips if I forgot something!

  • 27 April 2026 Moving server?

    I signed up for Cloudways Flexible Managed VPS and will be experimenting with running the site on a server from Digital Ocean. In theory it should perform better than the shared hosting.

    I picked a San Francisco data center. I ran some tests on globalping.io and it seems like that would be the better compromise with US and Japan being the top two countries where users connect from. With SFO I have a ping of ~110 for Japan, sub-100 for US obviously, and ~150 for Germany. If I picked a datacenter in Europe the ping was ~230 for Japan. So it seems like West Coast US datacenter would be best.

    Server is 2GB RAM, 2 vCPU. That would be almost the same as I currently pay for shared hosting on HostGator. I have no idea if it will really perform better though. According to ChatGPT it will "crush" a shared hosting but I really don't know. I guess the plus side is with the Managed VPS I can scale up if necessary.

    I'm not experienced in backend / linux server kinda things at all, besides the simple Docker setup I have for development. So any and all advice is welcome, let me know if you have any tips or gotchas about moving to a VPS Managed server.

  • 11 April 2026 Investigating a login issue

    There is an intermittent issue with the Sign In form : sometimes you can be redirected to the landing page, while still logged out. Checking the "Remember me" option before clicking Sign In solves this.

    The fact that the redirect happens without showing an error message ("Incorrect username and/or password") means the authentication works, but the session somehow is lost after the redirect to the homepage.

    I spent two hours already trying to figure out why this happens but I have no idea. If anyone has a clue, let me know. Issue 389 on Github (backend is Symfony 1.4 / php).

By Month