{
    "version": "https://jsonfeed.org/version/1",
    "title": "AfriAnnotate updates",
    "home_page_url": "https://docs.afriannotate.org/blog",
    "description": "AfriAnnotate Docs Blog",
    "items": [
        {
            "id": "https://docs.afriannotate.org/blog/2026/05/05/app-v0-1-0",
            "content_html": "<p>The first formal Android release of AfriAnnotate is now live and\ndistributed via Firebase App Distribution.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-ships\">What ships<a href=\"https://docs.afriannotate.org/blog/2026/05/05/app-v0-1-0#what-ships\" class=\"hash-link\" aria-label=\"Direct link to What ships\" title=\"Direct link to What ships\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><strong>Cloud-hosted web</strong> at <a href=\"https://label.afriannotate.org/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">label.afriannotate.org</a>\n— Cloud Run + Cloud SQL + GCS, served on a Google-managed cert\nvia Cloudflare DNS</li>\n<li class=\"\"><strong>Brevo email delivery</strong> for transactional mail (verification,\npassword reset, welcome). SPF + DKIM + DMARC verified on both\napex <code>afriannotate.org</code> and <code>label.afriannotate.org</code></li>\n<li class=\"\"><strong>Email-first unified auth flow</strong>: type your email, the server\nroutes you to signup / verify / login based on account state</li>\n<li class=\"\"><strong>Strict email-verification gate</strong> with invite-only org\nmembership — no automatic per-user org creation</li>\n<li class=\"\"><strong>Auto-login on verify and reset clicks</strong> — no second password\nprompt after clicking a one-shot link</li>\n<li class=\"\"><strong>Forgot / reset password</strong> with quadratic-backoff resend and\nexponential per-(IP, email) rate limits</li>\n<li class=\"\"><strong>Email-change verification</strong> — the new address must be\nconfirmed before the swap commits</li>\n<li class=\"\"><strong>Operator-tunable rate limits</strong> via PlatformSettings (adjust\nbase + cap per endpoint without a deploy)</li>\n<li class=\"\"><strong>Dynamic platform name</strong> — rename once at <strong>Platform → Branding</strong>\nand it propagates to emails, UI, browser title</li>\n<li class=\"\"><strong>NoOrgState</strong> — clear messaging for users with no organisation\nmembership, distinguishing \"removed from org\" vs \"never invited\"</li>\n<li class=\"\"><strong>Project create wizard</strong> — Data Import unblocks after labeling\nconfig is selected; inline warning when uploaded data is missing\nrequired <code>$varname</code> fields per file; Save button gated on\nvalidation</li>\n<li class=\"\"><strong>Capacitor thin-client APK</strong> pointed at the cloud, with live\nfeature-flag fetch (no rebuild for flag flips)</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"mobile-install\">Mobile install<a href=\"https://docs.afriannotate.org/blog/2026/05/05/app-v0-1-0#mobile-install\" class=\"hash-link\" aria-label=\"Direct link to Mobile install\" title=\"Direct link to Mobile install\" translate=\"no\">​</a></h2>\n<p>Available via Firebase App Distribution. See\n<a class=\"\" href=\"https://docs.afriannotate.org/mobile/install\">Mobile install</a> for the step-by-step.</p>\n<p><code>versionCode=77925650</code>, <code>versionName=app-v0.1.0</code>,\nSHA256 <code>a5215e77215a3db66e96652d68e118e8d1313fc9bb325329eb4585b626990dcc</code>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"tag--repo\">Tag + repo<a href=\"https://docs.afriannotate.org/blog/2026/05/05/app-v0-1-0#tag--repo\" class=\"hash-link\" aria-label=\"Direct link to Tag + repo\" title=\"Direct link to Tag + repo\" translate=\"no\">​</a></h2>\n<p>Source code: <a href=\"https://github.com/AfriAnnotate/Tool\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">https://github.com/AfriAnnotate/Tool</a>,\ntag <code>app-v0.1.0</code>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"known-limits\">Known limits<a href=\"https://docs.afriannotate.org/blog/2026/05/05/app-v0-1-0#known-limits\" class=\"hash-link\" aria-label=\"Direct link to Known limits\" title=\"Direct link to Known limits\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><strong>Mobile is online-only</strong> for now — no IndexedDB outbox yet, no\noffline data reads. Roadmap covers this in a future release.</li>\n<li class=\"\"><strong>Email deliverability to strict corporate filters</strong> (Mimecast,\nMicrosoft ATP, university IT) sometimes fails despite correct\nSPF/DKIM/DMARC. Workaround: platform owners can\n<a class=\"\" href=\"https://docs.afriannotate.org/platform-admin/manual-verify\">mark users verified manually</a>.</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"whats-next\">What's next<a href=\"https://docs.afriannotate.org/blog/2026/05/05/app-v0-1-0#whats-next\" class=\"hash-link\" aria-label=\"Direct link to What's next\" title=\"Direct link to What's next\" translate=\"no\">​</a></h2>\n<p>Mobile + desktop hardening pass, expanded API surface, additional\ncontent modules for Hausa / Swahili / French / Portuguese readers.</p>",
            "url": "https://docs.afriannotate.org/blog/2026/05/05/app-v0-1-0",
            "title": "v0.1.0 — first formal release",
            "summary": "The first formal Android release of {} is now live and",
            "date_modified": "2026-05-05T00:00:00.000Z",
            "author": {
                "name": "AfriAnnotate",
                "url": "https://github.com/AfriAnnotate"
            },
            "tags": [
                "release",
                "mobile"
            ]
        }
    ]
}