<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>pelletyze &amp;mdash; Build stuff; Break stuff; Have fun!</title>
    <link>https://barfooz.xyz/tag:pelletyze</link>
    <description>barfooz.xyz</description>
    <pubDate>Wed, 06 May 2026 13:50:29 +0000</pubDate>
    <image>
      <url>https://i.snap.as/btoNrLSF.png</url>
      <title>pelletyze &amp;mdash; Build stuff; Break stuff; Have fun!</title>
      <link>https://barfooz.xyz/tag:pelletyze</link>
    </image>
    <item>
      <title>My achievement wishlist 2026</title>
      <link>https://barfooz.xyz/my-achievement-wishlist-2026?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[It’s already a bit late, and I&#39;ve been sitting on this for a while now. No idea why, but here it is. 🏆&#xA;&#xA;Every New Year&#39;s resolution I had over the past years never worked out. So I stopped having them and thought about something manageable I could achieve. Which was also not working out because every time I try to work on a side project with a deadline, something occurs and moves my attention.&#xA;&#xA;!--more--&#xA;&#xA;With this in mind, I started to make a wishlist for the new year. A list of things that were nice to achieve but not mandatory.&#xA;&#xA;As a developer, for example, I want to release my newly created app, which I worked on in December (#AdventOfProgress). Then, use this app as a template and create a new app with a different topic, where I can reuse 75% of the code I already have. :) If this gets done this year, it would be nice to also have a small React Native app for #pelletyze. This could also be done in a small focused sprint because I only need the frontend; the backend is already working.&#xA;&#xA;Fast forward; writing the above was in the past, and the pattern continued. I’ve created an entirely different app without finishing the first one. 😂 On which is now focus all my spare time. It is a little kids game. More of this in the next post.&#xA;&#xA;Having a wishlist with maybe some milestones is a nice thing, I think. For example, having something done on my birthday. Or achieving X until summer and Y until autumn and so on. :)&#xA;&#xA;Besides all the projects, there is still the private life, where I have to achieve things that are not fully in my control. Here, I stopped entirely having wishes. Here is the mantra: it’s done when it’s done. 😂😂&#xA;&#xA;---  &#xA;85 of #100DaysToOffload  &#xA;log  &#xA;Thoughts? a href=&#34;https://remark.as/p/barfooz.xyz/my-achievement-wishlist-2026&#34;Discuss.../a]]&gt;</description>
      <content:encoded><![CDATA[<p>It’s already a bit late, and I&#39;ve been sitting on this for a while now. No idea why, but here it is. 🏆</p>

<p>Every New Year&#39;s resolution I had over the past years never worked out. So I stopped having them and thought about something manageable I could achieve. Which was also not working out because every time I try to work on a side project with a deadline, something occurs and moves my attention.</p>



<p>With this in mind, I started to make a wishlist for the new year. A list of things that were nice to achieve but not mandatory.</p>

<p>As a developer, for example, I want to release my newly created app, which I worked on in December (<a href="https://barfooz.xyz/tag:AdventOfProgress" class="hashtag"><span>#</span><span class="p-category">AdventOfProgress</span></a>). Then, use this app as a template and create a new app with a different topic, where I can reuse 75% of the code I already have. :) If this gets done this year, it would be nice to also have a small React Native app for <a href="https://barfooz.xyz/tag:pelletyze" class="hashtag"><span>#</span><span class="p-category">pelletyze</span></a>. This could also be done in a small focused sprint because I only need the frontend; the backend is already working.</p>

<p><em>Fast forward; writing the above was in the past, and the pattern continued. I’ve created an entirely different app without finishing the first one. 😂 On which is now focus all my spare time. It is a little kids game. More of this in the next post.</em></p>

<p>Having a wishlist with maybe some milestones is a nice thing, I think. For example, having something done on my birthday. Or achieving X until summer and Y until autumn and so on. :)</p>

<p>Besides all the projects, there is still the private life, where I have to achieve things that are not fully in my control. Here, I stopped entirely having wishes. Here is the mantra: it’s done when it’s done. 😂😂</p>

<hr/>

<p><strong>85</strong> of <a href="https://barfooz.xyz/tag:100DaysToOffload" class="hashtag"><span>#</span><span class="p-category">100DaysToOffload</span></a><br/>
<a href="https://barfooz.xyz/tag:log" class="hashtag"><span>#</span><span class="p-category">log</span></a><br/>
<em>Thoughts? <a href="https://remark.as/p/barfooz.xyz/my-achievement-wishlist-2026">Discuss...</a></em></p>
]]></content:encoded>
      <guid>https://barfooz.xyz/my-achievement-wishlist-2026</guid>
      <pubDate>Sat, 17 Jan 2026 08:07:54 +0000</pubDate>
    </item>
    <item>
      <title>My 2025 Review</title>
      <link>https://barfooz.xyz/my-2025-review?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[To everyone who reads this, a happy new year 2026! 🚀&#xA;&#xA;I left 2025 satisfied and happy among my loved ones. We gathered at my home with some friends and their kids. It was a nice evening. While waking up, I started to write these words. I initially planned to write them before leaving 2025. But this time I will publish my review. For 2024, I’ve started the post but never finished it.&#xA;&#xA;!--more--&#xA;&#xA;While reading the never-published post of 2024, I realized that 2025 was good and not as bumpy of a ride as 2024. 2024 had many ups and downs. And I can say personally and as a family, we settled somehow.&#xA;&#xA;2025 started with finishing #100DaysToOffload at the end of January. Finishing the challenge made me proud. Because I never really finished something similar on the web. All I started was abandoned after some time.&#xA;&#xA;Most of the spring and summer were not present for me, writing-wise. I had numerous freelance projects and focused a lot on family and non-IT-related stuff at home. In consequence, I did not write a lot. I’ve started the #TheMonthProject to push me to get my #pelletyze app done. I had a lot of fun writing these posts. But because of spring and summer, I released it quite late in October 2025. But this was marked as a giant achievement for me. I worked a lot on #pelletyze and I’m happy that it is now in a presentable state. :) Since the release, I did some small updates but never did marketing for the site to reach a user base. Because I still have some features and small improvements I want to implement before bringing it to a wider audience.&#xA;&#xA;In spring, I tried Cursor and made a subscription. I wanted to see what AI hype is all about and how it works out. For a year I was already a Copilot/Supermaven user and had a small glimpse of what AI can do. For me it was quite a learning curve, because I needed to find my flow. After I found it, I tried Claude Code and never looked back. 😅 I still have a Cursor subscription because I’ve subscribed for a year, like I did with Copilot and Supermaven. Which was not a mistake, but in a year a lot can happen. Especially in the tech and AI space. So for the future, I know that I just try things out on a monthly basis. My most used AI tools now are ChatGPT and Claude Code. Maybe I should also write about my usage of them in another post. To end the paragraph, I can say that in 2025 AI had a massive impact on how I work now, and it improved a lot for me.&#xA;&#xA;In the summer I made an old friend after over 10 years. We split in a not-so-friendly way and never talked it out, so I never knew in which state we were. But I tried to take all the courage and wrote him a message with what I feel about us. The good thing is no one was mad, and we’ve met and talked for some hours. :)&#xA;&#xA;Over the summer, we made a hard decision. Our oldest was on the path to start school. But we decided to let him go to the kindergarten for one more year. He is now with his brother in a new kindergarten. The hardest part is not the new location or that he is not in school; for him, the hardest thing was leaving his friends. Which is something we had in mind but never thought that it would have such an impact on a little boy. Socially it is hard for him. But we hope that eventually, it is better for him. Since he got six on his school enrollment. He was not thoroughly ready for it. In 2026, we then have his school enrollment, and I hope that it improves everything for him, because he can then see his old friends again daily. &#xA;&#xA;In December, I started my #AdventOfProgress event. Last year I did #AdventOfCode and #AdventOfTypescript and while it was fun, it cost me a lot of time I could have spent on something better. And this year, I wanted to spend the time on something with a real outcome. So I developed a React Native app in December. It was a lot of fun, and I had a prototype, which was planned to be done in the spring of 2025. 😅 But this is not relevant. I completed something again in 2025, and this is important. I now need to tweak some things and complete the landing page so I have a releasable app. The prototype is installed on iOS and Android on the phones of some friends, and this is a wonderful feeling. They can provide feedback, and I have a small audience right from the start. :)&#xA;&#xA;Over the December break, I also finished most of our basement, especially the playroom for the kids. I’ve added a swing, a therapy swing. We know this type of swing from the occupational therapy for the little one. The boys and all the other kids who visited us over the last few days had a lot of fun with it. I also added wall bars so the kids can climb and “hang” around. Finishing this project gave me a gigantic relief and gave me a feeling of being free. Sounds strange, but this project was now in the works for some years. Which was not my fault. Mostly. Progress here had depended on some external people. &#xA;&#xA;So the 24.12. marked a point where I could check some points on my to-do list as done. So I could start some new things, which were waiting for some time now. In this case, start setting up a home lab. I used an old notebook to install Proxmox, Forgejo, and Vaultwarden. I can now self-host my Git projects in my local environment and access them via VPN from the outside. Setting up Proxmox with a good backup strategy gives me a foundation I can build upon in the future. I plan to extend this all with Home Assistant and other tools that will improve my life. :)&#xA;&#xA;All this sums up 2025 quite well. It was a good year. And I look forward to what 2026 will give me and my family. 😎&#xA;&#xA;---  &#xA;83 of #100DaysToOffload  &#xA;#log #lastyear #review #2025  &#xA;Thoughts? a href=&#34;https://remark.as/p/barfooz.xyz/my-2025-review&#34;Discuss.../a]]&gt;</description>
      <content:encoded><![CDATA[<p>To everyone who reads this, a happy new year 2026! 🚀</p>

<p>I left 2025 satisfied and happy among my loved ones. We gathered at my home with some friends and their kids. It was a nice evening. While waking up, I started to write these words. I initially planned to write them before leaving 2025. But this time I will publish my review. For 2024, I’ve started the post but never finished it.</p>



<p>While reading the never-published post of 2024, I realized that 2025 was good and not as bumpy of a ride as 2024. 2024 had many ups and downs. And I can say personally and as a family, we settled somehow.</p>

<p>2025 started with finishing <a href="https://barfooz.xyz/tag:100DaysToOffload" class="hashtag"><span>#</span><span class="p-category">100DaysToOffload</span></a> at the end of January. Finishing the challenge made me proud. Because I never really finished something similar on the web. All I started was abandoned after some time.</p>

<p>Most of the spring and summer were not present for me, writing-wise. I had numerous freelance projects and focused a lot on family and non-IT-related stuff at home. In consequence, I did not write a lot. I’ve started the <a href="https://barfooz.xyz/tag:TheMonthProject" class="hashtag"><span>#</span><span class="p-category">TheMonthProject</span></a> to push me to get my <a href="https://barfooz.xyz/tag:pelletyze" class="hashtag"><span>#</span><span class="p-category">pelletyze</span></a> app done. I had a lot of fun writing these posts. But because of spring and summer, I released it quite late in October 2025. But this was marked as a giant achievement for me. I worked a lot on <a href="https://barfooz.xyz/tag:pelletyze" class="hashtag"><span>#</span><span class="p-category">pelletyze</span></a> and I’m happy that it is now in a presentable state. :) Since the release, I did some small updates but never did marketing for the site to reach a user base. Because I still have some features and small improvements I want to implement before bringing it to a wider audience.</p>

<p>In spring, I tried Cursor and made a subscription. I wanted to see what AI hype is all about and how it works out. For a year I was already a Copilot/Supermaven user and had a small glimpse of what AI can do. For me it was quite a learning curve, because I needed to find my flow. After I found it, I tried Claude Code and never looked back. 😅 I still have a Cursor subscription because I’ve subscribed for a year, like I did with Copilot and Supermaven. Which was not a mistake, but in a year a lot can happen. Especially in the tech and AI space. So for the future, I know that I just try things out on a monthly basis. My most used AI tools now are ChatGPT and Claude Code. Maybe I should also write about my usage of them in another post. To end the paragraph, I can say that in 2025 AI had a massive impact on how I work now, and it improved a lot for me.</p>

<p>In the summer I made an old friend after over 10 years. We split in a not-so-friendly way and never talked it out, so I never knew in which state we were. But I tried to take all the courage and wrote him a message with what I feel about us. The good thing is no one was mad, and we’ve met and talked for some hours. :)</p>

<p>Over the summer, we made a hard decision. Our oldest was on the path to start school. But we decided to let him go to the kindergarten for one more year. He is now with his brother in a new kindergarten. The hardest part is not the new location or that he is not in school; for him, the hardest thing was leaving his friends. Which is something we had in mind but never thought that it would have such an impact on a little boy. Socially it is hard for him. But we hope that eventually, it is better for him. Since he got six on his school enrollment. He was not thoroughly ready for it. In 2026, we then have his school enrollment, and I hope that it improves everything for him, because he can then see his old friends again daily.</p>

<p>In December, I started my <a href="https://barfooz.xyz/tag:AdventOfProgress" class="hashtag"><span>#</span><span class="p-category">AdventOfProgress</span></a> event. Last year I did <a href="https://barfooz.xyz/tag:AdventOfCode" class="hashtag"><span>#</span><span class="p-category">AdventOfCode</span></a> and <a href="https://barfooz.xyz/tag:AdventOfTypescript" class="hashtag"><span>#</span><span class="p-category">AdventOfTypescript</span></a> and while it was fun, it cost me a lot of time I could have spent on something better. And this year, I wanted to spend the time on something with a real outcome. So I developed a React Native app in December. It was a lot of fun, and I had a prototype, which was planned to be done in the spring of 2025. 😅 But this is not relevant. I completed something again in 2025, and this is important. I now need to tweak some things and complete the landing page so I have a releasable app. The prototype is installed on iOS and Android on the phones of some friends, and this is a wonderful feeling. They can provide feedback, and I have a small audience right from the start. :)</p>

<p>Over the December break, I also finished most of our basement, especially the playroom for the kids. I’ve added a swing, a therapy swing. We know this type of swing from the occupational therapy for the little one. The boys and all the other kids who visited us over the last few days had a lot of fun with it. I also added wall bars so the kids can climb and “hang” around. Finishing this project gave me a gigantic relief and gave me a feeling of being free. Sounds strange, but this project was now in the works for some years. Which was not my fault. Mostly. Progress here had depended on some external people.</p>

<p>So the 24.12. marked a point where I could check some points on my to-do list as done. So I could start some new things, which were waiting for some time now. In this case, start setting up a home lab. I used an old notebook to install Proxmox, Forgejo, and Vaultwarden. I can now self-host my Git projects in my local environment and access them via VPN from the outside. Setting up Proxmox with a good backup strategy gives me a foundation I can build upon in the future. I plan to extend this all with Home Assistant and other tools that will improve my life. :)</p>

