<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>2MAD Labs blog</title>
    <link>https://2madlabs.si/blog/</link>
    <atom:link href="https://2madlabs.si/blog/feed.xml" rel="self" type="application/rss+xml"/>
    <description>News, releases and behind-the-build notes from 2MAD Labs, a two-person native app studio in Slovenia.</description>
    <language>en</language>
    <copyright>© 2026 2MAD Labs</copyright>
    <lastBuildDate>Wed, 23 Sep 2026 07:00:00 GMT</lastBuildDate>
    <image>
      <url>https://2madlabs.si/assets/img/icon-192.png</url>
      <title>2MAD Labs blog</title>
      <link>https://2madlabs.si/blog/</link>
    </image>
    <item>
      <title>Stowly is now on the App Store</title>
      <link>https://2madlabs.si/blog/stowly-now-on-iphone</link>
      <guid isPermaLink="true">https://2madlabs.si/blog/stowly-now-on-iphone</guid>
      <pubDate>Wed, 23 Sep 2026 10:30:00 GMT</pubDate>
      <dc:creator>2MAD Labs</dc:creator>
      <category>Releases</category>
      <category>iOS</category>
      <description>Our private offline wallet for loyalty cards, QR codes, documents and shopping lists has arrived on iPhone and iPad, built natively in SwiftUI.</description>
      <content:encoded><![CDATA[<p>Stowly started on Android as a simple idea: the cards, codes and papers you carry every day should live on your phone and nowhere else. Starting today it does the same on iPhone and iPad. <a href="https://apps.apple.com/si/app/stowly/id6813976997">Download Stowly from the App Store</a>, free and with no ads.</p>
<div class="post-gallery" style="--cols:3"><figure class="post-figure post-figure-tall"><img src="https://2madlabs.si/assets/img/stowly/ios/dark/01-cards.webp" alt="The Stowly card wallet on iPhone with a stack of colour-matched loyalty cards" width="640" height="1391" loading="lazy" decoding="async"><figcaption>The wallet, with every card in its store's colours</figcaption></figure><figure class="post-figure post-figure-tall"><img src="https://2madlabs.si/assets/img/stowly/ios/dark/02-card.webp" alt="A loyalty card opened on iPhone with its barcode ready for the register scanner" width="640" height="1391" loading="lazy" decoding="async"><figcaption>A card at full size, ready for the till</figcaption></figure><figure class="post-figure post-figure-tall"><img src="https://2madlabs.si/assets/img/stowly/ios/dark/04-lists.webp" alt="A shopping list on iPhone with items and quantities" width="640" height="1391" loading="lazy" decoding="async"><figcaption>Shopping lists sit right beside your cards</figcaption></figure></div>
<h2 id="everything-in-one-private-wallet">Everything in one private wallet</h2>
<ul><li><strong>Loyalty cards at the till.</strong> Scan a card once and show it full screen when you pay. Stowly recognises around 130 store brands with their logo text and colours.</li><li><strong>QR codes you want to keep.</strong> Wi-Fi access, tickets, payment codes and anything else, saved with a suggested title so you can find it later.</li><li><strong>Documents and receipts.</strong> Scan multi-page documents with automatic cropping and on-device text recognition, then export a clean PDF.</li><li><strong>Shopping lists.</strong> Add items with quantities, tick them off, and link a loyalty card to a list so it is ready when you reach the checkout.</li><li><strong>Reminders for expiry dates.</strong> Give a card or document an expiry date and get a local notification before it runs out.</li></ul>
<h2 id="private-by-design-on-iphone-too">Private by design, on iPhone too</h2>
<p>Stowly for iOS has no accounts, no ads, no analytics and makes no network calls at all. Your wallet stays in a local database on the device, and the only things that ever leave it are the exports and shares you start yourself. You can lock the app with a PIN or Face ID.</p>
<h2 id="native-not-a-port">Native, not a port</h2>
<p>The iOS app is written in Swift and SwiftUI rather than wrapped around the Android code, so it looks and behaves like an iPhone app should. It speaks the same 24 languages as the Android version, including Slovenian.</p>
<p>Backups travel between platforms. Export your wallet to a ZIP on Android, optionally encrypted with a password only you know, and import it on your iPhone with everything intact. It works the other way round too, so switching phones never means starting over.</p>
<p>Stowly runs on iOS 18.6 or newer. Screenshots and the full feature list are on the <a href="https://2madlabs.si/apps/stowly">Stowly page</a>, and the <a href="https://2madlabs.si/privacy/stowly">privacy policy</a> explains exactly what the app stores.</p>]]></content:encoded>
    </item>
    <item>
      <title>KeptCV is now on the App Store</title>
      <link>https://2madlabs.si/blog/keptcv-now-on-iphone</link>
      <guid isPermaLink="true">https://2madlabs.si/blog/keptcv-now-on-iphone</guid>
      <pubDate>Wed, 23 Sep 2026 10:00:00 GMT</pubDate>
      <dc:creator>2MAD Labs</dc:creator>
      <category>Releases</category>
      <category>iOS</category>
      <description>Design a polished CV on iPhone or iPad with 26 themes, a live preview and pixel-perfect PDF and Word export. Free, no ads and fully offline.</description>
      <content:encoded><![CDATA[<p>A good CV should not need a laptop, an account or a subscription. KeptCV has been doing that on Android, and starting today it is on iPhone and iPad as well. <a href="https://apps.apple.com/si/app/keptcv-cv-resume-builder/id6814154675">Download KeptCV from the App Store</a>, free and with no ads.</p>
<div class="post-gallery" style="--cols:3"><figure class="post-figure post-figure-tall"><img src="https://2madlabs.si/assets/img/keptcv/ios/dark/01-library.webp" alt="The KeptCV library on iPhone with sample CVs and full-page previews" width="640" height="1391" loading="lazy" decoding="async"><figcaption>Your CVs as full previews, not file names</figcaption></figure><figure class="post-figure post-figure-tall"><img src="https://2madlabs.si/assets/img/keptcv/ios/dark/03-design.webp" alt="The design tab on iPhone with theme, layout and typography controls" width="640" height="1391" loading="lazy" decoding="async"><figcaption>Themes, layout and type in one place</figcaption></figure><figure class="post-figure post-figure-tall"><img src="https://2madlabs.si/assets/img/keptcv/ios/dark/06-export.webp" alt="The export menu on iPhone with PDF, Word, image and .cvm options" width="640" height="1391" loading="lazy" decoding="async"><figcaption>PDF, Word, an image or a portable .cvm file</figcaption></figure></div>
<h2 id="what-you-get">What you get</h2>
<ul><li><strong>26 designer themes.</strong> Professional, modern, classic, minimal and bold looks, each one a tap away, with your own accent colours, fonts, spacing and page style on top.</li><li><strong>One or two columns.</strong> A classic single column or a full-height sidebar for your photo, contacts and any section you like.</li><li><strong>A live preview that matches the export.</strong> The same engine draws the page on screen and in the file, so what you see is exactly what you send.</li><li><strong>An ATS-optimised mode.</strong> One clean column and plain, readable text, so screening software can follow your CV.</li><li><strong>Export the way you need.</strong> A multi-page PDF with selectable text, a Word (.docx) file, an image of the first page, or a portable .cvm file.</li><li><strong>A language per CV.</strong> The app speaks English and Slovenian, and each CV sets the language of its own headings.</li></ul>
<h2 id="made-for-ipad-too">Made for iPad too</h2>
<p>On iPad the editor keeps the left half of the screen and the live preview the right, so the page updates in front of you as you type. The library spreads into large previews of every CV you have made.</p>
<figure class="post-figure post-figure-tall"><img src="https://2madlabs.si/assets/img/keptcv/ipad/ipad-editor.webp" alt="The KeptCV editor on iPad with the content form on the left and the live CV preview on the right" width="1000" height="1334" loading="lazy" decoding="async"><figcaption>Type on the left, watch the page change on the right</figcaption></figure>
<h2 id="your-cv-stays-yours">Your CV stays yours</h2>
<p>KeptCV works entirely on your device. There is no account, no backend and no network code in the app. Your CVs, your photo and your settings stay on the phone or tablet, and nothing is uploaded anywhere.</p>
<p>The iOS app is written natively in Swift and SwiftUI, and it shares the document format with the Android app. A .cvm file exported on Android opens on iPhone with its content, design and photo intact, and the other way round.</p>
<p>KeptCV runs on iOS 17 or newer. Screenshots and every feature are on the <a href="https://2madlabs.si/apps/keptcv">KeptCV page</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Why every app we make is native</title>
      <link>https://2madlabs.si/blog/why-we-build-native</link>
      <guid isPermaLink="true">https://2madlabs.si/blog/why-we-build-native</guid>
      <pubDate>Wed, 23 Sep 2026 07:00:00 GMT</pubDate>
      <dc:creator>2MAD Labs</dc:creator>
      <category>Behind the build</category>
      <category>Android</category>
      <category>iOS</category>
      <description>One of us writes Android, the other writes iOS. Here is why we build each app twice instead of sharing one codebase, and where we make an exception.</description>
      <content:encoded><![CDATA[<p>People often ask why a two-person studio would build every app twice. A shared codebase sounds like half the work. For the apps we make, it rarely is, and the reasons are practical rather than ideological.</p>
<h2 id="two-platforms-two-specialists">Two platforms, two specialists</h2>
<p>2MAD Labs is literally two Mobile App Developers: one writes Android in Kotlin and Jetpack Compose, the other writes iOS in Swift and SwiftUI. Each of us works in the language, tools and design conventions of one platform every day. Splitting the work this way means neither of us is translating between platforms in our head, and each app feels at home on the phone it runs on.</p>
<h2 id="what-native-buys-the-people-using-our-apps">What native buys the people using our apps</h2>
<ul><li><strong>Platform-correct behaviour.</strong> Navigation, gestures, text sizes and system settings work the way people already expect on their phone, because we use the platform's own building blocks.</li><li><strong>Performance.</strong> A price map with more than a million deals, like the one in <a href="https://2madlabs.si/apps/cenilko">Cenilko</a>, has to scroll and zoom smoothly on an ordinary phone.</li><li><strong>Everything the system offers, on day one.</strong> Widgets, Wear OS and Apple Watch, Android Auto and CarPlay, TV apps and foldable layouts are available as soon as the platform ships them, without waiting for a wrapper to catch up.</li></ul>
<h2 id="the-layouts-that-make-the-difference">The layouts that make the difference</h2>
<p>Big screens are where native pays off most visibly. On a tablet, Cenilko turns its bottom bar into a side rail and opens a building's report next to the map. On a foldable, half-fold the phone into a tabletop and the map moves above the hinge with the details below it. On iPad, the SwiftUI app gives the map its own half of the screen. None of that is a stretched phone layout.</p>
<h2 id="where-we-make-an-exception">Where we make an exception</h2>
<p>Games are a different kind of project. When one game should run the same on both platforms, a single Unity codebase can be the right fit, and we use it when it is. For everything else, which is most of what we build, we write each app natively.</p>
<h2 id="what-it-costs-honestly">What it costs, honestly</h2>
<p>Building natively does mean writing core features twice and keeping two apps in step. We accept that trade because the result is better for the person holding the phone, and because a shared plan, a shared design and shared data formats keep the two versions close. It is also why a new app sometimes reaches one platform before the other.</p>
<p>The same approach applies to client work. If you have a project for phones, tablets, watches, cars or TVs, <a href="mailto:info@2madlabs.com">write to us</a> and we will give you a straight answer about fit and timeline.</p>]]></content:encoded>
    </item>
    <item>
      <title>Welcome to the 2MAD Labs blog</title>
      <link>https://2madlabs.si/blog/welcome-to-the-blog</link>
      <guid isPermaLink="true">https://2madlabs.si/blog/welcome-to-the-blog</guid>
      <pubDate>Wed, 23 Sep 2026 07:00:00 GMT</pubDate>
      <dc:creator>2MAD Labs</dc:creator>
      <category>Studio</category>
      <description>Why two app developers are starting a blog, and what you can expect to read here: releases, studio news and honest notes from the workbench.</description>
      <content:encoded><![CDATA[<p>We have been building apps quietly for a while. Twelve of them are on this site today, from Podnebnik and Gremo to Cenilko, and most of what happens behind them never makes it past a store listing or a line in the release notes. This blog is where that changes.</p>
<h2 id="who-is-writing">Who is writing</h2>
<p>2MAD Labs is short for two Mobile App Developers. One of us writes native Android in Kotlin and Jetpack Compose, the other writes native iOS in Swift and SwiftUI. Every app on this site was designed and built by the two of us, and we still maintain all of them, so the posts come straight from the people doing the work.</p>
<h2 id="what-you-will-find-here">What you will find here</h2>
<ul><li><strong>Releases.</strong> New apps, apps arriving on a new platform, and the updates worth knowing about.</li><li><strong>Behind the build.</strong> How we approach architecture, offline data, accessibility and design, including the things that did not work the first time.</li><li><strong>Studio news.</strong> What we are working on next, and the occasional look at how a two-person studio actually runs.</li></ul>
<p>Every post appears in English and in Slovenian. The Slovenian versions are written rather than translated, so the two can read a little differently.</p>
<h2 id="how-to-follow-along">How to follow along</h2>
<p>There is no newsletter and nothing to sign up for. The blog has an <a href="https://2madlabs.si/blog/feed.xml">RSS feed</a> that works in any feed reader, and like the rest of this site it sets no cookies and runs no analytics. We would rather you read the posts than we count you.</p>
<p>If a post raises a question, or you have a project in mind, write to us at <a href="mailto:info@2madlabs.com">info@2madlabs.com</a>. We read every message.</p>]]></content:encoded>
    </item>
    <item>
      <title>Gremo: Slovenia&#x27;s buses and trains, made easy to read</title>
      <link>https://2madlabs.si/blog/gremo-intercity-travel-made-clear</link>
      <guid isPermaLink="true">https://2madlabs.si/blog/gremo-intercity-travel-made-clear</guid>
      <pubDate>Wed, 23 Sep 2026 07:00:00 GMT</pubDate>
      <dc:creator>2MAD Labs</dc:creator>
      <category>Releases</category>
      <category>Android</category>
      <category>iOS</category>
      <description>Gremo plans intercity journeys across Slovenia by bus and train. It was designed with older travellers in mind, and it is out now on Android and iOS.</description>
      <content:encoded><![CDATA[<p>Planning a trip between two Slovenian towns by public transport should not take a magnifying glass and a spreadsheet. Gremo takes the national timetable, the transfers and the live delay estimates and lays them out so they are easy to read and simple to use. It is free, has no ads, and is out now on <a href="https://play.google.com/store/apps/details?id=com.twomadlabs.gremo">Google Play</a> and the <a href="https://apps.apple.com/si/app/gremo/id6809919262">App Store</a>.</p>
<div class="post-gallery" style="--cols:3"><figure class="post-figure post-figure-tall"><img src="https://2madlabs.si/assets/img/gremo/dark/01-search.webp" alt="Search for an intercity journey in Gremo" width="640" height="1387" loading="lazy" decoding="async"><figcaption>Search by place or by exact station</figcaption></figure><figure class="post-figure post-figure-tall"><img src="https://2madlabs.si/assets/img/gremo/dark/02-results.webp" alt="Bus journey results with times, transfers and live status" width="640" height="1387" loading="lazy" decoding="async"><figcaption>Results with times, transfers and live status</figcaption></figure><figure class="post-figure post-figure-tall"><img src="https://2madlabs.si/assets/img/gremo/dark/03-details.webp" alt="Journey details with stops, operator and delay information" width="640" height="1387" loading="lazy" decoding="async"><figcaption>Every stop and transfer, opened up</figcaption></figure></div>
<h2 id="designed-for-clarity-first">Designed for clarity first</h2>
<p>We designed Gremo especially for older travellers, without making it feel clinical. The controls are large, the contrast is strong, the type is Lexend and the app follows your system text size. The whole trip is on one screen, and Gremo never presents an invented direct route: if you need to change, it shows you where and flags a tight transfer.</p>
<h2 id="what-it-does">What it does</h2>
<ul><li><strong>Bus and train together.</strong> Search the official national timetable with up to two transfers. Comfortable routes keep train, bus and mixed options apart and flag short transfers.</li><li><strong>Live context.</strong> Published delay estimates, cancellations, vehicle information and operator notices, whenever the live feed has them.</li><li><strong>Routes you repeat.</strong> Save your frequent journeys, reopen them in one tap and set a local reminder about 15 minutes before departure.</li></ul>
<h2 id="useful-without-a-connection">Useful without a connection</h2>
<p>The timetable is built into the app, so you can search it offline. Gremo goes online to check for timetable updates and to add live delays and notices, and when live data is not available it says so plainly. There are no accounts, no analytics and no ads. Your saved routes, recent places and reminders stay on your device.</p>
<div class="callout"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4M12 8h.01"/></svg><div><p>Gremo is an independent app. It is not an official app of the Republic of Slovenia, DUJPP or the transport operators, and it is not affiliated with them.</p></div></div>
<p>Gremo is in Slovenian, runs on Android 8 or newer and iOS 18 or newer, and is written natively in Kotlin with Jetpack Compose on Android and in Swift with SwiftUI on iOS. Screenshots and details are on the <a href="https://2madlabs.si/apps/gremo">Gremo page</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Cenilko is now on Google Play and the App Store</title>
      <link>https://2madlabs.si/blog/cenilko-on-android-and-ios</link>
      <guid isPermaLink="true">https://2madlabs.si/blog/cenilko-on-android-and-ios</guid>
      <pubDate>Wed, 23 Sep 2026 07:00:00 GMT</pubDate>
      <dc:creator>2MAD Labs</dc:creator>
      <category>Releases</category>
      <category>Android</category>
      <category>iOS</category>
      <description>Our property price map of Slovenia is available on both platforms: every recorded sale and rental since 2007, value estimates you can check, and the full file on any parcel.</description>
      <content:encoded><![CDATA[<p>Cenilko started with a simple frustration. Slovenia publishes a remarkable amount of property data, from recorded sales and rentals to zoning, flood zones and energy certificates, but it is spread across separate portals and formats. Getting a clear answer about one flat or one parcel meant opening five of them. Cenilko puts it on one map, and it is now available on both <a href="https://play.google.com/store/apps/details?id=com.twomadlabs.cenilko">Google Play</a> and the <a href="https://apps.apple.com/si/app/cenilko/id6811415721">App Store</a>.</p>
<div class="post-gallery" style="--cols:3"><figure class="post-figure post-figure-tall"><img src="https://2madlabs.si/assets/img/cenilko/dark/01-map.webp" alt="Cenilko price map of Ljubljana with per-district deal clusters" width="640" height="1422" loading="lazy" decoding="async"><figcaption>The price map: every recorded deal, coloured by euro per square metre</figcaption></figure><figure class="post-figure post-figure-tall"><img src="https://2madlabs.si/assets/img/cenilko/dark/04-analysis.webp" alt="Area analysis comparing Ljubljana and Maribor by quarter" width="640" height="1422" loading="lazy" decoding="async"><figcaption>Two areas side by side on the same charts</figcaption></figure><figure class="post-figure post-figure-tall"><img src="https://2madlabs.si/assets/img/cenilko/dark/06-estimate.webp" alt="A value estimate with a range, a confidence level and its comparables" width="640" height="1422" loading="lazy" decoding="async"><figcaption>An estimate that shows its working</figcaption></figure></div>
<h2 id="what-it-does">What it does</h2>
<ul><li><strong>A price map of every deal.</strong> More than a million recorded sales and rentals since 2007, coloured by euro per square metre and filtered by year and property type.</li><li><strong>Estimates you can defend.</strong> Enter a size and an area and you get a value with a price range, a confidence level and every comparable deal behind it. No black box.</li><li><strong>The full file on a parcel.</strong> Tap a building to see zoning and actual land use, its units and past deals, plus seismic, flood and radon attention, heritage protection and the energy certificate.</li><li><strong>Area analysis.</strong> Median prices, market premiums, a repeat-sales index, rental yield and local affordability, with two places on the same charts.</li></ul>
<h2 id="built-on-public-registers">Built on public registers</h2>
<p>Everything in Cenilko comes from public sources: the Surveying and Mapping Authority (GURS), the Water Agency, the Ministry of Culture, the national statistics office (SURS) and a few more, eight in total. The data refreshes every seven days. The database downloads once, and after that search, statistics and estimates run on your device.</p>
<p>Cenilko cleans, links and aggregates that data, which is what makes one map and a fair comparison possible. It also means a figure can differ from the official record.</p>
<div class="callout"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4M12 8h.01"/></svg><div><p>Every number in Cenilko is indicative and is not an official valuation. For a legal transaction, check the land register, the cadastre and the tax authority.</p></div></div>
<h2 id="native-on-both-platforms">Native on both platforms</h2>
<p>The Android app is written in Kotlin with Jetpack Compose, and the iOS app is a native SwiftUI build of the same tool rather than a port. On tablets and iPad the extra width goes to work: the map keeps its own half of the screen and the analysis becomes a dashboard with every chart in view. On a foldable, half-fold the phone into a tabletop and the map moves above the hinge with the details below it.</p>
<p>The full feature list, screenshots and data sources are on the <a href="https://2madlabs.si/apps/cenilko">Cenilko page</a>.</p>]]></content:encoded>
    </item>
  </channel>
</rss>
