Before starting Day 5, I noticed that I forgot to add ESLint, Prettier, and proper typechecking on project init.
So I've added it and also run into an issue in my Neovim config. Where I was unable to use some LSP methods. The solution was that I tried to use a tool that was not installed, and after the typescript-tools migration for Neovim v0.11, this tool initialization was failing silently and causing some problems. Strange that this is only recently an issue. But ok, I found a fix, and now my Neovim is back working again with TypeScript. :)
After adding ESLint, Prettier, and proper typechecking with my now working Neovim, I resolved some issues, and the project is now “clean.”
Creating Database and Tables! This one is a bit “harder” because I have to plan the data model correctly. For the auth, I can reuse the Supabase auth tables, so the focus will be on the tables.
For the application I need 3 tables and a many-to-many table. For now this is enough to get the app going.
After creating the tables in the Supabase UI, I used the Supabase CLI to generate the types and applied them. Additionally, I added some API functions to be more prepared for the next day.
Day 2 of #AdventOfProgress has translations as the main topic. I want the app to support at least German and English.
Because I'm already quite familiar with next-intl, I've chosen react-i18next as the internationalization tool for this app. Which worked quite nicely. And the API looks quite similar to next-intl.
Not much to say here. I've spent around 1 hr implementing this. A big chunk of the time was wasted on a dynamic import, where I tried, out of muscle memory, to dynamically load the JSON files with the translations. Implementing dynamic loading of languages has, at this state of the app, no real impact. So I ditched dynamic loading in favor of statically loading the 2 languages.
Today I have planned out the frame of the application. The tech stack will be Expo.dev (React Native) and Supabase. This stack is what I had in mind for most of the time. First, I also wanted to add NativeWind for styling, but for now I want to start as clean as possible and focus on what is really needed to get out an MVP.
I've started with setting up expo.dev. I quickly run into some problems with the simulator, which was unable to start.
Error Message:
› Opening on iOS...
Error: xcrun simctl boot <DEVICE-ID> exited with non-zero code: 2
An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=2):
Unable to boot device because we cannot determine the runtime bundle.
No such file or directory
So this needed a fix first. The web version was booting quite nicely with the expo-router.
The quick and dirty one was removing the .expo folder and running pnpm expo run:ios with a fresh simulator. I needed to delete the broken one. I got the ID from the error message, so I had to run xcrun simctl delete <DEVICE_ID> and if I did not forget anything, this was it. Sadly, I wasted around an hour on this. :(
Moreover, the simulator needs to be booted so Expo can work with it.
The flow is now that I boot the iOS Simulator and run pnpm start followed by a keypress of i to open the app inside the Simulator. For this, I've added a script "boot:ios": "xcrun simctl boot \"AppName\"
The simple way is now pnpm boot:ios followed by a pnpm ios. 🥳
I like the idea of Advent of Code/TS, but last year, I saw that this consumed a lot of my time. Yes, it was fun, but it did not push my side projects further.
So I got a “brilliant” idea. #AdventOfProgress – I like to combine both to take advantage of this time and make some progress. I would say this is an evolution of #TheMonthProject moved into December.
There is an app idea that has been living in my head for some time now, and I want to get it out with some tools I haven’t worked with in a long time. It is already more than 10 years ago since I started a small project with React Native. And with the rise of expo.dev, I see a good opportunity to try it out in December. The plan is to have an MVP (minimal viable product) by the end of December or, better yet, by Christmas. It should be possible in this span of time. But I also see my calendar and the entries there, with stuff that also needs to be done. Let’s see if I will manage this. :)
I wrote about how I use Claude Code in Wezterm in this Post.
Since then, I've improved it a bit. I introduced the yolo mode --dangerously-skip-permissions as default when I open CC and I need to split the window pane on my desktop monitor to 1/3 and on my laptop monitor to ½.
The split introduced a new function, which is called on keypress.
local function split_for_claude()
local screen = wezterm.gui and wezterm.gui.screens().active.name or ""
local percent = 50
if screen == EXTERNAL_MONITOR then
percent = 33
end
return act.SplitPane({
direction = "Right",
command = { args = { "bash", "-lc", "claude --dangerously-skip-permissions" } },
size = { Percent = percent },
})
end
EXTERNAL_MONITOR is the name of the external monitor. The name you will get from opening the Debug Overlay and calling wezterm.gui.screens().
Currently I thought I will have more time to write. But it looks like, that my brain is so occupied with stuff that each day I forget to write a post the previous day.
I forgot to count but it is the thirdfourth fifth attempt to write the post. 🙈 Hell, I also forget to pay some bills or answer some letters which are important.
I don’t know what’s happening at the moment. I’m focused on a topic but I’m so lost on other important ones and forget about them constantly.
Yesterday I had a strange day. Something between “When can I go to bed and leave this day behind?” and “I have so much energy, I don’t know which task I should tackle first.”
The day started with my usual dentist appointment, where I needed to drive 1 hr there and 1 hr back. Sit there for around 1 hr and be done. It’s ok but annoying that I lose plenty of time.
Back at home, I started some long client meetings. Usual Sprint refinements and plannings.
But later that day, I had an interview for a new client project, which turned out quite good. I was surprised how much energy it brought. I felt so good and energized, which I thought I’d lost this feeling in the past weeks. 🙈
I was able to keep this energy up to the evening, where I had a debugging session with a colleague, and we fixed a nasty bug, which we both thought was unfixable. 😅
After all this, I got to bed with a good feeling and the attitude to crush it today. And I’m still pumped to get a lot done today. The only blocker is that I have so many ideas, I need to write them down, AND I don’t know where to start. 🙃
For nearly a year I was a Raycast Pro user. With that, I was also able to use their AI features. Sadly it was not so satisfying, because you gained access to models you can use freely on respective sites. Yes, it solved as a proxy to avoid sharing sensitive data, at least I hoped, but I have no verification for this.
But now, I've moved to ChatGPT Plus. I could also use it with Raycast, but the ChatGPT desktop app for macOS looks good and works well. So, why use a wrapper?
Raycast Pro is payable, but besides the AI feature, I’ve only used the synchronization feature. The synchronization was useful for using the mobile app; sadly, it was not what I hoped, so there is no good reason to sync anymore. Only for backups, but this I can do myself.
I’m still using Raycast and love it for what it offers. Only the Pro subscription makes no sense to me anymore.
I will now explore more of what ChatGPT can do for me. I also can give Codex a try. Maybe I'll find time for this to try. :)