<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <title>Berker</title>
    <link href="https://berkersen.com/feed.xml" rel="self" />
    <link href="https://berkersen.com" />
    <updated>2024-08-16T13:52:21+02:00</updated>
    <author>
        <name>Berker</name>
    </author>
    <id>https://berkersen.com</id>

    <entry>
        <title>Practice Suite 2.1.0</title>
        <author>
            <name>Berker</name>
        </author>
        <link href="https://berkersen.com/practice-suite-210/"/>
        <id>https://berkersen.com/practice-suite-210/</id>
        <media:content url="https://berkersen.com/media/posts/20/0987b1d07f0008dc9fa0823673be33c4.jpeg" medium="image" />

        <updated>2024-08-16T13:52:21+02:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://berkersen.com/media/posts/20/0987b1d07f0008dc9fa0823673be33c4.jpeg" alt="" />
                    Hi everyone! After a long break, I finally manage to release an update for Practice Suite with much needed bug fixes and requested features. Here’s&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://berkersen.com/media/posts/20/0987b1d07f0008dc9fa0823673be33c4.jpeg" class="type:primaryImage" alt="" /></p>
                <p>Hi everyone! After a long break, I finally manage to release an update for Practice Suite with much needed bug fixes and requested features. Here’s what’s new:</p>
<h4 id="heading-new-features">🚀 New Features</h4>
<ul>
<li><p><strong>Play Progress in Recording Tiles:</strong> You can now see your play progress directly on recording tiles where the recording duration is, making it easier to track your practice sessions at a glance.</p>
</li>
<li><p><strong>Keep Screen Awake for Metronome, Tuner, and Recorder:</strong> No more interruptions! Your screen will now stay awake while using the metronome, tuner, or recorder, so you can stay focused on your practice.</p>
</li>
<li><p><strong>Persist Metronome Values on Restart:</strong> We've added the ability for the app to remember your metronome settings even after a restart, ensuring your workflow remains uninterrupted.</p>
</li>
<li><p><strong>Themable Adaptive Launcher Icons:</strong> Customize your experience further with themable adaptive launcher icons, blending perfectly with your device’s theme.</p>
</li>
</ul>
<h4 id="heading-design-enhancements">🎨 Design Enhancements</h4>
<ul>
<li><p><strong>Material 3 Design:</strong> The app has been updated to the latest Material 3 design standards, offering a more modern and intuitive user interface.</p>
</li>
<li><p><strong>Background Color of On/Off Buttons:</strong> I’ve tweaked the background color of the on/off buttons for better visual clarity and accessibility.</p>
</li>
</ul>
<h4 id="heading-under-the-hood">⚙️ Under the Hood</h4>
<ul>
<li><p><strong>Updated Packages:</strong> I’ve updated various packages to improve performance, stability, and security.</p>
</li>
<li><p><strong>Flutter 3.24:</strong> The app now runs on the latest version of Flutter, bringing performance optimizations and new capabilities.</p>
</li>
</ul>
<h4 id="heading-bug-fixes">🛠️ Bug Fixes</h4>
<ul>
<li><p><strong>Squashed Bugs:</strong> A number of pesky bugs have been fixed, ensuring a smoother experience.</p>
</li>
<li><p><strong>Improved Translations:</strong> I’ve refined the translations across the app to better serve our global user base.</p>
</li>
</ul>
<p>Enjoy the update and if you have questions or issues, hit the <a target="_blank" href="https://matrix.to/#/#practice_suite:matrix.org">matrix channel</a> or <a target="_blank" href="https://codeberg.org/Berker/practice_suite/issues">projects issues</a> page. Downloads should soon be available through <a target="_blank" href="https://play.google.com/store/apps/details?id=com.berkersen.practicesuite">Play Store</a>, <a target="_blank" href="https://apps.apple.com/us/app/practice-suite/id1668677376">App Store</a>, <a target="_blank" href="https://f-droid.org/en/packages/com.berkersen.practicesuite/">F-Droid</a> and <a target="_blank" href="https://codeberg.org/Berker/practice_suite/releases">Codeberg releases</a>.</p>

            ]]>
        </content>
    </entry>
    <entry>
        <title>Keyoxide Mobile 2.4.0</title>
        <author>
            <name>Berker</name>
        </author>
        <link href="https://berkersen.com/keyoxide-mobile-240/"/>
        <id>https://berkersen.com/keyoxide-mobile-240/</id>
        <media:content url="https://berkersen.com/media/posts/19/48b1f8cf0d95206a478dba1fe98d87f7.jpeg" medium="image" />

        <updated>2024-07-18T12:32:00+02:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://berkersen.com/media/posts/19/48b1f8cf0d95206a478dba1fe98d87f7.jpeg" alt="" />
                    Hey everyone, I’ve got some exciting news – Keyoxide Mobile just got a fresh update! 🎉 I’ve been working hard to bring you version 2.4.0,&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://berkersen.com/media/posts/19/48b1f8cf0d95206a478dba1fe98d87f7.jpeg" class="type:primaryImage" alt="" /></p>
                <p>Hey everyone,</p>
<p>I’ve got some exciting news – Keyoxide Mobile just got a fresh update! 🎉 I’ve been working hard to bring you version 2.4.0, and it’s packed with the most requested feature: offline mode.</p>
<p><strong>What’s New in Keyoxide Mobile 2.4.0?</strong></p>
<p><strong>Offline-Mode:</strong> If you are stuck without internet and need to access your contacts or your full profile, I’ve got you covered. A copy of your full profile is now saved locally, encrypted on the device, and accessed when needed for user profiles and contacts. A 'last refreshed' date is also shown so you will know how old the profile is. With this, you can now open your contacts and profiles even when you’re offline. No more scrambling for Wi-Fi or data!</p>
<p><strong>Swipe Right to Refresh on Contact Tile:</strong> I wanted to make refreshing your contact profiles as smooth as possible. Now, you can just swipe right on a contact tile to update it. It’s quick, easy, and super convenient.</p>
<figure class="post__image image--center mx-auto"><img loading="lazy" src="https://berkersen.com/media/posts/19/dd9444aa-00e2-4d32-b7d3-612bc966172f.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/19/responsive/dd9444aa-00e2-4d32-b7d3-612bc966172f-xs.png 300w ,https://berkersen.com/media/posts/19/responsive/dd9444aa-00e2-4d32-b7d3-612bc966172f-sm.png 480w ,https://berkersen.com/media/posts/19/responsive/dd9444aa-00e2-4d32-b7d3-612bc966172f-md.png 768w ,https://berkersen.com/media/posts/19/responsive/dd9444aa-00e2-4d32-b7d3-612bc966172f-lg.png 1024w"></figure>
<p><strong>Refresh All Contacts at Once from the Menu:</strong> Got a bunch of contacts that need updating? No problem. Head to the menu and refresh all your contacts at once. This should save you a ton of time and keep everything up-to-date with a single tap.</p>
<figure class="post__image image--center mx-auto"><img loading="lazy" src="https://berkersen.com/media/posts/19/b8d6124c-8e4f-4e2a-a648-ac40f81a3249.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/19/responsive/b8d6124c-8e4f-4e2a-a648-ac40f81a3249-xs.png 300w ,https://berkersen.com/media/posts/19/responsive/b8d6124c-8e4f-4e2a-a648-ac40f81a3249-sm.png 480w ,https://berkersen.com/media/posts/19/responsive/b8d6124c-8e4f-4e2a-a648-ac40f81a3249-md.png 768w ,https://berkersen.com/media/posts/19/responsive/b8d6124c-8e4f-4e2a-a648-ac40f81a3249-lg.png 1024w"></figure>
<p><strong>Bug Fixes</strong></p>
<p><strong>Unresponsive UI on Language Change When Offline:</strong> I fixed a pesky bug that was making the app unresponsive when you changed the language while offline. Now, everything should work seamlessly, whether you’re connected to the internet or not.</p>
<p><strong>Updates</strong></p>
<p><strong>Updated Packages and Flutter Version:</strong> To make sure everything runs smoothly, I’ve updated the packages and upgraded Flutter to version 3.22.2. This means better stability, security, and performance for you.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">⚠</div>
<div data-node-type="callout-text">This update will wipe out your profiles and contacts locally, please back up your user profiles and contacts before updating.</div>
</div>

