<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>2026 on codeskraps</title>
    <link>https://codeskraps.com/posts/2026/</link>
    <description>Recent content in 2026 on codeskraps</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
    <webMaster>me@codeskraps.com (codeskraps)</webMaster>
    <lastBuildDate>Fri, 06 Nov 2026 12:00:00 +0100</lastBuildDate>
    <atom:link href="https://codeskraps.com/posts/2026/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The Header Is a Shell Now</title>
      <link>https://codeskraps.com/posts/2026/header_shell/</link>
      <pubDate>Fri, 06 Nov 2026 12:00:00 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
      <guid>https://codeskraps.com/posts/2026/header_shell/</guid>
      <description>&lt;p&gt;Since this site went up, every page has started with &lt;code&gt;me@codeskraps.com ~ $&lt;/code&gt;. It was decoration, a nod to my &lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt; logo and to the terminal. This week I gave the site a new coat of paint, and while I was at it I made the prompt work. Just start typing on any page (or click the cursor at the top), then type &lt;code&gt;help&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;  &#xA;&#xA;  &lt;img&#xA;    src=&#34;https://codeskraps.com/posts/2026/header_shell/help_hu_1f313c5a8afea09e.webp&#34;&#xA;    srcset=&#34;https://codeskraps.com/posts/2026/header_shell/help_hu_99d3e742fcb69e00.webp 480w, https://codeskraps.com/posts/2026/header_shell/help_hu_d6dca2e5f524fa26.webp 800w, https://codeskraps.com/posts/2026/header_shell/help_hu_1f313c5a8afea09e.webp 1200w, https://codeskraps.com/posts/2026/header_shell/help_hu_ac3c77d1ad635d87.webp 1600w, https://codeskraps.com/posts/2026/header_shell/help_hu_6bb74a238896358b.webp 1760w&#34;&#xA;    sizes=&#34;(max-width: 704px) calc(100vw - 32px), 672px&#34;&#xA;    alt=&#34;The header shell showing the output of help: commands to get around, and the rest&#34;&#xA;    width=&#34;672&#34;&#xA;    height=&#34;398&#34;&#xA;    class=&#34;shot&#34;&#xA;    data-full=&#34;/posts/2026/header_shell/help_hu_6bb74a238896358b.webp&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;  &gt;</description>
    </item>
    <item>
      <title>Weekly Weather 4.0: From the Weather Now to Tonight&#39;s Sky</title>
      <link>https://codeskraps.com/posts/2026/weekly_weather_v4/</link>
      <pubDate>Mon, 26 Oct 2026 17:00:00 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
      <guid>https://codeskraps.com/posts/2026/weekly_weather_v4/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://codeskraps.com/projects/weekly-weather/&#34;&gt;Weekly Weather&lt;/a&gt; 3 gave the app a radar map. 4.0 is the biggest update it has had: the weather card became four pages you swipe through, from the weather now to tonight&amp;rsquo;s sky, and the map got a rain forecast, labels for every city and a layer for dark skies. It went to Google Play today.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;  &#xA;&#xA;  &lt;img&#xA;    src=&#34;https://codeskraps.com/posts/2026/weekly_weather_v4/now_hu_961f859c78a8dda0.webp&#34;&#xA;    srcset=&#34;https://codeskraps.com/posts/2026/weekly_weather_v4/now_hu_238ca749c3d7dc62.webp 480w, https://codeskraps.com/posts/2026/weekly_weather_v4/now_hu_961f859c78a8dda0.webp 720w&#34;&#xA;    sizes=&#34;(max-width: 432px) calc(100vw - 32px), 400px&#34;&#xA;    alt=&#34;Weekly Weather 4.0: the weather card with each day&amp;#39;s hours below&#34;&#xA;    width=&#34;400&#34;&#xA;    height=&#34;889&#34;&#xA;    class=&#34;responsive-image&#34;&#xA;    data-full=&#34;/posts/2026/weekly_weather_v4/now_hu_961f859c78a8dda0.webp&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;  &gt;</description>
    </item>
    <item>
      <title>My Self-Hosted Setup: Two Boxes, One Repo and an AI Co-Admin</title>
      <link>https://codeskraps.com/posts/2026/self_hosted_setup/</link>
      <pubDate>Tue, 20 Oct 2026 17:00:00 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
      <guid>https://codeskraps.com/posts/2026/self_hosted_setup/</guid>
      <description>&lt;p&gt;There are a hundred &amp;ldquo;what I self-host&amp;rdquo; posts out there, and most of them are a list of apps. Mine runs a lot of the same apps, so the list isn&amp;rsquo;t the interesting part. What&amp;rsquo;s different is how it&amp;rsquo;s put together and how it&amp;rsquo;s run:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Two machines with different jobs.&lt;/strong&gt; A cloud droplet for everything public, a mini PC at home for everything private.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Nothing at home is reachable from the internet.&lt;/strong&gt; Not even Jellyfin. No port forwards at all.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;The whole setup lives in one git repo&lt;/strong&gt;, and I run it day to day with Claude Code as a co-admin, with guardrails.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>sBrowser 5.0: Rebuilding a Small Browser for Today&#39;s Web</title>
      <link>https://codeskraps.com/posts/2026/sbrowser_5/</link>
      <pubDate>Tue, 20 Oct 2026 16:00:00 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
      <guid>https://codeskraps.com/posts/2026/sbrowser_5/</guid>
      <description>&lt;p&gt;sBrowser started life as a teaching app for a workshop at 091 Labs: a WebView, an address bar and a few buttons. It grew bookmarks, an ad blocker and a video player over the years, was rewritten in Kotlin and Jetpack Compose in January 2024 (3.x), and 4.4 shipped in March this year. When Google Play&amp;rsquo;s new rule to target Android 16 (API 36) came due, I sat down to bump a number and ended up rebuilding most of it. sBrowser 5.0 went to Google Play for review today.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;  &#xA;&#xA;  &lt;img&#xA;    src=&#34;https://codeskraps.com/posts/2026/sbrowser_5/browser_hu_967fb5fd74e84eb5.webp&#34;&#xA;    srcset=&#34;https://codeskraps.com/posts/2026/sbrowser_5/browser_hu_7419b50bedc13888.webp 480w, https://codeskraps.com/posts/2026/sbrowser_5/browser_hu_967fb5fd74e84eb5.webp 800w&#34;&#xA;    sizes=&#34;(max-width: 432px) calc(100vw - 32px), 400px&#34;&#xA;    alt=&#34;sBrowser 5.0 showing a Wikipedia article, with the address bar at the bottom&#34;&#xA;    width=&#34;400&#34;&#xA;    height=&#34;889&#34;&#xA;    class=&#34;responsive-image&#34;&#xA;    data-full=&#34;/posts/2026/sbrowser_5/browser_hu_967fb5fd74e84eb5.webp&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;  &gt;</description>
    </item>
    <item>
      <title>Hyprr: Trade Hyperliquid From Your Phone, Keys Included</title>
      <link>https://codeskraps.com/posts/2026/hyprr/</link>
      <pubDate>Mon, 19 Oct 2026 18:00:00 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
      <guid>https://codeskraps.com/posts/2026/hyprr/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://hyperliquid.xyz&#34;&gt;Hyperliquid&lt;/a&gt; is an on-chain exchange for perpetuals and spot that feels like a centralised one: an order book, sub-second fills and a public API for everything. Its website works on a phone if you&amp;rsquo;re patient, but I wanted a real app in my pocket. So in March I started &lt;a href=&#34;https://hyprr.cat&#34;&gt;Hyprr&lt;/a&gt;, a native client for it. It&amp;rsquo;s been on &lt;a href=&#34;https://play.google.com/store/apps/details?id=com.codeskraps.hyprr&#34;&gt;Google Play&lt;/a&gt; since the end of June, and version 1.1.1 went out today.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;  &#xA;&#xA;  &lt;img&#xA;    src=&#34;https://codeskraps.com/posts/2026/hyprr/portfolio_hu_e5a3d4e7d2c9386e.webp&#34;&#xA;    srcset=&#34;https://codeskraps.com/posts/2026/hyprr/portfolio_hu_d2b856337e29f470.webp 480w, https://codeskraps.com/posts/2026/hyprr/portfolio_hu_e5a3d4e7d2c9386e.webp 800w&#34;&#xA;    sizes=&#34;(max-width: 432px) calc(100vw - 32px), 400px&#34;&#xA;    alt=&#34;Hyprr: a wallet&amp;#39;s portfolio with equity, margin and performance stats&#34;&#xA;    width=&#34;400&#34;&#xA;    height=&#34;889&#34;&#xA;    class=&#34;responsive-image&#34;&#xA;    data-full=&#34;/posts/2026/hyprr/portfolio_hu_e5a3d4e7d2c9386e.webp&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;  &gt;</description>
    </item>
    <item>
      <title>Gas On Route: Cheap Fuel Along Your Route, Detour Included</title>
      <link>https://codeskraps.com/posts/2026/gas_on_route/</link>
      <pubDate>Mon, 19 Oct 2026 15:00:00 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
      <guid>https://codeskraps.com/posts/2026/gas_on_route/</guid>
      <description>&lt;p&gt;Years ago I found out that the Spanish Ministry publishes the price of every petrol station in the country as open data, updated live. I started an app around it, got as far as a list of stations, and left it in a folder. This month I picked it up again with a better question: not &amp;ldquo;where is fuel cheap?&amp;rdquo; but &amp;ldquo;where along the way I&amp;rsquo;m already driving does it actually pay to stop?&amp;rdquo; The result is &lt;a href=&#34;https://git.codeskraps.com/codeskraps/Gas_On_Route&#34;&gt;Gas On Route&lt;/a&gt;, now on &lt;a href=&#34;https://play.google.com/store/apps/details?id=com.codeskraps.gas&#34;&gt;Google Play&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;  &#xA;&#xA;  &lt;img&#xA;    src=&#34;https://codeskraps.com/posts/2026/gas_on_route/route_hu_f0cab7f3a0d825a9.webp&#34;&#xA;    srcset=&#34;https://codeskraps.com/posts/2026/gas_on_route/route_hu_91d217be9f356a11.webp 480w, https://codeskraps.com/posts/2026/gas_on_route/route_hu_f0cab7f3a0d825a9.webp 800w&#34;&#xA;    sizes=&#34;(max-width: 432px) calc(100vw - 32px), 400px&#34;&#xA;    alt=&#34;Gas On Route: a route from Madrid to Barcelona with the best pick&#34;&#xA;    width=&#34;400&#34;&#xA;    height=&#34;889&#34;&#xA;    class=&#34;responsive-image&#34;&#xA;    data-full=&#34;/posts/2026/gas_on_route/route_hu_f0cab7f3a0d825a9.webp&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;  &gt;</description>
    </item>
    <item>
      <title>Using a Self-Hosted Git Repository as a Maven Repository</title>
      <link>https://codeskraps.com/posts/2026/selfhosted_maven_repo/</link>
      <pubDate>Tue, 10 Mar 2026 10:00:00 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
      <guid>https://codeskraps.com/posts/2026/selfhosted_maven_repo/</guid>
      <description>&lt;p&gt;If you maintain shared libraries across multiple Android or Kotlin Multiplatform projects, you&amp;rsquo;ve probably considered publishing them to a Maven repository. Maven Central works, but the publishing process is heavy — GPG signing, Sonatype staging, approval delays. For private or small-scale libraries, that&amp;rsquo;s overkill. If you already self-host a Git server like &lt;a href=&#34;https://about.gitea.com/&#34;&gt;Gitea&lt;/a&gt; or &lt;a href=&#34;https://gogs.io/&#34;&gt;Gogs&lt;/a&gt;, you can use it as a Maven repository with zero additional infrastructure.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Umami Analytics for Mobile Apps Without a WebView</title>
      <link>https://codeskraps.com/posts/2026/umami_mobile_analytics/</link>
      <pubDate>Mon, 09 Mar 2026 12:00:00 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
      <guid>https://codeskraps.com/posts/2026/umami_mobile_analytics/</guid>
      <description>&lt;p&gt;Umami is a great privacy-focused, self-hosted alternative to Google Analytics. But its documentation assumes you&amp;rsquo;re tracking a website. If you want to use it in a mobile app, the docs point you toward embedding a WebView — which is clunky, adds overhead, and feels wrong for native apps. There&amp;rsquo;s a better way: hit the Umami API directly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>FreqDroid 1.2: Rich Exit Notifications and Notification History</title>
      <link>https://codeskraps.com/posts/2026/freqdroid_notifications/</link>
      <pubDate>Thu, 05 Mar 2026 12:00:00 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
      <guid>https://codeskraps.com/posts/2026/freqdroid_notifications/</guid>
      <description>&lt;p&gt;FreqDroid 1.2 is out with two notification upgrades: a new in-app notification history screen and support for rich exit notifications via FreqTrade&amp;rsquo;s strategy callback — giving you Telegram-style trade alerts without Telegram.&lt;/p&gt;</description>
    </item>
    <item>
      <title>FreqDroid: Manage Your FreqTrade Bots From Your Phone</title>
      <link>https://codeskraps.com/posts/2026/freqdroid/</link>
      <pubDate>Wed, 04 Mar 2026 10:00:00 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
      <guid>https://codeskraps.com/posts/2026/freqdroid/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m excited to announce that &lt;a href=&#34;https://freqdroid.com/&#34;&gt;FreqDroid&lt;/a&gt; is now available on the Google Play Store. FreqDroid is a mobile client for &lt;a href=&#34;https://www.freqtrade.io/&#34;&gt;FreqTrade&lt;/a&gt;, the popular open-source cryptocurrency trading bot framework, bringing full bot management to your pocket.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;  &#xA;&#xA;  &lt;img&#xA;    src=&#34;https://codeskraps.com/posts/2026/freqdroid/bot_comparison_hu_44f4eceb728e480.webp&#34;&#xA;    srcset=&#34;https://codeskraps.com/posts/2026/freqdroid/bot_comparison_hu_31a87f933ee51975.webp 480w, https://codeskraps.com/posts/2026/freqdroid/bot_comparison_hu_44f4eceb728e480.webp 800w, https://codeskraps.com/posts/2026/freqdroid/bot_comparison_hu_8e587c258d5840a5.webp 1080w&#34;&#xA;    sizes=&#34;(max-width: 432px) calc(100vw - 32px), 400px&#34;&#xA;    alt=&#34;FreqDroid multi-bot comparison dashboard&#34;&#xA;    width=&#34;400&#34;&#xA;    height=&#34;867&#34;&#xA;    class=&#34;responsive-image&#34;&#xA;    data-full=&#34;/posts/2026/freqdroid/bot_comparison_hu_8e587c258d5840a5.webp&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;  &gt;</description>
    </item>
    <item>
      <title>Weekly Weather v3: Radar Maps, New Settings, and Landscape Support</title>
      <link>https://codeskraps.com/posts/2026/weekly_weather_v3/</link>
      <pubDate>Tue, 24 Feb 2026 10:00:00 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
      <guid>https://codeskraps.com/posts/2026/weekly_weather_v3/</guid>
      <description>&lt;p&gt;Version 3 of &lt;a href=&#34;https://git.codeskraps.com/codeskraps/Weekly-Weather&#34;&gt;Weekly Weather&lt;/a&gt; is out, and it&amp;rsquo;s a significant update. The headline addition is an interactive radar map with animated precipitation overlays, but there&amp;rsquo;s a lot more packed into this release.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;    &#xA;    &#xA;    &#xA;    &#xA;  &#xA;  &#xA;&#xA;  &lt;img&#xA;    src=&#34;https://codeskraps.com/posts/2026/weekly_weather_v3/screenshot1_hu_a5c782708ae0624a.webp&#34;&#xA;    srcset=&#34;https://codeskraps.com/posts/2026/weekly_weather_v3/screenshot1_hu_9013d0f7c6e8f150.webp 480w, https://codeskraps.com/posts/2026/weekly_weather_v3/screenshot1_hu_a5c782708ae0624a.webp 800w, https://codeskraps.com/posts/2026/weekly_weather_v3/screenshot1_hu_c7b73a4f4256a3eb.webp 1080w&#34;&#xA;    sizes=&#34;(max-width: 432px) calc(100vw - 32px), 400px&#34;&#xA;    alt=&#34;Weekly Weather forecast screen&#34;&#xA;    width=&#34;400&#34;&#xA;    height=&#34;898&#34;&#xA;    class=&#34;responsive-image&#34;&#xA;    data-full=&#34;/posts/2026/weekly_weather_v3/screenshot1_hu_c7b73a4f4256a3eb.webp&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;  &gt;</description>
    </item>
  </channel>
</rss>
