eAkto Docs
/

System overview

eAkto uses a Flutter client, a FastAPI application, relational journey state, and controlled adapters for external government and storage services. The current implementation is a modular monolith, not a distributed microservice system.

High-level architecture

┌──────────────────────────────── Flutter ────────────────────────────────┐
│ Screens → Riverpod ApplicationController → EAktoRepository → Dio      │
│ Secure storage: eAkto session token + active journey identifier only   │
└───────────────────────────────────┬─────────────────────────────────────┘
                                    │ HTTPS / JSON / multipart
┌───────────────────────────────────▼─────────────────────────────────────┐
│ FastAPI routers                                                        │
│ auth · identity · intents · journeys · documents · journey agent       │
├─────────────────────────────────────────────────────────────────────────┤
│ Domain and application services                                        │
│ IntentCompiler · PersonalEngine · RoadmapService · DocumentVaultService│
├─────────────────────────────────────────────────────────────────────────┤
│ Repositories and SQLAlchemy models                                     │
│ users · sessions · intents · journeys · milestones · ownership         │
├─────────────────────────────────────────────────────────────────────────┤
│ ControlledApiOrchestrator + allowlisted adapters                        │
└───────────────┬──────────────┬─────────────┬───────────────┬────────────┘
                │              │             │               │
             eGovAI        eGovPH SSO     eVerify       Supabase Storage

Main responsibility boundaries

Layer Owns Does not own
Flutter presentation Layout, interaction, local UI state, navigation Provider secrets, workflow selection, official verification
Flutter repository Typed HTTP call locations and multipart construction Business rules
FastAPI routers HTTP contract, dependencies, response models Direct SQL details
Services/domain Intent routing, assurance, journey resolution, evidence rules UI rendering
Repositories Queries and persistence Provider HTTP calls
Integrations Provider-specific transport and response validation Citizen journey policy
Workflow seeds Versioned declarative steps and content Free-form executable code

Request path

For a typical journey:

Citizen message
  → POST /api/v1/intents/compile
  → validated situation assessment
  → compatible workflow code
  → POST /api/v1/journeys/from-intent/{intent_id}
  → rule/dependency resolution
  → persisted journey and milestones
  → GET /api/v1/journeys/{journey_id}/plan
  → Flutter renders backend-provided questions and documents

Trust boundaries

  1. Device boundary — Flutter stores only the internal session token and active journey ID in secure storage.
  2. Application boundary — FastAPI hashes session tokens before persistence and applies resource ownership checks.
  3. High-assurance boundary — journey creation with document evidence and every vault route require a current high-assurance result.
  4. Provider boundary — credentials are loaded from backend settings and never returned to Flutter.
  5. AI boundary — generated content is validated and cannot supply arbitrary provider URLs, methods, headers, or capabilities.

Terminology

Older source names still use lifegraph and caseId. The active backend domain calls the persisted object a personal journey and exposes it under /journeys.

View source

Built for the eGovPH Hackathon 2026. Prototype guidance is not official agency policy.