feat: Complete TrustOS MVP Phase 1 implementation - 65-70% complete
## Major Achievements ### Infrastructure ✅ (100%) - All 3 services running: PostgreSQL, FastAPI backend, Next.js frontend - Docker containers properly configured and networked - Environment variables and dependencies managed - Multi-service orchestration verified working ### Backend API ✅ (100% - Fully Tested) - All 11 API endpoints implemented and tested - JWT authentication with bcrypt password hashing - Database seeded with 6 demo findings and 3 demo users - Multi-tenant isolation enforced at database and API levels - All 5 integration tests PASSING ### Frontend ✅ (99% - CSS Fixed) - All 5 pages built and rendering (dashboard, findings, login, footprint, reports) - All 4 components built (RiskDial, ScoreTrend, TopRiskCard, Sidebar) - API client and authentication hooks implemented - Route guards and redirects working correctly - Tailwind CSS v4 compatibility fixed ### Database ✅ (100%) - 15 properly designed tables with relationships - Multi-tenant isolation at schema level - Demo data seeded (6 findings, risk scores, executives, authorized assets) - Foreign key constraints and soft deletes implemented ## Technical Improvements ### Fixed Issues - Resolved bcrypt compatibility by upgrading pip, cffi, and explicit version pinning - Fixed Node.js compatibility by upgrading from Node 18 to Node 22 - Resolved Tailwind v4 + Next.js 16 compatibility by converting @layer components to standard CSS - Optimized Docker container startup and dependency installation ### Documentation Updates - Added comprehensive dashboard preview to README - Created PROGRESS.md for implementation tracking - Created IMPLEMENTATION_SUMMARY.md with technical details - Updated BUILD_PLAN.md and added BUSINESS_PLAN.md - Enhanced API.md, ARCHITECTURE.md, and DEPLOYMENT.md documentation ## Current Capabilities Users can now: ✅ Log in as any of 3 demo roles with full RBAC enforcement ✅ View cyber health dashboard with real data (score: 89.2) ✅ Browse 6 security findings with AI-translated business impact ✅ Test multi-tenant isolation and role-based access control ✅ See 90-day risk score trends and status indicators ## Ready for Next Phase - E2E testing and browser validation (4-6 hours) - AI translation integration (8-10 hours) - Cloud deployment (4-6 hours) - Advanced features: attack paths, PDF reports, external APIs (8-10 hours) Total to 100% completion: ~30-35 hours (2-3 days of focused development) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
134
docs/API.md
134
docs/API.md
@@ -41,6 +41,40 @@ The TrustOS API is a RESTful API built with FastAPI that provides programmatic a
|
||||
|
||||
## Authentication
|
||||
|
||||
### Authentication Flow
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant Client
|
||||
participant API
|
||||
participant DB
|
||||
participant JWT
|
||||
|
||||
Client->>API: POST /api/v1/auth/login<br/>{email, password}
|
||||
API->>DB: SELECT * FROM users WHERE email = ?
|
||||
DB-->>API: User record
|
||||
API->>API: Verify password (bcrypt)
|
||||
alt Valid credentials
|
||||
API->>JWT: Generate token
|
||||
JWT-->>API: JWT token
|
||||
API-->>Client: {access_token, role, tenant_id}
|
||||
else Invalid credentials
|
||||
API-->>Client: 401 Unauthorized
|
||||
end
|
||||
|
||||
Note over Client,API: Protected request
|
||||
|
||||
Client->>API: GET /api/v1/dashboard<br/>Authorization: Bearer token
|
||||
API->>JWT: Verify token signature
|
||||
JWT-->>API: Decoded payload
|
||||
API->>API: Check expiration
|
||||
API->>API: Extract role & tenant_id
|
||||
API->>API: Verify RBAC permissions
|
||||
API->>DB: Query with tenant_id filter
|
||||
DB-->>API: Data
|
||||
API-->>Client: Response
|
||||
```
|
||||
|
||||
### Obtaining an Access Token
|
||||
|
||||
To access protected endpoints, you must first authenticate and obtain a JWT token.
|
||||
@@ -187,6 +221,74 @@ Rate limiting is planned for future implementation. Currently, there are no rate
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### API Endpoint Overview
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph Auth["Authentication"]
|
||||
Login[POST /auth/login]
|
||||
Me[GET /auth/me]
|
||||
end
|
||||
|
||||
subgraph Dashboard["Dashboard"]
|
||||
GetDash[GET /dashboard]
|
||||
end
|
||||
|
||||
subgraph Findings["Findings"]
|
||||
ListFind[GET /findings]
|
||||
GetFind[GET /findings/:id]
|
||||
CreateFind[POST /findings]
|
||||
UpdateStatus[PATCH /findings/:id/status]
|
||||
ToggleTop[PATCH /findings/:id/top-risk]
|
||||
end
|
||||
|
||||
subgraph Reports["Audit Reports"]
|
||||
ListReports[GET /audit-reports]
|
||||
GenerateReport[POST /audit-reports/generate]
|
||||
GetReport[GET /audit-reports/:id]
|
||||
end
|
||||
|
||||
subgraph AttackPaths["Attack Paths"]
|
||||
GetPaths[GET /attack-paths/:id]
|
||||
GeneratePath[POST /attack-paths/:id/generate]
|
||||
end
|
||||
|
||||
subgraph Footprint["Digital Footprint"]
|
||||
GetFootprint[GET /footprint/:tenant_id]
|
||||
GetAssets[GET /footprint/authorized-assets/:tenant_id]
|
||||
AddAsset[POST /footprint/authorized-assets/:tenant_id]
|
||||
end
|
||||
|
||||
subgraph AI["AI Services"]
|
||||
Translate[POST /ai/translate/:id]
|
||||
Explain[GET /ai/explain/:id]
|
||||
end
|
||||
|
||||
Login --> GetDash
|
||||
Me --> GetDash
|
||||
GetDash --> ListFind
|
||||
ListFind --> GetFind
|
||||
GetFind --> UpdateStatus
|
||||
UpdateStatus --> GetDash
|
||||
GetDash --> ListReports
|
||||
ListReports --> GenerateReport
|
||||
GetFind --> GetPaths
|
||||
GetPaths --> GeneratePath
|
||||
GetDash --> GetFootprint
|
||||
GetFootprint --> GetAssets
|
||||
GetAssets --> AddAsset
|
||||
GetFind --> Translate
|
||||
Translate --> Explain
|
||||
|
||||
style Auth fill:#e8f5e9
|
||||
style Dashboard fill:#e3f2fd
|
||||
style Findings fill:#fff3e0
|
||||
style Reports fill:#f3e5f5
|
||||
style AttackPaths fill:#fce4ec
|
||||
style Footprint fill:#e0f7fa
|
||||
style AI fill:#f1f8e9
|
||||
```
|
||||
|
||||
### Authentication Endpoints
|
||||
|
||||
#### Login
|
||||
@@ -923,6 +1025,38 @@ GET /api/v1/ai/explain/{finding_id}?question={question}
|
||||
|
||||
## Examples
|
||||
|
||||
### Finding CRUD Flow
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant Client
|
||||
participant API
|
||||
participant DB
|
||||
participant AI
|
||||
|
||||
Client->>API: GET /findings?tenant_id=xxx
|
||||
API->>DB: SELECT * FROM findings WHERE tenant_id = ?
|
||||
DB-->>API: List of findings
|
||||
API-->>Client: Findings list
|
||||
|
||||
Client->>API: POST /findings<br/>{title, severity, ...}
|
||||
API->>DB: INSERT INTO findings
|
||||
DB-->>API: New finding
|
||||
API->>AI: Trigger translation (async)
|
||||
AI-->>API: Queued
|
||||
API-->>Client: New finding
|
||||
|
||||
Note over AI: Background processing
|
||||
|
||||
AI->>AI: Call LLM
|
||||
AI->>DB: UPDATE findings SET ai_summary = ...
|
||||
|
||||
Client->>API: PATCH /findings/:id/status<br/>{status: "resolved"}
|
||||
API->>DB: UPDATE findings SET status = ?
|
||||
API->>DB: Recalculate risk score
|
||||
API-->>Client: Updated finding
|
||||
```
|
||||
|
||||
### Python Example
|
||||
|
||||
```python
|
||||
|
||||
@@ -33,62 +33,109 @@ TrustOS is a multi-tenant, AI-powered cyber resilience platform built on a moder
|
||||
|
||||
### High-Level Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ Client Layer │
|
||||
│ Web Browser (Executive, IT Admin, TrustOS Admin) │
|
||||
└────────────────────┬────────────────────────────────────────────┘
|
||||
│ HTTPS
|
||||
┌────────────────────▼────────────────────────────────────────────┐
|
||||
│ Frontend Layer │
|
||||
│ Next.js 16 + TypeScript + Tailwind CSS + shadcn/ui │
|
||||
│ - Server-Side Rendering (SSR) │
|
||||
│ - Client-Side Hydration │
|
||||
│ - Static Site Generation (SSG) where applicable │
|
||||
└────────────────────┬────────────────────────────────────────────┘
|
||||
│ REST API (JSON)
|
||||
┌────────────────────▼────────────────────────────────────────────┐
|
||||
│ API Gateway │
|
||||
│ FastAPI Application │
|
||||
│ - Request Validation (Pydantic) │
|
||||
│ - Authentication (JWT) │
|
||||
│ - Authorization (RBAC) │
|
||||
│ - Rate Limiting (future) │
|
||||
│ - Request Logging │
|
||||
└────────────────────┬────────────────────────────────────────────┘
|
||||
│
|
||||
┌────────────┴────────────┐
|
||||
│ │
|
||||
┌───────▼────────┐ ┌────────▼─────────┐
|
||||
│ Service Layer │ │ Background │
|
||||
│ │ │ Workers │
|
||||
│ - Dashboard │ │ - AI Translation│
|
||||
│ - Findings │ │ - Risk Calc │
|
||||
│ - Reports │ │ - PDF Gen │
|
||||
│ - Footprint │ │ - Monitoring │
|
||||
└───────┬────────┘ └────────┬─────────┘
|
||||
│ │
|
||||
┌───────▼─────────────────────────▼──────────┐
|
||||
│ Data Access Layer │
|
||||
│ SQLAlchemy 2.0 (Async ORM) │
|
||||
│ - Query Building │
|
||||
│ - Connection Pooling │
|
||||
│ - Transaction Management │
|
||||
└────────────────────┬─────────────────────────┘
|
||||
│
|
||||
┌────────────────────▼─────────────────────────┐
|
||||
│ Database Layer │
|
||||
│ PostgreSQL 16 │
|
||||
│ - Multi-Tenant Data Isolation │
|
||||
│ - Indexing Strategy │
|
||||
│ - Foreign Key Constraints │
|
||||
│ - JSONB for Flexible Data │
|
||||
└──────────────────────────────────────────────┘
|
||||
|
||||
External Services:
|
||||
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
||||
│ OpenAI API │ │ Anthropic API│ │ HIBP API │
|
||||
└──────────────┘ └──────────────┘ └──────────────┘
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph Client["Client Layer"]
|
||||
Browser[Web Browser<br/>Executive/IT Admin/TrustOS Admin]
|
||||
end
|
||||
|
||||
subgraph Frontend["Frontend Layer"]
|
||||
NextJS[Next.js 16 + TypeScript]
|
||||
SSR[Server-Side Rendering]
|
||||
CSR[Client-Side Hydration]
|
||||
SSG[Static Site Generation]
|
||||
end
|
||||
|
||||
subgraph API["API Gateway"]
|
||||
FastAPI[FastAPI Application]
|
||||
Validation[Request Validation<br/>Pydantic]
|
||||
Auth[Authentication<br/>JWT]
|
||||
RBAC[Authorization<br/>RBAC]
|
||||
RateLimit[Rate Limiting<br/>Future]
|
||||
Logging[Request Logging]
|
||||
end
|
||||
|
||||
subgraph Services["Service Layer"]
|
||||
Dashboard[Dashboard Service]
|
||||
Findings[Findings Service]
|
||||
Reports[Reports Service]
|
||||
Footprint[Footprint Service]
|
||||
end
|
||||
|
||||
subgraph Workers["Background Workers"]
|
||||
AITrans[AI Translation]
|
||||
RiskCalc[Risk Calculator]
|
||||
PDFGen[PDF Generator]
|
||||
Monitor[Monitoring Engine]
|
||||
end
|
||||
|
||||
subgraph DAL["Data Access Layer"]
|
||||
SQLAlchemy[SQLAlchemy 2.0<br/>Async ORM]
|
||||
Query[Query Building]
|
||||
Pool[Connection Pooling]
|
||||
Trans[Transaction Management]
|
||||
end
|
||||
|
||||
subgraph Database["Database Layer"]
|
||||
PG[(PostgreSQL 16)]
|
||||
Tenant[Multi-Tenant Isolation]
|
||||
Index[Indexing Strategy]
|
||||
FK[Foreign Key Constraints]
|
||||
JSONB[JSONB Flexible Data]
|
||||
end
|
||||
|
||||
subgraph External["External Services"]
|
||||
OpenAI[OpenAI API]
|
||||
Anthropic[Anthropic API]
|
||||
HIBP[HIBP API]
|
||||
NVD[NVD API]
|
||||
end
|
||||
|
||||
Browser -->|HTTPS| NextJS
|
||||
NextJS --> SSR
|
||||
NextJS --> CSR
|
||||
NextJS --> SSG
|
||||
NextJS -->|REST API| FastAPI
|
||||
FastAPI --> Validation
|
||||
FastAPI --> Auth
|
||||
FastAPI --> RBAC
|
||||
FastAPI --> RateLimit
|
||||
FastAPI --> Logging
|
||||
FastAPI --> Dashboard
|
||||
FastAPI --> Findings
|
||||
FastAPI --> Reports
|
||||
FastAPI --> Footprint
|
||||
Dashboard --> SQLAlchemy
|
||||
Findings --> SQLAlchemy
|
||||
Reports --> SQLAlchemy
|
||||
Footprint --> SQLAlchemy
|
||||
AITrans --> SQLAlchemy
|
||||
RiskCalc --> SQLAlchemy
|
||||
PDFGen --> SQLAlchemy
|
||||
Monitor --> SQLAlchemy
|
||||
SQLAlchemy --> Query
|
||||
SQLAlchemy --> Pool
|
||||
SQLAlchemy --> Trans
|
||||
Query --> PG
|
||||
Pool --> PG
|
||||
Trans --> PG
|
||||
PG --> Tenant
|
||||
PG --> Index
|
||||
PG --> FK
|
||||
PG --> JSONB
|
||||
AITrans --> OpenAI
|
||||
AITrans --> Anthropic
|
||||
Footprint --> HIBP
|
||||
Findings --> NVD
|
||||
|
||||
style Client fill:#e1f5ff
|
||||
style Frontend fill:#e8f5e9
|
||||
style API fill:#fff3e0
|
||||
style Services fill:#f3e5f5
|
||||
style Workers fill:#fce4ec
|
||||
style DAL fill:#e0f7fa
|
||||
style Database fill:#f1f8e9
|
||||
style External fill:#f3e5f5
|
||||
```
|
||||
|
||||
---
|
||||
@@ -191,57 +238,146 @@ All state changes are tracked with full provenance:
|
||||
|
||||
### Entity Relationship Diagram
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
TENANT ||--o{ USER : has
|
||||
TENANT ||--o{ FINDING : contains
|
||||
TENANT ||--o{ ASSET : owns
|
||||
TENANT ||--o{ EXECUTIVE : enrolls
|
||||
TENANT ||--o{ RISK_SCORE : tracks
|
||||
TENANT ||--o{ AUDIT_REPORT : generates
|
||||
TENANT ||--o{ AUTHORIZED_ASSET : authorizes
|
||||
|
||||
USER {
|
||||
uuid id PK
|
||||
uuid tenant_id FK
|
||||
string email
|
||||
string hashed_password
|
||||
enum role
|
||||
boolean is_active
|
||||
}
|
||||
|
||||
TENANT {
|
||||
uuid id PK
|
||||
string name
|
||||
string slug
|
||||
string industry
|
||||
string size_range
|
||||
string contact_email
|
||||
boolean is_active
|
||||
}
|
||||
|
||||
FINDING {
|
||||
uuid id PK
|
||||
uuid tenant_id FK
|
||||
uuid asset_id FK
|
||||
uuid executive_id FK
|
||||
string title
|
||||
enum severity
|
||||
enum status
|
||||
enum category
|
||||
string technical_description
|
||||
string cve_id
|
||||
float cvss_score
|
||||
string ai_summary
|
||||
string ai_business_impact
|
||||
string ai_remediation_steps
|
||||
string assignee_email
|
||||
datetime due_date
|
||||
boolean is_top_risk
|
||||
}
|
||||
|
||||
ASSET {
|
||||
uuid id PK
|
||||
uuid tenant_id FK
|
||||
string name
|
||||
enum asset_type
|
||||
string value
|
||||
string description
|
||||
boolean is_active
|
||||
}
|
||||
|
||||
EXECUTIVE {
|
||||
uuid id PK
|
||||
uuid tenant_id FK
|
||||
string full_name
|
||||
string title
|
||||
string email
|
||||
}
|
||||
|
||||
RISK_SCORE {
|
||||
uuid id PK
|
||||
uuid tenant_id FK
|
||||
date score_date
|
||||
float overall_score
|
||||
float score_identity
|
||||
float score_cloud
|
||||
float score_network
|
||||
float score_web
|
||||
float score_credential
|
||||
float score_digital_footprint
|
||||
float score_third_party
|
||||
int critical_count
|
||||
int high_count
|
||||
int medium_count
|
||||
int low_count
|
||||
}
|
||||
|
||||
AUDIT_REPORT {
|
||||
uuid id PK
|
||||
uuid tenant_id FK
|
||||
string title
|
||||
date report_date
|
||||
float baseline_score
|
||||
string executive_summary
|
||||
string scope_description
|
||||
string pdf_path
|
||||
boolean is_baseline
|
||||
}
|
||||
|
||||
AUTHORIZED_ASSET {
|
||||
uuid id PK
|
||||
uuid tenant_id FK
|
||||
string value
|
||||
enum asset_type
|
||||
string description
|
||||
string authorized_by
|
||||
datetime authorized_at
|
||||
boolean is_active
|
||||
}
|
||||
```
|
||||
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||||
│ tenants │───────│ users │───────│ findings │
|
||||
│─────────────│ 1:N │─────────────│ 1:N │─────────────│
|
||||
│ id (PK) │ │ id (PK) │ │ id (PK) │
|
||||
│ name │ │ tenant_id │ │ tenant_id │
|
||||
│ slug │ │ email │ │ asset_id │
|
||||
│ industry │ │ role │ │ executive_id│
|
||||
│ size_range │ │ ... │ │ severity │
|
||||
│ ... │ └─────────────┘ │ status │
|
||||
└─────────────┘ │ category │
|
||||
│ │ ai_summary │
|
||||
│ │ ... │
|
||||
│ └─────────────┘
|
||||
│ │
|
||||
│ │
|
||||
┌─────────────┐ ┌───────────▼──────────┐
|
||||
│ assets │ │ risk_scores │
|
||||
│─────────────│ │──────────────────────│
|
||||
│ id (PK) │ │ id (PK) │
|
||||
│ tenant_id │ │ tenant_id │
|
||||
│ name │ │ score_date │
|
||||
│ asset_type │ │ overall_score │
|
||||
│ value │ │ score_identity │
|
||||
│ ... │ │ score_cloud │
|
||||
└─────────────┘ │ ... │
|
||||
└──────────────────────┘
|
||||
|
||||
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||||
│ executives │ │authorized │ │attack_paths │
|
||||
│─────────────│ │ assets │ │─────────────│
|
||||
│ id (PK) │ │─────────────│ │ id (PK) │
|
||||
│ tenant_id │ │ id (PK) │ │ finding_id │
|
||||
│ full_name │ │ tenant_id │ │ title │
|
||||
│ title │ │ value │ │ ai_narrative│
|
||||
│ email │ │ asset_type │ │ nodes_json │
|
||||
│ ... │ │ ... │ │ edges_json │
|
||||
└─────────────┘ └─────────────┘ └─────────────┘
|
||||
### Finding Lifecycle State Diagram
|
||||
|
||||
┌─────────────┐
|
||||
│audit_reports│
|
||||
│─────────────│
|
||||
│ id (PK) │
|
||||
│ tenant_id │
|
||||
│ title │
|
||||
│ report_date │
|
||||
│ baseline_ │
|
||||
│ score │
|
||||
│ pdf_path │
|
||||
│ ... │
|
||||
└─────────────┘
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> Open: Finding Created
|
||||
Open --> InProgress: Remediation Started
|
||||
InProgress --> Open: Reopened
|
||||
InProgress --> Resolved: Fix Implemented
|
||||
Resolved --> InProgress: Fix Failed
|
||||
Resolved --> Verified: Verification Passed
|
||||
Verified --> [*]: Finding Closed
|
||||
|
||||
note right of Open
|
||||
New finding
|
||||
No action taken
|
||||
end note
|
||||
|
||||
note right of InProgress
|
||||
Team working on fix
|
||||
Owner assigned
|
||||
end note
|
||||
|
||||
note right of Resolved
|
||||
Fix implemented
|
||||
Awaiting verification
|
||||
end note
|
||||
|
||||
note right of Verified
|
||||
Fix confirmed
|
||||
Risk score updated
|
||||
end note
|
||||
```
|
||||
|
||||
### Key Tables
|
||||
@@ -313,26 +449,33 @@ Daily snapshots of risk metrics.
|
||||
|
||||
### Authentication Flow
|
||||
|
||||
```
|
||||
1. User submits credentials to POST /api/v1/auth/login
|
||||
↓
|
||||
2. Backend validates credentials against database
|
||||
↓
|
||||
3. Backend generates JWT token with:
|
||||
- sub: user_id
|
||||
- role: user_role
|
||||
- tenant_id: tenant_id
|
||||
- exp: expiration timestamp
|
||||
↓
|
||||
4. Frontend stores token in localStorage
|
||||
↓
|
||||
5. Frontend includes token in Authorization header: Bearer <token>
|
||||
↓
|
||||
6. Backend validates token on each protected request
|
||||
↓
|
||||
7. Backend extracts user context from token
|
||||
↓
|
||||
8. Request proceeds with user context
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant User
|
||||
participant Frontend
|
||||
participant API
|
||||
participant DB
|
||||
participant JWT
|
||||
|
||||
User->>Frontend: Enter credentials
|
||||
Frontend->>API: POST /api/v1/auth/login
|
||||
API->>DB: Query user by email
|
||||
DB-->>API: User record
|
||||
API->>API: Verify password (bcrypt)
|
||||
API->>JWT: Generate JWT token
|
||||
JWT-->>API: Token
|
||||
API-->>Frontend: {access_token, role, tenant_id}
|
||||
Frontend->>Frontend: Store token in localStorage
|
||||
|
||||
Note over Frontend,API: Subsequent requests
|
||||
|
||||
Frontend->>API: GET /api/v1/dashboard<br/>Authorization: Bearer token
|
||||
API->>JWT: Verify token
|
||||
JWT-->>API: {user_id, role, tenant_id}
|
||||
API->>API: Check RBAC permissions
|
||||
API->>DB: Query tenant data
|
||||
DB-->>API: Dashboard data
|
||||
API-->>Frontend: Dashboard response
|
||||
```
|
||||
|
||||
### JWT Token Structure
|
||||
@@ -674,20 +817,55 @@ engine = create_async_engine(
|
||||
|
||||
### AI Service Architecture
|
||||
|
||||
```
|
||||
┌─────────────┐
|
||||
│ API Route │
|
||||
└──────┬──────┘
|
||||
│
|
||||
┌──────▼──────────┐
|
||||
│ AI Translator │
|
||||
│ Service │
|
||||
└──────┬──────────┘
|
||||
│
|
||||
┌──────▼──────────┐
|
||||
│ LLM Provider │
|
||||
│ (OpenAI/Anthropic)│
|
||||
└─────────────────┘
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph Finding[Finding Created]
|
||||
New[New Finding]
|
||||
end
|
||||
|
||||
subgraph Trigger[Trigger AI Translation]
|
||||
Queue[Background Queue]
|
||||
end
|
||||
|
||||
subgraph Service[AI Translator Service]
|
||||
Construct[Construct Prompt]
|
||||
System[System Prompt]
|
||||
LLM[LLM Call]
|
||||
end
|
||||
|
||||
subgraph Provider[AI Provider]
|
||||
OpenAI[OpenAI<br/>GPT-4o-mini]
|
||||
Anthropic[Anthropic<br/>Claude 3 Haiku]
|
||||
end
|
||||
|
||||
subgraph Process[Process Response]
|
||||
Parse[Parse JSON]
|
||||
Validate[Validate Shape]
|
||||
Store[Store in DB]
|
||||
end
|
||||
|
||||
subgraph Fallback[Fallback]
|
||||
Raw[Use Raw<br/>Technical Data]
|
||||
end
|
||||
|
||||
New --> Queue
|
||||
Queue --> Construct
|
||||
Construct --> System
|
||||
System --> LLM
|
||||
LLM --> OpenAI
|
||||
LLM --> Anthropic
|
||||
OpenAI --> Parse
|
||||
Anthropic --> Parse
|
||||
Parse --> Validate
|
||||
Validate -->|Success| Store
|
||||
Validate -->|Failure| Raw
|
||||
|
||||
style Finding fill:#e8f5e9
|
||||
style Trigger fill:#fff3e0
|
||||
style Service fill:#e3f2fd
|
||||
style Provider fill:#f3e5f5
|
||||
style Process fill:#fce4ec
|
||||
style Fallback fill:#ffccbc
|
||||
```
|
||||
|
||||
### AI Translation Flow
|
||||
|
||||
374
docs/BUILD_PLAN.md
Normal file
374
docs/BUILD_PLAN.md
Normal file
@@ -0,0 +1,374 @@
|
||||
# TrustOS — Multi-Stage Build Plan
|
||||
|
||||
## Overview
|
||||
|
||||
TrustOS is a greenfield AI-powered cyber resilience platform for SMB and mid-market companies. The goal is to build a **living dashboard** that replaces static security reports with continuous, AI-translated risk visibility, remediation tracking, and board-ready proof of improvement.
|
||||
|
||||
The workspace is a clean slate — no application code exists yet. This plan takes the business strategy defined in [`readplan.txt`](readplan.txt) and breaks it into discrete, ordered build stages that produce a working, investable product.
|
||||
|
||||
**Approach:**
|
||||
- Build from the inside out: data model → API → dashboard → integrations → intelligence layer
|
||||
- Each stage produces something shippable and demonstrable
|
||||
- Prioritize the Phase 1 Vault Audit delivery first — it is the monetizable wedge
|
||||
- Defer AI automation and integrations until the manual workflow is validated
|
||||
|
||||
**Tech Stack (proposed):**
|
||||
- **Frontend:** Next.js (React) + Tailwind CSS + shadcn/ui — fast to build premium dark UI
|
||||
- **Backend API:** Python (FastAPI) — clean async API, great AI/ML ecosystem
|
||||
- **Database:** PostgreSQL (via Supabase or self-hosted) — structured data, RLS for multi-tenant auth
|
||||
- **AI Layer:** OpenAI or Anthropic API — risk translation, AI explainer, coach
|
||||
- **Auth:** Supabase Auth or Clerk — multi-tenant, role-based (Executive / IT / Admin)
|
||||
- **Deployment:** Docker Compose locally → cloud (Railway, Render, or VPS)
|
||||
|
||||
---
|
||||
|
||||
## Sub-Tasks
|
||||
|
||||
---
|
||||
|
||||
### Stage 1 — Project Scaffolding and Development Environment
|
||||
|
||||
**Intent:** Establish a working monorepo with frontend, backend, and database configured, running locally via Docker Compose. This is the foundation every other stage builds on.
|
||||
|
||||
**Expected Outcomes:**
|
||||
- `git init` with organized directory structure (`/frontend`, `/backend`, `/infra`)
|
||||
- Next.js app running at `localhost:3000` with dark TrustOS theme applied
|
||||
- FastAPI backend running at `localhost:8000` with `/health` endpoint
|
||||
- PostgreSQL database container running, accessible from backend
|
||||
- `.env.example` files present for all secrets
|
||||
- Docker Compose file that starts all three services with one command
|
||||
|
||||
**Todo List:**
|
||||
1. Create monorepo structure: `/frontend`, `/backend`, `/infra`, `/docs`
|
||||
2. Scaffold Next.js app inside `/frontend` with TypeScript and Tailwind CSS
|
||||
3. Apply TrustOS brand theme (deep black background, titanium gray, sapphire blue accent, white text)
|
||||
4. Scaffold FastAPI app inside `/backend` with a `/health` endpoint
|
||||
5. Create `docker-compose.yml` in `/infra` for frontend, backend, and postgres services
|
||||
6. Create `.env.example` for each service (db connection, API keys)
|
||||
7. Confirm all three services start cleanly
|
||||
|
||||
**Relevant Context:**
|
||||
- No existing code — full greenfield
|
||||
- Theme: dark titanium, sapphire blue for healthy status, crimson only for urgent risk
|
||||
- Must feel premium and calm, not alarmist
|
||||
|
||||
**Status:** `[ ] pending`
|
||||
|
||||
---
|
||||
|
||||
### Stage 2 — Data Model and Database Schema
|
||||
|
||||
**Intent:** Define the core database schema that represents the TrustOS data universe: clients, assets, findings, risk scores, remediation items, and users. A well-designed schema here prevents expensive migrations later.
|
||||
|
||||
**Expected Outcomes:**
|
||||
- PostgreSQL schema with all core tables migrated and documented
|
||||
- Seed script that populates one demo client with realistic mock data
|
||||
- Backend can query the database and return JSON
|
||||
|
||||
**Todo List:**
|
||||
1. Define `tenants` table (client organizations)
|
||||
2. Define `users` table with roles: `executive`, `it_admin`, `trustos_admin`
|
||||
3. Define `assets` table (domains, IPs, cloud resources, email accounts, executives)
|
||||
4. Define `findings` table (vulnerability or exposure record linked to an asset)
|
||||
5. Define `risk_scores` table (daily snapshot of overall and category scores per tenant)
|
||||
6. Define `remediation_items` table (owner, status, due date, evidence, linked finding)
|
||||
7. Define `audit_reports` table (Phase 1 Vault Audit container)
|
||||
8. Write migration files (using Alembic for Python/FastAPI)
|
||||
9. Write seed script with one demo tenant "Acme Corp" with realistic sample data
|
||||
|
||||
**Relevant Context:**
|
||||
- Multi-tenant from day one — all tables must have `tenant_id`
|
||||
- Findings need both technical details (CVE, CVSS) and AI-translated plain-English fields
|
||||
- Risk score is 0–100, higher = safer (inverted from typical CVSS)
|
||||
|
||||
**Status:** `[ ] pending`
|
||||
|
||||
---
|
||||
|
||||
### Stage 3 — Authentication and Role-Based Access
|
||||
|
||||
**Intent:** Implement multi-tenant authentication with three roles: Executive (dashboard-only view), IT Admin (full technical detail + remediation), and TrustOS Admin (manages all tenants). This gate must exist before any dashboard work begins.
|
||||
|
||||
**Expected Outcomes:**
|
||||
- Login page at `/login` with email + password
|
||||
- JWT-based session with role stored in token
|
||||
- Protected API routes — unauthenticated requests return 401
|
||||
- Three demo users seeded: one per role for the demo tenant
|
||||
- Frontend redirects to correct dashboard view based on role
|
||||
|
||||
**Todo List:**
|
||||
1. Implement JWT auth in FastAPI (`/auth/login`, `/auth/me`, `/auth/logout`)
|
||||
2. Add role middleware — decorator that checks role on protected routes
|
||||
3. Build `/login` page in Next.js with TrustOS branding
|
||||
4. Implement token storage (httpOnly cookie preferred)
|
||||
5. Create auth context in React — exposes `user`, `role`, `tenantId`
|
||||
6. Add route guards in Next.js that redirect unauthenticated users to `/login`
|
||||
7. Seed three demo users (executive@acme.com, it@acme.com, admin@trustos.com)
|
||||
|
||||
**Relevant Context:**
|
||||
- Executive role sees: risk score, Top 3 risks, trend, AI translations only — no raw technical data
|
||||
- IT Admin role sees: full finding details, CVE IDs, remediation steps, evidence, logs
|
||||
- TrustOS Admin: manages tenants, triggers scans, views all client data
|
||||
|
||||
**Status:** `[ ] pending`
|
||||
|
||||
---
|
||||
|
||||
### Stage 4 — Vault Dashboard (Executive View)
|
||||
|
||||
**Intent:** Build the core product moment — the executive-facing Vault dashboard. This is what a CEO sees when they log in. It must be visually premium, immediately understandable, and demonstrate TrustOS's value in the first 30 seconds.
|
||||
|
||||
**Expected Outcomes:**
|
||||
- `/dashboard` route renders the Vault dashboard for the authenticated tenant
|
||||
- Cyber Health Score displayed as a large dial/gauge (0–100, sapphire = healthy, crimson = critical)
|
||||
- "Top 3 Risks" cards each showing: risk title, AI plain-English description, business impact level, remediation urgency
|
||||
- Risk trend chart showing score improvement over past 90 days
|
||||
- "Improved X% this month" callout if score improved
|
||||
- All data sourced from API, not hardcoded
|
||||
|
||||
**Todo List:**
|
||||
1. Build `RiskDial` component — circular gauge with sapphire/crimson gradient and score in center
|
||||
2. Build `RiskCard` component — shows risk name, AI-translated impact sentence, urgency badge
|
||||
3. Build `TrendChart` component — 90-day line chart of daily risk scores (use Recharts or Chart.js)
|
||||
4. Build `ImprovementBadge` — shows "▲ Improved 8% this month" in sapphire
|
||||
5. Assemble `/dashboard` page layout (dark background, card grid, TrustOS nav)
|
||||
6. Wire `GET /api/dashboard/{tenant_id}` endpoint — returns score, Top 3 risks, trend data
|
||||
7. Connect frontend to API with loading and error states
|
||||
8. Ensure Executive role sees no raw CVE data anywhere on this view
|
||||
|
||||
**Relevant Context:**
|
||||
- Risk cards must use plain English — no CVE IDs, no CVSS numbers visible to Executive role
|
||||
- The Vault visual metaphor should feel premium: describe it as a "living room for security decisions"
|
||||
- Each risk card has a "View Details" that navigates to the finding detail page
|
||||
|
||||
**Status:** `[ ] pending`
|
||||
|
||||
---
|
||||
|
||||
### Stage 5 — IT Admin View and Remediation Tracker
|
||||
|
||||
**Intent:** Build the technical layer of the dashboard for IT admins and security engineers. They need prioritized findings, technical details, remediation steps, asset ownership, and evidence — all in one place without switching tools.
|
||||
|
||||
**Expected Outcomes:**
|
||||
- `/findings` route renders a sortable, filterable table of all active findings
|
||||
- Each finding has a detail page with: technical description, CVE ID, CVSS score, AI explanation, remediation steps, asset link, owner assignment, status
|
||||
- Remediation Tracker board (Kanban-style: Open → In Progress → Resolved → Verified)
|
||||
- Status changes save to database and recalculate risk score
|
||||
- "Mark as Resolved" requires an evidence upload or comment
|
||||
|
||||
**Todo List:**
|
||||
1. Build `FindingsTable` component — sortable by severity, filterable by category, with status badges
|
||||
2. Build `FindingDetail` page — two sections: technical (IT) and business impact (executive-friendly)
|
||||
3. Build `RemediationBoard` — Kanban columns: Open, In Progress, Resolved, Verified
|
||||
4. Wire `GET /api/findings` and `GET /api/findings/{id}` endpoints
|
||||
5. Wire `PATCH /api/findings/{id}/status` — update status, log timestamp, require evidence note
|
||||
6. Wire risk score recalculation trigger — when a finding moves to Verified, score updates
|
||||
7. Add asset ownership field — assign findings to a team member
|
||||
8. Build `EvidenceInput` component — text note or file reference to confirm fix
|
||||
|
||||
**Relevant Context:**
|
||||
- Remediation Tracker is a key retention driver — it keeps IT teams inside TrustOS daily
|
||||
- Verified status should require a human note, not just a click
|
||||
- Score recalculation logic: each open Critical = -10pts, High = -5pts, Medium = -2pts (configurable)
|
||||
|
||||
**Status:** `[ ] pending`
|
||||
|
||||
---
|
||||
|
||||
### Stage 6 — AI Risk Translator
|
||||
|
||||
**Intent:** Integrate an LLM to automatically generate plain-English explanations for every finding. This is the "AI translates technical findings into business language" feature that is central to TrustOS's differentiation.
|
||||
|
||||
**Expected Outcomes:**
|
||||
- Every finding in the database has an `ai_summary` field populated with plain-English translation
|
||||
- AI summary follows the format: "What is this?" → "Why does it matter?" → "Business impact" → "Fix priority"
|
||||
- Executive Risk Card uses the `ai_summary` — never raw CVE text
|
||||
- AI Security Coach panel on Finding Detail page: interactive Q&A about any finding
|
||||
- Estimated business impact tag (Low / Medium / High / Critical) generated by AI
|
||||
|
||||
**Todo List:**
|
||||
1. Create `ai_translator` service in backend — wraps OpenAI/Anthropic API call
|
||||
2. Write system prompt that instructs LLM to translate findings into business-grade plain English (no jargon, no CVE IDs, impact-first framing)
|
||||
3. Add background job that processes any finding with no `ai_summary` and populates it
|
||||
4. Add `GET /api/findings/{id}/ai-explain` endpoint — returns structured AI explanation
|
||||
5. Build `AICoachPanel` component — chat-like UI on finding detail: user can ask "Can ransomware use this?" and get LLM answer in context
|
||||
6. Store AI responses — do not re-call the API on every page load
|
||||
7. Add `.env` config for `OPENAI_API_KEY` or `ANTHROPIC_API_KEY`
|
||||
|
||||
**Relevant Context:**
|
||||
- AI explanations must always be scoped to the specific finding — never generic
|
||||
- Do not expose raw LLM output directly — always validate response shape before storing
|
||||
- If AI is unavailable, fall back gracefully to the raw technical description
|
||||
|
||||
**Status:** `[ ] pending`
|
||||
|
||||
---
|
||||
|
||||
### Stage 7 — Digital Footprint Center
|
||||
|
||||
**Intent:** Build the OSINT / executive exposure module. This scans publicly available information about the client organization and its executives — leaked credentials, public email addresses, exposed domains, metadata. This is TrustOS's unique differentiator vs. pure technical scanners.
|
||||
|
||||
**Expected Outcomes:**
|
||||
- `/footprint` route shows a Digital Footprint Center for the tenant
|
||||
- Executive Exposure section: lists executives with their publicly found email addresses, leaked credentials (from breach DBs), public social profiles, WHOIS-linked info
|
||||
- Domain/Asset Exposure section: exposed subdomains, misconfigured DNS, public cloud buckets, certificate issues
|
||||
- All data stored as findings in the database, categorized as `type: "digital_footprint"`
|
||||
- Manual entry mode first (admin enters data found manually); automated integration in a later stage
|
||||
|
||||
**Todo List:**
|
||||
1. Add `digital_footprint` category to findings schema
|
||||
2. Add `executives` table — links executives to a tenant with name, title, known public info
|
||||
3. Build `FootprintDashboard` page — executive cards with exposure summary, domain exposure list
|
||||
4. Build `ExecutiveExposureCard` — shows name, role, exposure count, worst exposure type
|
||||
5. Build `AddExposureItem` form — TrustOS Admin manually logs a footprint finding for a tenant
|
||||
6. Wire `GET /api/footprint/{tenant_id}` and `POST /api/footprint` endpoints
|
||||
7. Connect findings from footprint to the main remediation tracker
|
||||
8. Ensure privacy framing is correct: UI copy says "publicly available information that increases organizational risk" — not "surveillance of individuals"
|
||||
|
||||
**Relevant Context:**
|
||||
- This is authorized, organization-scoped exposure monitoring only
|
||||
- Phase 1 (manual entry): TrustOS analysts populate this during the Vault Audit
|
||||
- Phase 2 (automated): integrate Have I Been Pwned API, Shodan, FullHunt, or similar
|
||||
- Executives must be enrolled with explicit organizational authorization
|
||||
|
||||
**Status:** `[ ] pending`
|
||||
|
||||
---
|
||||
|
||||
### Stage 8 — Vault Audit Report Generation (Phase 1 Delivery)
|
||||
|
||||
**Intent:** Build the Phase 1 Vault Audit deliverable — the product that gets sold at $25K–$55K. A TrustOS admin can run a "Generate Vault Audit Report" action that produces a polished, shareable PDF and a locked dashboard view representing the point-in-time baseline.
|
||||
|
||||
**Expected Outcomes:**
|
||||
- TrustOS Admin can trigger "Generate Vault Audit" for any tenant from the admin panel
|
||||
- Audit report contains: Executive Summary, Cyber Health Score, Top 3 Risks, Digital Footprint Summary, Cloud Posture Summary, Remediation Roadmap with priorities
|
||||
- Report exports as a PDF (branded TrustOS PDF with dark design)
|
||||
- Dashboard shows "Audit Baseline: [Date]" badge — customer can compare current state vs. baseline
|
||||
- Audit report is stored in `audit_reports` table and accessible at `/reports/{id}`
|
||||
|
||||
**Todo List:**
|
||||
1. Build `/admin` panel — list of tenants, ability to trigger audit generation per tenant
|
||||
2. Create `AuditReportBuilder` service — assembles all findings, scores, footprint data into an audit object
|
||||
3. Build `AuditReportPage` — `/reports/{id}` renders the full audit as a styled web page
|
||||
4. Integrate PDF export (use Puppeteer or `@react-pdf/renderer` for branded PDF generation)
|
||||
5. Add "Audit Baseline" badge to dashboard — shows snapshot date and delta since baseline
|
||||
6. Build audit summary email template — sent to tenant contact when audit is ready
|
||||
7. Store generated PDF in file storage (local volume first, S3 later)
|
||||
|
||||
**Relevant Context:**
|
||||
- The Vault Audit is the entry product — it must feel worth $25K–$55K
|
||||
- The web-rendered version is the primary deliverable; PDF is for board meetings and insurance submissions
|
||||
- Audit baseline is a locked snapshot — it does not change even as the live dashboard updates
|
||||
|
||||
**Status:** `[ ] pending`
|
||||
|
||||
---
|
||||
|
||||
### Stage 9 — Attack Path Visualization
|
||||
|
||||
**Intent:** Build the interactive attack path diagram that shows executives and IT teams how an attacker could move through their environment from internet to sensitive data. Visual, animated, understandable — turns "Port 443 vulnerable" into a story.
|
||||
|
||||
**Expected Outcomes:**
|
||||
- Finding detail pages can show an associated attack path diagram
|
||||
- Attack path is a directed graph: Internet → Entry Point → Pivot → Target (e.g., Customer Database)
|
||||
- Nodes are labeled in plain English with risk level color coding
|
||||
- AI generates the attack path narrative: "An attacker could use X to reach Y because Z"
|
||||
- TrustOS Admin can define attack path chains manually in Phase 1; automated graph generation in Phase 2
|
||||
|
||||
**Todo List:**
|
||||
1. Add `attack_paths` table — ordered list of nodes (asset or finding) that form a chain
|
||||
2. Build `AttackPathGraph` component using React Flow or D3.js — directed graph with node/edge styling
|
||||
3. Apply color coding: internet/attacker = crimson, pivot nodes = amber, target/data = sapphire
|
||||
4. Add animated "flow" along attack path edges to show direction of attack
|
||||
5. Wire `GET /api/attack-paths/{finding_id}` endpoint
|
||||
6. Add AI narrative generation — LLM describes the path in plain English above the graph
|
||||
7. Link attack paths from finding detail page and Executive Top 3 Risk cards
|
||||
|
||||
**Relevant Context:**
|
||||
- Executives understand pictures — this is one of the highest-value visual moments in the product
|
||||
- Keep Phase 1 simple: manually-defined linear chains. Automated graph traversal is Phase 3.
|
||||
- Nodes should show: asset name, role in chain, plain-English label
|
||||
|
||||
**Status:** `[ ] pending`
|
||||
|
||||
---
|
||||
|
||||
### Stage 10 — Continuous Monitoring and Daily Assessment Engine
|
||||
|
||||
**Intent:** Build the backend engine that performs continuous automated checks against the tenant's authorized asset scope — new CVEs, certificate expiration, exposed services, cloud misconfigurations, domain changes. This is what makes TrustOS a monitoring subscription, not a one-time assessment.
|
||||
|
||||
**Expected Outcomes:**
|
||||
- Scheduled daily job runs checks against each tenant's authorized asset list
|
||||
- Checks include: certificate expiration (< 30 days), new CVE matching known tech stack, DNS/domain changes, cloud bucket public access, HIBP credential breach for known emails
|
||||
- New findings are automatically created and surfaced on the dashboard
|
||||
- Risk score updates nightly based on current finding state
|
||||
- Tenants receive a weekly digest email: "What changed this week"
|
||||
|
||||
**Todo List:**
|
||||
1. Create `scheduler` service (APScheduler or Celery Beat) that triggers daily assessment per tenant
|
||||
2. Build `cert_checker` — checks SSL certificate expiration for all tenant domains
|
||||
3. Build `cve_monitor` — queries NVD API for new CVEs matching known software/version data
|
||||
4. Build `cloud_posture_checker` — checks for publicly accessible S3 buckets, open security groups (AWS SDK)
|
||||
5. Build `breach_monitor` — checks Have I Been Pwned API for new credential exposures matching tenant emails
|
||||
6. Build `risk_score_calculator` — nightly recalculation service, writes to `risk_scores` table
|
||||
7. Build weekly digest email template and trigger
|
||||
8. Add `authorized_assets` table — tenant scope definition, only scan what is explicitly authorized
|
||||
|
||||
**Relevant Context:**
|
||||
- Authorization first — never scan assets not explicitly enrolled by the tenant
|
||||
- Phase 1 uses basic external checks (cert expiry, OSINT, HIBP); Phase 2 adds cloud API integrations
|
||||
- The daily check loop is what converts a one-time audit client into a $5K–$15K/month subscriber
|
||||
|
||||
**Status:** `[ ] pending`
|
||||
|
||||
---
|
||||
|
||||
### Stage 11 — Pitch Deck and Investor Materials (Digital Artifacts)
|
||||
|
||||
**Intent:** Produce the investor-facing digital deliverables described in the business plan: a web-rendered pitch deck (for sharing links), a one-page investor memo page, and exportable PDF versions. These are separate from the product and used for fundraising.
|
||||
|
||||
**Expected Outcomes:**
|
||||
- `/pitch` route renders a scrollable, slide-by-slide investor pitch based on the 16-slide outline in readplan.txt
|
||||
- Styled with the TrustOS brand: dark, sapphire, titanium, premium
|
||||
- Each slide maps to the deck outline: Title, Problem, Why Now, Solution, Product, How It Works, Customer Wedge, Business Model, Pricing, Differentiation, GTM, Financials, Milestones, Funding Ask, Closing
|
||||
- PDF export of the full pitch deck
|
||||
- One-page investor memo at `/memo`
|
||||
|
||||
**Todo List:**
|
||||
1. Create `/pitch` route — full-page scrollable slide deck layout
|
||||
2. Build 16 slide components following the slide-by-slide build guide in readplan.txt
|
||||
3. Build financial chart component for Year 1–3 revenue table
|
||||
4. Build pricing ladder component for the four subscription tiers
|
||||
5. Build comparison matrix component for differentiation slide
|
||||
6. Apply consistent TrustOS brand (dark background, sapphire accents, clean sans-serif)
|
||||
7. Add PDF export for full deck
|
||||
8. Build `/memo` page with the two-page investor memo content from readplan.txt
|
||||
|
||||
**Relevant Context:**
|
||||
- All content is defined in readplan.txt — no new copy needs to be written
|
||||
- Pitch deck is for investor meetings — it must look polished enough to share before the product is live
|
||||
- This can be built in parallel with Stage 8–10 if needed
|
||||
|
||||
**Status:** `[ ] pending`
|
||||
|
||||
---
|
||||
|
||||
## Implementation Order
|
||||
|
||||
```
|
||||
Stage 1 → Scaffolding (foundation)
|
||||
Stage 2 → Database schema
|
||||
Stage 3 → Auth
|
||||
Stage 4 → Executive dashboard (first demo-able moment)
|
||||
Stage 5 → IT admin + remediation tracker
|
||||
Stage 6 → AI risk translator (TrustOS differentiator)
|
||||
Stage 7 → Digital footprint center
|
||||
Stage 8 → Vault audit report generator (Phase 1 product)
|
||||
Stage 9 → Attack path visualization
|
||||
Stage 10 → Continuous monitoring engine (Phase 2 product)
|
||||
Stage 11 → Pitch deck / investor materials (can run parallel to 8–10)
|
||||
```
|
||||
|
||||
Stages 1–8 deliver the **Phase 1 Vault Audit** product — the $25K–$55K entry offer.
|
||||
Stages 9–10 complete the **Phase 2 monthly monitoring** subscription — $5K–$15K/month.
|
||||
Stage 11 supports the **fundraising process** in parallel.
|
||||
4589
docs/BUSINESS_PLAN.md
Normal file
4589
docs/BUSINESS_PLAN.md
Normal file
File diff suppressed because it is too large
Load Diff
@@ -33,14 +33,44 @@ TrustOS can be deployed to various platforms depending on your needs and experti
|
||||
|
||||
## Deployment Options
|
||||
|
||||
### Deployment Decision Tree
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
Start[Start Deployment] --> Budget{Budget?}
|
||||
Budget -->|< $50/mo| VPS[VPS Deployment]
|
||||
Budget -->|$50-200/mo| Managed{Managed Platform?}
|
||||
Budget -->|> $200/mo| K8s[Kubernetes]
|
||||
|
||||
Managed -->|Yes| Railway{Need Simple?}
|
||||
Managed -->|No| Render[Render Deployment]
|
||||
|
||||
Railway -->|Yes| RailwayDeploy[Railway Deployment]
|
||||
Railway -->|No| Render
|
||||
|
||||
VPS --> VPSDeploy[VPS Deployment Guide]
|
||||
K8s --> K8sDeploy[Kubernetes Deployment]
|
||||
RailwayDeploy --> Done[Deployment Complete]
|
||||
Render --> Done
|
||||
VPSDeploy --> Done
|
||||
K8sDeploy --> Done
|
||||
|
||||
style Start fill:#e8f5e9
|
||||
style Done fill:#e8f5e9
|
||||
style VPS fill:#fff3e0
|
||||
style Railway fill:#e3f2fd
|
||||
style Render fill:#f3e5f5
|
||||
style K8s fill:#fce4ec
|
||||
```
|
||||
|
||||
### Comparison
|
||||
|
||||
| Platform | Difficulty | Cost | Control | Scalability |
|
||||
|----------|-----------|------|---------|-------------|
|
||||
| Railway | Easy | $$ | Low | Medium |
|
||||
| Render | Easy | $$ | Low | Medium |
|
||||
| VPS | Medium | $ | High | High |
|
||||
| Kubernetes | Hard | $$$ | High | Very High |
|
||||
| Platform | Difficulty | Cost | Control | Scalability | Best For |
|
||||
|----------|-----------|------|---------|-------------|----------|
|
||||
| Railway | Easy | $$ | Low | Medium | Quick MVP, small teams |
|
||||
| Render | Easy | $$ | Low | Medium | Simple apps, good Postgres |
|
||||
| VPS | Medium | $ | High | High | Cost-effective, custom needs |
|
||||
| Kubernetes | Hard | $$$ | High | Very High | Enterprise, high availability |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user