<p>As always, your feedback is super important to me. Let me know your thoughts, suggestions, or any issues you encounter on <a target="_blank" href="https://matrix.to/#/%23keyoxide-mobile:matrix.org">Matrix channel</a> or <a target="_blank" href="https://community.keyoxide.org/">community forum</a>.</p>
<p>If you would like to help with the effort, hit our websites <a target="_blank" href="https://keyoxide.org/">Keyoxide</a>, <a target="_blank" href="https://mobile.keyoxide.org/">Keyoxide Mobile</a>, <a target="_blank" href="https://docs.keyoxide.org/wiki/keyoxide/">Keyoxide Docs</a> and of course <a target="_blank" href="https://translate.codeberg.org/projects/keyoxide/keyoxide-mobile/">translations</a>.</p>
<p>Happy updating!</p>

            ]]>
        </content>
    </entry>
    <entry>
        <title>Keyoxide Mobile 2.3.0 Enhancing Your Decentralized Identity Experience</title>
        <author>
            <name>Berker</name>
        </author>
        <link href="https://berkersen.com/keyoxide-mobile-230-enhancing-your-decentralized-identity-experience/"/>
        <id>https://berkersen.com/keyoxide-mobile-230-enhancing-your-decentralized-identity-experience/</id>

        <updated>2024-06-02T16:53:30+02:00</updated>
            <summary type="html">
                <![CDATA[
                    In this update, I continue to prioritize user-requested features while preparing for the more extensive work needed to support offline functionality. Here’s a detailed look&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                <p>In this update, I continue to prioritize user-requested features while preparing for the more extensive work needed to support offline functionality. Here’s a detailed look at what’s new:</p>
<p>New Features and Enhancements</p>
<p>1. Search History: Keyoxide Mobile now keeps a history of your profile searches, making it easier to revisit previously searched profiles without re-entering the identifiers. This means you can quickly and conveniently access your recent searches and verify identities more efficiently. With the minus button on the right side of the identifier, you can remove the search from the list.</p>
<figure class="post__image image--center mx-auto"><img loading="lazy" src="https://berkersen.com/media/posts/18/276550a7-427e-455f-89bd-5f4f3d6c5851.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/18/responsive/276550a7-427e-455f-89bd-5f4f3d6c5851-xs.png 300w ,https://berkersen.com/media/posts/18/responsive/276550a7-427e-455f-89bd-5f4f3d6c5851-sm.png 480w ,https://berkersen.com/media/posts/18/responsive/276550a7-427e-455f-89bd-5f4f3d6c5851-md.png 768w ,https://berkersen.com/media/posts/18/responsive/276550a7-427e-455f-89bd-5f4f3d6c5851-lg.png 1024w"></figure>
<p>2. Long Press to Copy Links: Sharing profile information is now more straightforward. With the new long press feature, you can copy all links to your clipboard with ease, streamlining the process of sharing decentralized identity proofs. This enhancement makes it simpler to communicate identity details across different platforms and services. Also the snack-bar is now shown on the top of your screen to avoid collision.</p>
<figure class="post__image image--center mx-auto"><img loading="lazy" src="https://berkersen.com/media/posts/18/01bea2cc-f6e6-4907-8757-d696c5dc4925.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/18/responsive/01bea2cc-f6e6-4907-8757-d696c5dc4925-xs.png 300w ,https://berkersen.com/media/posts/18/responsive/01bea2cc-f6e6-4907-8757-d696c5dc4925-sm.png 480w ,https://berkersen.com/media/posts/18/responsive/01bea2cc-f6e6-4907-8757-d696c5dc4925-md.png 768w ,https://berkersen.com/media/posts/18/responsive/01bea2cc-f6e6-4907-8757-d696c5dc4925-lg.png 1024w"></figure>
<p>3. Themed Adaptive App Icons: For Android users, the app icon is now adaptive and can be themed with monochrome icons. This customization aligns with the latest Android design standards, allowing for a more personalized home screen experience. Now, your app icon can match your device’s theme, adding a touch of personal flair to your interface.</p>
<figure class="post__image image--center mx-auto"><img loading="lazy" src="https://berkersen.com/media/posts/18/07a38484-b9f5-4db8-bc15-3a2bae2e9b06.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/18/responsive/07a38484-b9f5-4db8-bc15-3a2bae2e9b06-xs.png 300w ,https://berkersen.com/media/posts/18/responsive/07a38484-b9f5-4db8-bc15-3a2bae2e9b06-sm.png 480w ,https://berkersen.com/media/posts/18/responsive/07a38484-b9f5-4db8-bc15-3a2bae2e9b06-md.png 768w ,https://berkersen.com/media/posts/18/responsive/07a38484-b9f5-4db8-bc15-3a2bae2e9b06-lg.png 1024w"></figure>
<p>4. Disable Server Update Checks: Users who utilize a custom implementation of the Keyoxide server can now disable the ‘server update check’. This feature prevents obsolete update warnings and ensures a smoother experience for those running custom setups. This is especially useful for advanced users who prefer managing their own server environments.</p>
<figure class="post__image image--center mx-auto"><img loading="lazy" src="https://berkersen.com/media/posts/18/b0668987-42c0-4835-a230-ca83e25fcdff.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/18/responsive/b0668987-42c0-4835-a230-ca83e25fcdff-xs.png 300w ,https://berkersen.com/media/posts/18/responsive/b0668987-42c0-4835-a230-ca83e25fcdff-sm.png 480w ,https://berkersen.com/media/posts/18/responsive/b0668987-42c0-4835-a230-ca83e25fcdff-md.png 768w ,https://berkersen.com/media/posts/18/responsive/b0668987-42c0-4835-a230-ca83e25fcdff-lg.png 1024w"></figure>
<p>5. Disable Animations: For those who find animations in profile page distracting, you can now turn them off in the settings.</p>
<figure class="post__image image--center mx-auto"><img loading="lazy" src="https://berkersen.com/media/posts/18/bf4b8907-e919-4afd-8588-99b08d6d8f32.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/18/responsive/bf4b8907-e919-4afd-8588-99b08d6d8f32-xs.png 300w ,https://berkersen.com/media/posts/18/responsive/bf4b8907-e919-4afd-8588-99b08d6d8f32-sm.png 480w ,https://berkersen.com/media/posts/18/responsive/bf4b8907-e919-4afd-8588-99b08d6d8f32-md.png 768w ,https://berkersen.com/media/posts/18/responsive/bf4b8907-e919-4afd-8588-99b08d6d8f32-lg.png 1024w"></figure>
<p>6. Upstream Package Fixes: I’ve included several upstream fixes for the packages used within the app. These fixes enhance the overall stability and performance, ensuring that Keyoxide Mobile runs smoothly and efficiently. You can expect a more reliable experience with fewer bugs and issues.</p>
<p>7. Flutter Update: The app has been updated to the latest version of Flutter (3.22.1), bringing improved performance, new features, and better compatibility with modern devices. This update ensures that the app leverages the latest advancements in the Flutter framework, providing a more robust and responsive user experience.</p>
<p>8. Updated Translations: Translations are getting there but still not where we want it to be, currently at %67. Keyoxide supports German, English, Dutch, French, Galician, Polish, Spanish, Turkish, Portuguese, Chinese, Japanese at the moment of writing. if you have a spare minute and happen to speak one of these languages, we very much appreciate if you visit our <a target="_blank" href="https://translate.codeberg.org/projects/keyoxide/keyoxide-mobile/">translation page</a> and help with the translations.</p>
<p>Get the Update</p>
<p>I invite you to download or update to the latest version of Keyoxide Mobile from your preferred app store. For more details on using Keyoxide and creating decentralized identities, visit our official website <a target="_blank" href="https://keyoxide.org/">Keyoxide</a>, <a target="_blank" href="https://mobile.keyoxide.org/">Keyoxide Mobile</a>, <a target="_blank" href="https://docs.keyoxide.org/wiki/keyoxide/">Keyoxide Docs</a> and <a target="_blank" href="https://codeberg.org/Berker/keyoxide-flutter/src/branch/master/CHANGELOG.md">change-log</a>.</p>
<p>Stay tuned for more updates, and thank you for being part of the Keyoxide community! Special thanks to everyone who submits these amazing feature requests.</p>
<p>Feel free to leave any feedback or questions on our <a target="_blank" href="https://matrix.to/#/%23keyoxide-mobile:matrix.org">Matrix channel</a> or <a target="_blank" href="https://community.keyoxide.org/">community forum</a>. Your input is invaluable as we continue to enhance the Keyoxide experience.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">⚠</div>
<div data-node-type="callout-text">Although it has been tested, please ensure you back up your profiles before updating.</div>
</div>
            ]]>
        </content>
    </entry>
    <entry>
        <title>Keyoxide Mobile 2.2.0</title>
        <author>
            <name>Berker</name>
        </author>
        <link href="https://berkersen.com/keyoxide-mobile-220/"/>
        <id>https://berkersen.com/keyoxide-mobile-220/</id>
        <media:content url="https://berkersen.com/media/posts/17/3a1f5cf93f9f96b20e86630b61cbc207.jpeg" medium="image" />

        <updated>2024-04-29T21:40:33+02:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://berkersen.com/media/posts/17/3a1f5cf93f9f96b20e86630b61cbc207.jpeg" alt="" />
                    Hi everyone! This will be a very short one I promise. On this update, I implemented some of the user requested features and I will&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://berkersen.com/media/posts/17/3a1f5cf93f9f96b20e86630b61cbc207.jpeg" class="type:primaryImage" alt="" /></p>
                <p>Hi everyone! This will be a very short one I promise. On this update, I implemented some of the user requested features and I will walk you through two of them.</p>
