After Framework

공유 운영 프레임워크 위에서 제품을 구축하세요.

한 번 구축하고, 모든 도메인에 출시하세요.

After Framework는 아키텍처, 아이덴티티, AI, 디자인 시스템, 도구, 재사용 가능한 도메인 모듈로 구성된 공유 기반을 제품에 제공합니다.

supercore/packages패키지 7개 · 제품 라인 2개 · 컴포지션 계약 1개
SuperGarageAfterHubSuperHospitalafter_ecosystemafter_aiafter_consumerafter_enterpriseafter_firebaseafter_coreafter_design_system
범례:pubspec 의존성문서화된 참조 스택

01 · 프레임워크 아키텍처

하나의 커널, 두 개의 제품 라인, 그 위의 얇은 제품.

모든 제품은 동일한 계층을 공유합니다. 라이프 도메인이나 산업 도메인을 추가하면 최상단에 모듈 하나가 추가될 뿐, 아래 계층은 바뀌지 않습니다.

제품 전용

공유 플랫폼

컴포지션 루트 어댑터

계층을 선택하면 해당 계층이 담당하는 영역과 의존 대상을 확인할 수 있습니다.

after_core

공유 커널

인증, 강화된 네트워킹, 스토리지, Riverpod DI, 플래그, 원격 구성, BYOK AI SDK, 프리미엄 이용 권한, 알림, 딥 링크, 그리고 대시보드·플러그인·검색·설정 엔진을 제공합니다.

의존 대상
없음 — 기반 계층
사용처
제품 도메인 계층 · 에코시스템 계층 · AI 기능 · 컨슈머 모듈 · 엔터프라이즈 모듈 · 디자인 시스템 · Firebase 어댑터

공유되는 재사용, 제품 고유의 경험

플랫폼 원칙은 제품마다 런타임 기능의 90% 이상을 상속받는 것을 목표로 합니다. 제품이 소유하는 것은 도메인, 버티컬 기능, AI 프로필, 카탈로그, 브랜딩뿐입니다.

시스템을 지탱하는 규칙

  1. 01SDK보다 포트: 버티컬 코드는 벤더 SDK가 아닌 After 인터페이스에 의존합니다.
  2. 02버티컬 모듈은 제품 저장소의 lib/features/ 아래에만 둡니다.
  3. 03모든 포트에는 목이 함께 제공되므로 스캐폴드는 백엔드 없이 실행됩니다.
  4. 04처음부터 만들지 말고 생성하세요: 새 제품은 새 아키텍처가 아닌 스펙에서 시작합니다.

02 · 제품 팩토리

재사용 가능한 기반 위에서 아이디어를 동작하는 제품으로.

제품 팩토리는 작은 product.spec.yaml을 공유 패키지에 의존하는 형제 Flutter 앱으로 변환합니다. 스펙에는 해당 제품에만 고유한 내용만 담습니다.

  1. 01

    아이디어

    제품 이름을 정하고 라인을 선택합니다. consumer 또는 enterprise 중 하나이며, 참조 제품은 SuperGarage 또는 SuperHospital입니다.

  2. 02

    도메인

    product.spec.yaml을 작성합니다. 도메인, 버티컬 기능, 탭, 권한, 대시보드 위젯, AI 스킬, 브랜딩, 로케일을 정의합니다.

  3. 03

    모듈

    인증, 멤버십 또는 조직, RBAC, 캘린더, 작업, 알림, 검색 등 스펙에 없는 모든 것은 상속됩니다.

  4. 04

    제품 셸

    generate_product.ps1이 매니페스트, 컴포지션 루트, 기능 카탈로그, 셸, l10n 파일, CI 워크플로를 생성합니다.

  5. 05

    배포

    생성된 CI 워크플로는 main 브랜치에 대한 모든 푸시와 풀 리퀘스트에서 포맷, 분석, 커버리지 포함 테스트를 실행합니다.

제품이 소유하는 것

  • 이름, 패키지, 번들, 제품 라인
  • 버티컬 기능 및 i18n 키
  • 내비게이션 탭
  • RBAC 권한 문자열
  • 대시보드 위젯
  • AI 스킬 및 도구 바인딩
  • 강조 색상 및 모노그램

플랫폼이 제공하는 것

  • 인증 및 슈퍼관리자
  • 멤버십 또는 조직
  • RBAC 엔진 및 감사 로그
  • 캘린더, 작업, 문서
  • 알림 및 분석
  • 워크플로, 대시보드, 검색 엔진
  • 디자인 시스템, 스플래시, CI

변경된 스펙으로 생성기를 다시 실행하면 사람이 작성한 기능 코드는 그대로 두고 골격 파일만 업데이트합니다.

03 · 패키지와 기능

일곱 개의 패키지, 명시적인 의존성.

모든 패키지는 supercore 저장소에서 버전 1.0.0이며 경로 의존성으로 사용됩니다. 패키지를 선택하면 해당 패키지의 의존 대상과 이를 의존하는 패키지를 추적할 수 있습니다.

공유 커널

after_core

