Ürünleri ortak bir işletim çatısı üzerinde geliştirin.
Bir kez geliştirin. Her alanda yayınlayın.
After Framework ürünlere ortak bir temel sunar: mimari, kimlik, YZ, tasarım sistemleri, araçlar ve yeniden kullanılabilir alan modülleri.
01 · Çatı mimarisi
Tek çekirdek. İki ürün hattı. Üstte ince ürünler.
Her ürün aynı katmanları paylaşır. Bir Yaşam Alanı ya da Sektör Alanı eklemek en üste bir modül ekler — alttaki katmanlar değişmez.
Ürüne özgü
Ortak platform
Kompozisyon kökü adaptörleri
Neye sahip olduğunu ve neye bağımlı olduğunu görmek için bir katman seçin.
after_core
Ortak çekirdek
Kimlik doğrulama, güçlendirilmiş ağ, depolama, Riverpod DI, bayraklar, uzaktan yapılandırma, BYOK YZ SDK'sı, premium haklar, bildirimler, derin bağlantılar ve pano, eklenti, arama ve ayar motorları.
- Bağımlı olduğu
- Yok — temel katman
- Kullananlar
- Ürün alanı katmanı · Ekosistem katmanı · YZ yetenekleri · Tüketici modülleri · Kurumsal modüller · Tasarım sistemi · Firebase adaptörleri
Ortak yeniden kullanım, ürüne özgü deneyim
Platform doktrini, her ürünün çalışma zamanı yeteneklerinin yüzde doksanını veya fazlasını devralmasını hedefler. Ürün yalnızca kendi alanına, dikey özelliklerine, YZ profiline, kataloglarına ve markasına sahiptir.
Sistemi ayakta tutan kurallar
- 01SDK'lar yerine portlar: dikey kod tedarikçi SDK'larına değil, After arayüzlerine bağımlıdır.
- 02Dikey modüller yalnızca ürün depolarında, lib/features/ altında yaşar.
- 03Her port bir mock ile gelir; böylece iskeletler arka uç olmadan çalışır.
- 04Sıfırdan kurma, üret: yeni ürünler yeni bir mimariyle değil, bir spec ile başlar.
02 · Ürün fabrikası
Fikirden çalışan ürüne, yeniden kullanılabilir bir temel üzerinde.
Ürün fabrikası küçük bir product.spec.yaml dosyasını, ortak paketlere bağımlı kardeş bir Flutter uygulamasına dönüştürür. Spec yalnızca ürüne özgü olanı içerir.
- 01
Fikir
Ürüne ad verin ve bir hat seçin: consumer veya enterprise; referans olarak SuperGarage ya da SuperHospital.
- 02
Alan
product.spec.yaml yazın: alan, dikey özellikler, sekmeler, izinler, pano widget'ları, YZ becerileri, marka, diller.
- 03
Modüller
Spec'te olmayan her şey — kimlik doğrulama, üyelik veya organizasyon, RBAC, takvim, görevler, bildirimler, arama — devralınır.
- 04
Ürün kabuğu
generate_product.ps1; manifesti, kompozisyon kökünü, özellik kataloğunu, kabuğu, l10n dosyalarını ve bir CI iş akışını üretir.
- 05
Dağıtım
Üretilen CI iş akışı, main dalına yapılan her push ve pull request'te biçimlendirme, analiz ve kapsamlı testleri çalıştırır.
Ürünün sahip oldukları
- Ad, paket, bundle, ürün hattı
- Dikey özellikler ve i18n anahtarları
- Gezinme sekmeleri
- RBAC izin dizeleri
- Pano widget'ları
- YZ becerileri ve araç bağlamaları
- Vurgu rengi ve monogram
Platformun sağladıkları
- Kimlik doğrulama ve superadmin
- Üyelik veya organizasyon
- RBAC motoru ve denetim kaydı
- Takvim, görevler, belgeler
- Bildirimler ve analitik
- İş akışı, pano ve arama motorları
- Tasarım sistemi, açılış ekranı, CI
Üreteci güncellenmiş bir spec ile yeniden çalıştırmak, insan tarafından yazılmış özellik kodunu bozmadan iskelet dosyalarını günceller.
03 · Paketler ve yetenekler
Yedi paket. Açık bağımlılıklar.
Tüm paketler supercore deposunda 1.0.0 sürümündedir ve path bağımlılıklarıyla kullanılır. Neye bağımlı olduğunu ve ona nelerin bağımlı olduğunu izlemek için bir paket seçin.
Ortak çekirdek
after_core
Kimlik doğrulama, ağ, depolama, DI, analitik, özellik bayrakları, uzaktan yapılandırma, YZ, bildirimler, derin bağlantılar ve premium haklar için portlar ve varsayılan uygulamalar. Ürünler Riverpod sağlayıcılarını kendi adaptörleriyle geçersiz kılar.
- Bağımlı olduğu
- Yok — temel katman
- Kullananlar
Temel API'ler
- AppPlatformManifest
- PlatformConfig
- AfterStandardOverrides
- AfterBootstrapMode
- AfterAuthRepository
- AfterApiClient
- AfterHttpClientFactory
- AfterFeatureFlags
- AfterRemoteConfig
- AfterAiCredentialVault
Öne çıkan üçüncü taraf bağımlılıklar
flutter_riverpod · dio · flutter_secure_storage · shared_preferences · google_sign_in · app_links · flutter_local_notifications
Örnek
import 'package:after_core/after_core.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
final prefs = await SharedPreferences.getInstance();
runApp(
ProviderScope(
overrides: [
afterSharedPreferencesProvider.overrideWithValue(prefs),
afterAuthRepositoryProvider.overrideWithValue(MyFirebaseAuthRepository()),
afterAnalyticsProvider.overrideWithValue(MyFirebaseAnalytics()),
// ... store-specific adapters
],
child: const MySuperApp(),
),
);
}Kaynak supercore/packages/after_core/README.md (yeni sekmede açılır)
Ekosistem dokusu
after_ecosystem
After ID, After+, olay veri yolu, ürünler arası API'ler, ortak servisler ve ekosistem YZ bağlamı; böylece tüketici ve kurumsal modüller tek bir sistem gibi davranır.
- Bağımlı olduğu
- Kullananlar
Temel API'ler
- AfterEventBus
- AfterProductApi
- AfterProductApiRegistry
- AfterSecureInteropBridge
- AfterEcosystemAiContext
- afterEcosystemProvider
Öne çıkan üçüncü taraf bağımlılıklar
flutter_riverpod · uuid
Örnek
{
"id": "evt_…",
"type": "garage.maintenance.completed",
"sourceProductId": "super_garage",
"afterId": "aid_…",
"organizationId": null,
"occurredAt": "2026-07-19T20:00:00Z",
"correlationId": "corr_…",
"payload": { }
}Kaynak supercore/docs/AFTER_ECOSYSTEM_PLATFORM.md (yeni sekmede açılır)
YZ yetenek platformu
after_ai
Modüler bir YZ katmanı: ürünler yetenekleri etkinleştiren bir AfterAiProfile seçer. Devre dışı bir yeteneği çağırmak hata fırlatır. Her yetenek bir mock adaptörle gelir.
- Bağımlı olduğu
- Kullananlar
- Hiçbir paket buna bağımlı değil
Temel API'ler
- AfterAiPlatform
- AfterAiProfile
- AfterAiCapability
- AfterAiCapabilityDisabledException
- afterAiProfileProvider
- afterAiPlatformProvider
- AfterToolCallingAi
- AfterAiPluginRegistry
Öne çıkan üçüncü taraf bağımlılıklar
flutter_riverpod · uuid
Örnek
// after_framework.dart
afterAiProfileProvider.overrideWithValue(AfterAiProfile.superGarage),
// feature code
final ai = ref.watch(afterAiPlatformProvider);
if (ai.canChat) {
final reply = await ai.chat(message: input);
}Kaynak supercore/packages/after_ai/README.md (yeni sekmede açılır)
Tasarım sistemi
after_design_system
Ortak görsel dil: renk, boşluk, köşe yarıçapı, hareket ve tipografi token'ları, Material 3 tema verisi ve ortak bileşenler; tüm ürün hatlarında aynı.
- Bağımlı olduğu
- Kullananlar
Temel API'ler
- AfterThemeData
- AfterTheme
- AfterColors
- AfterSpacing
- AfterRadius
- AfterMotion
- AfterFadeSlide
Öne çıkan üçüncü taraf bağımlılıklar
shared_preferences
Örnek
abstract final class AfterThemeData {
static ThemeData light({
AfterTypography typography = AfterTypography.garage,
Color? accentOverride,
}) { … }
static ThemeData dark({
AfterTypography typography = AfterTypography.garage,
Color? accentOverride,
}) { … }
}
// Product: same family, own accent (spec branding.accent).
MaterialApp(
theme: AfterThemeData.light(accentOverride: const Color(0xFF22D3EE)),
darkTheme: AfterThemeData.dark(accentOverride: const Color(0xFF22D3EE)),
);Kaynak supercore/packages/after_design_system/lib/src/foundations/theme.dart (yeni sekmede açılır)
Tüketici modülleri
after_consumer
Çekirdeğin üzerinde bilinçli olarak ince bir B2C katmanı: üyelik, tüketici özellik kataloğu, kişisel kasa, açılış onayı, bölgesel konum ve aile kabuğu arayüzü.
- Bağımlı olduğu
- Kullananlar
- Hiçbir paket buna bağımlı değil
Temel API'ler
- ConsumerMembership
- ConsumerCoreFeatureId
- ConsumerVerticalFeature
- PersonalVaultRepository
- consumerMembershipProvider
- personalVaultRepositoryProvider
Öne çıkan üçüncü taraf bağımlılıklar
flutter_riverpod · geolocator · geocoding · image_picker · permission_handler
Örnek
dependencies:
after_core:
path: ../supercore/packages/after_core
after_consumer:
path: ../supercore/packages/after_consumer
after_design_system:
path: ../supercore/packages/after_design_systemKurumsal modüller
after_enterprise
Deterministik bellek içi mock'lara sahip on dört ortak B2B portu, EnterpriseScope ile güvenli kapanan kiracılık ve bir ürün çalışma zamanı ile kabuk barındırıcısı.
- Bağımlı olduğu
- Kullananlar
- Hiçbir paket buna bağımlı değil
Temel API'ler
- EnterpriseScope
- OrganizationRepository
- RbacRepository
- PermissionSet
- WorkflowEngine
- TaskRepository
- CalendarRepository
- DocumentRepository
- EnterpriseAiAssistant
- AuditLogRepository
Öne çıkan üçüncü taraf bağımlılıklar
flutter_riverpod · collection · uuid
Örnek
static Future<List<Override>> ensureConfigured({
EnterpriseRepository? enterpriseRepository,
}) async {
PlatformConfig.current = superAppEnterpriseManifest;
final prefs = await SharedPreferences.getInstance();
return [
...AfterStandardOverrides.create(
preferences: prefs,
userAgent: '${superAppEnterpriseManifest.appName}/'
'${superAppEnterpriseManifest.appId}',
),
enterpriseRepositoryProvider.overrideWithValue(
enterpriseRepository ?? MockEnterpriseRepository(),
),
];
}Kaynak supercore/templates/super_app_enterprise/after_framework.dart (yeni sekmede açılır)
Firebase adaptörleri
after_firebase
Kompozisyon kökü için Firebase Auth, Firestore blob ve Storage medya adaptörleri. Firebase yapılandırılmamışsa veya başlatılamazsa çökmek yerine yerel adaptörlere geri döner.
- Bağımlı olduğu
- Kullananlar
Temel API'ler
- AfterFirebaseBootstrap
- FirebaseAfterAuthRepository
- FirestoreAfterUserBlobSync
- FirebaseAfterUserMediaSync
- AfterFirebaseCloudAvailability
Öne çıkan üçüncü taraf bağımlılıklar
firebase_core · firebase_auth · cloud_firestore · firebase_storage · google_sign_in
Örnek
// Cold start, before ProviderScope. Returns false (no crash) when
// options are null or init fails — auth falls back to prefs adapters.
await AfterFirebaseBootstrap.ensureInitialized(options: firebaseOptions);
final overrides = [
...AfterStandardOverrides.create(
preferences: prefs,
userAgent: userAgent,
includeUserBlobSync: false, // Firebase provides blob sync below
),
...AfterFirebaseBootstrap.overrides(
preferences: prefs,
appId: 'super_garage',
),
];Kaynak supercore/packages/after_firebase/lib/src/after_firebase_bootstrap.dart (yeni sekmede açılır)
04 · CLI ve geliştirici iş akışı
Sihir değil; betikler ve Flutter komutları.
Araçlar, standart Flutter araç zinciriyle birlikte supercore/scripts içinde PowerShell betikleri olarak bulunur. Ayrı paketlenmiş bir CLI ikili dosyası yoktur.
Başlat
Bir spec'i Flutter olmadan doğrulayın, ardından kardeş uygulamayı üretip hazırlayın.
powershell -File scripts\validate_product_spec.ps1 -SpecPath factory\specs\examples\super_airport.product.spec.yaml# From a spec
powershell -File scripts\generate_product.ps1 -SpecPath factory\specs\examples\super_airport.product.spec.yaml
# From a name only (quick starter)
powershell -File scripts\generate_product.ps1 -Name SuperAirport -Reference SuperHospital
# Preview without writing files
powershell -File scripts\generate_product.ps1 -SpecPath factory\specs\examples\super_airport.product.spec.yaml -DryRuncd ..\superairport
flutter create .
flutter pub get
flutter analyze
flutter testPaketleri birleştir
path bağımlılıklarıyla çekirdeğe, bir ürün hattı katmanına ve tasarım sistemine bağımlı olun.
dependencies:
after_core:
path: ../supercore/packages/after_core
after_consumer:
path: ../supercore/packages/after_consumer
after_design_system:
path: ../supercore/packages/after_design_systemdependencies:
after_core:
path: ../supercore/packages/after_core
after_enterprise:
path: ../supercore/packages/after_enterprise
after_design_system:
path: ../supercore/packages/after_design_systemYapılandır
Kimliği AppPlatformManifest içinde tanımlayın. İskelet modu mock'lara izin verir; üretim modu bir adaptör eksikse başlangıçta hata verir.
const superHospitalManifest = AppPlatformManifest(
appName: 'SuperHospital',
appId: 'super_hospital',
packageName: 'com.overstein.superhospital',
androidWidgetProvider: 'com.overstein.superhospital.WidgetProvider',
iosAppGroupId: 'group.com.overstein.superhospital',
productLine: AfterProductLine.enterprise,
);Kaynak supercore/docs/AFTER_OS_ARCHITECTURE.md (yeni sekmede açılır)
/// Composition safety mode (ADR-007).
///
/// - [scaffold]: in-memory / mock adapters are allowed (templates, tests).
/// - [production]: missing real adapters must throw at startup.
enum AfterBootstrapMode {
scaffold,
production,
}Kaynak supercore/packages/after_core/lib/src/bootstrap/after_bootstrap_mode.dart (yeni sekmede açılır)
Test et
Biçimlendirin, analiz edin ve kapsamla test edin; ardından ürünü platform yeniden kullanım sözleşmesine göre denetleyin.
dart format --output=none --set-exit-if-changed .
flutter analyze
flutter test --coverage
# Platform doctrine check against a generated product
powershell -File scripts\check_reuse_contract.ps1 -AppRoot ..\superairportKaynak supercore/scripts/generate_product.ps1 · docs/PLATFORM_DOCTRINE.md (yeni sekmede açılır)
Dağıt
Üretilen ürünler analiz ve test yapan bir GitHub Actions iş akışıyla gelir. Android sürüm imzalama bir supercore betiğiyle bağlanır.
name: analyze-and-test
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
analyze-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Checkout supercore (sibling)
uses: actions/checkout@v5
with:
repository: oversteintech/supercore
path: ../supercore
- uses: subosito/flutter-action@v2
with:
channel: stable
- run: dart format --output=none --set-exit-if-changed .
- run: flutter pub get
- run: flutter analyze
- run: flutter test --coverageKaynak supercore/scripts/generate_product.ps1 (.github/workflows/ci.yml) (yeni sekmede açılır)
# Wires Play release signing for sibling apps; -BuildAab also builds bundles.
# key.properties / *.jks stay local and gitignored.
powershell -File scripts\wire_play_release_signing.ps1 -BuildAabKaynak supercore/scripts/wire_play_release_signing.ps1 (yeni sekmede açılır)
05 · Çatıdan gerçek ürünlere
Ortak yetenekler ürüne özgü deneyimlere dönüşür.
SuperGarage, yayında olan tüketici referansıdır. Aşağıdaki her ekran gerçek bir mağaza ekran görüntüsüdür; katman hangi parçaların platformdan geldiğini, hangilerinin ürüne ait olduğunu gösterir.