<figure class="post__image image--center mx-auto"><img loading="lazy" src="https://berkersen.com/media/posts/17/5da8d27b-94d6-47df-8ecc-e443c0c75f03.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/17/responsive/5da8d27b-94d6-47df-8ecc-e443c0c75f03-xs.png 300w ,https://berkersen.com/media/posts/17/responsive/5da8d27b-94d6-47df-8ecc-e443c0c75f03-sm.png 480w ,https://berkersen.com/media/posts/17/responsive/5da8d27b-94d6-47df-8ecc-e443c0c75f03-md.png 768w ,https://berkersen.com/media/posts/17/responsive/5da8d27b-94d6-47df-8ecc-e443c0c75f03-lg.png 1024w"></figure>
<ol>
<li><p><strong>Language selection in settings</strong></p>
<p> There is a new section in the settings &gt; system called language now. You will be able to choose your preferred language or default to system which follows the system language.</p>
<figure class="post__image image--center mx-auto"> <img loading="lazy" src="https://berkersen.com/media/posts/17/c5073ec5-f761-4c39-a61f-2ce817618d2e.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/17/responsive/c5073ec5-f761-4c39-a61f-2ce817618d2e-xs.png 300w ,https://berkersen.com/media/posts/17/responsive/c5073ec5-f761-4c39-a61f-2ce817618d2e-sm.png 480w ,https://berkersen.com/media/posts/17/responsive/c5073ec5-f761-4c39-a61f-2ce817618d2e-md.png 768w ,https://berkersen.com/media/posts/17/responsive/c5073ec5-f761-4c39-a61f-2ce817618d2e-lg.png 1024w"></figure>
</li>
<li><p><strong>Profile privacy settings</strong></p>
<p> There is a new switch on the profile cards 'Hide profile', when enabled the profile will be excluded from the profile list. In the settings, you can choose if you want to include the hidden profiles in the list. If the authentication is enabled, 'Show hidden profiles' switch in the settings is protected with authentication.</p>
<figure class="post__image image--center mx-auto"> <img loading="lazy" src="https://berkersen.com/media/posts/17/10830bc7-3069-4180-b4be-1733316793a2.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/17/responsive/10830bc7-3069-4180-b4be-1733316793a2-xs.png 300w ,https://berkersen.com/media/posts/17/responsive/10830bc7-3069-4180-b4be-1733316793a2-sm.png 480w ,https://berkersen.com/media/posts/17/responsive/10830bc7-3069-4180-b4be-1733316793a2-md.png 768w ,https://berkersen.com/media/posts/17/responsive/10830bc7-3069-4180-b4be-1733316793a2-lg.png 1024w"></figure>
</li>
</ol>
<p>On top of the new features, bunch of other stuff was updated under the hood. Lots of upstream fixes and performance improvements from the packages used. Also we now use the latest gradle build tools to build Android versions. And the flutter was updated to the latest version as well which the app was built with. I fixed and tested the data migration issue as well, your data should persist between the updates but I would still backup the contacts and profiles just in case.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">⚠</div>
<div data-node-type="callout-text"><strong>Even with the resolved data migration issue, please backup your contacts and profiles before updating to prevent data loss. Especially for F-Droid builds.</strong></div>
</div>

