Privacy-first VPN platform with censorship-resistant exit nodes in Singapore and Germany. Built on WireGuard + AmneziaWG, orchestrated by a Go control plane, delivered via Flutter apps.
| Problem | Solution |
|---|---|
| Commercial VPNs log traffic | Zero-knowledge architecture: no traffic logs, no bandwidth records, no connection timestamps |
| WireGuard blocked by DPI | Built-in Stealth Mode (AmneziaWG) with junk packets, header obfuscation, handshake scrambling |
| Single jurisdiction risk | Exit nodes in Singapore (Oracle ARM) + Germany (Hetzner) — two legal regimes, no single point of compromise |
| Vendor lock-in | Open source (Apache 2.0 backend, MIT clients), self-hostable, standard protocols |
| Opaque infrastructure | Full IaC (Terraform), documented ADRs, reproducible builds, public devlogs |
┌─────────────┐ HTTPS ┌──────────────────┐ wgctrl ┌──────────────────┐
│ Client │ ─────────────▶ │ Control Plane │ ──────────────▶ │ Exit Node 1 │
│ (Flutter) │ POST /connect │ (Go + Gin) │ ConfigurePeer │ Oracle ARM SGP │
└─────────────┘ │ PostgreSQL + │ │ wg0 / awg0 │
│ Redis │ │ 10.10.0.0/24 │
└──────────────────┘ └──────────────────┘
│
│ wgctrl
▼
┌──────────────────┐
│ Exit Node 2 │
│ Hetzner CX22 │
│ wg0 / awg0 │
│ 10.11.0.0/24 │
└──────────────────┘
| Repository | Purpose | Tech Stack |
|---|---|---|
| snowradar-infra | IaC, docs, observability, ops | Terraform, Ansible, Prometheus, Grafana |
| snowradar-api | Control plane: auth, peer mgmt, IP allocation | Go 1.22, Gin, pgx, Redis, wgctrl-go |
| snowradar-client | Cross-platform VPN apps | Flutter 3.22, Riverpod, wireguard_flutter |
- Dual Protocol: WireGuard (performance) + AmneziaWG (censorship resistance)
- Two Exit Nodes: Singapore (ARM, Always Free) + Falkenstein, DE (x86, €4.51/mo)
- Dynamic Peer Management: Add/remove peers without WireGuard restart via
wgctrl - Stealth Mode: One-tap toggle in app enables AmneziaWG obfuscation
- Zero Logging: No traffic logs, no bandwidth accounting, no connection metadata
- Kill Switch: Platform-native (Android VpnService, iOS NEVPNManager, desktop)
- Split Tunneling: Per-app routing (planned)
- Audit Ready: ADRs, threat model, security checklist, incident response plan
- GitHub account
- Domain registrar (Cloudflare, Porkbun, Namecheap)
- Oracle Cloud account (Always Free tier)
- Hetzner Cloud account (~€5/mo)
git clone https://github.com/Evil-Shown/Snow-Radar.git
cd Snow-Radar# Create org: snow-radar
# Create 3 private repos:
# snowradar-infra, snowradar-api, snowradar-client
# Enable branch protection on main# Buy snowradar.app (or .io/.network)
# Add A records after Terraform applies (see Phase 0)cd snowradar-infra/infra/terraform
cp terraform.tfvars.example terraform.tfvars
# Edit with your Oracle/Hetzner credentials + SSH public key
terraform init && terraform applyOutputs: oracle_instance_public_ip, hetzner_server_public_ip
# SSH to both servers, run hardening script
# Install WireGuard + AmneziaWG
# Configure wg0 (51820/udp) + awg0 (51821/udp)
# Deploy Prometheus Node Exportercd snowradar-api
docker compose up -d postgres redis
go run ./cmd/api migrate up
go run ./cmd/api
# POST /api/v1/connect → returns peer configcd snowradar-client
flutter pub get
flutter build apk --release --split-per-abi
# Install on device, tap Connect# GitHub Actions: lint → build Docker → push to GHCR
# GitHub Actions: lint → build APK → upload artifact
# Integrate AmneziaWG in client + backend# Distribute APK to 20 testers across Dialog/SLT/Mobitel/Hutch
# Monitor Grafana, block abuse (port 25), publish devlog| Phase | Duration | Goal | Key Deliverables |
|---|---|---|---|
| 0: Foundation | Week 1 | IaC, repos, ADRs, domain | Terraform modules, GitHub org, docs |
| 1: Bare-Metal VPN | Week 2 | Manual WireGuard/AmneziaWG, monitoring | Hardened servers, wg0/awg0, Grafana |
| 2: Control Plane | Weeks 3-4 | Dynamic peer management via API | Go API, wgctrl integration, Postgres/Redis |
| 3: Flutter MVP | Weeks 5-6 | Walking skeleton app | Key gen, secure storage, tunnel activation |
| 4: Stealth + CI/CD | Week 7 | AmneziaWG toggle, automated builds | Stealth Mode, GH Actions, legal docs |
| 5: Alpha Launch | Week 8 | 20 real users, monitoring | APK distribution, incident response, devlog |
| Category | Documents |
|---|---|
| Architecture | ARCHITECTURE.md — System diagram, components, data flows |
| Implementation | IMPLEMENTATION_GUIDE.md — Phase tasks, code structure, acceptance criteria |
| Setup | SETUP.md — Step-by-step commands for all phases |
| ADRs | adr/ — 000-template, 001-go-flutter, 002-wireguard-amneziawg, 003-oracle-hetzner |
| Operations | GITHUB_SETUP.md, HARDENING_CHECKLIST.md |
| Development | API_SPEC.md, CLIENT_ARCH.md |
| Legal | PRIVACY_POLICY.md, AUP.md |
- Threat Model: SECURITY.md
- Server Hardening: Ansible playbooks, UFW, sysctl, fail2ban, auditd
- Client Security: Keystore/Keychain, kill switch, no cleartext traffic
- Supply Chain: govulncheck, dependabot, cosign, SLSA L3 target
- Incident Response: Playbooks, runbooks, public postmortems
- Reporting: security@snowradar.app (PGP: security.asc)
We welcome contributions! Please read:
- Code of Conduct
- Contributing Guide — PR process, commit style, testing
- Security Policy — Vulnerability disclosure
# API
cd snowradar-api
docker compose up -d
go run ./cmd/api
# Client
cd snowradar-client
flutter pub get
flutter run -d chrome # or devicefeat: add AmneziaWG peer configuration endpoint
fix: resolve IPv6 leak on Android kill switch
docs: update ADR-002 with benchmarks
refactor: extract IP allocator to separate package
test: add integration test for peer cleanup
| Component | License |
|---|---|
| Backend (snowradar-api) | Apache 2.0 — prevents closed-source SaaS forks |
| Clients (snowradar-client) | MIT — maximum adoption, app store friendly |
| Infrastructure (snowradar-infra) | Apache 2.0 |
| Documentation | CC-BY-4.0 |
See LICENSE and LICENSE-CLIENT for full text.
- WireGuard — Jason Donenfeld & team
- AmneziaWG — AmneziaVPN team
- wgctrl-go — WireGuard Go bindings
- Flutter — Google & community
- Oracle Cloud Always Free — 4 ARM OCPUs forever
- Hetzner Cloud — Transparent pricing, great API
- Website: https://snowradar.app (coming soon)
- Documentation: https://docs.snowradar.app
- Status Page: https://status.snowradar.app
- Devlogs: https://blog.snowradar.app
- Discord: https://discord.gg/snowradar
- Twitter: https://twitter.com/snowradarvpn
Built with ❤️ for privacy and censorship resistance.