<p>All this sums up 2025 quite well. It was a good year. And I look forward to what 2026 will give me and my family. 😎</p>

<hr/>

<p><strong>83</strong> of <a href="https://barfooz.xyz/tag:100DaysToOffload" class="hashtag"><span>#</span><span class="p-category">100DaysToOffload</span></a><br/>
<a href="https://barfooz.xyz/tag:log" class="hashtag"><span>#</span><span class="p-category">log</span></a> <a href="https://barfooz.xyz/tag:lastyear" class="hashtag"><span>#</span><span class="p-category">lastyear</span></a> <a href="https://barfooz.xyz/tag:review" class="hashtag"><span>#</span><span class="p-category">review</span></a> #2025<br/>
<em>Thoughts? <a href="https://remark.as/p/barfooz.xyz/my-2025-review">Discuss...</a></em></p>
]]></content:encoded>
      <guid>https://barfooz.xyz/my-2025-review</guid>
      <pubDate>Thu, 01 Jan 2026 21:12:52 +0000</pubDate>
    </item>
    <item>
      <title>Pelletyze — Update #9: Give more feedback</title>
      <link>https://barfooz.xyz/pelletyze-update-9-give-more-feedback?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Wow, I wrote this post nearly 2 months ago. Why didn&#39;t I publish this one?&#xA;&#xA;Currently, I&#39;m on a path to improve the UX a bit by giving more feedback on actions.&#xA;&#xA;Last time I brought a CSV import error to the frontend, which otherwise failed silently and had been a requirement from the start.&#xA;&#xA;The next step is to show a success message after the user imported CSV Data successfully. The difficulty here was, that I didn&#39;t want to convert my import component into a client component. So I was unable to use useActionState. My solution now is, that I created a Catch-all Segments route. Now, after a successful import, I can simply redirect to this page and show a success message. Which is not ideal, and I would prefer something like useActionState for server components, but it is what it is.&#xA;---  &#xA;18 of #100DaysToOffload  &#xA;pelletyze  &#xA;Thoughts? a href=&#34;https://remark.as/p/barfooz.xyz/pelletyze-update-9-give-more-feedback&#34;Discuss.../a]]&gt;</description>
      <content:encoded><![CDATA[<p><em>Wow, I wrote this post nearly 2 months ago. Why didn&#39;t I publish this one?</em></p>

<p>Currently, I&#39;m on a path to improve the UX a bit by giving more feedback on actions.</p>

<p><a href="https://barfooz.xyz/pelletyze-update-8-bring-the-error-to-the-frontend">Last time</a> I brought a CSV import error to the frontend, which otherwise failed silently and had been a requirement from the start.</p>

<p><img src="https://i.snap.as/2XgyG9iL.png" alt=""/></p>

<p>The next step is to show a success message after the user imported CSV Data successfully. The difficulty here was, that I didn&#39;t want to convert my import component into a client component. So I was unable to use <a href="https://react.dev/reference/react/useActionState"><code>useActionState</code></a>. My solution now is, that I created a <a href="https://nextjs.org/docs/app/building-your-application/routing/dynamic-routes#optional-catch-all-segments">Catch-all Segments</a> route. Now, after a successful import, I can simply redirect to this page and show a success message. Which is not ideal, and I would prefer something like <code>useActionState</code> for server components, but it is what it is.</p>

<hr/>

<p><strong>18</strong> of <a href="https://barfooz.xyz/tag:100DaysToOffload" class="hashtag"><span>#</span><span class="p-category">100DaysToOffload</span></a><br/>
<a href="https://barfooz.xyz/tag:pelletyze" class="hashtag"><span>#</span><span class="p-category">pelletyze</span></a><br/>
<em>Thoughts? <a href="https://remark.as/p/barfooz.xyz/pelletyze-update-9-give-more-feedback">Discuss...</a></em></p>
]]></content:encoded>
      <guid>https://barfooz.xyz/pelletyze-update-9-give-more-feedback</guid>
      <pubDate>Tue, 27 May 2025 11:42:35 +0000</pubDate>
    </item>
    <item>
      <title>Pelletyze — Update #8: Bring the error to the frontend!</title>
      <link>https://barfooz.xyz/pelletyze-update-8-bring-the-error-to-the-frontend?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Displays the error message: “Looks like your CSV is not formatted correctly”&#xA;&#xA;Finally, I found a solution to throw an error at the frontend, while importing wrong CSV Data on the server. For Fast-CSV, I needed a solution to parse the data and put the data into the database. While this part was easy, the error message from Supabase was swallowed, and I had no practical option to present the error to the frontend. Or, there was no uncomplicated way, since now. :D&#xA;&#xA;const stream = csv&#xA;  .parse(options)&#xA;  .on(&#34;error&#34;, (error) =  {&#xA;    console.log(error);&#xA;  })&#xA;  .on(&#34;data&#34;, (row) =  {&#xA;    result.push(row);&#xA;  })&#xA;  .on(&#34;end&#34;, async () =  {&#xA;    const supabase = await createClient();&#xA;    const { error, statusText } = await supabase&#xA;      .from(&#34;fillingsimport&#34;)&#xA;      .upsert(completeFillings(result))&#xA;      .select();&#xA;&#xA;    if (error) {&#xA;      throw new Error(${error.message}, ${statusText});&#xA;    }&#xA;  });&#xA;&#xA;stream.write(fileData);&#xA;stream.end();&#xA;This was my initial solution, and the error at the end was never shown. 🤷&#xA;&#xA;The new version is wrapped with a new Promise and calls reject if adding data to Supabase produces an error. Easy, right? I&#39;m so happy that I don&#39;t need to wrap an ErrorBoundary / or something else. &#xA;await new Promisevoid((resolve, reject) =  {&#xA;  const stream = csv&#xA;    .parse(options)&#xA;    .on(&#34;error&#34;, (error) =  {&#xA;      console.log(error);&#xA;    })&#xA;    .on(&#34;data&#34;, (row) =  {&#xA;      result.push(row);&#xA;    })&#xA;    .on(&#34;end&#34;, async () =  {&#xA;      const supabase = await createClient();&#xA;      const { error, statusText } = await supabase&#xA;        .from(&#34;fillingsimport&#34;)&#xA;        .upsert(completeFillings(result))&#xA;        .select();&#xA;&#xA;      if (error) {&#xA;        console.error({ error, statusText, result });&#xA;        reject(new Error(&#34;Looks like your CSV is not formatted correctly&#34;));&#xA;      }&#xA;&#xA;      resolve();&#xA;    });&#xA;&#xA;  stream.write(fileData);&#xA;  stream.end();&#xA;});&#xA;&#xA;This little fix makes me happier than it perhaps should. But in the end, that it. I thought much more about a solution than it took time to write the code. I thought at least on and off for 3 days about it. And today, the “a-ha” moment under the shower. 😎&#xA;---  &#xA;14 of #100DaysToOffload  &#xA;pelletyze  &#xA;Thoughts? a href=&#34;https://remark.as/p/barfooz.xyz/pelletyze-update-8-bring-the-error-to-the-frontend&#34;Discuss.../a]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/feT1EDnZ.jpg" alt="Displays the error message: “Looks like your CSV is not formatted correctly”"/></p>