<p>This is it for now. Thanks for reading, enjoy the update! For download links, visit <a target="_blank" href="https://mobile.keyoxide.org/">Keyoxide Mobile</a>. If you'd like to help with the effort, hit <a target="_blank" href="https://translate.codeberg.org/projects/keyoxide/keyoxide-mobile/">Keyoxide translations</a>, <a target="_blank" href="https://codeberg.org/keyoxide">Keyoxide repository</a>, for donations <a target="_blank" href="https://opencollective.com/keyoxide">Open Collective</a>, wanna drop by and say hello <a target="_blank" href="https://matrix.to/#/#keyoxide-space:matrix.org">Keyoxide Matrix Space</a> or <a target="_blank" href="https://community.keyoxide.org/">Community Forum</a>.</p>

            ]]>
        </content>
    </entry>
    <entry>
        <title>Keyoxide Mobile 2.1.0</title>
        <author>
            <name>Berker</name>
        </author>
        <link href="https://berkersen.com/keyoxide-mobile-210/"/>
        <id>https://berkersen.com/keyoxide-mobile-210/</id>
        <media:content url="https://berkersen.com/media/posts/16/41f11ee085cbb85e07b07f78f9c937b1.jpeg" medium="image" />

        <updated>2024-03-05T11:22:23+01:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://berkersen.com/media/posts/16/41f11ee085cbb85e07b07f78f9c937b1.jpeg" alt="" />
                    Adds Contacts Feature and Guided Tour Hi everyone, it's been a month again and here we are with another update. In this blog post, we'll&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://berkersen.com/media/posts/16/41f11ee085cbb85e07b07f78f9c937b1.jpeg" class="type:primaryImage" alt="" /></p>
                <p>Adds Contacts Feature and Guided Tour</p>
<p>Hi everyone, it's been a month again and here we are with another update. In this blog post, we'll dive into the details of these new additions and how they enhance the user experience.</p>
<figure class="post__image image--center mx-auto"><img loading="lazy" src="https://berkersen.com/media/posts/16/8ad05576-7e36-41ce-9871-9662d841784c.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/16/responsive/8ad05576-7e36-41ce-9871-9662d841784c-xs.png 300w ,https://berkersen.com/media/posts/16/responsive/8ad05576-7e36-41ce-9871-9662d841784c-sm.png 480w ,https://berkersen.com/media/posts/16/responsive/8ad05576-7e36-41ce-9871-9662d841784c-md.png 768w ,https://berkersen.com/media/posts/16/responsive/8ad05576-7e36-41ce-9871-9662d841784c-lg.png 1024w"></figure>
<p>This update has a bunch of small changes and improvements and two new features. I'll start with the new features:</p>
<p>Contacts Feature:</p>
<p>One of the most significant addition in this release is the contacts feature. I have been meaning to implement this since some time because there are lots of people in Keyoxide circle I'd love to follow their accounts of and remembering their fingerprints or taking a note of them is just too much of a hassle. Users can now easily add profiles of people they know to their address book (contacts) within the app, view their profiles on tap or delete them on left swipe. Just a convenient and quick way to store your most visited profiles. They can also import &amp; export the contacts to &amp; from a json file. Because of a bug in the file_picker package, for now, export feature is implemented a bit different depending on the platform, where on iOS, the contacts are exported directly to a keyoxide_contacts.json file in the application folder and on Android, you are able to chose the export directory yourself.</p>
<p>Guided Tour:</p>
<p>In addition to the new contacts feature, we have introduced a guided tour that walks users through the app's most important features at first launch. This tutorial helps users understand how to get started with managing their personal information.</p>
<p>Other small changes:</p>
<ol>
<li><p>Flutter is updated and app is built with the latest version to date 3.19.2 which has a lot of benefits and performance improvements.</p>
</li>
<li><p>All the packages and dependencies are updated to their latest.</p>
</li>
<li><p>Translations are more complete now, if you would like to help with it, hit our <a target="_blank" href="https://translate.codeberg.org/projects/keyoxide/keyoxide-mobile/">codeberg translations</a>.</p>
</li>
<li><p>UI and bug fixes.</p>
</li>
</ol>
<blockquote>
<p>IMPORTANT INFO: The update might delete your current profiles and settings. Please export your profiles before updating!</p>
</blockquote>
<p>That's it for this update. Enjoy and drop by the <a target="_blank" href="https://community.keyoxide.org/">community forum</a> or <a target="_blank" href="https://matrix.to/#/#keyoxide-space:matrix.org">matrix space</a> if you wanna say hi.</p>

            ]]>
        </content>
    </entry>
    <entry>
        <title>Keyoxide Mobile 2.0.0</title>
        <author>
            <name>Berker</name>
        </author>
        <link href="https://berkersen.com/keyoxide-mobile-200/"/>
        <id>https://berkersen.com/keyoxide-mobile-200/</id>
        <media:content url="https://berkersen.com/media/posts/15/ec341c8d-9b30-41c6-bfcc-ad1315164a19.png" medium="image" />

        <updated>2024-02-04T10:51:26+01:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://berkersen.com/media/posts/15/ec341c8d-9b30-41c6-bfcc-ad1315164a19.png" alt="" />
                    After a lot of work and effort, we are rolling out an exciting update for Keyoxide Mobile, bringing a host of new features and improvements&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://berkersen.com/media/posts/15/ec341c8d-9b30-41c6-bfcc-ad1315164a19.png" class="type:primaryImage" alt="" /></p>
                <p>After a lot of work and effort, we are rolling out an exciting update for <a target="_blank" href="https://mobile.keyoxide.org/">Keyoxide Mobile</a>, bringing a host of new features and improvements that enhance user experience and security. In this blog post, I'll delve into the details of the latest update.</p>