인증, 네트워킹, 스토리지, DI, 분석, 기능 플래그, 원격 구성, AI, 알림, 딥 링크, 프리미엄 이용 권한을 위한 포트와 기본 구현을 제공합니다. 제품은 Riverpod 프로바이더를 자체 어댑터로 오버라이드합니다.

의존 대상
없음 — 기반 계층
사용처

주요 API

  • AppPlatformManifest
  • PlatformConfig
  • AfterStandardOverrides
  • AfterBootstrapMode
  • AfterAuthRepository
  • AfterApiClient
  • AfterHttpClientFactory
  • AfterFeatureFlags
  • AfterRemoteConfig
  • AfterAiCredentialVault

주요 서드파티 의존성

flutter_riverpod · dio · flutter_secure_storage · shared_preferences · google_sign_in · app_links · flutter_local_notifications

after_ecosystemafter_aiafter_consumerafter_enterpriseafter_firebaseafter_coreafter_design_system

예제

dart
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(),
    ),
  );
}

소스 supercore/packages/after_core/README.md (새 탭에서 열림)

04 · CLI와 개발자 워크플로

마법이 아닌 스크립트와 Flutter 명령.

도구는 표준 Flutter 툴체인과 함께 supercore/scripts에 PowerShell 스크립트로 제공됩니다. 별도로 패키징된 CLI 바이너리는 없습니다.

초기화

Flutter 없이 스펙을 검증한 뒤, 형제 앱을 생성하고 부트스트랩합니다.

validate_product_spec.ps1
powershell -File scripts\validate_product_spec.ps1 -SpecPath factory\specs\examples\super_airport.product.spec.yaml

소스 supercore/factory/README.md (새 탭에서 열림)

generate_product.ps1
# 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 -DryRun

소스 supercore/factory/README.md (새 탭에서 열림)

flutter
cd ..\superairport
flutter create .
flutter pub get
flutter analyze
flutter test

05 · 프레임워크에서 실제 제품으로

공유 기능이 제품 고유의 경험이 됩니다.

SuperGarage는 출시된 컨슈머 참조 제품입니다. 아래 화면은 모두 실제 스토어 스크린샷이며, 오버레이는 어떤 부분이 플랫폼에서 오고 어떤 부분을 제품이 소유하는지 보여 줍니다.

SuperGarage 스크린샷: 차고 대시보드의 차량 상태 점수와 알림.

SuperGarage 기능 맵

supergarage/lib에서 임포트한 식별자를 소유 패키지별로 묶었습니다.

after_core

  • AfterUserPlan
  • AfterAiCredentialVault
  • AfterLocalNotifications

after_consumer

  • FamilyShellHeader
  • AfterRegionalLocation

after_firebase

  • AfterFirebaseBootstrap

제품 기능

  • features/vehicle
  • features/maintenance
  • features/obd
  • features/expenses
  • features/fleet
  • features/trips
  • features/assistant
  • features/community

제품군

supercore/catalog/products.yaml에 기록된 상태입니다. 출시됨으로 표시된 제품은 SuperGarage뿐입니다.

  • SuperGarage 아이콘

    SuperGarage

    컨슈머 · 참조

    모빌리티: 차량, 정비, 보험, 연료, OBD, 플릿

    after_core · after_design_system · after_firebase · after_consumer

  • AfterHub 아이콘

    AfterHub

    컨슈머 · OS 셸

    컨슈머 OS 셸: 아이덴티티, 대시보드, AI, 캘린더, 검색, After+

    스캐폴드

    after_ai · after_consumer · after_core · after_firebase · after_design_system · after_ecosystem

  • SuperHospital 아이콘

    SuperHospital

    엔터프라이즈 · 참조

    병원 운영 — 엔터프라이즈 참조 제품

    스캐폴드
  • SuperHealth 아이콘

    SuperHealth

    컨슈머

    개인 건강: 복약, 기록, 수면, 영양

  • SuperFinance 아이콘

    SuperFinance

    컨슈머

    개인 금융: 구독, 예산, 투자

    스캐폴드
  • SuperHome 아이콘

    SuperHome

    컨슈머

    부동산 및 가정: 유지 관리, 공과금, 보증

    스캐폴드
  • SuperTravel 아이콘

    SuperTravel

    컨슈머

    여행: 여정, 항공편, 호텔, 일정

    스캐폴드
  • SuperPet 아이콘

    SuperPet

    컨슈머

    반려동물: 수의 진료, 사료, 건강 기록

    스캐폴드
  • SuperNews 아이콘

    SuperNews

    컨슈머

    요약을 제공하는 AI 맞춤형 뉴스

  • SuperSports 아이콘

    SuperSports

    컨슈머

    스포츠 및 퍼포먼스: 피트니스, 점수, 경기 일정

  • SuperAirport 아이콘

    SuperAirport

    엔터프라이즈

    공항 운영: 항공편, 게이트, 활주로

    스캐폴드
  • SuperMaritime 아이콘

    SuperMaritime

    엔터프라이즈

    항만 및 선박 운영

    스캐폴드
  • SuperFactory 아이콘

    SuperFactory

    엔터프라이즈

    공장 현장 MES 및 유지 보수

    스캐폴드
  • SuperFarm 아이콘

    SuperFarm

    엔터프라이즈

    농장 운영: 작물, 가축, 장비

    스캐폴드

