<?xml version="1.0" encoding="UTF-8"?>
<!-- mattes.dev English feed. Maintained by hand, like sitemap.xml: new posts are added
     as the first <item>, and lastBuildDate is set to the newest post's date. -->
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Marco Mattes — Blog</title>
    <link>https://mattes.dev/blog</link>
    <description>Notes on frontend architecture, local-first software and small builds without dependencies.</description>
    <language>en</language>
    <lastBuildDate>Fri, 18 Sep 2026 12:00:00 +0000</lastBuildDate>
    <atom:link href="https://mattes.dev/feed.xml" rel="self" type="application/rss+xml"/>

    <item>
      <title>WordPace in 28 languages: the App Store side of localisation</title>
      <link>https://mattes.dev/blog/wordpace-localization</link>
      <guid isPermaLink="true">https://mattes.dev/blog/wordpace-localization</guid>
      <pubDate>Fri, 18 Sep 2026 12:00:00 +0000</pubDate>
      <description>From eleven interface languages to 28 and 27 App Store listings: a locale table derived from the speech recognizer, translation against written briefs, listings and keywords written per market, 189 rendered screenshots, and a fastlane upload that shows its diff before it pushes.</description>
    </item>

    <item>
      <title>Coffee Time: a passkey PWA for the shared office coffee tab</title>
      <link>https://mattes.dev/blog/coffetime</link>
      <guid isPermaLink="true">https://mattes.dev/blog/coffetime</guid>
      <pubDate>Sun, 23 Aug 2026 12:00:00 +0000</pubDate>
      <description>A PWA for the shared coffee tab in an office kitchen: passkey login without usernames, account names sealed with an RSA key the server never holds, prices frozen per booking, and an offline queue that cannot double-count.</description>
    </item>

    <item>
      <title>EPaper: a web component library for e-paper displays</title>
      <link>https://mattes.dev/blog/epaper-components</link>
      <guid isPermaLink="true">https://mattes.dev/blog/epaper-components</guid>
      <pubDate>Wed, 12 Aug 2026 12:00:00 +0000</pubDate>
      <description>A web component library for electrophoretic displays: just over eighty custom elements without a framework, form-associated controls, and a design that follows from the refresh and contrast behaviour of e-paper panels.</description>
    </item>

    <item>
      <title>WordPace: measuring speaking pace on device</title>
      <link>https://mattes.dev/blog/wordpace</link>
      <guid isPermaLink="true">https://mattes.dev/blog/wordpace</guid>
      <pubDate>Sun, 09 Aug 2026 12:00:00 +0000</pubDate>
      <description>A speaking-pace meter for iPhone and Mac: a words-per-minute limit, a full-screen warning when it is exceeded, measurement over speaking time instead of wall-clock time, and audio that is discarded after the calculation.</description>
    </item>

    <item>
      <title>An e-paper departure board on a reTerminal</title>
      <link>https://mattes.dev/blog/reterminal-departure-board</link>
      <guid isPermaLink="true">https://mattes.dev/blog/reterminal-departure-board</guid>
      <pubDate>Wed, 05 Aug 2026 12:00:00 +0000</pubDate>
      <description>A Seeed reTerminal E1001 as a live VVS departure board with ESPHome: the API is queried and parsed on the device, and no intermediate server is involved.</description>
    </item>

    <item>
      <title>Clessira: a local-first time tracker for macOS</title>
      <link>https://mattes.dev/blog/clessira</link>
      <guid isPermaLink="true">https://mattes.dev/blog/clessira</guid>
      <pubDate>Wed, 08 Jul 2026 12:00:00 +0000</pubDate>
      <description>A local-first time tracker for macOS, iPhone and iPad: idle detection with confirmation prompts, pivot-table reporting, Jira import, Git branch awareness, and a local JSON file as the data store.</description>
    </item>

    <item>
      <title>Local-first, and why it shapes Clessira</title>
      <link>https://mattes.dev/blog/local-first</link>
      <guid isPermaLink="true">https://mattes.dev/blog/local-first</guid>
      <pubDate>Wed, 10 Jun 2026 12:00:00 +0000</pubDate>
      <description>Local-first software keeps the authoritative copy of the data on the user's device. What that storage model means in practice, and which design decisions it implies for a time tracker.</description>
    </item>

  </channel>
</rss>