<hr />
<h3 id="heading-new-additions">New Additions</h3>
<h4 id="heading-advanced-asp-profile-management">Advanced ASP Profile Management</h4>
<p><a target="_blank" href="https://keyoxide.org/">Keyoxide</a> now allows users to have comprehensive control over their ASP (<em>Ariadne Signature Profile</em>) profiles. The latest update enables you to:</p>
<ul>
<li><p><strong>Create, edit, delete, import, and export profiles</strong> effortlessly.</p>
</li>
<li><p><strong>Manage claims</strong> associated with your ASP profiles, ensuring you have full control over your online identity.</p>
</li>
</ul>
<h4 id="heading-enhanced-pgp-amp-asp-profile-capabilities">Enhanced PGP &amp; ASP Profile Capabilities</h4>
<p>Storing multiple PGP and ASP profiles is now possible, allowing for greater flexibility and convenience in managing various identities or roles. Let's say you have different accounts for business and private purposes, you can now separate your claims and save them in individual profiles within the app.</p>
<figure class="post__image image--center mx-auto"><img loading="lazy" src="https://berkersen.com/media/posts/15/4f138d47-6059-43f1-b954-4ba2accc58fa.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/15/responsive/4f138d47-6059-43f1-b954-4ba2accc58fa-xs.png 300w ,https://berkersen.com/media/posts/15/responsive/4f138d47-6059-43f1-b954-4ba2accc58fa-sm.png 480w ,https://berkersen.com/media/posts/15/responsive/4f138d47-6059-43f1-b954-4ba2accc58fa-md.png 768w ,https://berkersen.com/media/posts/15/responsive/4f138d47-6059-43f1-b954-4ba2accc58fa-lg.png 1024w"></figure>
<h4 id="heading-custom-domain-and-validation-support">Custom Domain and Validation Support</h4>
<p>Keyoxide now supports custom domains. If you host your verification or ASPE server yourself, you will be able to validate and add your own domain (server) and manage your profiles privately within the app.</p>
<h4 id="heading-server-update-availability">Server Update Availability</h4>
<p>With the new network section in the settings, you will stay informed about server updates and check if an update is available, keeping you up-to-date with the latest enhancements.</p>
<figure class="post__image image--center mx-auto"><img loading="lazy" src="https://berkersen.com/media/posts/15/3439bcf4-d9e9-4b53-8237-1704791a4825.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/15/responsive/3439bcf4-d9e9-4b53-8237-1704791a4825-xs.png 300w ,https://berkersen.com/media/posts/15/responsive/3439bcf4-d9e9-4b53-8237-1704791a4825-sm.png 480w ,https://berkersen.com/media/posts/15/responsive/3439bcf4-d9e9-4b53-8237-1704791a4825-md.png 768w ,https://berkersen.com/media/posts/15/responsive/3439bcf4-d9e9-4b53-8237-1704791a4825-lg.png 1024w"></figure>
<h4 id="heading-improved-security-with-biometric-and-other-authentication-methods">Improved Security with Biometric and Other Authentication Methods</h4>
<p>If you have already setup a local authentication for your device such as biometric, PIN, password, pattern, you name it.. App takes advantage of it to protect your profiles so an unknown person can't mess your profiles or delete them. Don't forget to turn on a authentication method from your device system settings.</p>
<p>User profiles and user defined settings settings are now saved on the device encrypted.</p>
<h4 id="heading-expanded-language-support">Expanded Language Support</h4>
<p>There are two new languages in our <a target="_blank" href="https://translate.codeberg.org/projects/keyoxide/keyoxide-mobile/">weblate translations</a> portal. <strong>Portuguese and Chinese</strong>, catering to a wider audience and enhancing the app's accessibility. With that we have ten supported languages, Chinese, German, English, Dutch, French, Galician, Polish, Portuguese, Spanish and Turkish.</p>
<h4 id="heading-bug-fixes-and-ui-overhauls">Bug Fixes and UI Overhauls</h4>
<p>The update addresses numerous bugs and UI inconsistencies, ensuring a smoother, more reliable experience.</p>
<h3 id="heading-changes">Changes</h3>
<h4 id="heading-revamped-localization-service">Revamped Localization Service</h4>
<p>There is a new localization service with in-app translation strings, we no longer download and cache the latest translations on the app launch but get the translation on build time and embed them in the app. Which solved a lot of issues our users were having..</p>
<h4 id="heading-updated-user-interface">Updated User Interface</h4>
<p>Significant changes have been made to the user view, profile display view, and Settings UI to accommodate the new features implemented.</p>
<h4 id="heading-technical-updates">Technical Updates</h4>
<p>Under the hood, we updated all the packages to their latest and upgraded Flutter to version 3.16.9, ensuring better performance and compatibility.</p>
<hr />
<p>This update represents a significant step forward for <a target="_blank" href="https://keyoxide.org/">Keyoxide</a> in its mission to provide a secure and user-friendly platform for decentralized identity verification. We hope with it's new features and improvements, <a target="_blank" href="https://keyoxide.org/">Keyoxide</a> is poised to become an even more essential tool for anyone looking to manage their online identity with ease and security.</p>
<p>For download links and more, please hit the <a target="_blank" href="https://mobile.keyoxide.org/">Keyoxide Mobile</a> website. Stay tuned for more updates and improvements from <a target="_blank" href="https://keyoxide.org/">Keyoxide</a>!</p>

            ]]>
        </content>
    </entry>
    <entry>
        <title>Keyoxide Mobile 1.6.0</title>
        <author>
            <name>Berker</name>
        </author>
        <link href="https://berkersen.com/keyoxide-mobile-160/"/>
        <id>https://berkersen.com/keyoxide-mobile-160/</id>
        <media:content url="https://berkersen.com/media/posts/14/93cd5c4d19150c485b6cd6cccd104257.jpeg" medium="image" />

        <updated>2023-10-05T12:00:00+02:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://berkersen.com/media/posts/14/93cd5c4d19150c485b6cd6cccd104257.jpeg" alt="" />
                    Hello, everyone! I hope you all had a fantastic summer. Yarmo released the API update much earlier, but we held off until it was fully&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://berkersen.com/media/posts/14/93cd5c4d19150c485b6cd6cccd104257.jpeg" class="type:primaryImage" alt="" /></p>
                <p>Hello, everyone! I hope you all had a fantastic summer. <a target="_blank" href="https://keyoxide.org/aspe:keyoxide.org:TOICV3SYXNJP7E4P5AOK5DHW44">Yarmo</a> released the API update much earlier, but we held off until it was fully matured for the app. Now, it's ripe and ready for you to enjoy. If you're not yet familiar with the ASP profiles (Ariadne Signature Profile), I recommend checking out <a target="_blank" href="https://blog.keyoxide.org/">Keyoxide blog</a> and the <a target="_blank" href="https://blog.keyoxide.org/update-6/">latest post</a> for more information. Here are some exciting highlights from this release:</p>