SuperGarage yetenek haritası
supergarage/lib tarafından içe aktarılan tanımlayıcılar, sahibi olan pakete göre gruplanmıştır.
after_core
- AfterUserPlan
- AfterAiCredentialVault
- AfterLocalNotifications
after_consumer
- FamilyShellHeader
- AfterRegionalLocation
after_firebase
- AfterFirebaseBootstrap
Ürün özellikleri
- features/vehicle
- features/maintenance
- features/obd
- features/expenses
- features/fleet
- features/trips
- features/assistant
- features/community
Ürün ailesi
Durumlar supercore/catalog/products.yaml dosyasındaki kayda göredir. Yalnızca SuperGarage yayında olarak işaretlidir.

SuperGarage
Tüketici · Referans
Mobilite: araçlar, bakım, sigorta, yakıt, OBD, filo
after_core · after_design_system · after_firebase · after_consumer

AfterHub
Tüketici · OS kabuğu
Tüketici OS kabuğu: kimlik, pano, YZ, takvim, arama, After+
İskeletafter_ai · after_consumer · after_core · after_firebase · after_design_system · after_ecosystem

SuperHospital
Kurumsal · Referans
Hastane operasyonları — kurumsal referans
İskelet
SuperHealth
Tüketici
Kişisel sağlık: ilaçlar, kayıtlar, uyku, beslenme