06 · 디자인 시스템

획일성 없는 일관성.

after_design_system은 모든 제품에 동일한 크롬, 밀도, 모션을 제공합니다. 제품이 바꾸는 것은 시스템이 아니라 강조 색상, 모노그램, 기능, 문구입니다.

토큰

색상, 간격, 모서리 반경, 모션은 Dart 상수이며 컨슈머와 엔터프라이즈가 공유합니다.

색상

  • accent#38BDF8
  • accentDeep#0284C7
  • graphite950#0B0C0F
  • graphite800#222831
  • steel#8A919D
  • lightBackground#FAFBFC
  • success#22C55E
  • warning#F59E0B
  • danger#EF4444

간격 · 4pt 스케일

  • xs4
  • sm8
  • md12
  • lg16
  • xxl24
  • xxxl32
  • massive48
  • hero64

모서리 반경

  • 6
  • 8
  • 12
  • 16
  • 20

모션

  • instant100ms
  • fast · micro180ms
  • normal · page280ms
  • slow · modal420ms
  • emphasis560ms

컴포넌트

버튼, 카드, 입력, 내비게이션, 대화상자, 차트, 대시보드, 빈 상태 및 로딩 상태, 설정 섹션, 셸 상단 바.

  • 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

접근성

라이트 및 다크 색상 스키마가 함께 제공됩니다. 차트 시리즈는 구분하기 쉽도록 순서가 정해져 있으며, 모션 토큰은 전환을 짧고 목적에 맞게 유지합니다.

반응형 동작

페이지 여백과 콘텐츠 너비는 AfterSpacing을 통해 뷰포트 너비에 맞춰 조정됩니다.

뷰포트 너비콘텐츠 최대 너비페이지 여백
< 360width14 / 10 / 14 / 28
360 – 41952016 / 12 / 16 / 28
420 – 71964020 / 12 / 20 / 28
≥ 72076020 / 12 / 20 / 28

브랜드 확장

각 제품 스펙은 강조 색상과 모노그램을 선언합니다. 테마는 accentOverride를 통해 강조 색상을 받고, 나머지는 모두 패밀리 디자인을 유지합니다.

  • SuperGarage#22D3EE
  • SuperKids#F472B6
  • SuperHospital#F43F5E
  • SuperFactory#F59E0B

07 · 문서

빠르게 훑어볼 수 있도록 설계된 문서.

모든 페이지는 supercore 저장소를 기반으로 작성되며 원본 소스 파일로 연결됩니다.

  • 키보드 단축키를 지원하는 즉시 검색
  • 딥 링크를 지원하는 고정 목차
  • 두 테마 모두에서 복사 버튼과 구문 강조
  • 의존성 그래프가 포함된 패키지 페이지
  • 정적 대체 이미지를 갖춘 아키텍처 다이어그램
  • 오른쪽에서 왼쪽 방향 언어를 포함한 10개 언어 지원
문서 열기

08 · 엔터프라이즈 경계

실패 시 닫히는 경계.

엔터프라이즈 격리는 코드로 강제되며 아키텍처 결정 기록에 문서화되어 있습니다.

  • 페일 클로즈드 테넌시

    조직 범위의 엔터프라이즈 포트에는 EnterpriseScope가 필요합니다. organizationId가 없으면 예외가 발생하며, 모든 테넌트의 데이터를 반환하는 일은 없습니다.

  • 저장 전 권한 확인

    버티컬 기능은 데이터를 변경하는 호출 전에 PermissionSet.allows(...)를 확인합니다. 제품은 자체 권한 문자열을 선언합니다.

  • 추가 전용 감사

    데이터를 변경하는 모든 엔터프라이즈 작업은 추가 전용 AuditLogRepository에 AuditLogEntry를 추가해야 합니다.

  • 보안 상호 운용만 허용

    제품 간 호출은 AfterSecureInteropBridge를 거칩니다. After ID 대상, 스코프, RBAC, 조직 멤버십을 확인한 뒤 필수 감사 항목을 남깁니다.

  • 빠른 실패 부트스트랩

    프로덕션 모드에서는 어댑터가 없으면 시작 시 예외가 발생하므로, 목 프로바이더가 조용히 프로덕션에 들어갈 수 없습니다.

  • 설계부터 모듈형

    실제 백엔드는 컴포지션 루트에서 MockEnterpriseRepository를 대체합니다. OS 계층은 벤더 이름을 알 필요가 없습니다.

enterprise_scope.dart
/// 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;
  }
}

소스 supercore/packages/after_enterprise/lib/src/scope/enterprise_scope.dart (새 탭에서 열림)

이는 supercore 저장소에 문서화된 아키텍처 통제입니다. After Framework는 인증 취득이나 규제 준수를 주장하지 않습니다.

엔터프라이즈 경계

제품은 더 작게. 기반은 더 강하게.

아키텍처부터 시작하거나, 패키지 문서를 읽거나, 소스를 살펴보세요.