<p><strong>Support for</strong> <a target="_blank" href="https://blog.keyoxide.org/ariadne-signature-profiles/"><strong>ASP Profiles</strong></a><strong>:</strong> I won't delve into the technical details here, but for non-technical users interested in creating a profile, you can easily do so in the <a target="_blank" href="https://asp.keyoxide.org/">web client</a> and add your claims directly within the <a target="_blank" href="https://asp.keyoxide.org/">client</a>. Our app is now fully compatible with <a target="_blank" href="https://blog.keyoxide.org/ariadne-signature-profiles/">ASP profiles</a>, offering features like deep linking and QR code support. We're also working on bringing profile creation functionality to the app, so stay tuned for updates!</p>
<p><strong>Design Overhaul:</strong> <a target="_blank" href="https://keyoxide.org/aspe:keyoxide.org:TOICV3SYXNJP7E4P5AOK5DHW44">Yarmo</a> has given our design a significant facelift, resulting in a sleeker and simpler appearance. This fresh look is particularly beneficial for users with numerous claims. We've also added neat little service provider icons for the claims, enhancing your overall experience. We've strived to incorporate this new design sensibility into the app, and we're confident you'll appreciate it. Take a sneak peek:</p>
<figure class="post__image"><img loading="lazy" src="https://berkersen.com/media/posts/14/httpssubstack-post-media.s3.amazonaws.compublicimages3c869664-5f49-4850-be91-9033df28e0e1_1080x2280.png" alt  sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/14/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages3c869664-5f49-4850-be91-9033df28e0e1_1080x2280-xs.png 300w ,https://berkersen.com/media/posts/14/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages3c869664-5f49-4850-be91-9033df28e0e1_1080x2280-sm.png 480w ,https://berkersen.com/media/posts/14/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages3c869664-5f49-4850-be91-9033df28e0e1_1080x2280-md.png 768w ,https://berkersen.com/media/posts/14/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages3c869664-5f49-4850-be91-9033df28e0e1_1080x2280-lg.png 1024w"></figure>
<p><strong>Loading Overlay with Claim Count:</strong> We now show a loading circle with the claim count, improving user experience. We've implemented a two-step process, making an initial API call to retrieve the claim count and displaying it to the user before proceeding with verification. This change provides a much smoother and more informative experience, in our humble opinion.</p>
<figure class="post__image image--center mx-auto"><img loading="lazy" src="https://berkersen.com/media/posts/14/httpssubstack-post-media.s3.amazonaws.compublicimages7c21e1e7-6de5-4785-8867-2fcce2ec9cf8_426x276.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/14/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages7c21e1e7-6de5-4785-8867-2fcce2ec9cf8_426x276-xs.png 300w ,https://berkersen.com/media/posts/14/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages7c21e1e7-6de5-4785-8867-2fcce2ec9cf8_426x276-sm.png 480w ,https://berkersen.com/media/posts/14/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages7c21e1e7-6de5-4785-8867-2fcce2ec9cf8_426x276-md.png 768w ,https://berkersen.com/media/posts/14/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages7c21e1e7-6de5-4785-8867-2fcce2ec9cf8_426x276-lg.png 1024w"></figure>
<p><strong>Package and Flutter Version Updates:</strong> We've also updated all packages and the Flutter version, incorporating numerous upstream bug fixes and performance enhancements. While I won't dive into the specifics, rest assured that this update brings better overall stability and performance.</p>
<p>To sum it up, this update will soon be available in app stores. However, if you can't wait, you have the option to download the Android APK directly from Codeberg releases. You can find the app links on the dedicated <a target="_blank" href="https://mobile.keyoxide.org/">mobile page</a> or the <a target="_blank" href="https://keyoxide.org/apps">new apps page</a>. If you'd like to contribute to translations, please visit the <a target="_blank" href="https://translate.codeberg.org/projects/keyoxide/keyoxide-mobile/">translations page</a>. Your assistance is greatly appreciated!</p>
<p>Thank you for your continued support, and we hope you enjoy this exciting update.</p>

            ]]>
        </content>
    </entry>
    <entry>
        <title>Strengthening Security and Enhancing Accessibility: Keyoxide Mobile&#x27;s Latest Updates</title>
        <author>
            <name>Berker</name>
        </author>
        <link href="https://berkersen.com/strengthening-security-and-enhancing-accessibility-keyoxide-mobiles-latest-updates/"/>
        <id>https://berkersen.com/strengthening-security-and-enhancing-accessibility-keyoxide-mobiles-latest-updates/</id>
        <media:content url="https://berkersen.com/media/posts/13/57b8400ab546e88533850020d57863ff.jpeg" medium="image" />

        <updated>2023-06-30T12:00:00+02:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://berkersen.com/media/posts/13/57b8400ab546e88533850020d57863ff.jpeg" alt="" />
                    Hi everyone, I have been hard at work implementing the NLnet milestones alongside improving and fixing the bugs. Keyoxide Mobile recently underwent a comprehensive security&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://berkersen.com/media/posts/13/57b8400ab546e88533850020d57863ff.jpeg" class="type:primaryImage" alt="" /></p>
                <p>Hi everyone, I have been hard at work implementing the NLnet milestones alongside improving and fixing the bugs. Keyoxide Mobile recently underwent a comprehensive security audit by Radically Open Security (ROS).</p>
<figure class="post__image"><img loading="lazy" src="https://berkersen.com/media/posts/13/photo-1603899122634-f086ca5f5ddd" alt="black iphone 5 on yellow textile" ></figure>
<p>Photo by <a target="_blank" href="https://unsplash.com/es/@franckinjapan">Franck</a> on <a target="_blank" href="https://unsplash.com">Unsplash</a></p>
<blockquote>
<p>“The Keyoxide mobile application presented overall a high level of security, even if some medium to low issues were found.”</p>
<p>ROS</p>
</blockquote>
<p>The audit revealed several areas that required attention, including incomplete cleanup of shared preferences, improper TLS certificate validation, improper input validation, and improper input validation of server response.</p>
<p>Enhancing Security:</p>
<p>The security audit conducted on Keyoxide Mobile uncovered several vulnerabilities that needed immediate attention. I took swift action to rectify these issues, ensuring that users' data and privacy remain safeguarded. Here are the key security improvements implemented after the audit findings:</p>
<p>1. Complete Cleanup of Shared Preferences:</p>
<p>Shared preferences might contain sensitive data from users profile (It normally shouldn’t but who knows). Failing to clear these preferences thoroughly could leave traces of sensitive information. App now ensures complete cleanup of shared preferences.</p>
<p>2. Proper TLS Certificate Validation:</p>
<p>Validating the Transport Layer Security (TLS) certificates used in secure connections is crucial to prevent man-in-the-middle attacks and protect the integrity of data transmission. By addressing the improper TLS certificate validation, app now enforces robust security measures, guaranteeing secure and encrypted communication between the app and its servers. ( I had to revert this fix because of frequent certificate renewals but once I implement the local profile verification, we won’t need this server request at all.)</p>
<p>3. Improved Input Validation:</p>
<p>Input validation is a critical defense against common security vulnerabilities such as injection attacks and cross-site scripting. I bolstered the input validation mechanism by using the DIO package parameters instead of string concatenation when constructing the URLs, which ensures that user-supplied data is thoroughly checked and sanitized to prevent malicious code execution or unintended data manipulation.</p>
<p>4. Strengthened Validation of Server Response:</p>
<p>Just added a simple check to make sure the data returned from the server is in JSON format.</p>
<p>Accessibility:</p>
<figure class="post__image"><img loading="lazy" src="https://berkersen.com/media/posts/13/httpssubstack-post-media.s3.amazonaws.compublicimagesc496e153-294d-4d87-914f-52293d881ade_389x238.png" alt  sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/13/responsive/httpssubstack-post-media.s3.amazonaws.compublicimagesc496e153-294d-4d87-914f-52293d881ade_389x238-xs.png 300w ,https://berkersen.com/media/posts/13/responsive/httpssubstack-post-media.s3.amazonaws.compublicimagesc496e153-294d-4d87-914f-52293d881ade_389x238-sm.png 480w ,https://berkersen.com/media/posts/13/responsive/httpssubstack-post-media.s3.amazonaws.compublicimagesc496e153-294d-4d87-914f-52293d881ade_389x238-md.png 768w ,https://berkersen.com/media/posts/13/responsive/httpssubstack-post-media.s3.amazonaws.compublicimagesc496e153-294d-4d87-914f-52293d881ade_389x238-lg.png 1024w"></figure>
<p>Apart from addressing security concerns, I have been working on enhancing accessibility. Here's an overview of the accessibility improvements:</p>
<p>1. Semantics:</p>
<p>I incorporated semantic elements into the user interface, enabling assistive technologies to better understand and navigate the app's content. By leveraging semantic tags &amp; widgets and proper structuring, Keyoxide Mobile now offers improved accessibility for users relying on screen readers or other assistive technologies.</p>
<p>2. Dyslexic Font:</p>
<p>Understanding the challenges faced by individuals with dyslexia, Keyoxide Mobile now includes a dyslexic font option. This feature enhances readability and comprehension, making the app more accessible for users with dyslexia or reading difficulties.</p>
<p>3. Seed color</p>
<p>We now have a new section in the theming which lets you chose a seed color, the app then create a color palette from the chosen color and applies it across the app. It’s suppose to have the right contrast for accessibility and looks really neat if you ask me.</p>
<p>We also updated the design from material 2 to material 3. You will notice the new material 3 widgets like bottom navigation, theme mode buttons etc.</p>
<p>Unit and Bloc Tests for Reliability:</p>
<p>Ensuring the reliability of an application is crucial for maintaining user trust and satisfaction. I integrated unit and bloc tests into the development process. These tests validate the individual units of code and cubits of application states, respectively, ensuring that the app functions as intended and minimizing the risk of regression issues. The unit tests are integrated to the CI/CD process, if the tests doesn’t pass, build process stops and sends me an email with the report so I can fix the issue.</p>
<p>This is it for now. You can find all the changes and fixes in the new version 1.5.0. If you wanna get these seldom updates to your inbox, subscribe below. Through semantic labels I had to add a lot of new text to the weblate waiting to be translated.</p>

            ]]>
        </content>
    </entry>
    <entry>
        <title>Localized and deep linked Keyoxide Mobile</title>
        <author>
            <name>Berker</name>
        </author>
        <link href="https://berkersen.com/localized-and-deep-linked-keyoxide-mobile/"/>
        <id>https://berkersen.com/localized-and-deep-linked-keyoxide-mobile/</id>
        <media:content url="https://berkersen.com/media/posts/12/d1b92deb61c711e7951e519b464e888d.jpeg" medium="image" />

        <updated>2023-04-20T12:00:00+02:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://berkersen.com/media/posts/12/d1b92deb61c711e7951e519b464e888d.jpeg" alt="" />
                    If you haven’t seen the Keyoxide Mobile’s NLnet funding milestones yet, one of them is localization. When I heard the Codeberg is launching a translation&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://berkersen.com/media/posts/12/d1b92deb61c711e7951e519b464e888d.jpeg" class="type:primaryImage" alt="" /></p>
                <p>If you haven’t seen the Keyoxide Mobile’s <a target="_blank" href="https://codeberg.org/Berker/keyoxide-flutter/milestone/3578">NLnet funding milestones</a> yet, one of them is localization. When I heard the <a target="_blank" href="https://blog.codeberg.org/letter-from-codeberg-hackathon-translation-service-more.html">Codeberg is launching a translation service</a>, I thought it would be the perfect candidate for <a target="_blank" href="https://mobile.keyoxide.org/">Keyoxide Mobile</a> since we host all our source code in <a target="_blank" href="https://codeberg.org/">codeberg</a> and I wasn’t wrong. After adding Keyoxide Mobile to <a target="_blank" href="https://translate.codeberg.org/">codeberg translations</a>, we had eight Languages translated at 100% in just two weeks with the help of the awesome community behind <a target="_blank" href="https://translate.codeberg.org/">codeberg translations</a> and <a target="_blank" href="https://keyoxide.org/">Keyoxide</a>. Currently available languages are English, Dutch, French, Galician, German, Polish, Spanish and Turkish.</p>