<p>Finally, I found a solution to throw an error at the frontend, while importing wrong CSV Data on the server. For <a href="https://c2fo.github.io/fast-csv/">Fast-CSV</a>, I needed a solution to parse the data and put the data into the database. While this part was easy, the error message from <a href="https://supabase.com/">Supabase</a> was swallowed, and I had no practical option to present the error to the frontend. Or, there was no uncomplicated way, since now. :D</p>

<pre><code class="language-javascript">const stream = csv
  .parse(options)
  .on(&#34;error&#34;, (error) =&gt; {
    console.log(error);
  })
  .on(&#34;data&#34;, (row) =&gt; {
    result.push(row);
  })
  .on(&#34;end&#34;, async () =&gt; {
    const supabase = await createClient();
    const { error, statusText } = await supabase
      .from(&#34;fillings_import&#34;)
      .upsert(completeFillings(result))
      .select();

    if (error) {
      throw new Error(`${error.message}, ${statusText}`);
    }
  });

stream.write(fileData);
stream.end();
</code></pre>

<p>This was my initial solution, and the error at the end was never shown. 🤷</p>

<p>The new version is wrapped with a <code>new Promise</code> and calls <code>reject</code> if adding data to Supabase produces an error. Easy, right? I&#39;m so happy that I don&#39;t need to wrap an <code>&lt;ErrorBoundary /&gt;</code> or something else.</p>

