The focus today was to add UI for adding, editing, and deleting entries. Which is now working but looks awful, but for an MVP it is enough. :D
While working on it, I discovered some flaws in how I handle entries. When I had this app in mind, I always thought that this should be possible from one form input. But while thinking longer on it, this would be possible but with a lot of effort. So this could be a feature for later. For now I want to focus on the basics. Still, I don't want the user to fill out a lot of form inputs.
With this day, I have some input fields that are simple but are doing the job. It is now possible to make simple CRUD operations within the app.
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. 🙃