<p><a target="_blank" href="https://translate.codeberg.org/">Codeberg translations</a> is a Weblate instance, for those who never heard of <a target="_blank" href="https://weblate.org">Weblate</a>, Weblate is a free, open-source web-based translation management system that enables collaborative translation of software, documentation, and other types of content. Keyoxide joins a growing number of projects on Weblate, including popular open-source projects like VLC media player, Nextcloud, and Django, <a target="_blank" href="https://translate.codeberg.org/projects/">here is the complete list</a>.</p>
<figure class="post__image image--center mx-auto"><img loading="lazy" src="https://berkersen.com/media/posts/12/photo-1571498664957-fde285d79857" alt="brown wooden surface"  ></figure>
<p>Photo by <a target="_blank" href="https://unsplash.com/@hannahwrightdesigner">Hannah Wright</a> on <a target="_blank" href="https://unsplash.com">Unsplash</a></p>
<p>With the addition of localization support on codeberg translations, we hope to increase the accessibility of the mobile app to a wider audience. Non-English speaking users can now contribute translations to the app, making it easier to use and more intuitive.</p>
<p>To contribute translations, users can simply create an account on Codeberg or login with their existing account and navigate to the Keyoxide project. From there, they can choose their preferred language and begin translating the app's interface, even add a new language if it’s not there.</p>
<p>Localization on codeberg translations and Weblate is just one of the many steps Keyoxide is taking to make the platform more accessible to users around the world.</p>
<p>Another feature we have implemented is deep linking. When a user clicks on a deep link, their device will recognize the URL scheme (OPENPGP4FPR) and launch the Keyoxide app and view the profile directly. For example, go to the demo profile here: <a target="_blank" href="https://codeberg.org/Berker/keyoxide-flutter/milestone/3578">https://keyoxide.org/project@keyoxide.org</a> and then click the fingerprint key and then hit ‘SHOW OPENPGP FINGERPRINT QR’ button and click the OPENPGP4FPR link which should launch the app and view the profile.</p>
<figure class="post__image"><img loading="lazy" src="https://berkersen.com/media/posts/12/httpssubstack-post-media.s3.amazonaws.compublicimages54c2a6e3-d0c3-43f1-91f9-e0224cc1f7c3_404x690.gif" alt ></figure>
<p>Updates will be available shortly on the store of your choice and download links can be found on <a target="_blank" href="https://mobile.keyoxide.org/">Keyoxide Mobile website</a>.</p>
<p>This is it for now. If you're interested in contributing to the localization effort for the Keyoxide, head over to <a target="_blank" href="https://translate.codeberg.org/projects/keyoxide/">codeberg translations</a> and start translating today!</p>

            ]]>
        </content>
    </entry>
    <entry>
        <title>Localize your flutter app with Weblate</title>
        <author>
            <name>Berker</name>
        </author>
        <link href="https://berkersen.com/localize-your-flutter-app-with-weblate/"/>
        <id>https://berkersen.com/localize-your-flutter-app-with-weblate/</id>
        <media:content url="https://berkersen.com/media/posts/11/4467700d-b0a3-430e-877e-942ca0cd15f9.png" medium="image" />

        <updated>2023-04-15T12:00:00+02:00</updated>
            <summary type="html">
                <![CDATA[
                        <img src="https://berkersen.com/media/posts/11/4467700d-b0a3-430e-877e-942ca0cd15f9.png" alt="" />
                    When I set out to find an open source localization service for Keyoxide Mobile, I couldn’t find many open source services with easy implementation and&hellip;
                ]]>
            </summary>
        <content type="html">
            <![CDATA[
                    <p><img src="https://berkersen.com/media/posts/11/4467700d-b0a3-430e-877e-942ca0cd15f9.png" class="type:primaryImage" alt="" /></p>
                <p>When I set out to find an open source localization service for <a target="_blank" href="https://mobile.keyoxide.org/">Keyoxide Mobile</a>, I couldn’t find many open source services with easy implementation and than I remembered <a target="_blank" href="https://blog.codeberg.org/letter-from-codeberg-hackathon-translation-service-more.html">codeberg announcing a translation service</a>, a <a target="_blank" href="https://translate.codeberg.org/">weblate instance</a>. Since we host all our code on <a target="_blank" href="https://codeberg.org/">codeberg</a>, I decided to check it out and I’m glad I did.</p>
<figure class="post__image image--center mx-auto"><img loading="lazy" src="https://berkersen.com/media/posts/11/be24bd72-8141-421d-8ea4-eea6878712af.png" alt   sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/11/responsive/be24bd72-8141-421d-8ea4-eea6878712af-xs.png 300w ,https://berkersen.com/media/posts/11/responsive/be24bd72-8141-421d-8ea4-eea6878712af-sm.png 480w ,https://berkersen.com/media/posts/11/responsive/be24bd72-8141-421d-8ea4-eea6878712af-md.png 768w ,https://berkersen.com/media/posts/11/responsive/be24bd72-8141-421d-8ea4-eea6878712af-lg.png 1024w"></figure>
<p><a target="_blank" href="https://weblate.org">Weblate</a> is a free, open-source web-based translation management system that enables collaborative translation of software, documentation, and other types of content. Keyoxide joins a growing number of projects on Weblate, including popular open-source projects like VLC media player, Nextcloud, and Django. It supports translation service suggestions such as <a target="_blank" href="https://www.deepl.com">DeepL</a> to make translating a breeze.</p>
<p>When it comes to open source projects, Weblate is the go-to localization service. What makes it especially attractive for flutter developers is, there is an unofficial <a target="_blank" href="https://pub.dev/packages/weblate_sdk">weblate sdk package</a> in <a target="_blank" href="https://mobile.keyoxide.org/">pub.dev</a> which makes the integration very easy. The developer of the package <a target="_blank" href="https://github.com/cozvtieg9">@cozvtieg9</a> is incredibly responsive, he was able to fix a bug I encountered less then a few hours and helped me with the integration as well. He even implemented a feature request I made in less then 24 hours.</p>
<p>Enough talk, lets get to the code. First you need to have a weblate instance, if you don’t want to host a weblate instance yourself, I would recommend the <a target="_blank" href="https://translate.codeberg.org/">codeberg instance</a>. You can check the <a target="_blank" href="https://docs.weblate.org/en/latest/">weblate docs</a> for further info. Once you created your project and added your app as a component:</p>
<ol>
<li><p>go to project &gt; Manage &gt; API access, from there hit the Teams tab on top. Create a new team and name it ‘Languages’ or whatever you want, don’t change anything else and hit Add button at the bottom.</p>
<figure class="post__image"> <img loading="lazy" src="https://berkersen.com/media/posts/11/httpssubstack-post-media.s3.amazonaws.compublicimages837436ea-5a5f-43b6-870f-3c1f46cb8e95_2966x808.png" alt  sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/11/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages837436ea-5a5f-43b6-870f-3c1f46cb8e95_2966x808-xs.png 300w ,https://berkersen.com/media/posts/11/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages837436ea-5a5f-43b6-870f-3c1f46cb8e95_2966x808-sm.png 480w ,https://berkersen.com/media/posts/11/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages837436ea-5a5f-43b6-870f-3c1f46cb8e95_2966x808-md.png 768w ,https://berkersen.com/media/posts/11/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages837436ea-5a5f-43b6-870f-3c1f46cb8e95_2966x808-lg.png 1024w"></figure>
</li>
</ol>
<p>Once you have your ‘Languages’ team, go to API access and create a project token, name it whatever you want, choose an expiry date. When you hit create, you will get to chose Teams, here we will un-select the Administration team and select the team we created before, in my case ‘Languages’. We don’t want our token to have admin privileges. Afterwards you copy the token somewhere safe, we will need it later.</p>
<figure class="post__image"><img loading="lazy" src="https://berkersen.com/media/posts/11/httpssubstack-post-media.s3.amazonaws.compublicimages0fa00c6a-4780-46ad-bc81-41e4bd44c795_1458x648.png" alt  sizes="(min-width: 920px) 703px, (min-width: 700px) calc(82vw - 35px), calc(100vw - 81px)" srcset="https://berkersen.com/media/posts/11/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages0fa00c6a-4780-46ad-bc81-41e4bd44c795_1458x648-xs.png 300w ,https://berkersen.com/media/posts/11/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages0fa00c6a-4780-46ad-bc81-41e4bd44c795_1458x648-sm.png 480w ,https://berkersen.com/media/posts/11/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages0fa00c6a-4780-46ad-bc81-41e4bd44c795_1458x648-md.png 768w ,https://berkersen.com/media/posts/11/responsive/httpssubstack-post-media.s3.amazonaws.compublicimages0fa00c6a-4780-46ad-bc81-41e4bd44c795_1458x648-lg.png 1024w"></figure>
<ol>
<li><p>Now go to profile &gt; settings &gt; API access tab and copy the API root URL we will need later on.</p>
</li>
<li><p>In the app first we will need to add localization support and the <a target="_blank" href="https://pub.dev/packages/weblate_sdk">weblate_sdk package</a> to our pubspec.yml file</p>
<pre><code class="lang-yaml"> <span class="hljs-attr">weblate_sdk:</span> <span class="hljs-string">latest</span>
 <span class="hljs-attr">flutter_localizations:</span>
     <span class="hljs-attr">sdk:</span> <span class="hljs-string">flutter</span>
</code></pre>
</li>
<li><p>In our <strong>main</strong> function, we initialize the weblate_sdk. In my case the API root URL was <a target="_blank" href="https://mobile.keyoxide.org/">https://translate.codeberg.org/api/</a> but <a target="_blank" href="https://mobile.keyoxide.org/">https://translate.codeberg.org</a> worked as well so if the root URL from weblate doesn’t work for you, remove the /api/ at the end and try again. If you need more info about the parameters, you can find it in the <a target="_blank" href="https://pub.dev/documentation/weblate_sdk/latest/">documentation</a>.</p>
<pre><code class="lang-dart">  <span class="hljs-keyword">await</span> WebLateSdk.initialize(
     token: <span class="hljs-string">'the project token we created in step 2'</span>,
     host: <span class="hljs-string">'API root URL from step 3'</span>,
     projectName: <span class="hljs-string">'name of project'</span>,
     componentName: <span class="hljs-string">'name of component'</span>,
     defaultLanguage: <span class="hljs-string">'en'</span>,
     disableCache: <span class="hljs-keyword">false</span>, <span class="hljs-comment">//optional</span>
     cacheLive: <span class="hljs-keyword">const</span> <span class="hljs-built_in">Duration</span>(days: <span class="hljs-number">1</span>), <span class="hljs-comment">//optional</span>
     fallbackJson: <span class="hljs-string">'assets/default.json'</span>, <span class="hljs-comment">//optional</span>
   );
</code></pre>
</li>
<li><p>Next you just need to create a few strings in your component and use your localized strings in your code.</p>
<pre><code class="lang-dart"> context.localizedValueOf(<span class="hljs-string">'key'</span>)
</code></pre>
</li>
<li><p>You can also use formatted strings</p>
<pre><code class="lang-dart"> context.localizedValueOf(<span class="hljs-string">'key'</span>, format: [<span class="hljs-string">'John'</span>])

 Note: To use formatted strings you should highlight the interpolated string <span class="hljs-keyword">with</span> { }. For example: <span class="hljs-string">'Welcome {username}!'</span>
 Output: Welcome John!
</code></pre>
</li>
</ol>
<p>That’s it really! Now you need to take your time and localize all the text in your app. <a target="_blank" href="https://translate.codeberg.org/">Codeberg weblate instance</a> has such a strong community that after adding my app, I got 8 languages translated at 100% in a week or so.</p>
<p>If you liked this article and want to know more about open source content for flutter, follow on <a target="_blank" href="https://fosstodon.org/@berker">Mastodon</a> and <a target="_blank" href="https://twitter.com/Berker">Twitter</a>.</p>

            ]]>
        </content>
    </entry>
</feed>