<pre><code class="language-javascript">await new Promise&lt;void&gt;((resolve, reject) =&gt; {
  const stream = csv
    .parse(options)
    .on(&#34;error&#34;, (error) =&gt; {
      console.log(error);
    })
    .on(&#34;data&#34;, (row) =&gt; {
      result.push(row);
    })
    .on(&#34;end&#34;, async () =&gt; {
      const supabase = await createClient();
      const { error, statusText } = await supabase
        .from(&#34;fillings_import&#34;)
        .upsert(completeFillings(result))
        .select();

      if (error) {
        console.error({ error, statusText, result });
        reject(new Error(&#34;Looks like your CSV is not formatted correctly&#34;));
      }

      resolve();
    });

  stream.write(fileData);
  stream.end();
});
</code></pre>

<p>This little fix makes me happier than it perhaps should. But in the end, that it. I thought much more about a solution than it took time to write the code. I thought at least on and off for 3 days about it. And today, the “a-ha” moment under the shower. 😎</p>

<hr/>

<p><strong>14</strong> of <a href="https://barfooz.xyz/tag:100DaysToOffload" class="hashtag"><span>#</span><span class="p-category">100DaysToOffload</span></a><br/>
<a href="https://barfooz.xyz/tag:pelletyze" class="hashtag"><span>#</span><span class="p-category">pelletyze</span></a><br/>
<em>Thoughts? <a href="https://remark.as/p/barfooz.xyz/pelletyze-update-8-bring-the-error-to-the-frontend">Discuss...</a></em></p>
]]></content:encoded>
      <guid>https://barfooz.xyz/pelletyze-update-8-bring-the-error-to-the-frontend</guid>
      <pubDate>Sat, 22 Mar 2025 23:22:11 +0000</pubDate>
    </item>
    <item>
      <title>Pelletyze — Update #7: Update Next.js, Tailwind CSS, Next-Intl and ESLint to their latest versions</title>
      <link>https://barfooz.xyz/pelletyze-update-7-update-next-js-tailwind-css-next-intl-and-eslint-to?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[In the last few months, there were some big releases. ESLint v9 was one of them. Sadly, do to their new config approach, I was unable to upgrade Next.js. While waiting for Vercel to fix it, Tailwind CSS v4 and next-intl v4 were released. So I faced 4 big releases. &#xA;&#xA;The first one I did was next-intl v4. They wrote a nice blog post before v4 was released. So you were able to prepare your codebase before the switch, which was great and worked very well and without problems. 👍 &#xA;&#xA;Next in line was Tailwind CSS v4. And with it, Tailwind-Merge v3. You need to upgrade them together. Because twMerge dropped tw v3 support. Basically, this worked flawlessly. But some adjustments needed to be done. I use the reset.css from Josh W Comeau which needs special treatment when used with Tailwind CSS v4. Furthermore, I&#39;ve added some custom styling to the html, body and h1...h6 tags. The result was that I had to wrap them to the correct layers for, so they will not collide with TWv4.&#xA;@import &#34;./reset.css&#34; layer(base);&#xA;@import &#34;./custom.css&#34; layer(base);&#xA;While using the codemod from TWv4 to migrate everything, it swallowed my custom classes. Which I had to add back manually. The new solution is with CSS only and is straightforward.&#xA;@utility border-image-highlight-b {&#xA;  border-width: (--tw-border-width);&#xA;  border-image: linear-gradient(&#xA;      to right,&#xA;      var(--tw-gradient-from),&#xA;      var(--tw-gradient-to)&#xA;    )&#xA;    1;&#xA;}&#xA;That&#39;s it. The rest was done via the codemod. :)&#xA;&#xA;After the TWv4 upgrade was done, I continued with the Next.js v15 upgrade. Next.js also brought a codemod with it which did its job also very code. But it had an easy job here because I did nothing special. It changed some code in the code, which I had to clean up a bit afterward. Because it looked ugly and was too verbose.&#xA;&#xA;Let&#39;s continue with the biggest pain, while I did the update on my #pelletyze codebase. ESLint v9. I was tried and erroring my way through the process but the documentation on both sides, Next.js and ESLInt were not so user-friendly then for the other codebases. Sure, if you just use ESLint, you are fine. But the combination with Next.js was a bit of a pain in the ass. Therefore, I don&#39;t like the look of the new flat config, especially the fix Next.js needed to bring in, to get everything to work. I hope this will improve in the future.&#xA;&#xA;Before or after you upgrade, delete the .next folder. I had seen it much earlier to save some sanity. Because every lint run failed, and because there was some old code in it. Which gave me this error: a.getScope is not a function. After this issue was solved, I needed to add some packages because Next.js was not installing them by itself, thous it depends on them for linting. 🤷 These packages are: eslint-plugin-react and eslint-plugin-react-hook. This all happened on my second try. On the first one, a stopped after 2hrs and watched Severance. On the next day, I stared from scratch. I&#39;ve installed a new test project with create-next-app and copied the important ESLint config stuff. Then I stepped my way through my old config. After I solved the major issues, the rest followed effortless. I had eslint-prettier installed, which was easy to put into the new config. And then there were some rules for next-intl, which was also just copy pasta into the new config.&#xA;&#xA;Yesterday evening, I got to bed with a good feeling. Because I was done with the big update and I can now continue on my roadmap to the first public release of the #pelletyze app.&#xA;&#xA;Man, what a huge update post. :) And the first one, completely written while traveling by train. I hope that someone finds it, and it will help to solve some issues on their side.&#xA;&#xA;Now I&#39;ve earned me some episode of Severance. 😎&#xA;---  &#xA;13 of #100DaysToOffload  &#xA;pelletyze  &#xA;Thoughts? a href=&#34;https://remark.as/p/barfooz.xyz/pelletyze-update-7-update-next-js-tailwind-css-next-intl-and-eslint-to&#34;Discuss.../a]]&gt;</description>
      <content:encoded><![CDATA[<p>In the last few months, there were some big releases. ESLint v9 was one of them. Sadly, do to their new config approach, I was unable to upgrade Next.js. While waiting for Vercel to fix it, Tailwind CSS v4 and next-intl v4 were released. So I faced 4 big releases.</p>

<p>The first one I did was next-intl v4. They wrote a nice <a href="https://next-intl.dev/blog/next-intl-3-22">blog post</a> before v4 was released. So you were able to prepare your codebase before the switch, which was great and worked very well and without problems. 👍</p>

<p>Next in line was Tailwind CSS v4. And with it, <a href="https://github.com/dcastil/tailwind-merge/releases/tag/v3.0.0">Tailwind-Merge v3</a>. You need to upgrade them together. Because twMerge dropped tw v3 support. Basically, this worked flawlessly. But some adjustments needed to be done. I use the reset.css from <a href="https://www.joshwcomeau.com/css/custom-css-reset/">Josh W Comeau</a> which needs special treatment when used with Tailwind CSS v4. Furthermore, I&#39;ve added some custom styling to the <code>html</code>, <code>body</code> and <code>h1...h6</code> tags. The result was that I had to wrap them to the correct layers for, so they will not collide with TWv4.</p>

<pre><code class="language-css">@import &#34;./reset.css&#34; layer(base);
@import &#34;./custom.css&#34; layer(base);
</code></pre>

<p>While using the <a href="https://tailwindcss.com/docs/upgrade-guide">codemod</a> from TWv4 to migrate everything, it swallowed my custom classes. Which I had to add back manually. The new solution is with CSS only and is straightforward.</p>

<pre><code class="language-css">@utility border-image-highlight-b {
  border-width: (--tw-border-width);
  border-image: linear-gradient(
      to right,
      var(--tw-gradient-from),
      var(--tw-gradient-to)
    )
    1;
}
</code></pre>

<p>That&#39;s it. The rest was done via the codemod. :)</p>

<p>After the TWv4 upgrade was done, I continued with the Next.js v15 upgrade. Next.js also brought a codemod with it which did its job also very code. But it had an easy job here because I did nothing special. It changed some code in the code, which I had to clean up a bit afterward. Because it looked ugly and was too verbose.</p>

<p>Let&#39;s continue with the biggest pain, while I did the update on my <a href="https://barfooz.xyz/tag:pelletyze" class="hashtag"><span>#</span><span class="p-category">pelletyze</span></a> codebase. ESLint v9. I was tried and erroring my way through the process but the documentation on both sides, Next.js and ESLInt were not so user-friendly then for the other codebases. Sure, if you just use ESLint, you are fine. But the combination with Next.js was a bit of a pain in the ass. Therefore, I don&#39;t like the look of the new flat config, especially the fix Next.js needed to bring in, to get everything to work. I hope this will improve in the future.</p>

<p>Before or after you upgrade, delete the <code>.next</code> folder. I had seen it much earlier to save some sanity. Because every lint run failed, and because there was some old code in it. Which gave me this error: <code>a.getScope is not a function</code>. After this issue was solved, I needed to add some packages because Next.js was not installing them by itself, thous it depends on them for linting. 🤷 These packages are: <code>eslint-plugin-react</code> and <code>eslint-plugin-react-hook</code>. This all happened on my second try. On the first one, a stopped after 2hrs and watched Severance. On the next day, I stared from scratch. I&#39;ve installed a new test project with <code>create-next-app</code> and copied the important ESLint config stuff. Then I stepped my way through my old config. After I solved the major issues, the rest followed effortless. I had eslint-prettier installed, which was easy to put into the new config. And then there were some <code>rules</code> for next-intl, which was also just copy pasta into the new config.</p>

<p>Yesterday evening, I got to bed with a good feeling. Because I was done with the big update and I can now continue on my roadmap to the first public release of the <a href="https://barfooz.xyz/tag:pelletyze" class="hashtag"><span>#</span><span class="p-category">pelletyze</span></a> app.</p>

<p>Man, what a huge update post. :) And the first one, completely written while traveling by train. I hope that someone finds it, and it will help to solve some issues on their side.</p>

<p>Now I&#39;ve earned me some episode of Severance. 😎</p>

<hr/>

<p><strong>13</strong> of <a href="https://barfooz.xyz/tag:100DaysToOffload" class="hashtag"><span>#</span><span class="p-category">100DaysToOffload</span></a><br/>
<a href="https://barfooz.xyz/tag:pelletyze" class="hashtag"><span>#</span><span class="p-category">pelletyze</span></a><br/>
<em>Thoughts? <a href="https://remark.as/p/barfooz.xyz/pelletyze-update-7-update-next-js-tailwind-css-next-intl-and-eslint-to">Discuss...</a></em></p>
]]></content:encoded>
      <guid>https://barfooz.xyz/pelletyze-update-7-update-next-js-tailwind-css-next-intl-and-eslint-to</guid>
      <pubDate>Thu, 20 Mar 2025 08:31:38 +0000</pubDate>
    </item>
    <item>
      <title>Pelletyze — Update #6</title>
      <link>https://barfooz.xyz/pelletyze-update-6?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Another Sunday with some time to work on my App.&#xA;&#xA;Today I made good progress. Mostly for code in the background, so I don&#39;t really have screenshots besides one.&#xA;---&#xA;span style=&#34;display:block;text-align:center;&#34;/span&#xA;This will add the current version number to the frontend. First, I thought about a complex idea by adding the version number to an .env file or to a constant hardcoded inside the codebase. Then I thought, why not use the package.json version number? I maintain them with every release, so it is the single of truth. The code is also simple and just works.&#xA;&#xA;import packageJson from &#34;@/package.json&#34;;&#xA;&#xA;export function AppVersionNumber() {&#xA;  return (&#xA;    p className=&#34;flex gap-2 justify-center items-center&#34;&#xA;      &lt;small&#xA;        className=&#34;opacity-50 align-middle&#34;&#xA;        title={App Version: packageJson.version}&#xA;        aria-label={App Version: packageJson.version}&#xA;        {packageJson.version}&#xA;      /small&#xA;    /p&#xA;  );&#xA;}&#xA;---&#xA;Next on my plate, there were some bugs to fix. One, I saw at the turn of the year and I had it on my list since then. I couldn&#39;t really explain how this came together. Luckily, this one resolved itself after I removed the old data and put the new one in. Because the old data was corrupted.&#xA;&#xA;span style=&#34;display:block;text-align:center;&#34;/span&#xA;---&#xA;Another bug was a simple fix because it was just a key prop warning. I&#39;ve added the key prop and everything was fine. 😎&#xA;---&#xA;The last Bug was related to the data export to CSV. First I&#39;ve string.replaced() my way through, but later I found out, this isn&#39;t an ideal solution. So I sat down and rewrote some parts. Supabase has its own csv export, right after you fetch your data. Which is nice, but the result was not importable for fast-csv.&#xA;&#xA;Now I run csv.writeToString on my formatted data. The result cuts the file size by half. Which is not relevant because it&#39;s under 1kb but still, a good achievement.&#xA;&#xA;  const formattedData = [&#xA;    [&#34;bags&#34;, &#34;filledat&#34;],&#xA;    ...(data || []).map((row) =  [&#xA;      row.bags,&#xA;      format(row.filledat, &#34;yyyy-MM-dd&#34;),&#xA;    ]),&#xA;  ];&#xA;&#xA;  const exportReadyCSV = await csv.writeToString(formattedData, {&#xA;    delimiter: &#34;;&#34;,&#xA;  });&#xA;---&#xA;And the last to-do for today was, to update all packages with the patch and minor version updates. If clicked through the application and everything worked, so this was a quick one too. :)&#xA;&#xA;I would say that this was a productive Sunday. :)&#xA;span style=&#34;display:block;text-align:center;&#34;/span&#xA;&#xA;I will visit my client from Tuesday to Thursday, and I&#39;m sitting around 12hrs on the Train, so if I&#39;m lazy, I will be watching some series or playing on my Steam Deck. OR I will be productive and work more on my Application. It depends on the mood. So lets see. :)&#xA;---  &#xA;11 of #100DaysToOffload  &#xA;pelletyze  &#xA;Thoughts? a href=&#34;https://remark.as/p/barfooz.xyz/pelletyze-update-6&#34;Discuss.../a]]&gt;</description>
      <content:encoded><![CDATA[<p>Another Sunday with some time to work on my App.</p>

<p>Today I made good progress. Mostly for code in the background, so I don&#39;t really have screenshots besides one.</p>

<hr/>

<p><span style="display:block;text-align:center;"><img src="https://i.snap.as/nVz327dB.png" alt=""/></span>
This will add the current version number to the frontend. First, I thought about a complex idea by adding the version number to an <code>.env</code> file or to a constant hardcoded inside the codebase. Then I thought, why not use the package.json version number? I maintain them with every release, so it is the single of truth. The code is also simple and just works.</p>

<pre><code class="language-javascript">import packageJson from &#34;@/package.json&#34;;

export function AppVersionNumber() {
  return (
    &lt;p className=&#34;flex gap-2 justify-center items-center&#34;&gt;
      &lt;small
        className=&#34;opacity-50 align-middle&#34;
        title={`App Version: packageJson.version`}
        aria-label={`App Version: packageJson.version`}
      &gt;
        {packageJson.version}
      &lt;/small&gt;
    &lt;/p&gt;
  );
}
</code></pre>

<hr/>

<p>Next on my plate, there were some bugs to fix. One, I saw at the turn of the year and I had it on my list since then. I couldn&#39;t really explain how this came together. Luckily, this one resolved itself after I removed the old data and put the new one in. Because the old data was corrupted.</p>

<p><span style="display:block;text-align:center;"><img src="https://i.snap.as/5cKKclfB.jpeg" alt=""/></span></p>

<hr/>

<p>Another bug was a simple fix because it was just a key prop warning. I&#39;ve added the key prop and everything was fine. 😎</p>

<hr/>

<p>The last Bug was related to the data export to CSV. First I&#39;ve string.replaced() my way through, but later I found out, this isn&#39;t an ideal solution. So I sat down and rewrote some parts. Supabase has its own <a href="https://supabase.com/docs/reference/javascript/db-csv">csv export</a>, right after you fetch your data. Which is nice, but the result was not importable for fast-csv.</p>

<p>Now I run <a href="https://c2fo.github.io/fast-csv/docs/formatting/methods#writetostring">csv.writeToString</a> on my formatted data. The result cuts the file size by half. Which is not relevant because it&#39;s under 1kb but still, a good achievement.</p>

<pre><code class="language-javascript">  const formattedData = [
    [&#34;bags&#34;, &#34;filled_at&#34;],
    ...(data || []).map((row) =&gt; [
      row.bags,
      format(row.filled_at, &#34;yyyy-MM-dd&#34;),
    ]),
  ];

  const exportReadyCSV = await csv.writeToString(formattedData, {
    delimiter: &#34;;&#34;,
  });
</code></pre>

<hr/>

<p>And the last to-do for today was, to update all packages with the patch and minor version updates. If clicked through the application and everything worked, so this was a quick one too. :)</p>

<p>I would say that this was a productive Sunday. :)
<span style="display:block;text-align:center;"><img src="https://i.snap.as/NyMm97e3.jpg" alt=""/></span></p>

<p>I will visit my client from Tuesday to Thursday, and I&#39;m sitting around 12hrs on the Train, so if I&#39;m lazy, I will be watching some series or playing on my Steam Deck. OR I will be productive and work more on my Application. It depends on the mood. So lets see. :)</p>

<hr/>

<p><strong>11</strong> of <a href="https://barfooz.xyz/tag:100DaysToOffload" class="hashtag"><span>#</span><span class="p-category">100DaysToOffload</span></a><br/>
<a href="https://barfooz.xyz/tag:pelletyze" class="hashtag"><span>#</span><span class="p-category">pelletyze</span></a><br/>
<em>Thoughts? <a href="https://remark.as/p/barfooz.xyz/pelletyze-update-6">Discuss...</a></em></p>
]]></content:encoded>
      <guid>https://barfooz.xyz/pelletyze-update-6</guid>
      <pubDate>Sun, 16 Mar 2025 16:08:25 +0000</pubDate>
    </item>
    <item>
      <title>Pelletyze — Update #5</title>
      <link>https://barfooz.xyz/pelletyze-update-5?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Finally, I was able to work again on my Pelletyze project. 🥳&#xA;&#xA;The Bug&#xA;&#xA;There was a bug, where the checkbox was not recognized and the formData I&#39;ve sent to the server was empty. This feature worked in the past and I don&#39;t understand why it broke.&#xA;&#xA;The Fix&#xA;&#xA;Because I use the @radix-ui/react-checkbox and don&#39;t handle the state manually, I need to wrap with a @radix-ui/react-form. That&#39;s it. 😎&#xA;&#xA;While I was working on the component, I also transformed it into a server component. Which was easily done, by using getTranslation() from next-intl instead of useTranslation and making the component asynchronous.&#xA;&#xA;The bug was the reason I&#39;ve implemented the delete-all Button. To save me a trip to the Supabase admin page and clear the table.&#xA;&#xA;This was my Sunday contribution to Pelletyze.&#xA;---  &#xA;10 of #100DaysToOffload  &#xA;pelletyze  &#xA;Thoughts? a href=&#34;https://remark.as/p/barfooz.xyz/pelletyze-update-5&#34;Discuss.../a]]&gt;</description>
      <content:encoded><![CDATA[<p>Finally, I was able to work again on my Pelletyze project. 🥳</p>

<h2 id="the-bug" id="the-bug">The Bug</h2>

<p>There was a bug, where the checkbox was not recognized and the <code>formData</code> I&#39;ve sent to the server was empty. This feature worked in the past and I don&#39;t understand why it broke.</p>

<h2 id="the-fix" id="the-fix">The Fix</h2>

<p>Because I use the <a href="https://www.radix-ui.com/primitives/docs/components/checkbox">@radix-ui/react-checkbox</a> and don&#39;t handle the state manually, I need to wrap with a <a href="https://www.radix-ui.com/primitives/docs/components/form">@radix-ui/react-form</a>. That&#39;s it. 😎</p>

<p>While I was working on the component, I also transformed it into a server component. Which was easily done, by using <code>getTranslation()</code> from <a href="https://next-intl.dev/">next-intl</a> instead of <code>useTranslation</code> and making the component asynchronous.</p>

<p>The bug was the reason I&#39;ve implemented the <a href="https://barfooz.xyz/pelletyze-themonthproject-update-2">delete-all</a> Button. To save me a trip to the Supabase admin page and clear the table.</p>

<p>This was my Sunday contribution to Pelletyze.</p>

<hr/>

<p><strong>10</strong> of <a href="https://barfooz.xyz/tag:100DaysToOffload" class="hashtag"><span>#</span><span class="p-category">100DaysToOffload</span></a><br/>
<a href="https://barfooz.xyz/tag:pelletyze" class="hashtag"><span>#</span><span class="p-category">pelletyze</span></a><br/>
<em>Thoughts? <a href="https://remark.as/p/barfooz.xyz/pelletyze-update-5">Discuss...</a></em></p>
]]></content:encoded>
      <guid>https://barfooz.xyz/pelletyze-update-5</guid>
      <pubDate>Sun, 09 Mar 2025 12:51:13 +0000</pubDate>
    </item>
    <item>
      <title>Pelletyze — #TheMonthProject update #4</title>
      <link>https://barfooz.xyz/pelletyze-themonthproject-update-4?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[This update is small. I&#39;ve fixed a small bug on mobile view and updated the CHANGELOG.md, which I forgot after the last release. Now everything is as it should be.&#xA;&#xA;Here, on the left is the bug and on the right the fixed version.  &#xA;span style=&#34;display:block;text-align:center;&#34;/span&#xA;&#xA;Sadly, I don&#39;t have time for more at the moment. But I think it is better than nothing.&#xA;---  &#xA;07 of #100DaysToOffload  &#xA;#TheMonthProject #pelletyze  &#xA;Thoughts? a href=&#34;https://remark.as/p/barfooz.xyz/pelletyze-themonthproject-update-4&#34;Discuss.../a]]&gt;</description>
      <content:encoded><![CDATA[<p>This update is small. I&#39;ve fixed a small bug on mobile view and updated the CHANGELOG.md, which I forgot after the last release. Now everything is as it should be.</p>

<p>Here, on the <strong>left</strong> is the bug and on the <strong>right</strong> the fixed version.<br/>
<span style="display:block;text-align:center;"><img src="https://i.snap.as/EjwCTh8v.jpg" alt=""/></span></p>

<p>Sadly, I don&#39;t have time for more at the moment. But I think it is better than nothing.</p>

<hr/>

<p><strong>07</strong> of <a href="https://barfooz.xyz/tag:100DaysToOffload" class="hashtag"><span>#</span><span class="p-category">100DaysToOffload</span></a><br/>
<a href="https://barfooz.xyz/tag:TheMonthProject" class="hashtag"><span>#</span><span class="p-category">TheMonthProject</span></a> <a href="https://barfooz.xyz/tag:pelletyze" class="hashtag"><span>#</span><span class="p-category">pelletyze</span></a><br/>
<em>Thoughts? <a href="https://remark.as/p/barfooz.xyz/pelletyze-themonthproject-update-4">Discuss...</a></em></p>
]]></content:encoded>
      <guid>https://barfooz.xyz/pelletyze-themonthproject-update-4</guid>
      <pubDate>Fri, 14 Feb 2025 09:27:17 +0000</pubDate>
    </item>
    <item>
      <title>Pelletyze — #TheMonthProject update #3</title>
      <link>https://barfooz.xyz/pelletyze-themonthproject-update-3?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Today, just a small update. Yesterday I forgot to commit my changes. While I was on, I prepared the new release, which I thought I already did it in December.&#xA;&#xA;So, I just did some small clean up tasks. Updating the CHANGELOG.md, and tagging the current commit with the version number v0.5.0-alpine-shepherd-boy. Because I&#39;m a massive fan of the series Better Call Saul, my version names will have the names of episodes from BCS.&#xA;&#xA;And that&#39;s it for #TheMonthProject update #3. Furthermore, this is post 5 in the #100DaysToOffload challenge. The pressure to complete round 1 did something to me. I already have 5 posts within the first week. Which makes me happy. Seems like I&#39;m now in some flow of writing blog posts. 🥳&#xA;&#xA;---  &#xA;05 of #100DaysToOffload  &#xA;#TheMonthProject #pelletyze  &#xA;Thoughts? a href=&#34;https://remark.as/p/barfooz.xyz/pelletyze-themonthproject-update-3&#34;Discuss.../a]]&gt;</description>
      <content:encoded><![CDATA[<p>Today, just a small update. Yesterday I forgot to commit my changes. While I was on, I prepared the new release, which I thought I already did it in December.</p>

<p>So, I just did some small clean up tasks. Updating the CHANGELOG.md, and tagging the current commit with the version number <em>v0.5.0-alpine-shepherd-boy</em>. Because I&#39;m a massive fan of the series Better Call Saul, my version names will have the names of episodes from BCS.</p>

<p>And that&#39;s it for <a href="https://barfooz.xyz/tag:TheMonthProject" class="hashtag"><span>#</span><span class="p-category">TheMonthProject</span></a> update #3. Furthermore, this is post 5 in the <a href="https://barfooz.xyz/tag:100DaysToOffload" class="hashtag"><span>#</span><span class="p-category">100DaysToOffload</span></a> challenge. The pressure to complete round 1 did something to me. I already have 5 posts within the first week. Which makes me happy. Seems like I&#39;m now in some flow of writing blog posts. 🥳</p>

<hr/>

<p><strong>05</strong> of <a href="https://barfooz.xyz/tag:100DaysToOffload" class="hashtag"><span>#</span><span class="p-category">100DaysToOffload</span></a><br/>
<a href="https://barfooz.xyz/tag:TheMonthProject" class="hashtag"><span>#</span><span class="p-category">TheMonthProject</span></a> <a href="https://barfooz.xyz/tag:pelletyze" class="hashtag"><span>#</span><span class="p-category">pelletyze</span></a><br/>
<em>Thoughts? <a href="https://remark.as/p/barfooz.xyz/pelletyze-themonthproject-update-3">Discuss...</a></em></p>
]]></content:encoded>
      <guid>https://barfooz.xyz/pelletyze-themonthproject-update-3</guid>
      <pubDate>Thu, 06 Feb 2025 08:01:11 +0000</pubDate>
    </item>
    <item>
      <title>Pelletyze — #TheMonthProject update #2</title>
      <link>https://barfooz.xyz/pelletyze-themonthproject-update-2?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[&#xA;&#xA;Today, I&#39;ve implemented a “delete all” button. To have the opportunity to just delete all entries. This is just a convenient feature so that I don&#39;t have to do it directly in Supabase. I don&#39;t know if a real user would need this, but it was easy to implement and saves me some steps. Most of the delete logic is already implemented, I just needed to generalize the button and the action. Doing Server Actions in Next.js is straightforward to implement.&#xA;&#xA;The most time was used on the question, where I should put this button. While on it, I also fixed some minor style issues for desktop and mobile.&#xA;&#xA;That&#39;s it for today&#39;s #TheMonthProject effort. Going +50 min on this simple topic feels a bit long. But anyway, progress is still progress. 👋&#xA;---  &#xA;04 of #100DaysToOffload  &#xA;#TheMonthProject #pelletyze  &#xA;Thoughts? a href=&#34;https://remark.as/p/barfooz.xyz/pelletyze-themonthproject-update-2&#34;Discuss.../a]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/Ax10yyTg.jpg" alt=""/></p>

