<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Johannes Häusler </title>
    <description>The latest articles on DEV Community by Johannes Häusler  (@spotlightforbugs).</description>
    <link>https://dev.to/spotlightforbugs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F922569%2F463d15a8-0486-43be-8048-acfc1c8aaa15.jpeg</url>
      <title>DEV Community: Johannes Häusler </title>
      <link>https://dev.to/spotlightforbugs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/spotlightforbugs"/>
    <language>en</language>
    <item>
      <title>Kramli - The List app</title>
      <dc:creator>Johannes Häusler </dc:creator>
      <pubDate>Wed, 27 May 2026 20:47:20 +0000</pubDate>
      <link>https://dev.to/spotlightforbugs/kramli-the-list-app-28fi</link>
      <guid>https://dev.to/spotlightforbugs/kramli-the-list-app-28fi</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Kramli
&lt;/h2&gt;

&lt;p&gt;I build Kramli, the list app for you. &lt;/p&gt;

&lt;p&gt;"Done" does not mean you never ship another update. No side project gets there. Kramli is in the App Store, on Google Play, and in the browser at &lt;a href="https://kram.li" rel="noopener noreferrer"&gt;kram.li&lt;/a&gt;. I still change it every week.&lt;/p&gt;

&lt;p&gt;Shopping lists, todos, packing lists, and Kanban boards live in one app. Web, iPhone, iPad, Mac, and Android share the same account; edits sync over Socket.IO on the web and push on mobile. You can share lists and folders, send invite links (&lt;code&gt;kram.li/i/...&lt;/code&gt;), and see who changed what in the activity feed.&lt;/p&gt;

&lt;p&gt;Items get tags, priorities, due dates, custom states, notes, comments, and server-side undo. There is a calendar, a "My Day" view, a focus timer, and search across lists.&lt;/p&gt;

&lt;p&gt;Browser extensions for Chrome, Firefox, and Edge clip text and links into a list (right-click on desktop, long-press on phone). Safari uses the extension bundled with the Mac and iOS app. Widgets exist on iOS and Android; there is an Apple Watch app. Wear OS is in progress.&lt;/p&gt;

&lt;p&gt;Fifteen UI languages share one set of ARB files (&lt;code&gt;app_de.arb&lt;/code&gt; and siblings); &lt;code&gt;scripts/sync_l10n.py&lt;/code&gt; feeds Flutter, the Flask web app, extension &lt;code&gt;_locales&lt;/code&gt;, and native strings. Android also ships on the Play Store and as a Google-free APK (Obtainium link on the landing page).&lt;/p&gt;

&lt;p&gt;The web build on &lt;a href="https://kram.li" rel="noopener noreferrer"&gt;kram.li&lt;/a&gt; is usually ahead of the store builds. Betas are at &lt;a href="https://kram.li/beta" rel="noopener noreferrer"&gt;kram.li/beta&lt;/a&gt; when App Review holds up a release.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://kram.li" rel="noopener noreferrer"&gt;kram.li&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On a phone, install from the store or join the &lt;a href="https://kram.li/beta" rel="noopener noreferrer"&gt;beta program&lt;/a&gt; if you want the build that is waiting on review.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2mefgmubr6qpcufv26k2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2mefgmubr6qpcufv26k2.png" alt="Mobile Beta Landing" width="800" height="867"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or search for &lt;strong&gt;Kramli&lt;/strong&gt; on the Play Store.&lt;/p&gt;

&lt;p&gt;Platforms today: Android, iOS, iPadOS, macOS, Apple Watch. Wear OS is not shipped yet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkkvbpd8o72ugfuvzzdde.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkkvbpd8o72ugfuvzzdde.png" alt="Kramli Extension Showcase image" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I kept shipping
&lt;/h2&gt;

&lt;p&gt;Motivation is not constant. When more people use the app and the feedback is kind, it is easier to open the repo again. That is what "finished" means for this challenge: shipped, not abandoned.&lt;/p&gt;




&lt;h2&gt;
  
  
  GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;Copilot helped most with tab completions in a big monorepo (Flask + Jinja web, Flutter mobile, browser extensions). For research I used MCP tools (including Browser-Use) so I did not have to click through every flow by hand. The 15-language rollout would have taken longer without help keeping ARB keys and sync scripts consistent.&lt;/p&gt;

&lt;p&gt;Copilot code review caught issues before merge. The mobile agent session from the phone was useful when a localization string broke and I was away from my desk.&lt;/p&gt;

&lt;p&gt;I still made the product calls: web/mobile feature parity, where settings live, German copy with real umlauts. Copilot did not replace that; it cut time on repetitive edits.&lt;/p&gt;




</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
    </item>
  </channel>
</rss>