SuperFinance
Tüketici
Kişisel finans: abonelikler, bütçeler, yatırımlar
İskelet
SuperHome
Tüketici
Mülk ve ev: bakım, faturalar, garantiler
İskelet
SuperTravel
Tüketici
Seyahat: geziler, uçuşlar, oteller, güzergâhlar
İskelet
SuperPet
Tüketici
Evcil hayvanlar: veteriner bakımı, mama, sağlık kayıtları
İskelet
SuperNews
Tüketici
Özetli, YZ ile kişiselleştirilmiş haberler

SuperSports
Tüketici
Spor ve performans: fitness, skorlar, fikstürler

SuperAirport
Kurumsal
Havalimanı operasyonları: uçuşlar, kapılar, pistler
İskelet
SuperMaritime
Kurumsal
Liman ve gemi operasyonları
İskelet
SuperFactory
Kurumsal
Fabrika sahası MES ve bakım
İskelet
SuperFarm
Kurumsal
Çiftlik operasyonları: ekinler, hayvanlar, ekipman
İskelet
06 · Tasarım sistemi
Tekdüzelik olmadan tutarlılık.
after_design_system her ürüne aynı arayüz çerçevesini, yoğunluğu ve hareketi verir. Ürünler sistemi değil; vurgu rengini, monogramı, özellikleri ve metinleri değiştirir.
Token'lar
Renk, boşluk, köşe yarıçapı ve hareket; tüketici ve kurumsal tarafından paylaşılan Dart sabitleridir.
Renk
- accent#38BDF8
- accentDeep#0284C7
- graphite950#0B0C0F
- graphite800#222831
- steel#8A919D
- lightBackground#FAFBFC
- success#22C55E
- warning#F59E0B
- danger#EF4444
Boşluk · 4pt ölçeği
- xs4
- sm8
- md12
- lg16
- xxl24
- xxxl32
- massive48
- hero64
Köşe yarıçapı
- 6
- 8
- 12
- 16
- 20
Hareket
- instant100ms
- fast · micro180ms
- normal · page280ms
- slow · modal420ms
- emphasis560ms
Bileşenler
Düğmeler, kartlar, giriş alanları, gezinme, diyaloglar, grafikler, pano, boş ve yükleniyor durumları, ayar bölümleri ve kabuk üst çubuğu.
- buttons.dart
- cards.dart
- inputs.dart
- navigation_bar.dart
- dialogs.dart
- charts.dart
- dashboard.dart
- empty_states.dart
- loading.dart
- settings_section.dart
- shell_top_bar.dart
Erişilebilirlik
Açık ve koyu renk şemaları birlikte gelir. Grafik serileri ayırt edilebilir kalacak şekilde sıralanır; hareket token'ları geçişleri kısa ve amaca yönelik tutar.
Duyarlı davranış
Sayfa dolgusu ve içerik genişliği, AfterSpacing aracılığıyla görünüm alanı genişliğine uyum sağlar.
| Görünüm alanı genişliği | Azami içerik | Sayfa dolgusu |
|---|---|---|
| < 360 | width | 14 / 10 / 14 / 28 |
| 360 – 419 | 520 | 16 / 12 / 16 / 28 |
| 420 – 719 | 640 | 20 / 12 / 20 / 28 |
| ≥ 720 | 760 | 20 / 12 / 20 / 28 |
Marka uzantısı
Her ürün spec'i bir vurgu rengi ve monogram tanımlar. Tema vurguyu accentOverride ile alır; geri kalan her şey ailede kalır.
- SuperGarage#22D3EE
- SuperKids#F472B6
- SuperHospital#F43F5E
- SuperFactory#F59E0B
07 · Dokümantasyon
Hızlı taranmak için tasarlanmış dokümantasyon.
Her sayfa supercore deposundan türetilir ve kaynak dosyasına bağlantı verir.
- Klavye kısayoluyla anında arama
- Derin bağlantılı sabit içindekiler tablosu
- Her iki temada kopyalama düğmeleri ve sözdizimi vurgulama
- Bağımlılık grafikli paket sayfaları
- Statik yedekli mimari diyagramları
- Sağdan sola desteğiyle on dilde kullanılabilir
08 · Kurumsal sınırlar
Güvenli tarafta kapanan sınırlar.
Kurumsal izolasyon kodda uygulanır ve mimari karar kayıtlarında belgelenir.
Güvenli kapanan kiracılık
Organizasyon kapsamlı kurumsal portlar bir EnterpriseScope gerektirir. Eksik bir organizationId hata fırlatır — asla tüm kiracıları döndürmez.
Kalıcılıktan önce izinler
Dikey özellikler, veri değiştiren her çağrıdan önce PermissionSet.allows(...) kontrolü yapar. Ürünler kendi izin dizelerini tanımlar.
Yalnızca eklemeli denetim
Veri değiştiren her kurumsal işlem, yalnızca eklemeli AuditLogRepository'ye bir AuditLogEntry eklemelidir.
Yalnızca güvenli birlikte çalışma
Ürünler arası çağrılar AfterSecureInteropBridge'den geçer: After ID hedef kitlesi, kapsamlar, RBAC ve organizasyon üyeliği, ardından zorunlu bir denetim kaydı.
Hızlı başarısız olan başlatma
Üretim modunda eksik bir adaptör başlangıçta hata fırlatır; böylece mock sağlayıcılar sessizce üretime ulaşamaz.
Yapısı gereği modüler
Gerçek arka uçlar, kompozisyon kökünde MockEnterpriseRepository'nin yerini alır. OS katmanı sağlayıcının adını asla öğrenmez.
/// Fail-closed tenant + actor context for enterprise ports (ADR-002).
class EnterpriseScope {
final String organizationId;
final String actorId;
final PermissionSet permissions;
/// Throws if [organizationId] is missing/blank — never allow all-tenant lists.
static String requireOrganizationId(String? organizationId) {
final id = organizationId?.trim() ?? '';
if (id.isEmpty) {
throw StateError(
'EnterpriseScope: organizationId is required (fail-closed tenancy).',
);
}
return id;
}
}Kaynak supercore/packages/after_enterprise/lib/src/scope/enterprise_scope.dart (yeni sekmede açılır)
Bunlar supercore deposunda belgelenmiş mimari kontrollerdir. After Framework herhangi bir sertifikasyon veya mevzuat uyumluluğu iddiasında bulunmaz.
Kurumsal sınırlarÜrünü küçültün. Temeli güçlendirin.
Mimariyle başlayın, paket dokümanlarını okuyun veya kaynağı keşfedin.