تێپەڕین بۆ ناوەڕۆک
← پڕۆژەکان

shipped

Ferva : Learn the Craft

ئەپێکی فێربوون بۆ Android کە Flutter و Dart بە کوردی یان ئینگلیزی فێردەکات؛ لەگەڵ کۆرس، ڤیدیۆ، بەدواداچوونی پێشکەوتن، تاقیکردنەوە، تێبینی، پرسیار و وەڵام، زنجیرەی خوێندن و بڕوانامە.

Ferva : Learn the Craft

وێنەکانی شاشە

Ferva
Ferva
Ferva
Ferva
Ferva
Ferva
001

ستاک

SupabaseFlutter FlavorsShared PreferencesFirebaseDioGoRouterFVMFreezedDartMocktailRiverpodJSON SerializationFCMFlutter
002

کێشە

The course platform already worked on the web, but learners needed a focused mobile path for watching lessons, resuming study and tracking progress in Sorani Kurdish as well as English. A second client also had to preserve the same enrolment and content rules instead of duplicating authorization in the app.
003

بەربەستەکان

One Flutter client has to stay correct across English and right-to-left Sorani Kurdish, unreliable mobile networks and a live shared backend. Paid-course access, private notes, quiz results and certificates must never depend on a client-side check. The published product is Android-only and must not imply iOS availability.
004

داڕشتن

Feature-first Clean-lite with data, domain and presentation layers. Riverpod provides state and dependency injection, repositories isolate Supabase and Dio, and GoRouter uses a stateful shell so Learn, Dashboard and Account keep independent navigation stacks. Freezed and JSON Serialization define immutable wire models. Postgres RLS protects user and enrolment data; the router guard only controls navigation.
005

تێبینییەکان لەسەر ستاک

Flutter and Dart pinned with FVM; Riverpod 3; GoRouter; Freezed and JSON Serialization; Supabase Auth, Postgres and RPCs under RLS; Dio for server routes; native HLS playback; Firebase Cloud Messaging plus local notifications; secure session storage; Shared Preferences for locale, theme and playback settings; Shorebird for Android updates.
006

بڕیارەکان

Kept one backend contract for web and mobile instead of creating app-specific authorization. Every feature owns a repository boundary, while use cases exist only for flows that coordinate more than one repository. Responsive decisions use available window width rather than device labels, and localization is structural: all visible copy comes from ARB files and the full layout mirrors in Kurdish.
007

سازشەکان

Ferva does not download course video for offline playback; it is network-aware and preserves session, preferences and playback progress, but course content remains server-backed. The release is Android-only even though the Flutter codebase retains iOS support. Push depends on Firebase while course and identity data stay in Supabase.
008

پێوەرەکان

Platform

Android

Locales

en + ckb

Architecture

3 layers

009

وانە وەرگیراوەکان

The hardest parts of a learning app are continuity and trust, not the catalogue screen: resume position must survive lifecycle changes, completion must be idempotent, and access must be enforced below the UI. Treating RLS as the security boundary and localization as a layout constraint kept those rules testable across two clients and two reading directions.
010

توێژینەوەی کەیس

Ferva پۆرتاڵی ڕەسەنی خوێندکاریی fawzii.dev ـە. بەکارهێنەر دەتوانێت وەک میوان کۆرسەکان ببینێت، بچێتە ژوورەوە، وانەکانی ببینێت و لەو شوێنەوە بەردەوام بێت کە وەستاوە. لە ناو کۆرسدا گەڕان بە پڕۆگرام، ڤیدیۆ، تێبینی تایبەت، تاقیکردنەوە، نیشانکردنی وانە، پرسیار و وەڵام و هەڵسەنگاندن بەردەستن. داشبۆرد پێشکەوتن، ئامانجی هەفتانە، زنجیرەی خوێندن و بڕوانامە پیشان دەدات.\n\nهەمان بنکەدراوەی Supabase بۆ وێب و مۆبایل بەکاردێت و RLS سنووری دەسەڵاتە. هەموو شاشەکان ئینگلیزی و کوردیی سۆرانی، RTL، دۆخی ڕووناک و تاریک و deep link پشتگیری دەکەن.