<p>Today, I&#39;ve implemented a “delete all” button. To have the opportunity to just delete all entries. This is just a convenient feature so that I don&#39;t have to do it directly in Supabase. I don&#39;t know if a real user would need this, but it was easy to implement and saves me some steps. Most of the delete logic is already implemented, I just needed to generalize the button and the action. Doing <a href="https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations">Server Actions</a> in Next.js is straightforward to implement.</p>

<p>The most time was used on the question, where I should put this button. While on it, I also fixed some minor style issues for desktop and mobile.</p>

<p><img src="https://i.snap.as/FGIu1gHs.jpg" alt=""/></p>

<p>That&#39;s it for today&#39;s <a href="https://barfooz.xyz/tag:TheMonthProject" class="hashtag"><span>#</span><span class="p-category">TheMonthProject</span></a> effort. Going +50 min on this simple topic feels a bit long. But anyway, progress is still progress. 👋</p>

<hr/>

<p><strong>04</strong> of <a href="https://barfooz.xyz/tag:100DaysToOffload" class="hashtag"><span>#</span><span class="p-category">100DaysToOffload</span></a><br/>
<a href="https://barfooz.xyz/tag:TheMonthProject" class="hashtag"><span>#</span><span class="p-category">TheMonthProject</span></a> <a href="https://barfooz.xyz/tag:pelletyze" class="hashtag"><span>#</span><span class="p-category">pelletyze</span></a><br/>
<em>Thoughts? <a href="https://remark.as/p/barfooz.xyz/pelletyze-themonthproject-update-2">Discuss...</a></em></p>
]]></content:encoded>
      <guid>https://barfooz.xyz/pelletyze-themonthproject-update-2</guid>
      <pubDate>Wed, 05 Feb 2025 20:07:04 +0000</pubDate>
    </item>
  </channel>
</rss>