David’s daily log: I do more, for 45 minutes a day
JUMP TO THE LAST DAY
Ideas, visions, goals, projects, tasks. Everything and everywhere. I have a mile-long backlog. There are great ideas to explore, apps to create, technologies to learn, and more and more, piling up. Most of the time my mind is buzzing. I can't get rid of ideas, concepts, regrets, visions, and everything in between.
Unfortunately, the following is true.
Thinkers are everywhere.
Doers are rare.
Thinking doers are the rarest.
I am a thinker, with doer peaking out on accessions. And I want to change that.
Uff, it is out. Even saying that is a little relieving.
I decided to do this. And then again, again, and one more time.
The proof is this introduction. This is the third time I am writing the introduction. How pathetic. I always have this idea about starting right. Usually, it only means I start months later than I could.
This time is different. Recently I listened to a podcast with Peter McKinnon, who stated simple fact. To know if you like something do it every day. Every day for at least 31 days. You will never know if you enjoy something if you only do it once a week. A combination of this and my recent struggles with my business got me to this point. Do I like development as much as I state? Do I love it enough to continue doing it?
In doing it, I will evolve from a thinker to a doer.
Wait, where is this coming from?
It will be cool to say this is my original idea, but that is a trait lie.
I am sure this concept is old and used over and over again. But I got the idea from two sources. Ok, three, but these two are crucial.
Eliška Šestáková and her everyday blog about note-taking. Read it. It is amazing. Eliška’s writing looks so easy. It is engaging and a pleasure to read.
Casey Neistat and his daily vlogging adventure that stretches over 800 episodes. That guy is a work dog and a genius in one person. Check it out here.
Now when you watched a few of his videos I am glad you came back. I know, don't apologize, he is good.
Casey is a YouTube legend, a brilliant filmmaker, and a huge inspiration. I admire him not only for his work ethic but also for his relentlessness, in how he gets things done. There is so much to learn from his vlogs. It is not only an entertainment.
You are trailing off again. What are you doing?
I will work on a project outside of my work every day for at least 45 minutes. Even if it means I will go to sleep later or have to wake up early.
I will update the project I am working on. I can skip between projects only after 31 days or when I finish the project.
That is it, the baseline, the golden rule. Those famous dice are cast.
In the process, I will evolve from the thinker to the doer.
Welcome, to my daily log. My goal is to update this page every day with a new log. Every day I will record a piece of my journey becoming a version of myself that thinks less and executes more.
Did you pay attention to the third inspiration? It is from the movie Julie & Julia.
I will do that every day, or until I get bored.
Current project: NEMILKOV CASTLE WEBSITE
✅ DAY_001: Sep 6 2024
FINISHED: 50 minutes. The goal was to set up theme fonts, sizes, and colors.
It would be nice to say in my first post. I am starting a new exciting project. My goals are the following, I am thrilled to get started.
Well, that is not the case. I am in the middle of a project, and I am coding in my spare time. I don’t want to publicly admit when I started, but it has been a long time and I am still not done. That is yet another reason why I am starting this dynamic blog post.
Anyway, I am in the middle of the project. The goal is to develop a web application in Next.js, MongoDB database, and Material UI. Some of the app is finished, but it isn’t near ready. Right now I aim to put together an app that can be shared with the public. It won’t have all the requested features. That will come later. Currently, I am almost done with the mobile variant of the home page. Some functions are missing but about that in the future.
I know, I know, setting up fonts, sizes, colors, and all that should be the first thing to do. Yes, you are right, but not for me. You see, spending precious hours, setting up a project is probably worth it in the long run. I would do so on commercial projects. But here I needed to see progress. Without progress, I don’t feel excited. So I am doing so only after I did most of the homepage. The plan was too ambitious anyway. I did install both fonts we are using. We have typography like these, so I will be using one default font and one for “special occasions".
Right from the start I run into one problem. I know how to set up a font for Typography (the component that is used to display text in Material UI). However, I couldn’t figure out how to set up a default HTML font for cases where typography isn’t used. As I am writing this I have just come to the solution. I don’t need that. Material UI is set in a way that I should always use typography for text display, and doesn’t matter if it is inside a Button component or a Link. That reminds me, I need to check if there are special settings for Link. Nope, I didn’t find any.
Today’s time is over. Tomorrow I will continue with setting up fonts, colors, and sizes.
And btw System props are being deprecated in the next major update of Material UI. From now on I can only use ‘sx={{ }}’ props. I did like system props.
✅ DAY_002: Sep 7 2024
DONE: 50 minutes. Working on the Desktop version of the home page. I want to ship it out as fast as possible.
Today’s original plan was to continue setting up fonts, sizes, and colors. For now, we don’t have any good documentation of our UI, so I decided to skip that.
Instead of that, I started working on the homepage version of the desktop. Even though there are still details to finish on the mobile UI. I often tend to skip the details to improve some other part of the app.
With this approach, there is always progress in the projec. I am not stuck on some details that will improve only 1% of the app, but it will take a huge amount of time. There will be time for the details but not in this stage.
The progress is a little slower than I expected. Last time I wrote a note that system properties are being depreciated. From now on I am also taking the time to rewrite those in the codebase. Luckily there aren’t that many.
Homepage yesterday
Homepage today
✅ DAY_003: Sep 8 2024
Done: 47 minutes. I am working on the event section on the homepage. The mobile version is close to done, now I am upgrading the desktop.
One of my introductions for this blog post was the following idea. “Anything that I did well in the past I didn’t think about it too much. I got the ideas and started working on them without hesitation.” That is not the case for this blog. It took me a good 6 months to get started.
When I finally did start I didn’t plan. I started a couple of days ago and today. Today I found myself at the airport flying home in a few minutes and I am not done with today's session. The flight is 12 hours so when I get from the plane it will be September the 9th.
That means I would fail. I would fail even before I got the time to get started. As I sit here in San Francisco’s airport I am feeling a surge of excitement. The adventure of getting this work no matter the circumstances.
The coding session was fast but productive. I did progress on the event section on the desktop. Nothing shows for now, I will post the results here once it goes to first testing.
Btw the way it took a while to realize that Material UI, doesn't allow to use of size property on column elements. I didn't know what this going on for a good ten minutes before I found it in the docs. Why is that?
I have to run now, my plan is about to leave. I am going home…
✅ DAY_004: Sep 9 2024
DONE: 63 minutes. Making progress on the homepage and coding on the plane.
Almost every time I am on the plane, I think how is it to sit 30 rows in the front? In the magical seat where one can sleep at night. These few spots that don’t wait in line, are fresh when leaving the plan. Then a second thought comes to mind. “Dude, stop whining. You are crazy fortunate you can be on this plane. You are fortunate, that you can fly over the ocean to visit different continents. You are lucky few who can do it.”
My philosophical window ends like this. Do you want your family to fly more comfortably? It is your hands, no one else’s.
Coding on the plane is a deep experience. I am sitting in the middle seat, so I can kind of cramp in. The seat in front of me is a little bit too close for me, to have a comfortable position. Despite this, coding without the internet is a challenge on its own. I am not used to it. I am spoiled. When I don’t know the name of the property it takes me a few seconds to pull it up. Now I have to dig through my code and seek my answers there. Or I am writing myself “Todo” comments. I don’t want to forget my thoughts while I was putting together a particular section.
I finished coding for today. This session I wanted to finish the event section. There are some details to tweak around, but I can move to the next section on the line. It will be part of the event topics. Those topics or themes will give you a good understanding of what is Good Networking about.
My eyes are dry and I am falling asleep as I am writing this. There is still 4 hours before I land in Germany. I am somewhere above Greenland right now. I will finish this when I get to Frankfurt.
....
Frankfurt airport, here we are. To my memory, Frankfurt must be my most visited airport after the one in Prague. Almost all my longer flights got through there. I even remember my dad driving me here once, when I was going for ice hockey tryouts in the USA. My flight is about to board. Soon I will be home.
P.S. I am checking how much is for an upgrade to Economy Plus class.
✅ DAY_005: Sep 10 2024
Done: 53 minutes. Coding with jet lag.
My first day home after flying across the Atlantic. As jet lag goes, I can handle it pretty well. Traveling is easier east than traveling west. I am not sure why. I always have a bit more brain fog and a crisis during the afternoon. This time it is the same, I am feeling well, but I can feel that something is a little off.
Especially when I left my coding session at the end of the day. To the time of the day when I am the weakest. Limit to my brain functions leads to simple tasks. For most of my time today, I was setting up fundamental rules for UI. Now I know all the typography is going to be consistent across the application. The colors are going to be the same everywhere. Now changes based on reviews will be easy to install. I am battling with two things right now.
First of all, I didn’t understand. I don’t even know if it is possible. How to set up different font sizes for the same element but once for mobile and once for desktop. I hope it is possible, otherwise all this basic setup will prove kind of limited. Almost useless.
Second of all, I didn’t know that I used buttons for the main navigation header. Of course, buttons have a native hover effect and I wanted to make my job easier. So I used buttons in the main header. Unfortunately, the header now has the property of a button. It doesn’t look good. It is not possible to do a similar basic setup of simple a Link element. Now I have two choices. Add a custom hover effect to the general link element. Or create my custom Link element for the header with the properties and styles I need. For this stage, it is easier to only style the general element. But creating a custom one is always interesting and I don’t do it often. It can be a good practice for me.
I haven’t decided yet. It will be a surprise in the next few posts.
✅ DAY_006: Sep 11 2024
DONE: 61 minutes. Answering comments about UI design and researching the definition of custom components in the theme.
I made the same mistake as yesterday. It is 9 pm and I am finishing my session. Well, I finished the coding a few hours ago. Writing the post had to wait right after everyone else got ready for bed. It takes only a second for a night to come here in the mountains.
Today was straightforward work. I had quite many comments on our design and today I decided it is the right time to take the time and answer it. In the majority, we are discussing the accessibility perks of the app. Proper font size, correct color contrast, and missing section texts. I found out that communication is natural for me. That is why I tend to leave it for times when I am tired and I don’t have to focus so well. Also, it gives me a kind of kick to my work. It is a sense of achievement. It gives me more energy afterward to start working on harder tasks.
I spent the rest of my dedicated time researching custom components. In the last session, I created a theme for the app. It means that I can define custom font sizes, colors, and other styles for elements. With the theme, I don’t have to check if the title on the homepage has the same properties as the title on the “About Us” page.
For material UI I have a rough concept on how to create these custom elements. In the beginning, I will use it for a custom link component in the main header. I wrote about that in the last post. The general idea is as follows.
The base is a styled component. Identical definition as the Styled component library for React.
Creating a root element (usually a div, header, or section), that will wrap the element.
Create slot elements. These are elements filling the wrap component.
Next, assemble it into a react function.
In the next step, I can access it from the theme component same as the default elements.
There are two more steps that I don’t understand right now. For that reason, I won’t mention it right now. I don’t want to post anything misleading.
Tomorrow I will continue with custom components. I will finish the process and at the end of the session, I will have a customized main header link.
✅ DAY_007: Sep 12 2024
DONE: 46 minutes. Researching and setting up custom components for a template.
Today was tough. I am glad I am finished with the session. It is 11:20 pm and I am at the beginning of this post. It will be short. It will be on the point.
Coding is hard. My friends and people around me often tell me how lucky I am. “Wow, that is great you can work from home.”, “Traveling while working, that is the dream.” I can put here ten statements like this on top of my head. I guess you know where I am heading. Most people have no idea what they are talking about. My only answer is nodding. I nod and usually say: “Yeah, it is great.”
Yes, I am grateful I get to do the work I do. But it doesn’t have to do much with luck. It is not any miracle. Since I was in university I started this journey of being flexible. The goal was always not to tie myself in one place. Our world is too interesting of a place to be in one spot. But it isn’t easy. It isn’t luck. It isn’t the dream. It comes with the cost I have to pay. Price I have to pay every day.
Wow, I going into a philosophical realm, even though I wanted to talk about custom components. It seems to be on the right track. It took me 45 minutes to get one simple custom element working. It means I was able to read and copy small pieces of documentation to try new skills I didn’t know. And I talking about concepts I have seen before. It is a framework and style of coding I know something about. It isn’t a blank sheet of paper for me. And it still takes 45 minutes. It got me to the point where I don’t understand the concept, I definitely don’t remember it. I can’t replicate it tomorrow. The achievement was that my custom element appeared in the app. It doesn’t do anything. It doesn’t have the right properties or styling. It isn’t reusable for other parts of software.
What is the conclusion of all this? In those 45 minutes, I was keeping up with a concept I needed. There are hundreds or thousands of new concepts, technologies, and syntaxes. I will need those in the future. There could be the next thing I should start learning today.
Until the end of this post, I didn’t realize it was the 7th day. It has been a week since I started. 🥳
✅ DAY_008: Sep 13 2024
Done: 73 minutes. New desktop edits.
I am traveling from the west side of the Czech Republic to north east side. It is approximately 6 hour drive. From the perspective of North America, it is a short weekend drive. For the Czech Republic, it is a big trip we prepare for a week in advance. This time it is a particularly interesting trip. Heavy rain is pounding on a windshield. Every news report there are new traffic jams and accidents on the road. People are stocking up on sand and bags to protect their homes.
The desktop page is coming together. There are still some tweaks here and there, but I finished the major parts. I only need to finish the contact form and footer. I guess that each section will take one session. In theory, it will be ready for the first round of reviews in the middle of the next week. Isn’t that exciting?
I am glad I decided to get into the default setup at this point. It helped the design quite a lot. Simple unifying styles in typography make a difference. Small details like those that lifts the entire feel of the design. I will have to go over the default button styles. One of the big questions is always spacing between elements. Setting up the same spacing for text, header, and other elements isn’t complicated. The problem is that doesn’t look good in every scenario. In most cases, it means a few back and forth with the designer. That is not too bad.
✅ DAY_009: Sep 14 2024
Done: 45 minutes. I'm almost ready for the first round of review.
I was able to finish the coding session before everyone else woke up.
So far my estimate is close to reality. I was able to do the contact section in one coding session. I had time to take a quick look at the footer section. I will have to make some structural edits to make the responsive footer easier.
I didn’t write this post in the morning. Now I am in a hurry. The wedding I am attending is getting busy. That is all for today.
✅ DAY_010: Sep 15 2024
Done: 62 minutes. Finishing the footer for the desktop
I did it! I finished the desktop styling. The estimate was a dead on. I was able to finish one section in one session.
I woke up tired and thirsty. It started raining two days ago and it continues. During yesterday the electricity was on and off all the time. Late at night we finally got a stable electric power. When we went to bed everything worked. And the rain seemed to doze off. Now it is a different story. The rain started to pick up again, the winds were strong and electricity was down for the last 6 hours. This time we also lost a mobile service. Everyone wishes for a cup of coffee after a long night of celebration. Of course, everything is on electricity.
At this stage, I finished the footer for both mobile and desktop. I had to refactor the code from my original version to get it working from mobile to desktop. Sometimes I doubt the philosophy of doing mobile-first development. The truth is that mobile is usually more challenging. But only from the point of user experience design. As pure development goes desktop is usually more complicated to style. It makes sense since the desktop is more specious and designers can play more with the layout. On the other hand, as far as my experience goes it usually takes more time to style the desktop. The mobile version usually takes less time. This time I did pure mobile first development. I made one mistake I am aware of. While I was working on the mobile version I should have planned more in advance and taken the desktop version in a count. After I finished the desktop version. I will have to go over each section again and review the styling for mobile again.
Especially the event section will need quite a bit of work. I am still hoping to ship it out for review in the middle of the week.
Electricity is still down. There is no service and my battery is dying. I hope I will get the chance to post it today.
✅ DAY_011: Sep 16 2024
DONE: 60 minutes. Upgrades in mobile and desktop.
Today I don’t know what to talk about. I did a quick session before a family lunch. I didn’t finish it in one sitting so I finished the rest while watching the news on television. It stopped raining today, but some places' situation isn’t improving yet. Some rivers are still rising. Tomorrow, I will travel from Moravia to Prague. Some of the tracks are below water at this point. It should clear before tomorrow.
Progress in the app is slow. I am very close to finishing the homepage. I must be careful about every upgrade to avoid damaging something else. At this point, it is a game of balance. Polishing one element can’t affect the one next to it.
✅ DAY_012: Sep 17 2024
Done: 89 minutes. Social link and link sharing.
I like to code on the train. I was traveling from Moravia to Prague. I was afraid there would be some troubles on the railroad. Fortunately, we had no trouble on the road and arrived safely and on time in Prague.
I didn’t have much time to put this post together. I am happy, and I will make it before noon. Tomorrow I will put together a proper progress report. See you tomorrow.
✅ DAY_013: Sep 18 2024
DONE: 60 minutes. Home page progress.
Running workout in the morning, rushing to the downtown. Find the coffee place quickly to finish the coding session. Early lunch with Tomas. He is the brain behind the Good Networking. We met each other for a long very long time. He was the first person I was inspired by during university. I understood for the first time there is more to education than there is in books. I realize YouTube is the best professor.
Then I rushed to client meetings, some administrative work, and friends meeting with good Czech beer. As I am writing this in the taxi going home I am hoping to post it before midnight. I am glad I did the coding session first thing in the morning. Cause now I am stressing to post it before midnight.
There were many events today I would like to write about. But there isn’t much time. I am ending it here.
✅ DAY_014: Sep 19 2024
DONE: 60 minutes. Struggling with closing the job on the homepage.
The goal of this blog is to push me more to executive and avoid overthinking stuff. Is there a good rule for how much you should analyze and compare before start executing? I remember from a seminar that we should spend around 10% of the project estimate time on planning. Does the same rules apply to analytics? No, that is a topic for another time.
It is so close. The homepage is almost done and there are only a few tweaks. Very good, David is taking the best course of action doubling down on those few tasks left. It is going well, everything is working. The team is working on the review. In the optimistic world, we can have the web live in two weeks.
But wait…that is not what David did.
David didn’t take the extra steps to finish the job. He got distracted fell off the wagon and started working on the About Us page. Why? Because he got bored on the homepage. Rather than finishing the unpleasant details he falls for cheap satisfaction. Fast progress on the About Us page is more pleasant than boring little details. “It needs to get done anyway, doesn’t matter when.” That is the lie traveling through his head. He only trying to justify the decision, based on laziness not on discipline and focus.
✅ DAY_015: Sep 20 2024
DONE: 170 minutes. The about page progress.
The alarm goes off at 3 am. Car ride to the airport, quick nap on the first flight, long second flight. Landing in San Francisco, a few hours later I am finally in my destination, Rocklin. My local time is 8 pm, I am exhausted and there is nothing I want to do more than go pick up my dog from dog sitting and go home.
“Did I download the about page design?” those were my thoughts after we taxied from the gate. At that point, I went over what I could do on the project without the designs. There wasn’t much. A few movies later I found out that I had the design. Nothing was stopping me from coding for the entire flight.
Flight from Frankfurt to San Francisco takes 10 hours. Coding for this amount of time in one session is bananas. For me, 4 hours of quality coding for a day is a job well done. It wasn’t the case today. I was smarter this time. I pick out easier work from the project and get as much done of that as possible. The result is real. As I am writing this in my Rocklin bedroom. The majority of the About page is ready for review. We are missing one section with video and I was able to do only fundamentals for one section. That is it for today. I am going to bed.
P.S. Thank you Dusan Hutak (my old family friend) for letting me and my wife stay with him in Rocklin.
✅ DAY_016: Sep 21 2024
DONE: 45 minutes. Progress on the About Us page.
I woke up early. It was nothing unexpected since I was traveling west. I can adapt to time changes very well traveling west. At least it's much better than going east.
A quick session in the morning. I focused on the About Us page. The estimate is that I will finish most of the About page tomorrow.
When this is finished I will come back to the Home page and finish the Home page to the stage where we can push it. The same thing goes for the About Us page.
I am falling into a good routine. It is easy for me to find the time and energy to finish the coding session. I am looking for that part of the day. Writing this post is a different story. One reason it is giving me a hard time is the time between the session and writing. There are few hours between coding and writing. The biggest problem is that I don't remember how the session was at the end of the day. I don’t remember in detail what worked for me and what challenges I faced. By the time I sit down to write this, I forget all the good topics. A new thing to work on. Something to improve.
✅ DAY_017: Sep 22 2024
DONE: 50 minutes. Material UI Grid research.
There is a particular part of Grid I don’t understand. I must be doing something wrong. I can’t figure out how to size of the grid works. When I set it up it only works a handful of times. In cases when it doesn’t work for me I set up a max-width property that will style the element on bigger screens. For mobiles, I unset the max-width property and set up small padding on the sides and the styling is perfect. I would rather figure out how exactly the Grid component works.
The original plan was to continue progress on the About Us page. The new plan is to research the Grid element.
Of course, I was doing things wrong. The fundamentals of working with Grid goes like this. There are Grid containers and Grid items.
Grid containers are only for one purpose. It acts as a wrapper for Grid items. On the container, I set up column and row spacing and defined the number of columns I wanted to use in the layout. The default is 12, but I can redefine it as I like. So far I was keeping the default 12 columns and didn’t find an urgent to change it.
The grid item is the space where the magic happens. There I can set up the size of columns and offset. The size of the column is self-explanatory. The offset is used in cases when I want to have a size of 4, but I want it centered. In this can I can set offset 4 and the element will be in the center. I can also set up column sizes for different breaking points. Columns can have different sizes and offsets for both mobile and despot.
For alignment of the elements in the Grid items, I have to always set up flex display for the Gird Item. It is not recommended to align elements on the levels of the Grid container.
Those are the fundamental rules and properties to use when working with Material UI Grid.
For me and the project is means that I have to go over the pages and review how I am working with the containers and items. When we finish the first round of review there will be a perfect opportunity for that.
There is one disappointment from today’s session. I changed the way I worked with Gird on one section I was working on. But the sizing for items doesn’t work for me as I expected after reading the documentation. That will be a goal for the next session. I need to figure out this unexpected behavior. I set up a size for the item, but it always resizes according to the content on the side. I expected it would keep the size and content will be on multiple lines if it doesn’t fit.
Today got me reconsidering my note system again. I have never had an effective way, to organize my notes. I usually write something down and then never come back to it. That is losing the point of having notes in the first place.
✅ DAY_018: Sep 23 2024
DONE: 60 minutes. Working back on the homepage
Both the About Us page and Homepage are roughly 80% finished. In my experience, those last 20% take the same amount of time and effort as the first 80%. Right now I am going over the homepage again. I am finishing missing features, bugs and styling details. Also, I am working on parts I skipped on the first go.
Today gaol was to develop a contact form. We wanted to do some changes. Most of it is minor tweaks. Those take a few minutes to change. For example, creating a drop down menu with predefined message subjects. Creating the form and collecting the data is also super simple in React. It few minutes to set up. I take advantage of the React state and check for every change on every input. Anytime there is a change I update the state. When user clicks the button I take the data from state. Posting the data to an email server and sending it is more complicated than. Well it is only complicated cause I have never done it before. It true for most stuff in programming. Once you do it once it seems simple and easy.
✅ DAY_019: Sep 24 2024
DONE: 45 minutes. Contact form development fails.
This is my time encountering problems with short coding sessions. So far in the project, I have been working in areas that I know very well. I am working on styling and frontend applications every day in my daily work. 45 minutes now sounds like a lot of time.
The problem is in the areas I am not that experienced in. Or features I have never done before. I am strong in front-end development. It doesn’t matter if it is an alone-standing application communicating with API with a backend. Some static applications have a scripting language. These communicate via API without my adjustments are also my strong suit. That how my work with Shopify (the e-commerce platform, where I do the majority of my client work) looks like.
Since Next.js is both a frontend and backend app mixed into one application is something new to me. A great example is a contact form we have almost on every page. Designing the form for the user takes 10 minutes. Form interactivity takes me 10 more minutes. Send data from the user to the server takes another 15 minutes. I did this in the last session. Now I had to develop the backend logic. That is nothing complicated. Create an API endpoint, catch data from the form, and use correct methods with node mailer (the library that I use to send emails). After handling a few error cases and success cases I am done. Then I come back to the user form and create quick data validating that the can user see. Those are for UX purposes, the user needs to understand what he has done wrong, why the message isn’t sent, and what steps to take to make it right.
Sounds easy right? Well, yes for experience I esteem 2-3 hours of focus coding and all is done and perfect. For me, it will definitely be longer. Especially since the session is only 45 minutes. Now I went through all the steps on the backend. I put the code together, but there is a bug I need to find. That will be for the next session. At this point, the contact form doesn’t send data correctly to the server.
Good Networking contact form
✅ DAY_020: Sep 25 2024
DONE: 119 minutes. Finished contact form
There were a few days solar when I didn’t have a topic to talk about. Today I have numerous issues to write about. I will list those all below but I only talked about one. I will get to the rest of them in later posts.
In the last two sessions I did features I don’t do on a daily basis. How to note those so I can use them in the future?
Does it make sense to publish an article or video about the topics I have learned recently?
Why is programming hard, why does it take so much time?
How I failed to use AI today.
I attended and Research Slam in Livermore Reach Labs. Very interesting topics in a variety of different topics. Each presentation took 3 minutes with a focus on the general public.
Today I will talk about how I failed to use AI. I use AI on general basics. The day doesn’t go by without asking Chat GPT a few prompts. Most of my questions are work-related. In a year of using the tool, I found the use cases that worked well for me.
In my experience, AI in this state is very good at creating isolated well-defined tasks. At the beginning of Good Networking app development, I didn’t know the Material UI very well. AI was working very well for me. I took a screenshot of the design. AI gave back pretty decent code mostly written with Material UI components. I didn’t accept the code like that. But it gave and ideas. No, it gave me a roadmap. I knew what components I needed to research. Those components will be building blogs for most of the design. Over a few days, I learn the fundamental components well enough to code faster and with fewer errors in the AI.
Today I was again working in an area I don’t have much experience with. Designing API isn’t my daily bread. I did it a few times in my practice projects, but never on a real project. I write the majority of the code in yesterday's session. It didn’t work and I didn’t want to come back to broken code. Today I ask AI to write an example code to handle API. It was 90% correct. The mistakes it made were pretty obvious and easy to fix. The majority of the mistakes were in Typescript types. But even after tweeting the code it didn’t work. I spent a good hour researching and asking AI for possible bugs. We went over everything from the wrong API address to CORS problems. The mistake was much simpler. It was my mistake and it was one simple letter. The name “users” isn’t the same as “user”. One letter took more than an hour to fix. How I did fail to use AI? What is the first and easiest thing to ask AI? Not how to deal with CORS error.
It didn’t come to my mind until evening today. I went back to my code to replicate the bug again. Post my buggy code to AI it was the first thing it noticed as a potential error.
✅ DAY_021: Sep 26 2024
DONE: 162 minutes. Sharing link feature, homepage fixes.
Three weeks in a row. Three weeks in a row, I worked on a side project for at least 45 minutes a day. In the morning I was planning for some interesting and engaging story. I wanted to tell you about how much it moved me forward, and how much I have learned. I saw it as a great celebration. Now in the evening when I am writing this I have a solid writes blog. I remember there was a great short movie about the writers' blog in the Neistat Brothers show. But I couldn’t find it. But watch that show anyway. It is all on Youtube and it shows what was before Youtube and vlogging was cool.
The Rider Block isn’t going away, but I can at least recommend a second video about this topic. If you don’t know Dan Mace is a filmmaker from South Africa and currently is working with Mr. Beast. And before he worked with Casey Neistat on his vlog. Go check it out. It is super cool. In the video, Casey recommended starting from what you have. What do I have? I am three weeks into the process of changing my perspective from overthinking to doing more. Every day I coded for at least 45 minutes Good Networking app. On average, I spend over 1.5 hours working on this every day. I am learning new technology Next.js. And above the coding I am posting every day. There are a few fundamental questions I have on my mind from the beginning. What will happen if people don’t care about the blog? Does it matter? Is it a metric of my success? Or is the metric keeping this going as long as I want? As long as I know I execute more and with less overthinking. In my host words, I would like to say that my motivation my only pure. The motivation isn’t pure like that. I am seeking external recognition from my doings. I want to get as many people reading this as possible. I want the engagement to grow. Can’t say it is happening right now. The good thing is it doesn’t bother me now. When I do this for three months and it won’t get better I will be in the worst place. That is enough deep talk from me. I am asking more questions than giving answers anyway.
To sum this up I can only say one thing. Thank you. Thank you very much to every folk out there who reads this and appreciates it. Get inspired or learn something.
P.s. In the end, I found out that the last builds failed and didn’t get deployed to the server. I will become a Dev Ops engineer for the next few days. Not my strong suit.
P.p.s. I am still having trouble making Grid Works property. I am doing everything according to the documentation. But the Size property doesn’t work as it should.
✅ DAY_022: Sep 27 2024
DONE: 62 minutes. Avoiding dev ops jobs. Grid research.
I have figured out my mistake about the Grid. I misinterpreted the nested Grid functionality. I read and understood the nested grid inherits columns and spacing from its parent. I assumed I could overwrite it. I can’t. That led to my misunderstanding and problems with layout and spacing. Not anymore. I came to n nirvana and now I understand it doesn’t overwrite. It has a simple solution. If I want to control the width of my Grid items in the nested Grid I insert a Box component between. By that Grid is not a direct child of its parent. Defining it again as a root component and I can manage the layout again. This took almost 45 minutes of trial and error in the Code Sandbox. All this is written and now my session can start.
I change the approach to the homepage design. The top element is a box with a component ‘section’. In the section, I then use the Grid component. For the majority of the homepage, it was easy conversion and everything worked fine. The only section I have to work on is the event section with filtering. It is nothing crazy, but it is postponing the styling review for a few days.
These coding sessions and blogs are having unexpected outcomes. I try to do it the first time in the morning. The session is only 45 minutes or so long. It leaves some unfinished work. I am finding out that it is difficult for me to stop the work and start working on my client's project. I would rather stay all day on this code as much as possible.
P.S. Also I forgot I wanted to fix the last app builds. Never mind. :D
✅ DAY_023: Sep 28 2024
DONE: 45 minutes. Deconstructing and refactoring
I only had a short time to do my session today. Also, I procrastinated a little bit in the morning hence I only did 45 minutes.
I always set up a goal I want to achieve in the session. This time it was to finally event section styling. It is the only major flaw on the home page. Today’s goal was too complex. Refactoring the code for this section proved complicated. It is because of my wrong understanding of Grid that caused it. Now I have to fix the Grid structure and based on that change my approach. From a decent look at the event section. I progress to broken graphics that I left work in progress.
✅ DAY_024: Sep 29 2024
DONE: 51 minutes. Finished the event section.
Today's session was short, but I did finish refactoring the Event section. It's a bit counterproductive since the first web launch won't include this section. The functionality for this section will be in order after the main pages are ready. I’m close to completing the Homepage and About Us page. The Join In and Contact pages are next in line, both built from sections I’ve already developed. I should have them done in no time, even tomorrow it is realistic.
Even section
The visuals are the same after refactoring, but believe it works much better.
Right now, I'm facing a bigger challenge I’ve been avoiding. I need to “push” my code from my computer to the online server, like saving files to iCloud. There’s a smart feature that sends my code to a Vercel project (an online tool that makes our site live for users). This used to happen automatically—until three days ago. Now, every time I push code, it fails to go online. There are two issues:
I don’t know much about the “backbone” programs that support my work. Those smart codes allow me to work on the front end. Dev Ops engineering is like black magic for me.
I don’t have access to the Vercel project set up by the developer who built this automation for us.
Wish me luck. I expect a few long sessions to solve this.
P.S. Today I talked to a friend who reads this blog. He suggested adding a button at the top to scroll to the bottom of the page. My answer was, “Yes, you’re right! I’m not sure if I can do that in Squarespace.” I’ll do my best to figure it out.
✅ DAY_025: Sep 30 2024
DONE: 68 minutes. Final refactor on the Homepage and Join Us page.
For the last day of September, I’m introducing a new feature to the blog. From now on, you’ll never need to scroll all the way to the bottom. Just click the link at the top, and voilà! You’ll instantly be taken to the latest update. No more endless scrolling. 🎉
Today, I’m leaving the comfort of my friend’s home in Livermore. Staying with friends has been amazing, but tomorrow I’ll wake up near Grand Sequoia National Park and hit the road again. Don’t worry—daily updates are still happening, no matter where I am.
Do you ever have a thought that just won’t go away? No matter how rational you are, it keeps popping up. It’s there when you wake up, when you work, and when you go to bed.
For me, that thought is: “Is anyone reading these posts? Does this bring value to anyone?”
It’s a distraction. And it isn’t enough to remind myself—this blog isn’t about gaining thousands of readers. It’s about transforming myself into someone who takes action without overthinking. So, does it really matter if someone reads this as long as I reach my goal? So far, I’m feeling great. I have a solid routine, and it’s working for me.
Still, I wonder… Do any of us truly never need external validation? Is it possible to objectively value yourself without it?
Anyway—seriously.
Is anybody out there reading this? Let me know! Also, tell me what you think of the new button feature! 😊
Oh and by the way the Join Us page is finished. Ok, it is finished with a few little issues. But still. build page in less than 35 minutes? Not bad.
✅ DAY_026: Oct 1 2024
DONE: 45 minutes. Contact form and UI research.
Today was a quick session. Honestly, I only did it because I committed to doing this every day.
The day started off nicely in Grand Sequoia Park. Little did I know how hot Southern California could get. It hit 38°C, and we spent the whole day driving south toward LA—with a barely functioning AC.
Now, it's after 10 PM, and it’s still blazing hot in the camper. Not complaining, just calling it a day. Time for bed!
✅ DAY_027: Oct 2 2024
DONE: 120 minutes. Refactoring and Subheader.
Today, time has slipped away from me. I only had a small window for work, but this coding session took it all. It’s amazing how easily I get into the flow with this project. I try to make it the first thing I do in the morning when I’m freshest. Sometimes I feel guilty, though—every minute coding is time I could spend on client projects. But this routine is keeping me sharp. I need to be careful not to go too deep into the rabbit hole, exactly what happened today.
I started working on the subheader functionality. From a user’s perspective, it’s a bar under the main header that lets them click and jump to different sections. Here’s the process:
Gather the sections to link to.
Style the bar under the header.
Refactor sections to accept IDs (since I reuse section components on numerous pages).
Link to the section IDs.
Style the scrolling effect for a smooth transition.
All this took about an hour. Then the tricky part came. I needed to recognize which page I was on because each page had different sections and IDs. The solution? The Next.js Router hook—it works well and is simple enough to implement.
But here’s why programming can be tough to learn and keep up with App development takes weeks, months, or years. You don’t pump out an app every week. In the early stages, you set up the app’s routing, creating an empty app where you can navigate between pages. At that point, 99% of the work is still ahead.
Now, how often does a developer set up routing in a year? Not very. So even though it’s straightforward, I don’t do it often enough, and it can take half a day to get it right. That’s where I fell into the rabbit hole today. Leaving unfinished work drives me crazy, so instead of stopping at 45 minutes. I ended up coding for 2 hours, putting client projects on hold.
So, what about you? Can you leave unfinished work and move on easily, or do you prefer to stay up and finish it?
P.s. I didn’t finish it anyway.
✅ DAY_028: Oct 3 2024
DONE: 46 minutes. Finalizing the sub header feature.
Today’s update is going to be short. I managed to finish my coding session early this morning, but here I am, writing the post late at night. The task was to complete the subheader functionality, and it’s now in working order. I didn’t use the best approach but went with the fastest one instead.
Yesterday, I mentioned that the ideal solution would involve using the Router hook from Next.js. While it’s the most robust, it’s not the quickest to implement, so I opted for an easier method. I used global state (think of it as storage where I can save and retrieve whatever I need).
In this storage, I save the name of the page the user is on. With a simple condition, I can either hide the subheader or adjust its content accordingly. It’s easy, and it works well for my use case. I might change this approach later in the development, but for now, it’s doing the job perfectly.
✅ DAY_029: Oct 4 2024
DONE: 112 minutes. Finalizing UI edits.
The time has finally come! The rest of the Good Networking team is now reviewing the app. We’ve agreed on a one-week review period, after which we’ll be able to set the launch date. In the first round, we plan to release a static site to showcase our vision and goals.
Once that’s done, I’ll begin working on creating events and profiles—but more on that later.
✅ DAY_030: Oct 5 2024
DONE: 59 minutes. First review tasks and edits.
Despite working on new tasks from the review, I’m celebrating 30 days of a new habit: I’ve coded every day for the last 30 days!
Here’s how much time I’ve spent on this project in the past month, including 13 hours dedicated to writing updates.
A quick evaluation shows it’s been a huge success so far. Thirty days ago, the Dobry Networking app had a partially working event feature and no functioning sign-in feature. Now, we’re completing the first major review, and we’re already discussing a realistic launch date.
Most of the progress has been on the client-side part of the app. There is a ton of work ahead of me. But I am feeling positive about the progress I did.
Since I’ve now built a 30-day habit, I’m thinking about adding a new one to my routine. I have two ideas in mind, but I’ll keep them to myself for now and test them out quietly.
Before I wrap up, I want to revisit something I’ve mentioned before. When I start coding in the morning, I tend to push off my actual client work. This could become a problem since my billable hours are limited. I have two possible solutions:
Stick to strict 45-minute coding sessions. This works but can leave tasks unfinished, which slows development and could lead to mistakes.
Reschedule coding to the evening. Trust me, I am not a good developer when I am tired.
Well done, David. You’ve just ruled out both options while writing this. So, for now, things will stay the same!
✅ DAY_031: Oct 6 2024
DONE: 71 minutes. Continuing with review tasks.
Today was challenging. My morning bike ride stretched longer than anticipated, leaving me drained for most of the day. Completing today's session proved quite difficult.
I deliberately chose to tackle easier tasks. My focus was on tweaking text, making minor UI edits, and investigating why our contact form functions perfectly in the local environment but not in production. I also dedicated a significant amount of time to exploring Cursor.
For those unfamiliar with Cursor (and I don't blame you if you're not a developer), it's an AI-powered code editor that Thomas introduced me to a few weeks ago. Here are some standout features:
1. It integrates chat directly into the editor, not only streamlining the workflow but also allowing users to choose between different language models.
2. The chat considers the context of the file I'm currently editing, which is crucial for setting up successful prompts.
3. It suggests lines of code based on what's already written. For instance, when I was hiding a UI element on mobile today, it suggested the same code I had used for a different element just a few lines above.
4. I can use natural language prompts to generate code snippets directly in the file, all while considering the existing context.
I'm excited to revisit this topic in a few weeks after gaining more experience. For now, my enthusiasm for Cursor is high.
✅ DAY_032: Oct 7 2024
DONE: 72 minutes. Review tasks, online form.
Only some easy solutions are the correct ones, though I'm a huge advocate for simplicity. In most cases, we should start with the low-hanging fruit. I'm not keen on tackling the most difficult tasks first. Based on my short career experience. I perform much better on complex tasks after warming up with something simpler. It feels good to tick an item off the list, and then I'm ready to tackle the bigger challenges. Also, I believe if a task takes more than an hour, it needs to be simplified. Breaking down the dragon into smaller pieces is crucial for tackling complex tasks. It's probably the most well-known method, but also the best.
I intended to write about something completely different. But the complexity of tasks carried me away. I know the reason: we tried the simplest solution for the contact form problem, and it didn't help. The contact form still doesn't work on the online app. It's disappointing, but it means I'll have to look deeper.
The solution we tried was updating environmental variables. When developing an app. Coders need to store some information that must be invisible in the browser. For example, I can't have an accessible secret API key (our unique key to access some services). For email, it's similar. I have to send our email password to the server, which will process my request and send the email (not yet in our case). I can't have that password be accessible in the browser. That's why it's hidden in environmental variables. These aren't shared between my local environment and the server. Every time I change environmental variables on my computer, I need to update them on the server as well.
The review is underway. So far, I'm keeping up with the reviewer, and within 24 hours, I can ship new versions.
✅ DAY_033: Oct 8 2024
DONE: 45 minutes. Review tasks.
I squeezed in my coding session while coming back from Santa Catalina Island. It was a beautiful day with perfect weather in a charming coastal town.
I focused on more review tasks, mostly small tweaks here and there. However, there’s one edit I keep postponing because it involves installing a new library. While that’s usually simple, the project has a dependency issue (the libraries are different versions and aren’t compatible). Fixing it requires some DevOps work, which isn’t my strong suit.
✅ DAY_034: Oct 9 2024
DONE: 49 minutes. Review edits are still coming in.
This morning, I had one of those heart-stopping moments you only see in bad movies. Okay, maybe it wasn’t that dramatic, but I’m allowed a little exaggeration, right? 😅
Lately, we’ve been dealing with an annoying problem—one of those issues that has a simple solution, but sometimes you just don’t have the will to face it. Here’s the situation: We deploy our app to Vercel, an awesome platform for quickly getting apps online and into production. It’s easy to use, but here’s the catch: it’s free only for individual developers. Since there are two of us on the project, only one of us can be listed as a team member. That means only Milan can deploy the app.
Now, here’s the twist—Milan just had his second baby! 🎉 (Congrats, Milan! We’re so happy for you!) But with a newborn at home, Milan understandably doesn’t have time for evening coding sessions, and who could blame him. Enjoy the baby, Milan. :)
So, what’s the solution? We need to pay $40/month for Vercel’s team plan. For a business, it’s a no-brainer—use the tool, build the app, and make the money back. But for us, a nonprofit project, it’s different. Everyone on the team is volunteering their time, driven by the vision of a platform where people can connect and network in meaningful ways. But every small barrier pushes that vision a little further out of reach.
As I’m writing this, late in the evening, I’m wrestling with a thought. There’s a transparent account for Good Networking, and I’m wondering if I should ask for your help. With just a little contribution, we could clear this obstacle, save time, and speed up our progress.
.
.
.
…. many moments later.
Alright, I’ve made the decision. Here’s the link to our account (6531315359/0800). Any small amount you can contribute will help us keep things moving forward. Thank you so much for your support! 🙏 Honestly, thank you very, very much.
See you tomorrow, with a new development story.
✅ DAY_035: Oct 10 2024
DONE: 63 minutes. TikTok Pixel and New Icons.
Today, we took a trip to San Diego. The plan was to spend most of the day on the USS Midway—a retired aircraft carrier built in 1945. It was commissioned a week after Japan's surrender in WWII. Later served in various conflicts before becoming a museum. The experience was amazing. The ship had countless planes and helicopters on display. Marine veterans were there to share stories about life aboard the carrier.
The USS Midway felt like a floating town. I now understand why it was described that way in the introduction. The ship was massive, not in terms of its combat capacity, but also in its everyday amenities. It had a post office, barbershop, medical wing, tailor, and retail store. I could’ve spent the entire day there. Two main thoughts crossed my mind during the visit:
First, standing on the bottom deck in the engine room, I could almost feel the weight of the ship above me. I couldn’t imagine being stationed there during a battle. My impression was that if the ship went down, the sailors in the engine room are going down with the ship.
Second, I often hear people say that men today are weaker than they used to be. While I don’t always agree, being on the USS Midway made me reflect on this. Many of the sailors serving on that ship were 19 or in their early 20s. They were working in harsh conditions with immense responsibility. They returned home with both physical and mental scars, but they had to be strong—there was no other option.
In conclusion, I hope that as men, we can find a way to be strong again. To lead by example, care for ourselves and those around us, contribute to society, and not drain it. We can find purpose and work hard to fulfill it and take responsibility once again.
As for development, there hasn’t been much of an interesting story today. I felt compelled to share those thoughts after the museum visit.
That said, the week of review is almost over, and today brought in a new batch of tasks. We’ll be discussing the release date soon and making it public. We’re also considering a few new features for the initial release. It’ll depend on how much time I can dedicate to development in the coming weeks.
P.s. I did my session again in the car. That is becoming a tradition.
✅ DAY_036: Oct 11 2024
DONE: 67 minutes. Homepage UX Review.
Today, we completed one of the final stages—a full review of the homepage UX. Thomas led most of the work, and here’s how we approached it:
We revisited our goals for the first launch.
We went through each section, comparing it against those goals.
We evaluated if each section provided valuable content.
It wasn’t a complex process, but it was necessary. One key principle guided us. It's not about what you add, but what you leave out to focus on the most important features. There’s a better way to phrase it, but you get the point!
We did some reordering of sections, which led to a minor issue. The original design had smooth transitions between sections. After the review, we’ve rearranged them, and we need to update the transitions as well.
That’s it for today. See you tomorrow!
✅ DAY_037: Oct 12 2024
I always look forward to the weekend as a time to relax. Unfortunately, that rarely happens. Most weekends, I have leftover tasks from the week to finish, and today was no different, with plenty of work still on my plate.
Here’s how my “super productive weekend” played out today: I start the day with a morning bike ride (can’t miss that!), followed by a trip to the farmers market. But by the time I get back, I’m so tired that I end up procrastinating for most of the day.
This coding session was slow. I only had three new tasks from the review, which took just 10 minutes to complete. Normally, if I were feeling fresh, I would dive into other areas of the app. Instead, I spent some time brainstorming ideas for a section that’s giving us trouble—“How it Works.”
We’re not happy with how it looks right now. The text feels hard to read, and after reordering the sections, it no longer flows well with the rest of the page. I was searching for something simpler, clearer, and more readable.
Below is my idea on how to improve it.
✅ DAY_038: Oct 13 2024
DONE: 50 minutes. Review tasks.
This weekend wasn’t very productive. I gave the bare minimum to my coding sessions on Saturday and Sunday. Now it’s late Sunday, and I don’t feel rested at all—one of those weekends that slips by without recharging you.
Still, there’s always a positive angle. Even with low-energy sessions, I managed to stay on top of the review tasks. I have a good feeling that we’ll be announcing the launch date soon. After the launch, the plan is to roll out new features every two weeks. One small step at a time, we’ll piece the entire app together.
✅ DAY_039: Oct 14 2024
DONE: 55 minutes. How it works section.
The “How it Works” section is live and under review!
That means one thing—once I wrap up the cookie bar, we’ll be ready to roll. 🍪
With the new week comes a new feature for the Daily Log: a comments section! From now on, you can share your thoughts—let me know if you're following along, what you think, or what you'd like to see more of.
Or, you know... just say hi. 👋
That’s all for today—got to run! We’re off to Joshua Tree National Park, finally. 🌵
See you tomorrow with news about the cookie bar!
✅ DAY_040: Oct 15 2024
DONE: 104 minutes. Graphic edits.
I had a ton of graphic edits to tackle from the review, and my goal was to finish them all within 45 minutes. That didn’t happen—but I didn’t stop there. I kept going until it was done because there was no time to waste.
Tomorrow, I’ll be implementing the cookie bar and fixing the Facebook pixel. If you haven’t guessed it yet—the release date is getting very close! 🎉
I could have saved some edits for the next session, but with the clock ticking, everything needs to get done now. The day the app goes live for everyone is just around the corner.
Stay tuned—I'll keep posting daily updates!
P.S. Apologies for the short posts lately, but every minute counts for coding right now. 💻
✅ DAY_041: Oct 16 2024
DONE: 52 minutes. Implementing cookie bar.
There are a few words in English that always trip me up, and one of them is "cookie." For some reason, I always spell it as "coockie." I don’t know why, but it seems to have some kind of magic hold on me. While implementing the Cookie Bar for our app today, I had to spell this word multiple times—and of course, I spelled it wrong in every file on the first try.
Thankfully, I caught the mistake before committing to the work! I went back, fixed all the spelling errors, and moved on. That part was easy.
The real issue is that after today’s coding session, the Cookie Bar still isn’t working properly—it’s not loading on the page. This is a big problem because we can’t go live without it. I’m so close to being ready for launch, but this is the one thing holding us back. Once I figure it out, I can relax a bit, finish up some styling details, and we’ll be good to go.
I’ll keep you posted on how it goes tomorrow!
P.S. By the way, I’m still in Joshua Tree National Park. The main reason I’m here is for rock climbing. I haven’t climbed since we left Squamish nearly two months ago, and it feels like forever. Today was my first day back on the rock, and honestly, it didn’t feel great.
✅ DAY_042: Oct 17 2024
DONE: 226 minutes. Finally finishing the cookie bar.
“Today is good, you’ll have plenty to write about in your blog,” Tomas told me when we wrapped up.
He was right. This was the longest session yet—hectic with a lot of back-and-forth between Tomas and me. He even stayed up late to oversee the final details. I spent most of my workday on this. And yes, my workdays are shorter because I’m constantly on the road. Plus, being in Joshua Tree National Park, I try to climb every day.
Honestly, after a day like this—just getting back from climbing, having dinner, and driving to our sleeping spot—there’s only one thing I want to do: go to bed. That doesn’t mix well with writer’s block, but today was eventful enough that I can at least go over the key points I worked on.
I had three main tasks to finish before today’s session:
Projects We Love section:
Tomas came up with this section after we had already set the scope for the initial launch. Originally, this was supposed to feature events created by our members, but for now, we’re showcasing projects we admire. We showcase projects that share similar values and offer volunteer opportunities. From a development perspective, I reused the old UI from the events section with some tweaks. It took about an hour to wrap up.Our Team section:
Here’s where I admit a personal flaw. Let me get you some context. Image you are you have a project to do and you are on a very begging. I’m great at the planning stage. I know what to do, when to do it, and how it ties into other projects. During execution, I’m still solid—I move quickly and solve problems as they arise. But when it comes to finishing the last 10% of a task, I struggle. Even something as simple as recording a 3-minute video tutorial can take me weeks to complete because I procrastinate.
Today, I realized we have a similar issue in the Good Networking team. I finished building the team section weeks ago, but I’ve been waiting on images and content from the team ever since. Today, I ended up downloading everyone’s profile pictures from Slack or LinkedIn. 🙃Cookie Bar:
Yes, I had to triple-check the spelling of "cookie" again. I’ll keep it brief: I fixed the Cookie Bar in about 10 minutes, but it took me four more builds to get it to comply with Google Consent v2 (don’t ask me what that is—I’m still not sure). Without the help of Cursor AI and Claude, it would’ve taken me twice as long.
In the end, I beat my writer’s block. Tomorrow, I’ll be back with more updates. After today’s hectic session, I’m hoping to keep it to a nice 45 minutes!
✅ DAY_043: Oct 18 2024
DONE: 58 minutes. I am working on a few details and chilling.
After a hectic coding session tomorrow, I had planned a more relaxed session to review the code I’ve written over the past 40 days. That was the plan, at least. But as often happens, a voice in my head pushed me towards new tasks I could tackle today instead. So, I spent the entire session making a few aesthetic tweaks and edits. It felt good to finish them, but when I pushed the code to the test server, I uncovered an issue we’re now facing.
As we talk about the release date, the usual stress kicks in. We're thinking Monday, but let’s be real—launch day always feels like a rollercoaster, especially for a developer. When bugs or issues pop up, it’s hard not to feel like they’re all my fault. Sure, there’s a whole team involved, and coding is never simple. We all know the best way to catch some problems is in the wild, but still… deep down, there’s always this feeling I could’ve done a better job. That’s something I’m learning to live with. Every reported error, every bug, and every task starting with “Error” feels personal. My ego takes a hit, and it’s hard not to let it get to me. I have to remind myself to relax, not make a big deal of it, and fix things the best I can.
Now, back to the release. We’re talking about Monday, but the app has been live on the production server since yesterday. We’re doing a soft launch—letting a few close users try it out and give us feedback. It’s a common practice, even in other industries like restaurants. New places often open quietly, offering discounted meals in the first few weeks to work out any kinks before their grand opening. That’s essentially what we’re doing—fixing the details we might’ve missed during the development phase and making sure everything is solid.
Stay tuned. The launch is near!
✅ DAY_044: Oct 19 2024
DONE: 55 Minutes. Chilling and Planning Next Steps
Today was one of those days where I just needed to chill. I wasn’t in the mood for any heavy coding, so instead, I spent the time thinking about next steps. I read through my notes, organized my thoughts, and tried to figure out where we go from here. We’re at a crossroads: do we push forward with new features and aim for a release in the next few weeks? Or do we slow down, focus on SEO, web performance, and really fine-tune the codebase?
Logically, it feels like rushing the new features makes sense. I could wrap this project up, then shift to maintenance and improvements as needed. That way, the bulk of the work is done, and I can focus on my own projects. There’s a long list of things I want to dive into, and keeping this daily log would help me stay on track.
But then there’s the other side—the part of me that can’t just rush something and call it “done.” My long-term instincts are telling me the exact opposite: “Slow down, improve, review, repeat. This project has your name on it, and your reputation is everything right now.”
I guess I don’t really need advice—I already know the answer. Deep down, I know the long run is the key to real success. So that’s the path I’m going to take.
See you tomorrow!
✅ DAY_045: Oct 20 2024
DONE: 55 Minutes. Edits and Prepping for Launch
Today was one of those low-key but productive days. Nothing too exciting, just getting ready for tomorrow's big moment. We spent a short session ironing out some grammar mistakes, fixing typos, and sorting out broken links. We did hit a snag with registering the site on Google Console, but after some effort, both Google Console and Seznam Console are now up and running smoothly.
The good news? We’re ready. Tomorrow, we’re going live!
✅ DAY_046: Oct 21 2024
DONE: 59 Minutes. Focused on Improving Accessibility
Have you heard of WAVE? It’s a fantastic resource for making websites and apps more accessible, and it’s open for everyone to use, courtesy of the State University of Utah. What makes it great is that it doesn’t just point out errors—it also directs you to relevant documentation. And the best part? The documentation is brief and to the point. No long-winded paragraphs, just the info you need.
Let me quickly break down what web accessibility means. There’s a group of users with disabilities—whether it's poor eyesight, mobility issues, or something else. Making a website accessible means ensuring they can navigate it easily. For example, users with vision impairments rely on screen readers, which scan the site and read out text, images, and links. To make this possible, we use special attributes—things like hidden labels and image descriptions—that are invisible to most users but essential for those relying on assistive technology.
According to Wave, we’re doing pretty well so far. Today, I managed to get the homepage in order. Tomorrow, I’ll tackle the other pages. Most of my work involved fixing missing text on links and adjusting color contrast. I didn’t know that, but icons used for links, like social media sharing buttons, need hidden aria labels for screen readers. And when it comes to color contrast, the standards are strict!
This is the area we need to improve the most. But here's the tricky part—there’s a fine line between accessibility and design. Striking a balance without sacrificing visual appeal is always a challenge.
Also, when we are further in the development process it will be very interesting to user test it with real users with disabilities.
Oh, and in case you missed it, we launched the Dobry Networking website today! Go check it out.
✅ DAY_047: Oct 22 2024
DONE: 51 Minutes. Canonical URLs and Work Synchronization
Today felt like a battle. We weren’t able to secure a team license from Vercel, so we had to come up with an alternative solution. It wasn’t as complicated as it sounds. Thomas created a new email with a shared password, and now everyone on the team has access. Problem solved! No more dealing with builds from multiple emails or worrying about which one to push from. What was once frustrating is now running smoothly.
Speaking of smooth, Thomas and I worked simultaneously today, setting up new user profiles. Against all odds, we both ended up working on the same profile at the same time. The result? A hilarious series of password resets. In the first 10 minutes, we must have changed the password at least 10 times! 😄
Coding wasn’t the main focus today. My only task was to implement canonical URLs. In simple terms, a canonical URL tells Google which version of a webpage is the primary one. For example, if you have two URLs—like domain.cz/products/notebook and domain.cz/notebook—that point to the same page, Google might see this as duplicate content and penalize the site. The canonical URL helps avoid this by specifying which link should be considered the main one. You can read more details in Google documentation.
Dobry Networking owns multiple domains, so for us, this meant setting the primary domain to dobrynetworking.cz.
✅ DAY_048: Oct 23 2024
DONE: 65 minutes. What did I do today?
I’ve changed my schedule this morning. Up until now, my first agenda of the day was training—usually a bike ride or run, occasionally swimming, but there’s no pool anywhere near Joshua Tree. Morning training is my favorite part of the day. Based on that session, I can usually tell if I’ll be focused and disciplined or if the day is going to be rough.
Living on the road, though, makes it hard to keep a routine, especially my morning workouts. As a result, my focus and discipline during the day have been inconsistent. Strangely enough, this hasn’t impacted this project. I always start my work blog first, which brings its own problem—I often get stuck on it and then run out of time for my client's work. I love writing these logs, but client work is essential.
So today, I made a small adjustment to optimize my routine. I’ve decided to do this session before my morning training, ideally before 7 a.m. That way, after training, packing up camp, and commuting, I can start work by 9 or 9:30 a.m. It’s a small shift, but I hope it helps balance things out. Also, it’s dark in the mornings now, and I really don’t like running in the dark! 😄
As for today’s work, I was hoping to remember exactly what I did… but no luck. I know it had something to do with web accessibility, which is becoming more fascinating as I dive deeper into it. Ah, now I remember! I was troubleshooting an issue with missing labels on two inputs in the contact form. The labels are there, visible to the user, but the screen reader isn’t picking them up, and the accessibility tool keeps flagging it. I think this might be a limitation of Material UI, so I’ll need to dig deeper to figure it out.
✅ DAY_049: Oct 24 2024
DONE: 45 minutes. Short update
Today’s log will be super short—I need to get to bed early. From 12 p.m. to 4 a.m., I’m attending an AI Megahackathon. It’s not heavily focused on coding but rather on existing AI tools that can help streamline some of my processes. My goal is to create a personal team without having an actual team.
Further down the line, I aim to build a team of people with whom we can tackle larger projects than I could handle on my own.
See you tomorrow.
✅ DAY_050: Oct 25 2024
DONE: 52 minutes. Stayed all night at AI hackathon
Growing up, I played ice hockey and, although I hated it at first, it eventually grew on me. I was surrounded by twenty or more boys my age, and this became my world well into my twenties. University was no different—I joined a student organization and threw myself into everything, saying yes to every wild idea, event, and project.
Being part of a team has always fueled me, giving me a constant stream of energy. I loved the ups and downs, the laughter and arguments, and the easy way things always felt. Any problem could be solved over a shared laugh (luckily, I still do this) or a quick beer where we’d talk it out.
Then, after graduation, I unexpectedly found myself in a completely different world. I started a web development business, working solo. From the beginning, I aimed to build a team around me—people to share passions and visions with. Working alone can be tough, trust me.
Now, several years later, I’m still running this show solo. It’s not as much about needing social connection as it is about needing teammates—people who can help keep the whole circus running.
This brings me to an event I attended tonight. I wanted to share my evolving thoughts on AI. It’s something I approach with both curiosity and caution. It can be intimidating, even for me, so I can imagine how older generations might feel. But AI, used wisely, is a powerful ally. With the right automation, AI can become the team I’m missing—from drafting emails and extracting information to organizing files and managing contacts. And let’s not forget coding. AI has become a daily asset, making custom development in Next.js smooth and even lending a hand with Shopify Liquid (although that’s a bit more of a struggle).
This blog itself is a product of that AI teamwork—it helps polish my grammar and readability, while the ideas remain mine.
Today’s post didn’t touch much on app development. I’ll get back to it tomorrow. Right now, I’m in a bit of a grey area, not entirely sure of the next step. I was planning to focus on performance and accessibility, but I’ve covered the major accessibility issues. With performance, there’s more to do on image optimization, in both size and format. The performance aspect will become more of a struggle when we add more features like events.
Alright, this has gone on long enough—good night. I’ll write more tomorrow.
✅ DAY_051: Oct 26 2024
DONE: 45 minutes. Thinking about life and refactoring event features.
It is my last day in Joshua tree. Spent the day outside in the heat, rock climbing, and reflecting on life and refactoring the event feature.
It feels strange. Up until now, I felt like a well-oiled machine—everything was on track. The goal was to build the MVP as quickly as possible and publish at least a minimal site. Now that I’m done, I feel like a fish in too big a pond.
I believe that will change once I dive into creating the event feature. Milan has already done a big part of the work. Now, I just need to refine it a bit, make it user-friendly, and then we’re ready to go.
Today’s entry is short—my eyes are closing after a long day in the sun. Good night!
✅ DAY_052: Oct 27 2024
DONE: 56 minutes. Event Section Deep Dive.
The Event feature was the first one we began developing—even before setting up routing or pages. I say "we," but in truth, most of the work on the Event feature was done by Milan, the developer who kicked off this project. Today was my first deep dive into his work, and I’m genuinely happy with what I found. Milan did an impressive job. While it’s not fully complete, the event creation feature is functional and works well overall. My task now is to enhance the UX and UI to make it more user-friendly. Right now, it provides minimal feedback to users and has only basic error handling, which definitely needs some attention.
So far, I’ve been researching and evaluating various approaches, especially focusing on what happens when an event is created, and the user is redirected to the event details page. This page lets the user review all information and make any necessary edits. There are a few smart ways to handle this. The simplest is to send the event ID via URL or through a router object, which is usually the go-to solution for developers. However, this approach can slow things down. Every time a user accesses the event details page, the API gets called, data is loaded and managed, and this repeated process can create a slower experience.
To improve this, I decided to store data in a global state. Imagine the global state as an information bank that sits above the entire application. Since it’s accessible to all parts of the app, any component can retrieve data from it when needed. So, when the user creates an event, the app can save the data to this global state (our "information bank") during the redirect. This way, when the user lands on the event detail page, they see the data instantly, without any unnecessary delay.
Of course, in development, things are rarely straightforward. We also want users to be able to share events on social media, so it’s likely that some users will arrive on our site directly from platforms like Facebook. In these cases, the global state won’t have any data stored yet, so I’ll use the original approach as a fallback, retrieving data from our database using the event ID.
Ultimately, this hybrid approach—combining both global state storage and on-demand database calls—seems like the most efficient solution, at least for now.
In future posts, I’ll dive into ways to improve the user experience while waiting for database data to load, especially as I start implementing these solutions.
✅ DAY_053: Oct 28 2024
DONE: 45 minutes. Events data processing.
The end of the month is almost here, which usually means a last-minute crunch for me, as I try to wrap up client work I might have put off. Typically, the last week of the month brings a boost in my discipline and focus—otherwise, no paycheck!
For this project, it also means I’ll be capping my work time to a strict 45 minutes a day, at least for the next week.
Today, I made a small but important improvement to the Event feature. Now, when a user creates an event, they’re redirected to the event details page, which displays the newly created event. Remember the global state solution I mentioned in my last post? It’s working here: if a user navigates directly to the details page, data is still loaded seamlessly from the API. Both methods now work in the MVP.
I feel good about the progress today. Tomorrow, I’ll focus on switching data fetching to the server side rather than the client side.
✅ DAY_054: Oct 29 2024
DONE: 60 minutes. Decision Making Without a Decision
It’s evening again, and after a morning coding session, I find myself struggling to remember the details. As far as I recall, I didn’t write a single line of code today. I’ve been caught in a decision-making loop about loading Event data, which is the same topic I mentioned yesterday. It’s an intriguing issue, but I haven’t yet found a solution that feels right. This could actually be worth a full blog post on its own.
Regardless, I need to make a decision tomorrow, even if it isn’t perfect. Delaying progress over a single decision is a risky place to be, especially in a side project. Momentum is everything. With so much going on—especially now that my time as a digital nomad is wrapping up—I can’t afford to lose pace. Losing momentum could risk the entire project.
✅ DAY_055: Oct 30 2024
DONE: 51 minutes. I made a decision about data management.
I finally made a decision on how to handle event data management and implemented the solution right away. I opted for a hybrid approach.
The outcome is that on each page visit or refresh, the server component will call the API to retrieve the data. Before rendering on the client side, the app decides whether to serve data from the application state or directly from the server. I’m not fully satisfied with this solution, as it feels like I may have added unnecessary complexity to the code. Simply using server-side rendering (sacrificing some performance) or going fully client-side (sacrificing SEO) might actually be more sustainable in the long term.
The added complexity means I now have to maintain both client and server components and determine which to use each time. To put it in perspective: this setup now requires five files just to handle this solution, whereas a purely client or server approach would need only two, or three if I wanted to separate logic from content.
This leads me to two important topics that will need addressing soon.
First, I’m currently making each API call within the component that uses the data, which is fine for small apps. But even though this project could be considered a small app, I’d still prefer to maintain clean code standards by creating an API library. Instead of making direct calls, each component would simply call a function (e.g., GetEventData()
) to retrieve data. This would keep logic separate from UI code and make it easier to manage shared API calls, especially since I’ll need to access event data from multiple pages, like the homepage and the user profile.
The second topic is the separation of logic and UI components. In larger applications, I’ve typically used a structure with two parts: a ComponentUI
for layout and graphics, and a useComponentLogic
for the logic, such as data handling and user redirects. This approach helps keep the codebase organized and less prone to mistakes, which is essential as complexity grows. Although this separation isn’t immediately necessary for us—most of our components are simple and UI-focused—it’s something to consider for the future as the app expands.
Alright, this post got long again. Time to wrap up!
✅ DAY_056: Oct 31 2024
DONE: 45 minute. Needed some easy work today.
Today, my energy tank is completely empty, and I’m not sure why. As my time in North America draws to a close, I find myself looking forward to returning to Europe. In a few days, my wife will be flying home with our dog, while I stay behind to drive back to Canada and try to sell our camper truck. It’s not exactly the most uplifting plan, and it’s starting to weigh on me. My energy is low, my usual discipline has slipped, and my focus is all over the place. It feels like I don’t want to do anything—literally anything.
Because of this, I decided to stick to simple, low-effort coding tasks today. I worked on the layout for the event details page, which is a straightforward job for me. After a few minutes, I was able to get into a decent flow, something that would have been impossible with a more complex task that required heavy thinking. Otherwise, I would’ve ended up doom-scrolling YouTube, saving countless “important” videos that I’ll probably never watch. I’m guessing I have close to 1,000 of these videos saved by now—it’s like a secret diary of my shifting interests. Business, coding, running, video production—you name it, it’s all there, waiting for that mythical “someday.”
Here’s hoping tomorrow feels better.
By the way, I’m writing this from the steps of a church in Pasadena. And yes, I love The Big Bang Theory.
✅ DAY_057: Nov 1 2024
DONE: 51 minutes. Chilling while coding.
Do you notice anything different about the end of the month? For me, it’s always a hustle. I push hard to finish client work. Then, I tend to chill a bit in the first few days of the new month. Maybe that’s why I end up needing to hustle at the end of the previous month.
There’s another side to the end of the month. Another month is gone, and I look back at the work I wanted to do but didn’t. That always feels a little sad.
The event detail page is coming along. I am following the plan to work on event functionality. My first step is always creating a basic layout for the components. I don’t worry about detailed UI at this stage. I just made a rough design. There is a simple reason for this. The best way to test features is to put them in front of users. They need an interface, even if it isn’t polished. At this point, it doesn’t matter if the “Save” button is on the left or right for better conversion. What matters is that when users click the button, the data gets saved.
The event detail layout is done. I don’t know what I’ll do tomorrow. The problem is, that I am reaching a point where I need more than 45 minutes to make real progress. Right now, I can’t afford that time. The best-case scenario would be using a weekend to finish the entire event functionality.
✅ DAY_058: Nov 2 2024
DONE: 45 minutes. Easy evening coding session.
It’s Saturday, which means a long bike ride in the morning. I usually bike for about 4 hours or more. I aim for rolling terrain to keep a decent average speed and cover good mileage. My goal is around 80 km for these rides.
Today was different. We camped in the Los Angeles National Forest. I don’t understand why it’s called a forest. There isn’t much forest here, just mountains. There’s even a ski resort area. My long ride today was a climb from the park border to the top ski lift. It was a nice 1,500 m climb, mostly on asphalt.
Since most of my day was spent on the bike, I wrapped up my coding session in the evening, right before bed. I’m actually writing this in bed. I picked an easy task for tonight. I worked on the Congratulations page layout. This page is where the organizer lands right after creating an event. It’s practical for the user. We prompt them to review the event details, make any needed edits, and encourage them to share the event on social media.
Tomorrow, I’ll keep working on that.
✅ DAY_059: Nov 3 2024
DONE: 55 minutes. Upgrading Event Congratulations Page and Social Sharing
The goal was to finish the congratulations page and add a social sharing feature. The idea is simple: once a user sees their event, they might want to promote it. With social sharing, one click will take them to the chosen social media platform with a link to their event. They can add a short post or share the event as-is.
Social sharing sounds fancy and complex, but it’s actually straightforward. If you don’t need full control over every detail, there are plenty of libraries available to simplify this. The implementation should be a piece of cake. In our case, though, it became a headache.
Right now, there’s a bit of a loop with project libraries. Just so you know, the app is built with many different code pieces (libraries). Most of the time, I don’t have to touch them. They just help create a smooth development environment. Some libraries have been there since the start and some I installed to handle specific features.
This is usually where a DevOps developer would step in. These specialists ensure that all libraries and parts of the app work together. They make sure that new libraries don’t mess up existing ones. That’s how it works in larger development teams. Here, though, the development team is just me. My DevOps knowledge is pretty basic. I know tow things:
I don’t even know what I don’t know.
I can set up a basic Docker container—but don’t ask me to explain it.
The issue is that one of our libraries (ESLint) doesn’t work with another library’s version 9. It only supports version 8. But if I downgrade it to version 8, ESLint stops working with other libraries. Classic! With this error, I couldn’t install new libraries, so the quick social sharing feature turned into me losing hair in frustration.
Tomorrow, I’ll dive into the DevOps side and try to solve it.
✅ DAY_060: Nov 4 2024
DONE: 11 minutes. Dev ops, but really nothing.
Our truck broke down. My wife is leaving tomorrow for Europe and we are stuck in the desert.
Skip the entire day. It is evening. The truck is working again and I wasn’t given a chance to work today at all. Also, I only got 11 minutes done today. Today life got in the way of things. The important part is that the truck is working again and tomorrow we can make it for the departure.
✅ DAY_061: Nov 5 2024
DONE: 45 minutes. Done the Work, Without Thinking.
I did my work today. I kept my word, even though I didn’t want to. As I’ve said before, this log is both a record of my app development and a form of personal therapy.
I was surprised by how smoothly the DevOps work went today. Based on past experience, I expected a full day of frustration and pulling my hair out. But this time, it was a piece of cake. All I had to do was delete the node_modules
folder and one other file (I can’t remember the name) and change our package management system. I’m sorry for throwing in a few technical terms, but I’m not in the right place to explain it fully. Here are two key points:
node_modules
is a folder that holds all the pieces of code developers use in their projects. Most developers don’t touch it—it’s part of the “magic” that DevOps developers handle.The other file is a simple list of the packages and libraries we use in the project.
When I talk about package management, it means we use a tool that goes through our list of packages and libraries and installs them all. Without this crucial part, the project wouldn’t work. I wouldn’t be able to use any Next.js or React.js libraries. There are tons of other pieces, but you get the idea.
To wrap this up: today, I switched our package manager from NPM to Yarn. It was recommended during my research, as Yarn is said to handle dependencies better. In my case, it worked perfectly, and I was done in 10 minutes.
The rest of the time, I worked on the social sharing feature for our events. It’s still a work in progress, but I think I’ll finish it in tomorrow’s session.
Now, for the therapy part of this log. After almost six months of traveling, our road trip is coming to an end. I felt it more than ever today. Marci and our dog boarded a plane from Los Angeles to Munich. You’d think that after six months of being together every single day, I might feel some relief at being alone. But it’s the f*cking opposite. Watching our dog, Espresso, being carried away in her crate to who knows where left me feeling empty. Even now, with her plane in the air for over an hour and knowing she’s probably chilling and asleep, I still have that little itch in my head: Is she okay? Is she cold? Is she scared?
Saying goodbye to Marci was even harder. For the last six months, we shared every day in a tiny camper. When she walked toward security, I wanted to drop everything and get on that plane with her. I was so close to crying—not just out of sadness, but from the realization that we actually did something fucking amazing together. We traveled North America for six months—something I dreamed about for who knows how long and thought was impossible. Now that it’s almost over, I just want to sit down with her, drink a great coffee, and reflect. It’s been go, go, go all the time, full gas. Now, I just want to pause and think about what a f*cking great thing we did. And the best part? We did it together, and it was great. On the next trip, I’ll be honored to do it with her again.
For me, the trip isn’t quite over. I’m meeting a friend in Red Rocks, Nevada, to spend 10 days climbing. After that, I’ll start driving north, stop in Livermore for a few days, and then continue to Squamish. I’ll have to sell our home-on-wheels and then fly home.
I’m so damn happy to be alive, and even happier that I have my girls to be alive for.
✅ DAY_062: Nov 6 2024
DONE: 53 minutes. Failed to finish.
Yesterday, I was set to finish the social sharing feature. Well, that didn’t happen today. I was working on it, but there’s something I can’t figure out. Despite the documentation being clear and the setup looking simple, it’s not coming together. This is one of those times where my optimism about time estimates feels risky. I initially thought it would only take ten minutes, but there’s always a chance that hours could pass, leaving me frustrated and questioning why I’m doing this work. It’s the kind of thing that makes me feel like an idiot in hindsight. It happens to everyone, This is exactly why I hate giving work estimates to clients.
For every project I take on, I try to offer a solution broken into small, manageable steps. That way, if the client isn’t satisfied with the direction, they can call it off without it costing a fortune.
Back to social sharing. I suspect the issue could be that I’m testing it locally, which means the URL I’m trying to share is local too. I tried pushing the code to the test server, but there’s an error in the code that’s blocking the project from building. Right now, I just don’t have the energy to sort it out, so this “simple” feature will carry over to the next session. Again.
Update: I am using ChatGPT to fix my grammar and before it gave me back the revised version I had to test the idea about the local version. It was correct. I tried to share a random YouTube video and it worked. How long do you think it is going to take tomorrow? I think 10 minutes. :D
✅ DAY_063: Nov 7 2024
DONE: 50 minutes. Social sharing.
A kind of miracle, well almost a miracle happened today. I was almost finished with the feature in 10 minutes. It took me 50 but the baseline is done. That is all from me today.
✅ DAY_064: Nov 8 2024
DONE: 70 minutes. Set up a challenge and finish it.
I hate unfinished work. It’s not that I’m great at finishing every single task, though. That’s actually my wife’s strength. I’m more of a planner—I can see consequences, anticipate different stakeholders, and factor in potential screw-ups along the way. However, once I hit 90% completion, I tend to lose interest. The strange thing is, I still can’t let it go; it just stays stuck in my mind, nagging me to finish. It’s like a weird form of self-torture.
Today was different, though. I set up a clear challenge, worked on it, and finished it all within a single coding session. Best feeling ever.
Until now, it was tricky to update our app’s production version. Technically, I could, but it would’ve been complicated to test properly. The problem was that all my work in progress for the event feature was live on the test server. The best practice is to push new features to a test environment and then to production, but that comes with its own issues. If work-in-progress is on the test server, and I want to push a final version live, the unfinished stuff could get pushed along with it.
So today, I built a simple authentication feature that limits access to only me for any work-in-progress pages. Basic, but it works for now.
Since I got that done, I’ll be able to push a new version online tomorrow with a few minor fixes and updates. I’m stoked.
✅ DAY_065: Nov 9 2024
DONE: 46 minutes, New live version.
The new version is live! Not much will change for users right now. I’ve implemented GTM scripts on the app and made a few minor fixes. I also tested the basic authentication system, and it’s working smoothly. Starting today, we’ll be able to release new versions whenever we want.
✅ DAY_066: Nov 10 2024
DONE: 45 minutes. Cookie hunt.
Today’s session was a strange one. Before I got started, I opened Slack and found a bunch of messages from Thomas. Our goal is to make a site that’s clear and accessible from every angle. It sounds a bit crazy, but I’m on board.
We want to make the site accessible for everyone—not just by meeting the basic standard of adding alt attributes to images, but really making it usable for all. We also aim to make it fully secure, though I’m not tackling that part just yet. And finally, we want to handle cookies strictly by the law. We’re aiming to do even better than the government institutions that set these regulations.
With this in mind, I spent the whole 45-minute session hunting down cookies that are hurting our compliance score. Easier said than done! I know there are cookies misbehaving, but I don’t yet know which ones or where exactly to find them.
Enough about that, though. Personally, I find this topic pretty boring. I’m near Las Vegas in Red Rock, just got back from climbing, and my friend Ondrej is waiting for me to head out. Catch you tomorrow.
✅ DAY_067: Nov 11 2024
DONE: 45 minutes. New version and future planning.
Right now, Thomas is fully immersed in the cookie compliance work, making sure we’re set to be the best website in the Czech internet space. He’s doing an incredible job, and we’re only a few issues away from calling it a success.
The last few days, though, I’ve been sitting down to start my sessions with an odd feeling of not knowing what to tackle next. It’s a new experience for this project—up until now, I always had a clear goal and a good sense of direction. Recently, it felt like I was just going through the motions without making much real progress.
So today, I decided to switch things up. After putting a new version live, I didn’t code anything else. Instead, I spent the session reviewing the in-progress features and creating a list of tasks for myself. I’m hoping this will help me stay focused and make real progress over the next few sessions. Now it’s all about event features and refining the testing process.
✅ DAY_068: Nov 12 2024
DONE: 45 minutes. This week si tough.
This week is tough. I'm in Red Rock Canyon, one of the biggest rock climbing spots in the U.S., especially famous on the West Coast, where climbing is huge. My friend came down from Canada, and the main goal this week is all about climbing. That’s why these posts are short, and I'm not seeing the same level of progress as before.
My day usually goes like this: I’m up around 6 a.m., trying to fit in about an hour of client work. Then, we’re out climbing all day, getting back to the camper around 6 or 7 p.m. By the time we eat, it's close to 8:30, and I’m wiped out. Today was no different, except we left the campsite by 7 a.m., so no work got done in the morning.
I’ve been picking some easier tasks for now. Today, I implemented a very basic 404 page. Now, whenever a user tries to access a URL that doesn't exist, they’ll see a friendly message and get redirected back to the homepage.
✅ DAY_069: Nov 13 2024
DONE: 45 minutes. Working on the backend.
After three days of constant climbing, today is a rest day. As always, I searched for a nice library to work from. Libraries are the perfect spots to work on the road—they have a good vibe. Being surrounded by so much knowledge always feels meaningful and gives me a sense of respect for the place.
Libraries here on the West Coast usually open at 10 a.m., and Las Vegas is no exception. University libraries open earlier, but they’re harder to access due to limited parking. With a late 10 a.m. start, I try to find a nearby coffee shop to get some work in beforehand. Today, I found a coffee shop combined with a hair studio. I’d seen this concept in Prague during my last visit and thought it was a clever idea.
Most of my day went to client work. In the evening, I managed to work on Good Networking. I continued on the Event feature, and once again hit the 45-minute limit. The work is getting more complex, making it hard to see real progress in just one session. Today, I improved the Event schema to capture all the needed information and updated the congratulations page for when an event is created.
✅ DAY_070: Nov 14 2024
DONE: 45 minutes. Another late evening session.
Another day here in Red Rocks, and once again, I’m wrapping up my session late, after a full day of climbing. My eyes are barely staying open, and honestly, all I want to do is sleep.
Today, I tried to figure out image uploading for our events. It’s still not working as expected, but I’m close. I think with one, maybe two more sessions, it’ll be up and running.
Tomorrow, I’m aiming to get the session done before climbing.
✅ DAY_071: Nov 15 2024
DONE: 57 minutes. Coding before climbing.
Today’s coding session was done before climbing, and it made a huge difference. I wasn’t half-asleep while working, and the energy boost was clear.
Image uploading for events is now functional. The last piece clicked into place at the start of the session. It’s not a complex feature, but there’s still more to refine—like resolution and format restrictions, among other details.
The rest of the session was spent planning client-side and server-side data validation. That’s what I’ll focus on moving forward, and I’ll share more about it tomorrow.
✅ DAY_072: Nov 16 2024
DONE: 50 minutes. Quick work on event attendees
Today marks the last day of my climbing trip to Red Rock. Tonight, I said goodbye to my friend Ondrej as he headed back to Squamish. It’s been an intense and fun week of climbing, and I’ve enjoyed every moment. Now, with the trip behind me, it’s time to stay in Las Vegas for a few more days and refocus on work with renewed discipline.
I’m currently in the middle of the Event Feature, taking it one small step at a time. Time to get back into the groove and make real progress!
✅ DAY_073: Nov 17 2024
DONE: 45 minutes. Down the rabbit hole.
Today, my thoughts drift more toward personal reflections than development work. Life often feels like a series of decisions, teetering on a thin line between good and bad. Sometimes we lose a little, sometimes more. Other times, we win. Yet, in the grand scheme, it doesn’t seem to matter as much as we think it might. The truly fascinating part of this "game" we all play is that only a handful of decisions ever stand out in our memory. The challenge? We rarely know when those pivotal moments are happening.
The only way forward, then, is to stay present and pay attention. This is easier said than done. Being fully present—really seeing, really listening—is a skill that's often drowned out by the endless stream of information we consume every day. Sometimes, the best thing you can do is simply sit quietly, do nothing, and let your thoughts wander freely.
I’ve been influenced for years by Adam Gebrian, an exceptional Czech architect promoter and thinker. Whenever I hear him speak, I’m reminded of the importance of looking deeper—of seeing the layers beyond what’s immediately visible. He embodies critical thinking in action. One of his beliefs resonates deeply with me: he hates vacations. It’s a sentiment that's tricky to explain in English, as the Czech word for "vacation" has roots in "asking permission." The idea of needing permission to take a break or do something outside of work has always bothered me.
That’s why I never take vacations in the traditional sense. It’s also why I’ve been freelancing since I left school. The thought of asking someone for permission to live my life feels unnatural. For that same reason, I doubt I’ll ever work for anyone else—I’d make a terrible employee.
By the way, today is a great day of celebration for the Czech Republic. Value your freedom. It is among the most valuable things you ever own.
✅ DAY_074: Nov 18 2024
DONE: 0 minutes,
Tough night. Before I could finish my coding session tonight police came and kicked me out of my camping spot. Now I am in a new one and going to sleep. This day must come. I am actually surprised it was after 73 days when I just couldn’t do the coding session.
✅ DAY_075: Nov 19 2024
DONE: 60 minutes. Do the hard thing easy.
I continued working on the app today. Thomas had a few ideas for enhancing the app's security and accessibility. We’re aiming for perfection with this project, partly because it’s a great learning opportunity for both of us. But sometimes, I can’t help but laugh at my own ignorance.
Take today’s task, for example: adding a security.txt
file. In simple terms, it’s a file that contains our contact details and instructions for reporting vulnerabilities or issues with the app. The file has to follow specific rules—it must look a certain way and be placed in a specific folder.
This was my first time doing it, and it seemed like an easy task, especially since Thomas had already prepared the file. All I had to do was place it in the right folder and configure some redirects. Easy, right? Well, not for me.
I spent 20 minutes overcomplicating things, trying to integrate the file into our routing structure. Nothing worked, and I started to feel frustrated. Then it hit me: the solution was far simpler than I thought. All I needed to do was place the file in the public folder. That’s it. No extra steps, and no complex configuration. Then it took 5 minutes.
It’s funny how sometimes, the simplest solutions are right in front of us, yet we insist on making things harder than they need to be. Today, at least, I was reminded that not everything has to be complicated. Sometimes, stuff just works out.
✅ DAY_076: Nov 20 2024
DONE: 90 minutes. Perfection Blocks Progress
We’re striving for perfection with our web app, but there’s a real danger in that. Once you get good at something, it’s easy to lose perspective—to focus so much on the details that you miss other important areas. Our app is a prime example.
We care deeply about user data. So deeply that users still can’t sign up because we haven’t resolved all the security issues. Before today, we were at 80% on a security scale of 100%. Without context, 80% might not sound impressive, but here’s the kicker: that score puts us among the top of all Czech institutions we’ve tested. It’s both amusing and infuriating.
We even outscored the GDPR institution itself—the very entity that sets the standards and fines businesses for non-compliance. How can they enforce rules they don’t meet themselves? It’s absurd. Ok, to be absolutely clear and fair. Scoring a low score doesn’t tell 100% that your data is in danger. It can mean two things.
Your data is taken care of poorly.
They are using custom cookies that the consent manager does not recognize. In that case, it will throw an error and lower the score.
Today, we aimed for the elusive 10/10 score. Instead, during development, the final build plummeted to the bottom of the scale. The experiment failed, and we’re back at 8/10. It’s frustrating but it might just be our ceiling for now.
The problem lies with our GTM (Google Tag Manager) script. The test flagged it for running without consent. Ironically, we’re using GTM to run the consent bar itself. When the script changes to follow consent requirements, the consent bar doesn’t run, leaving users unable to give consent.
Strangely, the consent bar did run, which defies logic because it shouldn’t have. Yet, even with this "improvement," our score dropped further. Why? I have three possible explanations:
Programming Error: I might have edited the script incorrectly. The GTM could still be running without consent, breaking the logic.
Build Issue: Perhaps the production environment retained old code, though I checked and this wasn’t the case.
Approach Change Needed: We may need to run the consent bar first, outside GTM, and then trigger GTM with consent, ensuring all scripts comply.
Perfection is proving to be a paradox. Sometimes it’s just another word for overcomplication.
✅ DAY_077: Nov 21 2024
DONE: 55 minutes. Security headers.
I am dipping my toes into a security header. In simple words trying to make our app more secure. This is outside of my area of expertise. I always work close to the user and I leave the magic to guys who understand the real programming.
So far it is very interesting. So far I am feeling that I am breaking more stuff than improving.
✅ DAY_078: Nov 22 2024
DONE: 49 minutes. Security Headers To Be Continued
Another session dedicated to security headers, and yet again, not much success in solving the problem. However, even without clear results, I can see progress. At the very least, I’m discovering what doesn’t work.
Here’s what I’ve figured out so far:
I attempted to configure headers in
next.config.js
, and it seemed promising.Then I discovered that Vercel automatically applies certain headers, such as
Strict-Transport-Security
. This complicates things because the headers I’m adding don’t seem to take effect.
There is a potential workaround: I can block Vercel's default headers and define them manually. But here’s the catch—I haven’t found a definitive list of the default headers Next.js projects use or a clear list of what will be overridden when I block them.
Right now, I’m stuck between two approaches and unsure which path to pursue next. It’s a frustrating puzzle, but I’ll keep chipping away at it.
✅ DAY_079: Nov 23 2024
DONE: 56 minutes. Deep in the Rabbit Hole
Finally, after several sessions of stagnation, I made real progress—and it felt amazing. That moment of passing our URL to the testing tool and getting a better result than two days ago? Incredible. Seeing visible progress again is a huge relief.
I managed to move our web app from a D grade to a B grade in security testing. There are still two more headers to implement, but it’s a solid step forward.
Before
After
The next big task is implementing the Content Security Policy (CSP). In simple terms, CSP will allow us to whitelist specific sources and content that can load scripts into our app. But this isn’t a quick fix. It requires identifying every source and piece of content we load, and then manually whitelisting each one. It’s a complex and time-consuming process.
On one hand, it might make sense to tackle CSP now while the app is relatively simple—doing it later when there are even more sources will only make the task harder. On the other hand, I’m not sure if I’m ready to dive into that yet.
I’ll decide tomorrow where to go from here.
✅ DAY_080: Nov 24 2024
DONE: 45 minutes. Security Rabbit Hole
The hole I’m digging into the world of security keeps getting bigger—and honestly, it’s a lot of fun. Right now, it’s relatively easy to achieve a high-security score because our app is essentially a static site with minimal interaction. The real challenge will come when we start adding features while keeping that score high and maintaining a fast development pace.
Today, I focused on Strict-Transport-Security (HSTS), a fascinating yet complex security principle. In short, it protects users from unknowingly using non-encrypted communication between their browsers and servers.
Here’s how it works:
Without HSTS, if a user tries to access a site over non-encrypted HTTP (e.g., typing facebook.com
instead of https://facebook.com
), their request is vulnerable to interception. A malicious actor could hijack this non-encrypted communication and easily steal sensitive data, like login credentials.
With HSTS, our app never answers non-encrypted requests. Instead, the browser automatically upgrades the communication to encrypted HTTPS, making it much harder for attackers to intercept anything.
The Catch:
HSTS comes with its own risks. If a third-party service on our app doesn’t use encrypted communication, it will be blocked. Worse, if we misconfigure the policy, users could be locked out of our app entirely. Since HSTS uses a timer, a bad configuration could mean users are blocked for up to a month—or more.
The Plan:
For now, we’re testing HSTS with a 5-minute timer. Once we confirm it’s working smoothly, we’ll gradually increase the duration to 24 hours and eventually up to 1 year. It’s a cautious but necessary approach to avoid any big mishaps.
I have a great news for everyone. After the last few sessions, I wasn’t happy doing anything. But the last two sessions were a piece of cake and I feel the wave of big progress is coming again.
✅ DAY_081: Nov 25 2024
DONE: 46 minutes. Writing While Waiting for Build
I promise this will be the last post about security for a while—or at least I hope so. This phase of development feels very different. There’s a lot of studying, researching, and experimenting, but very little actual coding. Security is a sensitive area where you need to tread carefully. Sure, tools like AI can suggest security headers, but implementing them blindly can cause long-term issues you might not even notice immediately.
Again, today’s session was mostly about research. I spent around 30 minutes reading and learning, and the last 15 minutes writing the few lines of code I needed. Now the changes are being deployed, and I’ll test them on both the staging and production servers. The final step will be running the site through our security testing tool to see if we’ve made improvements.
I’ve also been thinking about adding automated testing. It’s clear that as the project grows, this will become essential. But that’s a topic for another day.
For now, I’m just waiting on the build and hoping the progress keeps moving forward!
✅ DAY_082: Nov 26 2024
DONE: 45 minutes. Fewer Errors Mean a Better App—or Do They?
There have been a few client-side errors in the app for as long as I can remember. These errors don’t block any functionality, but they’ve always bothered me. Each time, I’d promise myself, “I’ll fix them next time.”
Today felt like the perfect chance. I had to upgrade an image component because of a Next.js update. Simple enough—or so I thought. I couldn’t have been more wrong. After the upgrade, the site was riddled with new issues. Let me paint a picture of how things looked:
Instead of fixing the old errors, I spent my time fixing the new ones I had created.
In the end, I managed to resolve the new problems and get everything back in working order—except the original errors. Those remain untouched.
I’m signing off as a happy programmer who’s just trying to stay sane. Time for a swim to clear my head!
(And yes, I’ll fix those old errors... someday.)
✅ DAY_083: Nov 27 2024
DONE: 45 minutes. User Authentication.
Yesterday, I took some time to assess the features I need to build—a list of “mountains” to conquer. Right now, there are at least ten mountains ahead of me, all related to users and events, the app's core functionality.
It became clear that without proper user authentication, session management, and authorization, I couldn’t make meaningful progress on event development. I’ve reached the point where user data needs to be integrated into events, and that’s impossible without focusing on the user story first.
The challenge? It feels complicated—not inherently, but given my current state.
I’m in the U.S., nearing the end of a big road trip. My wife and dog are already back home in the Czech Republic, while my job is to wrap things up in North America: sell our truck and camper in Canada and head home. Managing the motorhome solo is tougher than I expected. I’m driving over four hours a day, juggling client work, trying to stay active, and then doing more driving in the evenings. It’s exhausting.
This workload has left me drained, and focus—like what’s needed for user authentication—is out of reach right now. What I can manage is simpler work, leaning into my strengths to make progress where it’s easiest.
So, I’ve decided to pivot back to front-end development for now. Yes, it’s not the logical order. Backend functions should be tackled first, tested, and then the UI finalized. But honestly, not much in my life is making sense at the moment.
Report over. I’m heading north again—at least 50 more miles tonight to reach a rest stop where I’ll spend the night.
✅ DAY_084: Nov 28 2024
DONE: 45 minutes. It works
Working on easier stuff works much better for me. Following the UI design and creating layouts is much easier for me and I can do it even now, when I am full of there stuff. I am satisfied with this solution for now.
✅ DAY_085: Nov 29 2024
DONE: 45 minutes. First Thing in the Morning
It’s been a long time since I started the day with a coding session. The difference is striking—diving into the work fresh and ready makes it so much easier to focus and make progress.
The chaotic routine of constant driving and juggling work is finally behind me. I’ve made it to Canada, safely arrived in Vancouver. Now, my priorities are simple: sell the truck, book a plane ticket, and head home.
After this long journey, the thought of being back home feels incredible. I can’t wait.
✅ DAY_086: Nov 30 2024
DONE: 45 minutes. Waking Up at My Friend’s House
The best part of staying with a good friend? Waking up in a warm apartment. No freezing mornings today, so I kicked things off with a coding session.
I’m still focused on the profile page. Progress is steady—the rough UI is done, and the edit functionality is mostly finished. It’s not perfect, but it’s good enough to move forward for now.
Tomorrow’s plan? Dive into client-side data validation.
✅ DAY_087: Dec 01 2024
DONE: 0 minutes.
There is no reason, why I didn’t do a coding session today. I simply didn’t.
✅ DAY_088: Dec 02 2024
DONE: 0 minutes.
There was nothing I did today. There is no important reason.
✅ DAY_089: Dec 03 2024
DONE: 48 minutes. Creating profile creating UI.
There is a lot going on in my life right now. Moving back to Czech Republic is showcasing much more stressful than I could have imagined. But today I believe the situation is starting to turn around again. I am ready to what ever will come at me.
✅ DAY_090: Dec 04 2024
DONE: 53 minutes. Profile Creating UI
Another day, another step forward. It’s incredible how things can shift in just a few days. Not long ago, coding felt like climbing a mountain—I battled through a couple of sessions, and twice I just gave up. Looking back, I kind of regret those pauses, but what’s done is done. Onward!
Lately, I’ve been focusing on the profile-creation UI. Progress has been steady and efficient. Our long-term plan is to enable profile creation by pulling data from users' social media pages. However, that’s for later. For now, I’m implementing a straightforward sign-up process where users provide minimal information:
Name
Optional photo
Email (to send the sign-up link).
That’s it. We’re intentionally collecting only what’s essential for the app to function properly. No unnecessary data—just enough to get users going quickly and securely.
Adios!
✅ DAY_091: Dec 05 2024
DONE: 45 minutes. More Progress on Profile Creation
Today is a day of celebration in the Czech Republic, a reminder that Christmas is near—a time for rest and togetherness with family. I hadn’t thought about it until now, wrapping up this evening’s coding session and blog entry.
As my time in Canada comes to an end, I find myself reflecting. It’s been exactly a month since my wife flew from Los Angeles to Munich to bring our dog back to Europe. She’s been setting up our life at home while I’ve been here tying up loose ends. It feels surreal—closing the Canadian chapter is exciting but also makes me a little anxious.
On the development front, I’m steadily advancing the user creation story. "Finishing" might be a stretch, but progress has been consistent, and for the first time, I can clearly envision the final result. It feels tangible now, like something I can confidently move toward every day.
Looking forward to what’s next!
✅ DAY_092 Dec 06 2024
DONE: 48 minutes – Progress and a Persistent Bug
Today’s session focused on enhancing the profile setup by adding a phone number field and starting work on LinkedIn integration. Things were progressing smoothly until the end when I ran into a bug. The global state isn’t updating when the LinkedIn URL is submitted.
✅ DAY_093 Dec 07 2024
DONE: 45 minutes – Reflecting on AI and Coding Efficiency
Today’s session left me reflecting on a video I watched about AI’s influence on the future of coding. It resonated with me because, while I don’t actively follow every AI research development, the big ideas usually find their way to me. The AI hype is everywhere, but separating fact from exaggeration can be exhausting. Many headlines feel incomplete—truthful in part, but misleading as a whole. Avoiding them spares me some mental gymnastics, but I also miss out on new perspectives and inspiration.
The video referenced a study that challenges the AI-in-coding narrative. Apparently, developers relying heavily on AI make more errors and require more commits. This makes sense—more bugs lead to more fixes. While AI undeniably accelerates certain tasks (I use it constantly), it’s easy to see how over-reliance might erode foundational skills.
Take today’s task: I worked on a component allowing users to link their LinkedIn profiles. Initially, I didn’t think much about scalability—just built the component with AI’s help. It worked well, but once finished, I realized users might want to add links to multiple social media platforms. My options? Build separate components for each or refactor the LinkedIn component to be more generic. Naturally, I opted for refactoring. AI sped up this process immensely, handling renaming and restructuring with ease.
But here’s the catch: my reliance on AI at the start meant I skipped a proper plan. I rushed into implementation without considering the bigger picture, knowing AI would speed things up. While it saved time initially, it also created extra work later.
This experience highlighted a potential pitfall: AI makes development faster but can also lull us into skipping thoughtful planning. It’s a lesson I’ll keep in mind as I continue building.
✅ DAY_094 Dec 08 2024
DONE: 54 minutes. Profile creating.
Finally, there was a good session. It took me forever to talk myself into getting started, but once I did today, it went very well.
After a long time, I could focus on what I was doing and again I made great progress.
✅ DAY_095 Dec 09 2024
DONE: 47 minutes. Hit the Wall
Today was a reminder of how coding hurts. A few days ago, progress was effortless; now, I've hit a wall. The challenge? Digging into our semi-working authentication implementation from six months ago. Back then, it was functional with edge case issues. Now, with major app changes, it needs a thorough review.
The tricky part is realizing the limits of AI assistance in this context. Without a solid grasp of the authentication library we used, I can’t fully trust AI suggestions—there’s a risk it might guide me off track. This means going back to basics: carefully studying the documentation and scrutinizing the code line by line.
I’ll see if I can find a way to leverage AI effectively in this process, but it feels like this stage requires more manual work. It’s not glamorous, but it’s necessary to move forward. I’ll update you on my progress tomorrow.
✅ DAY_096 Dec 10 2024
DONE: 46 minutes – User Authentication
As I warned myself yesterday, I spent the entire session digging into user authentication using the next-auth
library. It turns out this part of the code was written more than a year ago. Oh my lord, this project is taking a long time!
Still, I got to authentication at the right time. There’s been a major update to the library, so now is the perfect moment to review the functions and upgrade to the new version.
Currently, the app isn’t working—there’s an error I don’t yet know how to handle. Don’t worry, though; this only applies to my local version.
✅ DAY_097 Dec 11 2024
DONE: 45 minutes – Breaking and Even More Breaking
Since I started working on user authentication, it feels like I’ve broken more than I’ve fixed. Today was no different. I began by focusing on user authentication and updating dependencies for the required library. But then, I made a critical mistake: listing all the dependencies. Seeing those yellow and red warnings? It’s never a good sign. It usually means a long list of major and minor updates that will need attention sooner or later.
A disciplined and organized developer would probably say, “Today’s task is user authentication, so I’ll focus solely on that. I’ll give myself two more future sessions to finish this part, then plan the dependency updates.” Imagine looking ahead to Saturday: user authentication is fully functional for all providers, and with a little luck, it’s linked to the profile creation process. I’d know how to handle new or returning users, redirecting them either to profile creation or their profile page. A good plan, right?
But my reality is a little different. Drawn to the yellow and red warnings like a moth to a flame, I started upgrading libraries and ended up in a complete mess. Why? Because updates never go smoothly after such a long gap. Some libraries have changed so much that the processes I used months ago now need to be rewritten. These are called breaking changes, and now I’m stuck with them. I have to figure out which libraries caused the issues and fix them.
So, which reality would you choose? I wish I were the developer in the first reality. Unfortunately, I’m firmly stuck in the second one.
✅ DAY_098 Dec 12 2024
DONE: 45 minutes. Important and boring research.
I am leaving Canada tomorrow. I have a crazy day ahead of me. Before I leave, I am meeting friends for a beer.
I found the problem with the app—why it is broken? I might write more about it when I return from the pup or tomorrow on the plane.
I am back from the pup. I won’t write about it anymore. Not today.
✅ DAY_099 Dec 13 2024
DONE: 60 minutes – Hunting for a New State Management Library
It seems like the Recoil state management library is no longer supported—or at least that’s how it feels from all the forums. So, I’m now hunting for a new library to replace Recoil. The main contenders so far are Jotai and Zustand, btw both of tas amazingly cute website.
I’d love to write more about this process, but I’m short on time. I have a plane to catch. See you back in Europe!
✅ DAY_100 Dec 14 2024
DONE: 45 minutes – Next.js Research
How typical of me—today’s session happened on a plane. I came prepared and used some of the time to watch tutorial videos with tips and tricks for Next.js. I quickly found a few features and design patterns I’m excited to try out.
Today is a special day for several reasons:
It’s the day I’m heading home from my long stay in Canada. I’m finally returning to Europe.
It’s the 100th day of this blog and my daily coding sessions.
And, last but not least, I’m turning 30 today.
Each of these could be a separate blog post, but I’ll leave it here for now.
Change of plans—I got home and I’m completely exhausted. Talk to you later.
✅ DAY_101 Dec 15 2024
DONE: 45 minutes – Continuing with State Management System Update
The contest between Jotai and Zustand had a clear winner: Jotai. In the end, the decision was straightforward. I needed something similar to Recoil, allowing for a smooth transition while also giving me the chance to rethink the original solution.
There was one decisive difference between the two libraries:
Zustand is a top-down state management library, which excels at handling global states like themes, web sockets, or similar use cases.
Jotai, on the other hand, is bottom-up oriented, relying on small, modular "atoms" to manage the state of individual components.
In my case, I’m primarily managing the state for pages, events, and the profile process. It became evident that Jotai was the better choice for these needs.
It’s a bit disappointing, though, as I was looking forward to trying out Zustand. I really like how structured that library is. Maybe I’ll get a chance to use it in the future for a project where global state plays a bigger role.
✅ DAY_102 Dec 16 2024
DONE: 45 Minutes – Changing the State Management System
Looking back, I’m glad I was forced to switch from Recoil to Jotai at this point in the project. In reality, it only set me back two or three coding sessions. If I had waited until later—near the end of the project—it would have been much worse. At that stage, there would have been hundreds of files to update, not just thirty.
The migration is now complete, and everything seems to be working smoothly. With that done, I’m shifting my focus back to user authentication. However, I’m currently stuck on getting the Google provider to work. I have no idea why it’s not functioning properly, but that’s where my attention will go next.
✅ DAY_103 Dec 17 2024
DONE: 45 Minutes – Google Authentication Works
After spending almost the entire session in frustration, I managed to figure out the issue in the last 15 minutes. During that time, I was able to fix all the problems and get the Google provider working.
Interestingly, the problem wasn’t directly related to the authentication itself. It turned out that the Next.js update had introduced a change in the project structure. In older versions, the correct way to store API routes was in the pages/api/
directory, where I could define all the necessary routes. However, the new structure uses app/api/
with updated routing.
Developers at Next.js were smart enough to include backward compatibility, but the documentation for Auth.js is correctly written for the latest version of Next.js. It didn’t occur to me until later in the session that I was referencing documentation that no longer aligned with my project’s structure.
At this point, I had two choices:
Stick with the older structure: I could have found a way to use Auth.js with the older
pages/api/
folder structure and routing. However, this would likely create issues later on, especially as documentation for older versions becomes harder to find. While libraries often retain access to older documentation, I didn’t verify if that was the case here.Upgrade to the new
app
routing structure: This required moving files around and renaming most of them. While renaming is quick, the bigger challenge is refactoring the API routes. It wasn’t just the routing that had changed—API call handling had also been updated. Redoing work that was already done will be a bit annoying, but there are two major benefits:First, rewriting the data handling code myself will give me a better understanding. The original implementation was written by the previous developer, and I will have a chance to write it myself.
Second, I’ve been putting off server-side data validation for some time. Refactoring will give me the perfect opportunity to implement it.
To sum up, I made progress with user authentication. Getting Google authentication to work was the first—and likely most important—step. I’m hopeful that implementing the other providers we have planned will go much faster.
✅ DAY_104 Dec 18 2024
DONE: 45 minutes. New piece of UI.
It is not finished, but I made great progress on the sign-in page in one session. I have also started working on more providers than just Google. To start we will use Google, Facebook, and email magic links. Later we will add more social media if it asks for, and Seznam sign-in.
Tomorrow I will be working on the email magic link sign-in.
✅ DAY_105 Dec 19 2024
DONE: 45 Minutes – Magic Email Links
After a few very successful sessions, I’ve hit another bump in the road. Implementing magic email link sign-in wasn’t as straightforward as I’d hoped. Well, to be fair, the implementation itself is straightforward—but not in my case, of course.
The issue stems from my update to Next.js, where I also transitioned to the app router, which runs on the Edge runtime. Please don’t ask me to explain the Edge runtime—I’m still trying to fully understand it myself. The critical point is that the provider for magic links (Nodemailer) doesn’t work on the Edge runtime; it only works on the Node runtime. Again, don’t ask me why. What matters is that I’ve encountered a compatibility issue that needs to be resolved before I can proceed.
It’s been a hectic few days. I’m pushing hard to finish all my client work so I can take a proper break from December 22nd through January 2nd—or longer if possible. I’m really looking forward to some downtime and the chance to plan for the upcoming year.
And yes, I know I promised to write about a few topics in earlier posts—it’s coming, I promise.
✅ DAY_106 Dec 20 2024
It was not the most productive session in the world. I am still stuck on the same problem. The easiest solution might be to just change the email provider. One that will not have the same error. The main problem is that I don’t entirely understand the problem and where I should look to fix it. Most of today’s session I spent reading about this problem and still I don’t have much clarity on this.
I will continue tomorrow.
✅ DAY_107 Dec 21 2024
DONE: 45 minutes. Getting old, but still dealing with email links.
It is 4:45 in the morning and I am starting this session. In a little over an hour I have to be done, post this blog, and leave for a volleyball tournament I am attending. I am considering start writing about my daily life, cause there isn’t much happening in the app lately. For the most part, I am dealing with the same problem session after session.
Today I made a little progress. Next.js documentation is very limited in terms of dealing with wrong stream runtimes. It basically only tells you to avoid libraries that require unsupported ones. I guess there isn’t any workaround. The progress from today is that I will be switching the email provider. For now, the winner is Resend cause it has a free tier of up to 3000 emails a month. That will be more than enough for the start.
I want to post this before I leave but, there is no time. I have to post this in the evening. See you.
✅ DAY_108 Dec 22 2024
DONE: 45 Minutes – Avoiding the Problem
I started reading a new book by one of my heroes, Tomáš Šebek. If there’s anyone who can articulate my feelings and thoughts without knowing me, it’s him. Šebek is a surgeon who works in a hospital but has spent the last decade repeatedly volunteering for humanitarian missions with Doctors Without Borders.
His latest book, Objektivní nález (Objective Finding), reflects on experiences from his childhood and how they’ve influenced his adulthood. A particularly powerful aspect of the book is his recognition of how he unintentionally passes on his past experiences to his children in negative ways. Each chapter pairs a story from his childhood with one from the present, followed by a reflection on what he values and how he wants to behave differently. At the end of each chapter, he offers a sort of apology to his children for what he didn’t do or say but should have.
In one part of the book, he describes a moment during surgery where he faces a critical decision—one that could either save or kill the patient. He identifies two types of surgeons in such situations. The first group avoids the real problem, "cutting around" it and pretending to work while accomplishing nothing. The second group makes a decisive move, cutting directly to the bone—either solving the problem or making an even bigger mess.
Today, I found myself in the first group. I was cutting around the real problem I needed to solve, spending time but not making meaningful progress.
I want to be in the second group every day, in every situation I face.
✅ DAY_109 Dec 23 2024
DONE: 45 minutes. I don’t know.
I am still stuck on the same problem. Honestly, I am not even trying too much. Christmas mood is upon me and I don’t have much drive to do anything.
✅ DAY_110 Dec 24 2024
DONE: 0 minutes. Christmas Day.
In the morning I was considering doing a coding session on Christmas Day. I decided to do it only if there was a time window to sit down quietly and focus without forcing it. Of course that didn’t happen. In my family, Christmas is a big event. Even though we are not religious, we all come together and spend this wonderful time together.
In the end, I decided to spend this time with my loved ones and skip the coding. Tomorrow I will be back on track.
Merry Christmas and happy holidays.
✅ DAY_111 Dec 25 2024
DONE: 0 minutes.
The holiday atmosphere is hard upon me. I spent all day doing nothing and playing outside in the snow.
Wonderful day. I will be back when the time is right.
✅ DAY_112 Dec 26 2024
DONE: 0 minutes.
Two days after Christmas Day, I am driving to my wife’s family across the country. It is a long drive, but I am looking forward to spending time with them after months of being gone.
✅ DAY_113 Dec 27 2024
DONE: 0 minutes.
Spending time with family and I have no intention to go back to coding. I spend 90% of the day outside and when it gets dark I sit with my loved ones around the table and chat about life and our plans.
✅ DAY_114 Dec 28 2024
DONE: 0 minutes.
This isn’t a good situation anymore. I can’t seem to get back to my routine. It’s always a struggle for me to restart something once I’ve stopped. Honestly, it takes a lot of willpower to get going again. What makes it even worse is that I’m facing a difficult problem I’m having trouble solving, which makes getting back to it even harder.
On top of that, I have a promise to keep. I committed to working on Good Networking until the end of the year, and after that, I’ll be working on my parents’ website for their business. I estimate that will take about a month. Afterward, I’ll either return to Good Networking or move on to other projects. The truth is, that Good Networking has been dragging on for a long time, and it’s nowhere near finished.
I hate breaking promises, but I also need to be pragmatic. This is work I do in my free time—time I could be dedicating to many other things. I want to focus on my business and personal website, build my brand, plan some skiing and climbing trips, and work on my fundraising project for Doctors Without Borders. There’s so much to do, and lately, I’ve felt that coding this app drains me more than it gives back. That’s a serious issue for a volunteer-based project.
To understand this better, I need to admit something: when I started this daily log and regular coding practice, I secretly hoped it would help my website take off. I didn’t include that as a main goal because I was afraid it wouldn’t happen, and I didn’t want to set myself up for failure. Instead, I only listed goals I could directly control. Unfortunately, the website hasn’t taken off. It’s practically just me and a friend reading it, my site traffic is lower than ever, and lately, I feel like I’m failing on multiple fronts.
My client's work has suffered too. I’m dealing with challenging tasks where the time budget is already exhausted, yet I’m nowhere near a solution. I often feel like my business isn’t moving forward—I’m just trading my time for money without knowing if the work is meaningful. One of my two big clients left recently. Nothing describes the state of my business better than replacing this client. That’s how I know my business isn’t in great shape: I’m nowhere close to finding a replacement.
This isn’t an unfamiliar place for me. I’ve been here before, at the bottom of the curve, feeling stuck in a mess. Historically, this has always led to pushing from the bottom even higher than before. My dad likes to say everything works out for me because I’m a lucky person. I’d like to think of myself as disciplined and focused—someone who can pull themselves up through sheer determination and effort.
But honestly? I don’t feel particularly disciplined or focused right now.
Maybe my dad is right. Maybe I’m just lucky.
✅ DAY_115 Dec 29 2024
DONE: 43 minutes. Wrapping up things.
The state of the app can be divided into three main categories for simplicity:
User Interface (UI)
App Settings (Security, Analytics, Cookies, etc.)
Backend Features
While the first two are relatively straightforward, the backend features require more detailed documentation to ensure I can pick things up efficiently in a month. Additionally, I want to ensure I leave everything in a logical and clear state before the new year. With just two days left, the goal is to wrap things up in a way that makes resuming work as smooth as possible.
User Interface
The UI is a game of continuous improvement—it’s something that can always be refined. For now, the app has a basic, functional static website.
For features that are not yet complete, there is at least a placeholder UI. While not polished or finished, it serves as a foundation for testing and working with the app's functionality. Completing the UI isn’t my priority right now. UI work is my strongest suit, so it will be straightforward when the time comes.
Since the UI isn’t the primary focus at this stage, there’s no need for an extensive description of its current state.
App Settings and Miscellaneous Features
This is primarily Thomas’s domain. He has done an excellent job managing cookies, safety headers, analytics integration, SEO, and accessibility. My role has been to implement his plans and ideas as effectively as possible.
Because I wasn’t the one planning these settings, there’s no need for detailed documentation on my part. Thomas already has everything perfectly organized, which simplifies my task here.
Backend Features
This is the most critical section to document for three reasons. And I already know I made some mistakes.
My Expertise: While I have some backend development experience, it’s not my strongest area. I’m rusty and don’t work with backend logic as often.
Core Functionality: The app’s added value lies heavily in its backend features. This makes it essential to document them thoroughly for clarity and continuity.
Mistakes Made: I made a couple of tactical mistakes early on that need addressing:
I deviated from the principle of keeping things as simple as possible. I should have ensured that any functionality I started coding was completed to a logically functional state, even if it wasn’t fully featured. This would have made it easier to resume work after a break.
I prioritized event creation over user authentication and the user story. This sequence wasn’t ideal, as event creation cannot be finalized without user profiles and sign-up functionality. I should have focused on user authentication first and then built event-related features on top of that. This oversight wasn’t clear to me during initial discussions with Thomas about prioritization.
Since this post is already getting lengthy, I’ll continue tomorrow with more detailed documentation on backend features.
✅ DAY_116 Dec 30 2024
DONE: 0 minutes.
I was not able to finish the backend documentation today.
✅ DAY_117 Dec 31 2024
DONE: 40 minutes
Over the last few sessions, I haven't done much coding. Instead, I've been reviewing the existing code and evaluating its current state. To avoid leaving the app in a broken state, I removed the email sign-up feature and kept only the Google provider for authentication. This change isn't noticeable to users, but it gives me some peace of mind knowing the app is left in a functional, albeit incomplete, state.
Now, let's discuss the individual user stories:
Authentication and User Story
Currently, users can sign in to the app using Google. We plan to add other common providers as well as email magic link authentication. However, at this point, signing in doesn’t actually achieve anything within the app.
There are partial implementations of the profile creation process. Users can input basic information about themselves, but nothing is saved to the database. The final step—choosing favorite topics—is broken. Additionally, this process is entirely separate from the sign-in flow, and there’s no logical navigation between signing in and profile creation.
The user profile itself is at a similar stage. The UI is complete and ready to display data from the server, but currently, it only shows placeholder information. Adjusting it to fetch backend data should be straightforward. Profile editing is also ready but, like the rest, is waiting for real data.
Reflecting on this, I realize I should have focused solely on this part of the app and completed the user story to a logically functional state. It didn’t need to be perfect or include every feature but should have worked cohesively, with features testable even without full data integration. Right now, the user story is incomplete and untestable. I can't even hand it off to testers while I’m away—it’s essentially a construction site, suitable only for developers to work on. Ideally, just me, since I want to clean up what I’ve started.
Creating Events Story
This feature is more complicated. First, I didn’t lay the necessary groundwork. Second, it relies heavily on Recoil for state management. After updating Next.js, Recoil stopped working. I replaced it with another library, and state management is functioning again, but now there’s an issue with the date component import.
I gave it a few minutes and fixed the imports, and it seems to be working now.
I initially thought event creation and saving were functional, but they’re not. While the form and data handling appear to work, events cannot be saved. The event detail page is also broken, and the event listing page is accessible but not implemented, so there’s nothing of interest to see.
Final Thoughts
I have to admit that I’m not proud of the state I’m leaving the app in. It feels like a sprawling, unsafe construction site rather than a tidy workspace with well-defined, completed tasks. Unfortunately, there’s not much I can do about it right now.
When I return to the DN app, I’ll focus on setting things right and cleaning up the mess I’ve created.
For now, I’ll continue this daily log but shift my focus to a new project. I’ll announce it in a few days.
✅ DAY_118 Jan 01 2025
DONE: 0 minutes.
There is nothing to log today. I am collecting information to start a new project and closing the development on Dobry Networking for now.
🏰 DAY_119 Jan 02 2025
Introducing the New Project
Today, I want to outline the project I’ll be focusing on for the next few weeks. My estimate is to complete it within a month. It only means it is going to take two months at least.
The project involves creating a website for my parents’ initiative. They own an old chateau in Šumava, Czech Republic, which they bought about ten years ago. At the time, it was a derelict building filled with garbage, carrying a tumultuous history from World War II, the Communist occupation, and the chaotic 1990s.
Since purchasing it, my parents have worked tirelessly to restore the chateau. After years of hard labor, it’s finally in much better shape. While the property has been open to the public since we cleaned up the worst mess and has regular visitors, we now feel it’s time to create a new online presence to reflect what the chateau has become and its potential.
The Current Situation
Currently, visitors can follow the chateau on social media (Instagram, Facebook) and there is an existing website. However, the site was built by my sister’s husband during a time when he was learning Ruby on Rails. With three kids and limited time, he’s unable to maintain or update it.
I’m now stepping in to take over. My approach has to be quite different:
No Ruby on Rails: I don’t know Ruby on Rails, nor do I plan to learn it for this project. Maintaining the current site would be impossible for me.
User-Friendly for My Parents: I want the new site to allow my parents to update basic information themselves without needing assistance.
Next Steps
Here’s how I plan to proceed:
Project Definition:
I’ll start by creating a single project page that clearly defines the goals and features of the website. This will essentially serve as a client assessment document, ensuring a structured and goal-oriented approach.Platform Research:
Next, I’ll research suitable platforms for building the new website. I already have a few in mind that I’ve wanted to experiment with. It all depends if they going to fit this project.
I’m looking forward to this project—it’s not only a meaningful endeavor for my parents but also a chance for me to explore new tools and techniques in web development.
🏰 DAY_120 Jan 03 2025
DONE: 45 minutes. Exciting times ahead.
This is one of my favorite project phases—the very beginning. The start of a journey, full of potential and unknown outcomes. While it feels like the project is just starting, we’ve already taken the first steps. I am not working alone on this project. My wife, Marcela will work on the visual identity.
It began with a long discussion with my parents. Initially, the idea was to create an entire visual identity for the castle. For clarity, it’s more of a chateau now, but I’ll use both terms since it was originally a castle.
Defining the Scope
During our meeting, we discussed the project’s scope in detail. Since we will work on this in our free time, we need to keep it manageable. My original plan was ambitious: to develop a complete visual identity with a set of design rules and templates for regular use.
However, after careful consideration, we decided that a full-scale identity overhaul isn’t practical right now. Instead, we settled on a simpler approach:
Develop a new website
We agreed that relying solely on social media isn’t ideal. Our audience is typically older, and they prefer websites over social platforms.
Create a basic visual guide
This will include a new logo, color palette, and a few templates for my mom’s frequent needs.
Progress So Far
My wife, Marcela, has started working on the logo and color palette. We’ve already gone through two review cycles, and I’ll share her concepts here after the next one.
My role will focus on designing and developing the website. I’m not a designer, so this will be a valuable learning experience for me. Many of my clients ask for development without providing proper UI designs, so this project will help me improve in this area.
I plan to prioritize user experience over design. While terms like “modern” or “minimalistic” are often used to describe websites, I don’t understand what they mean practically, besides trending words. The design should communicate two key ideas:
Respect for history: The castle is centuries old, and we work hard to preserve its legacy.
Adding a new layer: As new owners, we aim to contribute to its story, much like the families who came before us.
We want to share a piece of Czech history—not as a finished book, but as a chapter we’re writing, with future chapters to come.
Purpose of the Website
The website’s purpose is clear:
Serve visitors’ needs
We want to provide essential information visitors seek before or after their visit. However, we’re still guessing at what those needs are. Comprehensive research is beyond the project’s scope, but we might gather feedback through a newsletter or social media.
Enable reservations
The site will allow visitors to book accommodations and tours directly.
Be a central information hub
Social media platforms might not last forever. A website ensures a stable, long-term virtual presence.
Requested Features
Here’s the feature list my parents provided:
Reservation system for accommodations and castle tours.
Mobile notifications for new reservations with minimal delay.
Accommodation request forms directly on the site.
A clear calendar displays tour schedules and available times for accommodations.
Editable opening hours for easy updates.
Simple content editing for general site information.
This post should give both me and you a clearer idea of the project’s scope and challenges. I’m excited to dive in!
🏰 DAY_121 Jan 04 2025
DONE: 30 Minutes
First day of CMS research. Since I know my way around the internet a bit, I already have some CMS platforms in mind. For a real client, I would start with a clean slate, review the platforms I’m familiar with, and conduct thorough research from the ground up. The internet evolves quickly, and without regular knowledge updates, it’s easy to fall behind. That’s why for a commercial project, I would carefully review all platforms I know. However, I can skip that part to some extent for this project.
From the start, I’ll eliminate a few well-known CMS systems:
WordPress
It’s still the largest CMS platform on the internet, robust, and offers tons of features. But it’s written in PHP, which I don’t like. It’s also too large for this project’s needs, though the idea of integrating an e-commerce shop is tempting.
Shopify
This is the platform I know best. I work with it daily and still don’t know it completely from top to bottom. It’s an excellent platform tailored primarily for e-commerce, which doesn’t suit a castle webpage.
Squarespace
It’s still a contender, and I’m even hosting my own website there. It’s quick to implement, but I’m not the biggest fan of its UX. Additionally, achieving some basic features can be unnecessarily complicated.
These are CMS platforms I think won’t make the final cut.
I’m now looking into WiX and Webflow. WiX seems like a good alternative for hosting a website, and its builder appears quite capable.
As for Webflow, it excites me to explore, but I’m unsure if it’s purely a visual builder or if it includes a built-in CMS. If it doesn’t have a built-in CMS, I’ll likely skip it for this project.
🏰 DAY_122 Jan 05 2025
I totally forgot to write a log today. How did that happened?
🏰 DAY_123 Jan 06 2025
DONE: 30 minutes
I don’t know how that happened, but I got totally lost in days and I forgot to write a log one day. Obviously being in Alp skiing, working, and getting this done is a little confusing for me, but I will get the routine back. I can already feel that I am digging myself out of the hole I have been feeling in the last few weeks.
I continue in the research, right now I am leaning more toward WIX and its studio, but it isn’t decided yet.
🏰 DAY_124 Jan 07 2025
DONE: 30 minutes
"Working" for my parents is helping me understand client work on a different level. Let me explain how.
I’m currently deciding between WiX and Webflow. So far, my research hasn’t been very structured. I haven’t created a sheet to list the pros and cons or weigh every feature. This isn’t like my usual workflow, and relying on my gut instincts makes me a little anxious. However, by simply reading and watching a few videos, I’m starting to get a pretty good idea of which platform might be the better choice for this project.
After trying a few CMS platforms, you start to realize they’re all quite similar. I wouldn’t go as far as saying they’re the same, because they’re not. The difference lies elsewhere. At first, second, or even third glance, they all appear very similar. But after spending hundreds of hours using a particular platform, you begin to notice the subtle differences. Some platforms are better for SEO, others for fast prototyping and development. The problem is that it’s nearly impossible to predict this in advance.
So, for me, comparing WiX and Webflow feels like comparing two sides of the same coin. Fortunately, this process has led me to an important realization I might not have otherwise noticed.
Starting from the end
I imagined the finished product: the website is live, the UI looks great, the reservation system works perfectly, and the copywriting and images are spot on. At this stage, I know everything about the website and the platform I used, because I’ve spent hours working in that environment. I can vividly picture handing over the completed website to my parents.
Everything’s perfect—until they need to make their first update. Now, two scenarios emerge:
The CMS is simple and intuitive.
In this scenario, my parents (the clients) can make the update themselves. Mission accomplished—I don’t have to step in. This is the perfect world.The CMS is powerful but overly complex.
The platform has lots of features, but it isn’t very clear for my parents. They struggle with the learning curve and call me for every small update. This defeats the purpose of creating a user-friendly solution and leaves me handling all the maintenance. Not a perfect world.
Key takeaways
This leads to two important realizations:
Think from the client’s perspective, not your own.
Of course, everyone says, “The client comes first.” But often, it’s just lip service. In reality, it’s more like, “Major clients are the priority,” but no one explains what that really means. It’s similar to the phrase, “Family always comes first.” If we’re honest, that’s only true in important, major cases—not always.Back to my clients. The problem is bias. I often assume that because I understand something, others will too. But just because I find a platform intuitive doesn’t mean my parents will. This realization has been pivotal: the platform with the simpler CMS that meets our needs will win.
Offer added value through training.
Earlier this year, I finished a Shopify store for a client. When I handed over the store, I realized they had no idea how to use the Shopify admin panel. This experience nudged me toward a second realization: offering a basic course or introduction to the platform could be a valuable addition to my services. Teaching clients the fundamentals of fulfillment, analytics, finances, and SEO could even become a nice upsell to my current offerings.
🏰 DAY_125 Jan 08 2025
DONE: 47 minutes
As I continue my research, everything points more and more toward picking WIX as our platform. It's simple - just as I noticed earlier, WIX seems much more straightforward with more built-in native features. Even though it might not be as powerful as Webflow, I'm leaning toward simplicity in this case. Actually, when I think about it, I lean towards simplicity in almost any case.
Today's discovery made me even more confident - WIX has a built-in booking tool. It's not just the basic reservation form I was initially looking for - it's actually a complete calendar management system. This has real potential to handle not just accommodation bookings, but also the cultural events my parents are hosting and our day-to-day castle tours. We might be able to transform our email and phone-based business into something more fitting for the 21st century.
This is getting pretty exciting.
🏰 DAY_126 Jan 09 2025
DONE: 45 minutes.
I continue learning the WIX platform.
🏰 DAY_127 Jan 10 2025
DONE: 45 minutes.
Opening secrets on the Wix platform. It seems like the decision was made naturally. Since I spent more time in the Wix than Webflow it looks like I will go with Wix.
🏰 DAY_128 Jan 11 2025
DONE: 45 minutes.
I've started working on our website's sitemap. The first step is mapping and monitoring our original website structure. From what I can see so far, even navigation is fairly complex and doesn’t represent the website's main goal. We're aiming for a very simple website with basic information, it will serve as a foundation that we can build upon.
The idea is straightforward - create a website that acts as our core foundation, while using social media platforms to handle the dynamic content like news, events, and updates.
This approach makes sense - let the website be our solid base while keeping the more fluid, frequent communications on social media where they belong.
🏰 DAY_129 Jan 12 2025
DONE: 45 minutes.
I've finished analyzing the sitemap, and it confirms what I felt about our current website. The complexity is overwhelming - there's just too much information that isn't really necessary for the website itself.
I can see opportunities for improvement - we can combine many of the existing links. Pages themselves can be much simpler while improving the UX. The biggest change I'm planning is to create a website that solves our customers' problems.
Original site map
🏰 DAY_130 Jan 13 2025
DONE: 56 minutes
I've been comparing Claude and ChatGPT while working on our customer profiles, and it's a perfect test case for AI assistance. So far, I'm leaning slightly towards Claude. In my experience, it's better at articulating my thoughts and has stronger writing capabilities. However, ChatGPT has an edge regarding versatility, especially with its DALLE integration for generating customer visualizations. Though I have to give Claude credit - it doesn't back down easily and will even code SVG images when asked to generate visuals. It's pretty cute, actually.
AI has been incredibly helpful in this process. It helped me refine the profile structure itself. While I've done customer profiling before, I couldn't remember all the specific details needed. With AI assistance, I was able to develop a comprehensive set of questions covering our customer characteristics.
We initially started with these detailed topics:
Customer Motivation and Needs
Purchasing Behavior
Pain Points and Concerns
Life Values
Media Habits
Decision-Making Process
Seasonality and Timing
However, I realized this was a bit too complex for our needs, so we simplified the structure to keep communication as straightforward as possible.
I've completed two out of three customer profiles today. I'll share all the results here once I finish the last one tomorrow.
🏰 DAY_131 Jan 14 2025
DONE: 45 minutes.
It is official. I am getting hooked on this project. I finished three customer profiles. At this point, we have three customer personas. Enjoy guys!
Marie (58 years) - Tourist Club Leader
Basic characteristics:
Retired, active organizer
Leads a club with 30-50 members
Most members are active seniors 55+
Experienced in organizing group events
Lives in a district town
What she's looking for:
Interesting program for larger groups
Appropriate physical demands
Group discount options
Refreshment availability
Professional commentary adapted for seniors
Seating area after the tour
Purchasing behavior:
Plans trips quarterly
Makes decisions in cooperation with the club committee
Price and accessibility are important for members
Organizes trips mainly off-season
Budget 300-500 CZK per person
Prefers invoice payment
When and how to reach:
Email and phone (prefers personal contact)
Regional press and radio
Websites for tourists and seniors
Plans mostly in spring and autumn
This customer appreciates:
Clear information about site accessibility
Group refreshment options
Flexibility in scheduling
Senior-friendly approach
Printed materials about the site
Peter (40-55 years) - Husband Looking for a Romantic Gift
Basic characteristics:
Middle to higher-income group
Time-pressed professional
Married 15+ years
Lives in a larger city
What he's looking for:
An exceptional experience for his wife
Romantic atmosphere
Luxury services
Peace and privacy
Surprise options (gift vouchers)
Purchasing behavior:
Plans ahead for special occasions (anniversaries, birthdays)
Willing to pay extra for quality and exclusivity
Makes decisions primarily based on photos and reviews
Seeks complete service packages without the need for additional organization
Willing to spend 8-15 thousand CZK for a weekend stay
When and how to reach:
Business media and premium news websites
Targeting before significant occasions (Valentine's Day, summer anniversaries)
LinkedIn and Facebook
Emphasis on gift vouchers and "turnkey" packages
This customer appreciates:
Discrete and professional communication
Clearly defined service packages
Possibility of customizing the stay
Help with organizing surprises
John (45 years) - Active Father with Interest in History
Basic characteristics:
University graduate in middle management with an income of 75,000 CZK
Wife and two children (8 and 12 years)
Lives in a regional city (travel distance up to 2 hours)
What he's looking for:
Combination of history and active recreation
Educational element for children
Cycling opportunities in the area
Quality services matching the price
Purchasing behavior:
Plan trips several weeks in advance
Makes decisions together with wife
Searches for information online (web, Google reviews)
Spends 5-8 thousand CZK for a weekend stay
When and how to reach:
Facebook and online news
Travels most from spring to autumn
Prefers weekends outside the main season
🏰 DAY_132 Jan 15 2025
DONE: 48 minutes
I couldn't finish the entire sitemap today. I've been playing with the idea of making this a one-page website. One-page sites are popular now and work great in many cases.
But here's the challenge with Nemilkov - we have too many different users to serve and too much information to communicate. I'll take it step by step and see how far I can get with the sitemap. You can see a rough homepage layout below for a potential one-page approach.
This approach has one clear advantage - it forces me to keep things simple. But realistically, I think we'll end up with a hybrid solution. We'll have a visually appealing, well-structured homepage with a few links to services that need their own space. When you think about it, trying to promote romantic castle weekends for couples right next to group tourist tours doesn't really work together.
Then there's the history and "about us" pages. Our current website has loads of information there. I want to keep some of it, but both sections would be hard to fit onto the homepage.
🏰 DAY_133 Jan 16 2025
DONE: 51 minutes.
When making decisions, I always keep one thing in mind. If you've done your research, analyzed carefully, and considered different viewpoints, rarely will one option be significantly worse than the others. Once you've narrowed it down to two choices, remember this - making a decision is better than endless analysis and staying stuck.
Today I made a decision about our website sitemap. This is the current version, and with it, I can start searching for the right template. In the next few days, I'll begin building the actual website. This will probably be expanded, but for now, it is sufficient to start the development.
If the decision turns out to be wrong, you can usually go back and change course. But until you make that first decision, you'll never move forward.
🏰 DAY_134 Jan 17 2025
DONE: 45 minutes
The last few days have been special. Marcela and I are spending time at Nemilkov with my parents. Even though it’s incredibly busy here, it’s been great to be together.
There are multiple projects happening simultaneously. We’re still cleaning out the surrounding buildings, and archaeologists are conducting research in the main hall. This means the floor is gone, and you can only walk across wooden planks. In the meantime, the largest project right now is underway: a major renovation of the walls and the paintings in the dancing room on the first floor.
With everything going on, it’s clear these projects will extend into late spring. Once they’re done, castle visitors will start arriving, and we’ll shift our focus to fixing the roofs—a summer project we’ve been tackling for the past few years.
We also discussed who the primary customer for the website will be. After quite a bit of back-and-forth, we landed in a neutral zone without making a final decision. The debate is whether to focus on larger tourist groups or families on vacation. Both groups are valid and important to us, so I’ll build the website to accommodate both.
Despite managing all these ongoing projects, my parents still find time to join us on ski trips and discuss the new Nemilkov website and its brand identity. I have to say, I’m very excited about what Marcela has created so far. Right now, we’re looking at two different paths, and I can’t wait to see how it all comes together.









🏰 DAY_135 Jan 18 2025
DONE: 55 minutes
I’m not sure exactly when ChatGPT was launched, but I’ve been using it since the very beginning. Not every day, but regularly. Over the last year, though, I’ve used it almost daily. That said, I wouldn’t claim to be an AI expert or ambassador.
In my opinion, AI is incredibly useful for experienced professionals. When you have a strong background in a field, AI can enhance your results significantly. If AI makes mistakes, you can catch them quickly. My concern, however, is that AI will lead to the creation of an "army of juniors" in every field.
I’ve seen this personally. AI can assist me with graphics, marketing, and business tasks. However, in these areas, it functions more like a very powerful Google search because I struggle to evaluate the information it gives me. In fields I don’t know well, I tend to rely on AI much more than I’d like to—and I trust it too easily. This makes it harder for me to spot mistakes.
Even in my main field, development, I’ve started relying on AI too much. Sometimes, I quickly scan the code it provides without much thought. Only later do I revisit it and check for errors. Based on this experience, I’ve realized that in areas where I’m strong, it’s often faster to code everything myself. Not because I type faster—I don’t—but because I work with more precision. In areas where I’m weaker, I depend on AI far more than I’d like.
To counter this, I’ve started including sessions where I work on difficult coding exercises without AI. I believe this will become essential for programmers to maintain their expertise and avoid over-reliance on AI.
Today, I had a similar experience with WIX’s AI tools. I’ve never worked on the WIX platform before, and I encountered two AI features:
AI Setup for Admin Features
The tool asks you a few basic questions and sets up features and settings based on your needs. While this is great if you’re already familiar with the platform, it’s overwhelming for a first-time user. Having so many features implemented at once made it hard to orient myself. I prefer to set everything up manually and refine it later. That said, with enough time and effort, I could probably learn to manage everything.AI Design Tool
This was a worse experience for me. To provide good results, the tool needs to guide users with specific and thoughtful questions. Instead, it asked just four very basic questions. As I answered them, I already felt the outcome wouldn’t meet my expectations—and I was right. The resulting website was completely off. The design lacked the key information I had provided, and the graphics were far from what I wanted.
Ultimately, I scrapped everything the AI produced. It would have taken me far more time to fix its work than to start fresh with a template and build it myself.
These experiences reinforce my belief that while AI is a powerful tool, it’s only as good as the knowledge and guidance of the person using it. For now, I’ll stick with what works and remain cautious about relying on AI tools in areas where I lack expertise.
🏰 DAY_136 Jan 19 2025
DONE: 45 minutes
Slow progress on WIX. I am looking for the correct template to use.
🏰 DAY_137 Jan 20 2025
DONE: 55 minutes
I did it—I finally chose a template to use. At first glance, I didn’t like it much. Let me explain why.
There’s always a bias I fall into when selecting templates, whether for e-commerce or websites. Here’s how it goes: if I’m building a Shopify store for mountain bikes, I tend to favor templates where the demo store displays mountain bikes. I’m not sure why, but maybe a psychologist could explain it.
For the Nemilkov website, it was the same story. I was looking for templates showcasing architecture or castles. Since I couldn’t find one with a castle theme, I turned to wellness templates. Those looked best to my biased eye. This time, however, I resisted that bias and focused on studying the layouts and individual UI elements rather than the demo content.
The template I chose had a gaming vlog as its demo. It’s clean, with great photo galleries and a strong emphasis on visual elements—perfect for our needs. Of course, there’s always a chance this won’t work out, but where’s the fun without a little risk?
Here’s the template I’m going with (I hope it’s accessible to the public).
What’s Next?
Now that I’ve picked a template, you might be wondering: what are the next steps?
Easy enough. I always start with a thinking board. For me, this is a Canva board where I store screenshots, notes, and early ideas before diving into coding or building. This helps me organize everything, see the big picture, and zoom in on individual pages or sections when needed.
First Steps:
Gather Inspiration
I’ll explore other castle websites to see what kind of information they display and compare it to the customer personas I’ve created.
Do they include all the information visitors need?
Is it the right information?
Is it organized in a logical order?
Is it written in a way their audience understands?
These are fundamental questions I always ask.
Template Review
Next, I’ll go through the chosen template and match its pages to the information I want to display. I’ll evaluate:
Does the template align with our needs?
Are the elements presented in a clear and accessible way?
Are you ready to see the first stages in action? I am!
🏰 DAY_138 Jan 21 2025
DONE: 53 minutes
I’m back on the road, this time ice climbing in Austria. I’ve been squeezing in work on the Nemilkov website at the very end of the day, and now I’m ready to crash.
Today, I focused on gathering more inspiration, specifically for the About Us page. It’s crazy how many castle websites don’t even have an About Us section—nothing. That caught me completely off guard. I spent 10 minutes just thinking about it and couldn’t come up with any reason why a castle site wouldn’t include this.
Given the lack of inspiration, I think we can take a more creative approach. Instead of a straightforward description of the owners, how about making it more interactive and fun? For example, we could ask everyone involved a question or two, and their answers could serve as their description on the page—or at least a part of it.
This could make the About Us page much more engaging and give visitors a unique, personal glimpse into the people behind Nemilkov. What do you think?
🏰 DAY_139 Jan 22 2025
DONE: 45 minutes
I am doing a super slow progress. After all day of ice climbing I am pretty tired and not able to concentrate too much. I was trying to design the about us page, but I wan’t able to do much. Today I only went over the WIX design studio and I was exploring the capabilities. Tomorrow I will try to do the session before I leave for climbing.
🏰 DAY_140 Jan 23 2025
DONE: 45 minutes
This morning, I made sure to get my work session done before climbing, knowing I’d spend most of the day on the ice and then drive back home in the evening. Working in the morning felt like the better choice than leaving it until late tonight.
I spent most of the session once again looking for inspiration, but, unfortunately, I wasn’t very successful. It seems that websites just aren’t a top priority for businesses around castles and tourist tours. My guess is that the main focus for promotion has shifted to social media, especially Facebook and Instagram. These platforms are perfect for visually appealing content, which castles naturally lend themselves to.
For a site like Nemilkov, which is still under reconstruction, before-and-after photos and videos are gold. They’re organic, engaging, and ideal for social media.
One honorable mention goes to the National Heritage Institute website. They manage hundreds of castles in the Czech Republic, and each castle has its own dedicated site under its own domain. While the designs are all uniform, they’re tailored slightly to reflect the individual castle. Everything I needed was where I expected it to be, and it was well-organized and easy to navigate. Great work on their part—kudos to them!
🏰 DAY_142 Jan 24 2025
DONE: 45 minutes
Today I have to do the work session in the morning. I will be climbing most of the day and driving back home in the afternoon. I can either do it before climbing or super late tonight. I am choosing the morning.
I spent most of the time looking for inspiration, but again I wasn’t very successful. It just seems that websites are not that important for a business around castles and tourist tours. I bet that the promotion center of gravity is on social media, especially on Facebook and Instagram because creating visually appealing content from the castles is very organic. When you are in the stage like when we are still under reconstruction it is natural to do before and after photos and videos. Great stuff there.
There is one honorable mention in the heritage websites. National Heritage Institute. They take care of hundreds of castles in the Czech Republic. Each of the castles has an individual website, under its own domain, but they all look the same, only covering is different to reflect individual castles. I found everything I needed where I expected. It is great. Good job.
🏰 DAY_143 Jan 25 2025
DONE: 46 minutes
Nothing interesting happening today. Still working on UX design.
🏰 DAY_144 Jan 26 2025
DONE: 45 minutes.
After today I no longer have any possible way to talk myself from real work on the website itself. Today I finished the UX design for all pages. It definitely isn’t perfect, but it is enough to get started.
Tomorrow I will post the wireframes here and start working on individual pages. No, wait I might not work on the pages. I am meeting a friend who is a photographer. She is very good at architecture photography and she might be doing some photos for the web.
🏰 DAY_145 Jan 27 2025
DONE: 45 minutes
I spend my working session in the hospital. Not much fun with a very long evening and late bed time.
🏰 DAY_146 Jan 28 2025
DONE: 45 minutes
Today I worked on the home page. There is a layout finished. Today I started working on the real site and tomorrow I will continue. When there is something to show from the homepage I will show publish it here.
🏰 DAY_147 Jan 29 2025
DONE: 45 minutes
It is unsettling. It took me almost an entire work session to figure out how to add a slider show to the hero section. If I continue at this pace, the site will be finished next year, not next month.
🏰 DAY_148 Jan 30 2025
DONE: 45 minutes
You can probably tell that I haven’t had much time for the Nemilkov website over the past 10 days. I usually get to it late in the evening when I’m already exhausted, and I don’t have the mental energy for anything too demanding. The downside? I’ve already finished all the easy tasks.
Today, I worked on the homepage. I’m applying my experience from e-commerce projects and adapting it to a website that, in a way, is selling my parents' story. For example, instead of using social proof with company facts and achievements, I’ll highlight interesting details from Nemilkov’s history.
It’s a different approach, but I think it will make the site more engaging and personal.
🏰 DAY_149 Jan 31 2025
There will be no blog updates from the weekend. I will be in the Alp ski touring. See you next week.
🏰 DAY_150 Feb 12 2025
Twelve days ago, I had no idea what was coming. I was sitting in a van with my friends, heading off to enjoy a ski-turing weekend in the Alps. And enjoy it, we did.
There wasn’t as much snow as we’d hoped for, but it wasn’t too bad either. On the first day, we planned a big tour of a nearby summit. Unfortunately, there wasn’t enough snow to make it safely, so we turned around about 150 meters below the summit. It was probably the right decision. On the way back, we found a north-facing slope with decent powder and ended up doing three more laps there.
The last day of our trip was mellow—just a couple of laps before heading home. Everything seemed fine, except for the fact that one of my friends had the flu and wasn’t skiing with us.
By Monday, that flu hit me like a truck. For the next 10 days, I was completely knocked out. I don’t remember ever being this sick. Most of those days were spent lying in bed, just trying to survive.
Only now am I starting to come back to life, slowly easing back into work, training, and blogging. From this point on, I’ll be blogging about my progress every day again. I can’t wait to get back into it!
🏰 DAY_151 Feb 13 2025
DONE: 56 minutes
Today was all about finding my footing again. After such a long break, I couldn’t even remember where I left off. So, I decided to start with the footer—neutral territory.
As I worked on it, I found myself second-guessing my decision to use WIX Studio for this project.
Don’t get me wrong—WIX Studio is impressive and seems incredibly capable, especially for designers. It offers endless possibilities. You essentially get a blank canvas where you can drag and drop anything you can imagine. But for someone like me, this level of creative freedom feels overwhelming.
I have to remind myself that this website is meant to be Nemilkov’s online hub—a place for customers who don’t use Instagram to find essential information. As Jan Řezáč mentioned in his excellent newsletter (a must-read if you’re into web design), the web is becoming less about UI design. And I agree.
These days, most websites look good enough. Polishing them further doesn’t add much value. Sure, there’s room for groundbreaking creative designs, but that’s not what I’m aiming for here. The focus should be on UX, clear messaging, and marketing. A functional, fast-to-launch website that can be tested and adjusted based on real customer feedback is far more valuable than a pixel-perfect UI.
Maybe the break from this project helped me gain the critical distance I needed. Sometimes, stepping away is exactly what you need to come back with fresh ideas and a clearer perspective. Let’s see how it goes from here.
🏰 DAY_152 Feb 14 2025
DONE: 45 minutes.
I have made my decision. I will change the platform on which I am building the website. I will change to Squarespace. First I wanted to learn something new, but I realized there are far more interesting topics for me to explore and learn. Hence I want this project as simple as possible from now on, so I can free my time for new stuff.
🏰 DAY_153 Feb 15 2025
DONE: 45 minutes.
Spent the session looking for a new template. I can’t say if I was successful. I wish ChatGPT were doing a better job in sketching UX layouts, it would be much easier to find templates.
🏰 DAY_154 Feb 16 2025
DONE: 45 minutes.
Last two sessions I felt like I was reversing my work and not progressing, but this is expected when you completely change an approach in the middle of a project. Today I can say I made progress. I narrow down the search for templates to two. Honestly, both of it is totally fine and will work well. I will make the final decision tomorrow.
🏰 DAY_155 Feb 17 2025
DONE: 53 minutes.
I made a decision, I have chosen a new template to use. It is very basic and minimalistic. It is based on a lot of photos which perfectly suits my case for the castle website. The only thing is I will need to find a photographer who can take the photos I need.
You can see the demo site here.
🏰 DAY_156 Feb 18 2025
DONE: 45 minutes.
After the flu, everything is a mess. After almost two weeks being out of work and training I am doing my best to get back on track. Mostly I push all my client work forward as much as possible to have it all finished before the deadlines which are mostly by the end of the month. I am struggling to get back to my routine of working, training, side projects, and blogging. It will come around eventually, but now it is not ideal.
🏰 DAY_157 Feb 19 2025
DONE: 45 minutes.
With a chosen template I am working on a navigation and footer in my latest session. Once I am done I will start working on the homepage and then on individual pages.
Also, I am looking for a way to implement the booking feature for castle accommodation and tours. There are some promising solutions as a third-party extension.
🏰 DAY_158 Feb 20 2025
DONE: 45 minutes.
I made a small progress again. It is amazing to digest how different is the 45-minute session now at 8 pm after the entire day of work, training, and watching over my sister’s kids for a couple of hours. I feel like the time is moving slowly as a snail, and at the same time, I am doing very little work in these 45 minutes. Well, but it is going slowly in front and that is the important part. I worked on the hero section today. We will have three images here. First will talk about our castle tours, second will be about accommodations and third will be about possible space reservations for wedding ceremonies, photoshoots, and so on.
🏰 DAY_159 Feb 24 2025
DONE: 0 minutes.
Summing Up the Last Four Days
Right now, I’m questioning whether continuing this effort even makes sense. Once again, I find myself in a situation where everything around me feels more important than the blog, and unfortunately, both the blog and my side project are being pushed aside.
The biggest issue is consistency. A month ago, I could honestly say I was working on this every day, putting in real time and effort. Lately, life keeps getting in the way. And, to be fair, sometimes it’s also a matter of personal discipline. This time, it was moving and looking after my friend’s puppy that kept me from sitting down and making real progress on the castle website.
For now, I’m treating this as just a bump in the road. But if the next two weeks follow the same pattern—where I’m only writing blog posts without any real progress to show—I’ll stop both the blog and the "every day" side project sessions.
End of announcement.
On a completely unrelated note, I just finished building a cabinet and am finally ready for bed. Unfortunately, not in a real bed, but on a camping mattress on the floor.