Skip to content
STACK IT FAST

God's Eye View

Curated OSSHybridBrowser-Based 3D Geospatial Intelligence SimulatorSolo / 2-5 people

Audited from github.com/bilawalsidhu/gods-eye-view

God's Eye View is a browser-based, spy-satellite style 3D globe that plots live public data (aircraft, ships, satellites, earthquakes, weather, public cameras) on Cesium, with optional hands-free voice control through a realtime AI agent.

Language
JavaScript
Running for
3 months
Team
Solo / 2-5 people

Why this architecture

All rendering runs client-side on Cesium with plain JavaScript modules, while a thin localhost Node proxy per data provider keeps keys out of the browser, so the whole product installs and runs locally with no hosted backend or database.

Tech stack by layer

8 technologies · audited Sep 25, 2026
Frontend & UI
  • JavaScriptPlain ES modules (no UI framework) for the globe, HUD, layers and panels under src/
  • Cesium3D globe engine rendering terrain, imagery, photorealistic 3D tiles and every live entity layer
  • ViteDev server and production bundler, extended by vite-plugin-cesium and a custom build/vite.js
  • WebAssemblyeccodes-wasm decodes GRIB weather forecasts in the browser for the wind and weather layers
Backend & APIs
  • Node.jsLocal provider proxies under server/providers keep API keys off the client and normalise feeds
Infrastructure & Deploy
  • PuppeteerDrives the headless-browser QA scripts in scripts/qa-*.mjs that screenshot and probe features
  • GitHub ActionsSingle ci.yml workflow running formatting, boundary checks and unit tests
  • PinokioOne-click local installer/launcher scripts for Windows, macOS and Linux
Tooling, Testing & Ops
  • OpenAIRealtime voice agent that maps spoken commands to globe actions (src/voice, server/providers/openai)

God's Eye View architecture diagram

Open SVG
God's Eye View architecture diagramBrowser app → Cesium globe (render); Voice commands → OpenAI (speech); Voice commands → Cesium globe (globe actions); Cesium globe → Provider proxies (layer data); Cesium globe → GRIB decoder (weather files); Provider proxies → Live data feeds (keyed requests)CLIENTSSERVICESWORKERS & JOBSEXTERNALBrowser appvanilla JS modulesVoice commandsrealtime agentCesium globe3D tiles · layersProvider proxiesNode.js · server/providersGRIB decodereccodes-wasmLive data feedsflights · satellites · trafficOpenAIrealtime voicelayer datarenderglobe actionsweather fileskeyed requestsspeech
How the main components of God's Eye View connect, drawn from the audited repository.
Diagram as text
  • Browser app (vanilla JS modules) → Cesium globe (3D tiles · layers): render
  • Voice commands (realtime agent) → OpenAI (realtime voice): speech
  • Voice commands (realtime agent) → Cesium globe (3D tiles · layers): globe actions
  • Cesium globe (3D tiles · layers) → Provider proxies (Node.js · server/providers): layer data
  • Cesium globe (3D tiles · layers) → GRIB decoder (eccodes-wasm): weather files
  • Provider proxies (Node.js · server/providers) → Live data feeds (flights · satellites · traffic): keyed requests

Key architectural decisions

