Build Plan: SkyBrief¶
12-Week MVP Development Plan
Executive Summary¶
Product: SkyBrief - EASA-compliant weather briefing platform with predictive intelligence for small Part-CAT operators (1-5 aircraft).
Timeline: 12 weeks to MVP launch
Budget: €50-300/month (phased)
Differentiation: Automated compliance documentation + predictive weather insights using affordable ML (Fireworks.ai)
Geographic Focus: Spain → Portugal → France
Finalized Decisions¶
Architecture¶
- Pattern: Hexagonal (Ports & Adapters) - Clean Architecture
- Language: Go 1.21+
- Framework: Echo or Fiber
- Database: PostgreSQL 15+ (self-hosted on Hetzner)
- Hosting: Hetzner CX42 (Germany) - €20.76/month
- Frontend: React + TypeScript + Tailwind CSS
- PDF Generation: Gotenberg (open source)
Data Sources¶
- Core Weather: AviationWeather.gov (FREE)
- EU Forecasts: Open-Meteo Professional (€150/month from Week 5)
- Airspace: OpenAIP (FREE)
- Airports: OurAirports (FREE, static import)
- Intelligence: Fireworks.ai (~$5/month from Week 7)
- NOTAMs: Deferred to v2 (architected for future)
Market Strategy¶
- Target: Spanish Part-CAT operators (1-5 aircraft)
- Entry: Madrid Barajas Terminal Ejecutiva, AESA registry
- Expansion: Portugal → France (Months 6-12)
Product Approach¶
- Primary: Compliance automation (EASA audit documentation)
- Secondary: Predictive intelligence (alerts, trend analysis)
- NOTAMs: Future premium tier when revenue justifies cost
System Architecture¶
Hexagonal Architecture Diagram¶
┌─────────────────────────────────────────────────────────────┐
│ ADAPTERS (Infrastructure) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ HTTP API │ │ PostgreSQL │ │ External Services │ │
│ │ (Primary) │ │ (Database) │ │ (Weather, Email) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────────┬──────────┘ │
└─────────┼────────────────┼────────────────────┼─────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ APPLICATION LAYER (Use Cases) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Generate │ │ Check │ │ Predict │ │
│ │ Briefing │ │ Compliance │ │ Weather │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌─────────▼───────────────────────────────────────────────────┐
│ DOMAIN LAYER (Core Logic) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Flight │ │ Weather │ │ Compliance │ │
│ │ Entity │ │ Reading │ │ Rules │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘ Directory Structure¶
/
├── cmd/
│ └── api/
│ └── main.go
├── internal/
│ ├── domain/ # Entities, business rules
│ ├── application/ # Use cases
│ ├── ports/ # Interfaces
│ └── adapters/ # Implementations
│ ├── http/
│ ├── persistence/
│ ├── weather/
│ └── intelligence/
├── migrations/
└── configs/ 12-Week Development Timeline¶
Phase 1: Foundation (Weeks 1-4)¶
Goal: Core infrastructure and basic weather integration
Week 1: Project Setup & Architecture¶
Tasks: - [ ] Initialize Go project with Go modules - [ ] Set up hexagonal directory structure - [ ] Configure Docker and Docker Compose - [ ] Set up Hetzner CX42 server - [ ] Configure PostgreSQL 15 with initial schema - [ ] Set up CI/CD pipeline (GitHub Actions) - [ ] Configure logging (slog) and error handling - [ ] Set up monitoring (Grafana + Prometheus)
Deliverables: - Running server with database - Development environment ready - CI/CD pipeline operational
Validation: make dev starts all services locally
Week 2: Domain Layer & Authentication¶
Tasks: - [ ] Define core entities (Flight, WeatherReading, ComplianceReport, Alert) - [ ] Implement domain services (ComplianceValidator) - [ ] Create repository interfaces (ports) - [ ] Implement PostgreSQL repositories (adapters) - [ ] Set up JWT authentication - [ ] Create user management (operators, dispatchers) - [ ] Implement role-based access control
Deliverables: - Domain layer with core business logic - Database schema implemented - Authentication system working
Validation: Unit tests for domain logic pass
Week 3: Weather Integration (Part 1)¶
Tasks: - [ ] Implement WeatherSource interface - [ ] Build AviationWeather.gov adapter - Parse METAR format - Parse TAF format - Error handling and retries - [ ] Create composite weather service (aggregates multiple sources) - [ ] Implement weather caching (Redis or in-memory) - [ ] Build weather data normalizer
Deliverables: - Working AviationWeather.gov integration - Weather data fetching and parsing - Normalized weather data structure
Validation: Can fetch and parse weather for test airports (LEMD, LEMG)
Week 4: Basic API & Frontend Setup¶
Tasks: - [ ] Create HTTP handlers (Echo/Fiber) - [ ] Implement flight CRUD endpoints - [ ] Set up React project with TypeScript - [ ] Configure Tailwind CSS - [ ] Create basic UI components - Flight creation form - Weather display component - [ ] Connect frontend to backend API - [ ] Set up PDF generation (Gotenberg)
Deliverables: - REST API with flight management - React frontend with basic UI - End-to-end: Create flight → View weather
Validation Gate: Can create a flight and view raw weather data in UI
Phase 2: Compliance Core (Weeks 5-6)¶
Goal: EASA compliance automation
Week 5: Compliance Engine¶
Tasks: - [ ] Research EASA AMC1 CAT.OP.MPA.175 requirements - [ ] Implement compliance rule engine - Check METAR presence - Check TAF presence - Check SIGMET for route - [ ] Create compliance report generator - [ ] Build PDF report template (EASA-compliant format) - [ ] Implement audit trail logging - [ ] Add Open-Meteo Professional integration (€150/month) - Sign up for API key - Implement adapter - EU forecast enhancement
Deliverables: - Compliance validation working - PDF report generation - Open-Meteo integration active
Validation: Generate compliance report for test flight
Week 6: Report Management & Polish¶
Tasks: - [ ] Build report archival system - [ ] Implement report search and filtering - [ ] Create bulk export for audits - [ ] Add email delivery of reports - [ ] Build compliance dashboard (UI) - List of flights - Compliance status - Report download - [ ] Implement 12-month retention logic - [ ] Add data integrity checks (checksums)
Deliverables: - Complete compliance workflow - Dashboard UI - Export functionality
Validation Gate: End-to-end compliance workflow working - Create flight → Generate briefing → Download PDF → Archive report
Phase 3: Intelligence Layer (Weeks 7-10)¶
Goal: Predictive alerts and trend analysis
Week 7-8: Predictive Alerts (Priority A)¶
Tasks: - [ ] Set up Fireworks.ai account (~$5/month) - [ ] Implement IntelligenceService interface - [ ] Build FireworksAdapter (7B parameter model) - [ ] Create alert rules engine: - Weather deterioration vs forecast - Conditions approaching minima - Rapid weather changes (gusts, visibility) - [ ] Implement alert generation logic - [ ] Build alert notification system (email) - [ ] Create alert acknowledgment workflow - [ ] Build alerts dashboard (UI)
Deliverables: - Fireworks.ai integration working - Alert system operational - 3 alert types implemented
Validation: Alerts trigger correctly for test scenarios
Week 9: Trend Analysis (Priority C)¶
Tasks: - [ ] Implement historical data storage - [ ] Build airport-specific weather patterns - [ ] Create trend analysis algorithms - Seasonal patterns - Time-of-day patterns - Day-of-week patterns - [ ] Implement confidence scoring - [ ] Build trend visualization (UI) - [ ] Add "typical conditions" display
Deliverables: - Historical analysis working - Trend visualizations - Pattern detection
Validation: Can view historical trends for airports
Week 10: Route Optimization Prep (Priority B)¶
Tasks: - [ ] Integrate OpenAIP for airspace data - [ ] Import OurAirports data (static) - [ ] Build route calculation infrastructure - [ ] Create alternate airport finder - [ ] Implement weather comparison along route - [ ] Build basic route visualization (map) - [ ] Add route weather overlay
Deliverables: - Route visualization - Alternate airport weather - Basic route analysis
Validation Gate: Intelligence features provide actionable insights - Can view route weather - Alerts are useful and accurate - Trends provide value
Phase 4: Launch Prep (Weeks 11-12)¶
Goal: Beta testing and launch
Week 11: Polish & Optimization¶
Tasks: - [ ] UI/UX refinement based on internal testing - [ ] Performance optimization: - API response times - Database query optimization - Frontend bundle size - [ ] Security audit: - Input validation - SQL injection prevention - XSS protection - [ ] Error handling improvements - [ ] Documentation: - API documentation - User guide - Deployment guide - [ ] Load testing
Deliverables: - Production-ready codebase - Documentation complete - Security hardened
Week 12: Beta Launch¶
Tasks: - [ ] Deploy to production (Hetzner) - [ ] Onboard 3-5 beta operators - [ ] Daily support and feedback collection - [ ] Critical bug fixes - [ ] Create landing page - [ ] Set up pricing page - [ ] Configure payment processing (Stripe) - [ ] Create onboarding flow - [ ] Write case study template
Deliverables: - Live production system - 3-5 active beta users - Landing page + pricing - Payment system ready
Validation Gate: 3+ beta users actively using the platform - Briefings generated regularly - Positive feedback on compliance features - No critical bugs
Detailed Technical Specifications¶
Database Schema¶
-- Core tables (v1)
CREATE TABLE operators (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
country VARCHAR(2) NOT NULL,
operator_type VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE aircraft (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
operator_id UUID REFERENCES operators(id),
registration VARCHAR(20) NOT NULL,
type VARCHAR(100) NOT NULL,
icao_type VARCHAR(10),
home_base VARCHAR(4)
);
CREATE TABLE flights (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
operator_id UUID REFERENCES operators(id),
aircraft_id UUID REFERENCES aircraft(id),
callsign VARCHAR(20),
origin VARCHAR(4) NOT NULL,
destination VARCHAR(4) NOT NULL,
etd TIMESTAMP NOT NULL,
eta TIMESTAMP,
status VARCHAR(50) DEFAULT 'planned',
created_by UUID NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE weather_readings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
flight_id UUID REFERENCES flights(id),
reading_type VARCHAR(20) NOT NULL,
station VARCHAR(4) NOT NULL,
raw_text TEXT NOT NULL,
parsed_data JSONB,
timestamp TIMESTAMP NOT NULL,
source VARCHAR(100) NOT NULL,
fetched_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE compliance_reports (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
flight_id UUID REFERENCES flights(id),
generated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
generated_by UUID NOT NULL,
easa_regulation VARCHAR(50) NOT NULL,
is_compliant BOOLEAN NOT NULL,
compliance_data JSONB,
document_path VARCHAR(500),
retention_until TIMESTAMP
);
CREATE TABLE alerts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
flight_id UUID REFERENCES flights(id),
alert_type VARCHAR(50) NOT NULL,
severity VARCHAR(20) NOT NULL,
message TEXT NOT NULL,
recommendation TEXT,
triggered_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
acknowledged_at TIMESTAMP,
acknowledged_by UUID
); API Endpoints¶
# Authentication
POST /api/v1/auth/login
POST /api/v1/auth/refresh
POST /api/v1/auth/logout
# Flights
GET /api/v1/flights
POST /api/v1/flights
GET /api/v1/flights/{id}
PUT /api/v1/flights/{id}
DELETE /api/v1/flights/{id}
# Weather Briefings
POST /api/v1/flights/{id}/briefing
GET /api/v1/flights/{id}/briefing
GET /api/v1/briefings/{id}/pdf
# Compliance
GET /api/v1/flights/{id}/compliance
GET /api/v1/compliance/reports
GET /api/v1/compliance/export
# Intelligence
GET /api/v1/flights/{id}/alerts
POST /api/v1/alerts/{id}/acknowledge
GET /api/v1/alerts/history
# Airports (reference data)
GET /api/v1/airports
GET /api/v1/airports/{icao}
GET /api/v1/airports/{icao}/weather External Integrations¶
AviationWeather.gov (FREE): - Endpoint: https://aviationweather.gov/api/data/metar - Rate limit: 100 req/min - Format: XML/JSON - Coverage: Global
Open-Meteo Professional (€150/month): - Endpoint: https://api.open-meteo.com/v1/forecast - Resolution: 1km - Updates: Hourly - Coverage: Europe
Fireworks.ai (~$5/month): - Model: accounts/fireworks/models/mixtral-8x7b - Cost: $0.50 per 1M tokens - Use: Weather trend analysis
Budget Breakdown¶
Infrastructure Costs¶
| Component | Monthly Cost | Notes |
|---|---|---|
| Hetzner CX42 | €20.76 | 4 vCPU, 16GB RAM |
| Block storage | €5-10 | Report storage, backups |
| Domain + DNS | €2 | Cloudflare |
| Total Infrastructure | €28-33 |
Data Source Costs (Phased)¶
| Phase | Services | Monthly Cost |
|---|---|---|
| Weeks 1-4 | AviationWeather (free) | €0 |
| Weeks 5-6 | + Open-Meteo Pro | €150 |
| Weeks 7-10 | + Fireworks.ai + WeatherAPI | €220 |
| Weeks 11-12 | All services active | €250-300 |
Total Budget by Phase¶
| Phase | Timeline | Monthly Cost |
|---|---|---|
| Phase 1 (Weeks 1-4) | Foundation | €28-33 |
| Phase 2 (Weeks 5-6) | Compliance | €178-183 |
| Phase 3 (Weeks 7-10) | Intelligence | €228-233 |
| Phase 4 (Weeks 11-12) | Launch | €278-283 |
Success Criteria¶
Technical Milestones¶
- [ ] Week 4: Can create flight and view weather
- [ ] Week 6: Can generate EASA-compliant PDF report
- [ ] Week 8: Fireworks.ai integration working
- [ ] Week 10: Intelligence features operational
- [ ] Week 12: 3+ beta users actively using platform
Business Milestones¶
- [ ] Week 4: First operator conversation completed
- [ ] Week 6: 5 operators in pipeline
- [ ] Week 8: First beta user committed
- [ ] Week 10: Landing page live
- [ ] Week 12: 3-5 beta users onboarded
Quality Gates¶
- [ ] All API endpoints tested
- [ ] PDF reports validated for EASA compliance
- [ ] Alert accuracy >80%
- [ ] Page load time <2 seconds
- [ ] 99% uptime during beta
Risk Management¶
Technical Risks¶
| Risk | Mitigation |
|---|---|
| Weather API failures | Multiple providers, caching, fallback logic |
| Fireworks.ai costs exceed budget | Set hard limits, monitor usage |
| PDF generation performance | Async processing, queue system |
| Database performance | Indexing, query optimization, connection pooling |
Business Risks¶
| Risk | Mitigation |
|---|---|
| Operators want NOTAMs immediately | Manual import feature v1.1 |
| Not enough beta users | Aggressive outreach, free extended trial |
| Competition releases similar product | Focus on compliance niche, faster iteration |
| Regulatory changes | Stay active in EBAA, flexible architecture |
Post-MVP Roadmap¶
Month 4-6: Growth¶
- [ ] Onboard 20 paying customers
- [ ] Intelligence feature refinement
- [ ] API access for integrations
- [ ] Portugal market entry
Month 7-12: Scale¶
- [ ] Evaluate NOTAM integration (revenue vs cost)
- [ ] France market entry
- [ ] Mobile app (v2)
- [ ] 100+ paying customers
Appendices¶
A. EASA Regulatory References¶
- Regulation (EU) 965/2012 - Air Operations
- ORO.MLR.100 - Record retention (12 months)
- AMC1 CAT.OP.MPA.175 - Flight preparation requirements
- AMC1 CAT.OP.MPA.180 - Meteorological information
B. Development Commands¶
# Start development environment
make dev
# Run tests
make test
# Build for production
make build
# Deploy to Hetzner
make deploy C. Resources¶
- Go: https://go.dev/doc/
- Echo Framework: https://echo.labstack.com/
- React: https://react.dev/
- Tailwind CSS: https://tailwindcss.com/
- AviationWeather API: https://aviationweather.gov/data/api/
- Open-Meteo: https://open-meteo.com/en/docs
- Fireworks.ai: https://docs.fireworks.ai/
Related Documents¶
- Product Architecture (detailed technical specs)
- Go-To-Market Strategy (market entry plan)
- Action Items (weekly task list)
- EU Aviation Weather Regulatory Research Report
Document Version: 1.0
Created: March 4, 2026
Next Review: End of Week 4