5 decisions
  1. 01

    A browser app with a thin local Node proxy instead of a hosted backend

    The globe runs entirely in the browser (index.html, src/main.js), while server/providers/*.js expose per-source proxies (live flights, space, traffic, CCTV, radio, OpenAI) bound to localhost, so keys stay in a local .env and there is no server-side database.

  2. 02

    Every data source is a separate layer module behind package exports

    package.json "exports" maps each feed to its own module (./layers/flights, ./layers/vessels, ./layers/satellites, ./layers/cctv, …) and scripts/check-package-boundaries.mjs plus check-import-directions.mjs enforce the import rules between them.

  3. 03

    Keyless by default, provider keys as in-app upgrades

    Esri imagery, keyless terrain and public feeds work without accounts; Cesium ion, Google Photorealistic 3D Tiles and OpenAI keys are added from the in-app POWER UP panel (src/keySetup.js, server/standalone/key-setup) and written to an owner-only local .env.

  4. 04

    Colocated node:test unit tests plus Puppeteer QA scripts

    Logic lives in small policy modules (e.g. src/cockpitVisionPolicy.js) with a sibling *.test.mjs run by scripts/run-unit-tests.mjs, while dozens of scripts/qa-*.mjs Puppeteer scripts exercise rendering, traffic, transit and voice routing in a real browser.

  5. 05

    No UI framework; hand-written DOM modules under src/ui

    Panels, HUD, cockpit and director tooling are plain JavaScript modules (src/ui/*.js, src/hud.js) exported through package.json, keeping the dependency list to about ten runtime packages centred on cesium.

How God's Eye View is built

How God's Eye View is structured

God's Eye View is a single npm package (package.json, "type": "module") rather than a monorepo. The browser entry point is index.html plus src/main.js; everything the user sees is built from plain JavaScript modules under src/. The repository splits cleanly into four areas:

  • src/ — the client: the Cesium viewer (src/app/viewer.js), per-feed layers (src/layers/*), map sources (src/maps/*), UI panels (src/ui/*), the HUD (src/hud.js), the scene director (src/director, src/scenes) and voice control (src/voice).
  • server/ — localhost-only Node.js code: server/providers/* proxies for live flights, space, terrain, traffic, CCTV, radio, Overpass and OpenAI, and server/standalone for key setup.
  • scripts/ — tooling: the setup doctor, formatters, boundary checks, Pinokio install/start helpers and a large set of qa-*.mjs browser QA scripts.
  • docs/ — design notes such as docs/CODE-BOUNDARIES.md, docs/INFRASTRUCTURE-LAYERS.md and docs/PERFORMANCE.md.

The exports field in package.json doubles as an architecture map: each layer, provider, map source and UI surface has its own subpath (./layers/flights, ./server/providers/space, ./maps/3d, ./voice/controller, …).

Frontend

The globe is rendered by Cesium (opens in a new tab), wired into Vite through vite-plugin-cesium and a project-specific build/vite.js. There is no React or Vue: panels, the cockpit view, the detection overlay and the split-flap readouts are hand-written DOM modules in src/ui/*.js and top-level files like src/cockpitMath.js and src/renderGovernor.js.

Visual "sensor" looks (CRT, NVG, FLIR, Noir) are post-processing effects over the normal globe (src/bloom.js, src/ui/effects.js). Satellites are propagated client-side with satellite.js, live camera streams play through hls.js, and GRIB weather data is decoded in the browser by @meri-imperiumi/eccodes-wasm. Software-defined radio support comes from @jtarrio/webrtlsdr, and vector tiles are parsed with @mapbox/vector-tile and pbf.

Backend & APIs

The backend is a set of small Node.js modules under server/providers/ (live.js, space.js, terrain.js, traffic.js, firms.js, gbfs.js, cctv.js, radio.js, overpass.js, openai.js, …). Each forwards requests to one upstream source, normalises the payload and keeps credentials on the machine. According to the README the server binds to localhost, and Provider Settings only answers requests from the same machine.

Voice control uses an OpenAI realtime session (src/voice/realtimeController.js, src/voice/realtimeBackend.js) that maps spoken intents to globe actions defined in src/voice/gevActions.js and src/voice/commands.js. src/voice/voiceCost.js tracks the cost of each session.

Data & persistence

The repository has no database. State comes from four places:

  • live upstream feeds fetched through the provider proxies,
  • bundled static data (config/cctv_sources.*.json, public/models, Natural Earth and neighbourhood polygons under src/data),
  • share links that serialize camera, style, layers and a tracked target into the URL (src/sharelink.js),
  • a local .env (or pinokio/ENVIRONMENT) holding optional provider keys, made owner-only before any secret is written to it.

DATA_SOURCES.md and THIRD_PARTY_NOTICES.md document where each feed comes from and its terms.

Build, test & deploy

  • npm run dev / npm run build run Vite (vite.config.js).
  • npm test runs scripts/run-unit-tests.mjs, which executes the colocated *.test.mjs files next to their modules in src/.
  • npm run check:boundaries runs scripts/check-import-directions.mjs and scripts/check-package-boundaries.mjs against scripts/package-boundaries.json.
  • The scripts/qa-*.mjs files use Puppeteer to drive a real browser through features such as traffic, transit, weather and voice routing, and write screenshots through scripts/shot-sink.mjs.
  • A single GitHub Actions workflow, ci.yml, runs in .github/workflows.

No hosting configuration (Vercel, Fly, Docker) is visible in the repository. The project is meant to be run locally.

Self-hosting notes

Two install paths are documented: a one-click Pinokio (opens in a new tab) launcher (pinokio/*.js, scripts/pinokio-*.mjs) and a terminal path using npm ci, npm run doctor and npm run dev on Node.js 24 or 26 (engines in package.json). Keys are added in the app's POWER UP panel instead of by editing files. On macOS, scripts/dev-fresh.sh can read keys from the Keychain.

The GitHub license field reads NOASSERTION, while package.json declares MIT. Check LICENSE and DATA_SOURCES.md before reusing code or bundled data; the README says the bundled Nepal flood data is non-commercial.

What to copy (and what not to)

What to copy

  • One proxy module per upstream provider behind a localhost server. The client never sees secrets, and each source can be swapped or removed independently.
  • Using package.json exports plus a boundary checker script as enforced module architecture in a framework-free codebase.
  • Small, pure "policy" modules with a sibling *.test.mjs, which keep logic testable apart from the WebGL renderer.

What not to copy

  • A single package with over a hundred export subpaths gets hard to navigate. A workspace split (client, providers, tooling) would make ownership clearer once a team grows.
  • The large set of ad hoc qa-*.mjs scripts works for a solo maintainer, but a shared test runner and fixture layer would cut duplication.

Sources & repo audit

Audited
Sep 25, 2026
Commit
b210ab0
License
NOASSERTION

Independent analysis of repository at github.com/bilawalsidhu/gods-eye-view. Spotted an inaccuracy? Use the claim form to request a correction.

Maintainer? Add the architecture badge to your README
architecture: stackitfast
[![Architecture on STACK IT FAST](https://stackitfast.com/badge/gods-eye-view.svg)](https://stackitfast.com/project/gods-eye-view)
Use this stack

Scaffold it with your agent

Paste this prompt into Claude Code, Cursor, Windsurf or AGY to start a project with God's Eye View's architecture.

  1. 1Copy the promptThe full markdown spec, with every layer and decision.
  2. 2Open your AI toolClaude Code, Cursor, Windsurf or Copilot, in a new repo.
  3. 3Paste and scaffoldUse it as the first instruction; review before you ship.
use-this-stack.md · 59 lines · 6.7 KB
# MISSION: Scaffold "God's Eye View" Production Architecture
You are an expert Senior Staff Software Architect and Full-Stack Engineer. Your mission is to scaffold and implement a production-grade, highly reliable, and modular codebase following the proven architecture of **God's Eye View**.
---
## 1. PROJECT SPECIFICATIONS & BENCHMARK
- **Reference Architecture**: God's Eye View
- **What It Does**: God's Eye View is a browser-based, spy-satellite style 3D globe that plots live public data (aircraft, ships, satellites, earthquakes, weather, public cameras) on Cesium, with optional hands-free voice control through a realtime AI agent.
- **Domain & Category**: Browser-Based 3D Geospatial Intelligence Simulator
- **Production Scale**: Solo / 2-5 people
- **Development Mode**: HYBRID
- **Architectural Rationale**: All rendering runs client-side on Cesium with plain JavaScript modules, while a thin localhost Node proxy per data provider keeps keys out of the browser, so the whole product installs and runs locally with no hosted backend or database.
- **Live Website Reference**: https://maptheworld.ai/
- **Source Repository**: https://github.com/bilawalsidhu/gods-eye-view
---
## 2. PRODUCTION TECH STACK
- **Full Stack Array**: JavaScript, Cesium, Vite, Node.js, OpenAI, WebAssembly, Puppeteer, GitHub Actions
- **Primary Language(s)**: JavaScript, CSS, HTML, Shell
- **License of the reference repo**: NOASSERTION
- **Frontend**: JavaScript — Plain ES modules (no UI framework) for the globe, HUD, layers and panels under src/; Cesium — 3D globe engine rendering terrain, imagery, photorealistic 3D tiles and every live entity layer; Vite — Dev server and production bundler, extended by vite-plugin-cesium and a custom build/vite.js; WebAssembly — eccodes-wasm decodes GRIB weather forecasts in the browser for the wind and weather layers
- **Backend & APIs**: Node.js — Local provider proxies under server/providers keep API keys off the client and normalise feeds
- **Infrastructure & deploy**: Puppeteer — Drives the headless-browser QA scripts in scripts/qa-*.mjs that screenshot and probe features; GitHub Actions — Single ci.yml workflow running formatting, boundary checks and unit tests; Pinokio — One-click local installer/launcher scripts for Windows, macOS and Linux
- **Tooling, testing & ops**: OpenAI — Realtime voice agent that maps spoken commands to globe actions (src/voice, server/providers/openai)
---
## 3. KEY ARCHITECTURAL DECISIONS (audited from https://github.com/bilawalsidhu/gods-eye-view @ b210ab0)
1. **A browser app with a thin local Node proxy instead of a hosted backend**: The globe runs entirely in the browser (index.html, src/main.js), while server/providers/*.js expose per-source proxies (live flights, space, traffic, CCTV, radio, OpenAI) bound to localhost, so keys stay in a local .env and there is no server-side database.
2. **Every data source is a separate layer module behind package exports**: package.json "exports" maps each feed to its own module (./layers/flights, ./layers/vessels, ./layers/satellites, ./layers/cctv, …) and scripts/check-package-boundaries.mjs plus check-import-directions.mjs enforce the import rules between them.
3. **Keyless by default, provider keys as in-app upgrades**: Esri imagery, keyless terrain and public feeds work without accounts; Cesium ion, Google Photorealistic 3D Tiles and OpenAI keys are added from the in-app POWER UP panel (src/keySetup.js, server/standalone/key-setup) and written to an owner-only local .env.
4. **Colocated node:test unit tests plus Puppeteer QA scripts**: Logic lives in small policy modules (e.g. src/cockpitVisionPolicy.js) with a sibling *.test.mjs run by scripts/run-unit-tests.mjs, while dozens of scripts/qa-*.mjs Puppeteer scripts exercise rendering, traffic, transit and voice routing in a real browser.
5. **No UI framework; hand-written DOM modules under src/ui**: Panels, HUD, cockpit and director tooling are plain JavaScript modules (src/ui/*.js, src/hud.js) exported through package.json, keeping the dependency list to about ten runtime packages centred on cesium.
---
## 4. NON-NEGOTIABLE ARCHITECTURAL GUARDRAILS
1. **Monorepo & Modular Separation**:
   - Structure as a Turborepo monorepo with strict package boundaries:
     - `apps/web`: Application UI, routing, layouts, and server endpoints.
     - `packages/ui`: Shared design tokens, CSS variables, and Radix UI primitive components.
     - `packages/db`: Database schemas, client singleton, declarative migrations, and seed scripts.
     - `packages/config`: Shared TypeScript, ESLint, and build configurations.
2. **Strict Type Safety & Zero `any` Policy**:
   - Enable `strict: true`, `noImplicitAny: true`, and `strictNullChecks: true`.
   - Validate ALL external inputs, API request bodies, and query parameters with **Zod** schemas before execution.
3. **Frontend & Rendering Guidelines**:
   - Utilize Vite 6 with TanStack Router for fully type-safe routing. Manage server state and caching via TanStack Query v5 with optimistic UI updates.
4. **Design System & Aesthetics**:
   - Keep every color, radius, shadow and font in a single token file (CSS variables) and consume tokens everywhere; never hardcode hex values in components.
   - Prefer crisp 1px borders and one subtle shadow scale over blurry default shadows. Pair one sans-serif for body/headings with one monospace for tags, badges, metrics, and code.
5. **Data Layer & Reliability**:
   - Write declarative schema definitions with foreign keys, composite indexes on queried filters, and automated timestamp triggers.
   - Use connection pooling and prepared statements for serverless database execution.
---
## 5. STEP-BY-STEP SCAFFOLDING ROADMAP
- **Phase 1: Workspace & Root Config**: Initialize package manager, monorepo configuration (`turbo.json`, `tsconfig.base.json`, `package.json`).
- **Phase 2: Database Schema & Client**: Set up the data layer: client, connection pool, models, and migration scripts.
- **Phase 3: Design Tokens & UI Primitives**: Build accessible `Button`, `Input`, `Card`, `Badge`, and layout wrappers inside `packages/ui`.
- **Phase 4: Core Application Routes & Handlers**: Implement primary authentication, user session handling, and application routes.
- **Phase 5: Quality Assurance & Build Verification**: Run `tsc --noEmit`, ESLint, Prettier, and smoke test suites to ensure zero compilation or runtime errors.
---
## 6. EXECUTION INSTRUCTIONS
1. Review all specifications, architectural guardrails, and stack choices above.
2. Present the full monorepo directory tree structure.
3. Systematically generate the complete, production-ready codebase according to the 5-phase roadmap above — starting with the root workspace setup, followed by the database schema, UI design system package, and full-stack application routes until the repository is fully scaffolded and ready to run.
Scaffolded something with this prompt?
Would you pick this stack for a browser-based 3d geospatial intelligence simulator project?

Frequently asked about God's Eye View

What is God's Eye View built with?

God's Eye View is a plain JavaScript browser app built on the Cesium 3D globe engine and bundled with Vite. A small local Node.js proxy layer under server/providers fetches live feeds, and an optional OpenAI realtime voice agent controls the globe.

Does God's Eye View need a backend or database?

No database is used. The only server-side code is a set of localhost-bound Node.js provider proxies that forward requests to public data sources and keep API keys in a local .env file.

Can I run God's Eye View without API keys?

Yes. It starts with Esri satellite imagery, keyless terrain and public flight, satellite, earthquake and camera feeds. Cesium ion, Google Photorealistic 3D Tiles and OpenAI keys are optional upgrades added in the app.

How do I self-host God's Eye View?

Clone the repository, use Node.js 24 or 26, run npm ci, npm run doctor and npm run dev, then open localhost:4173. A Pinokio launcher offers a one-click install on Windows, macOS and Linux.

One email a month: new deep dives and stack trends

New source-audited architectures, head-to-head comparisons and the monthly stack report. No spam, unsubscribe anytime.

use-this-stack.md