# Global Consciousness Project — Self-Hosted A live network-variance tracker inspired by the [Global Consciousness Project](https://global-mind.org). Distributed "egg" containers contribute random numbers; the server runs statistical analysis and displays a colored dot. ## Architecture ``` Egg containers (anyone can run) │ POST /api/data (one 200-bit trial per second) ▼ Server (FastAPI + SQLite) │ runs Stouffer Z network variance analysis every 60 s ▼ Website → animated dot + history chart + embeddable iframe ``` ## Quick start — run the server ```bash git clone cd gcp docker compose up -d ``` The site is now at **http://localhost:8000**. To expose it publicly, put it behind a reverse proxy (nginx, Caddy) or deploy to any VPS / cloud service. ## Contribute an egg Anyone can run an egg — one Docker command: ```bash docker run -d --restart unless-stopped \ -e SERVER_URL=https://your-domain.com \ -v gcp_egg_data:/data \ git.hexadual.io/rocobo/gcp-dot-egg:latest ``` The egg: - Reads 200-bit trials from the OS hardware-entropy pool (`os.urandom`) once per second - Sends the trial count (0–200) to the server - Persists its ID across restarts via `/data/egg_id` ## Images (built automatically by Gitea Actions) Every push to `main` builds and publishes both images to the Gitea container registry: | Image | Pull command | |-------|-------------| | Server | `docker pull git.hexadual.io/rocobo/gcp-dot-server:latest` | | Egg | `docker pull git.hexadual.io/rocobo/gcp-dot-egg:latest` | ## How the analysis works Every 60 seconds the server analyses the past hour of data: 1. **Normalise** each trial to a Z-score: `z = (trial − 100) / √50` (expected mean = 100, variance = 50 for Binomial(200, 0.5)) 2. **Stouffer Z** per second across all active eggs: `S_t = Σzᵢₜ / √N` 3. **Network variance**: `V = Σ S_t²` — follows χ²(T) under H₀ 4. **Index** = lower-tail CDF × 100: - **High index (> 95)** → small variance → eggs are more coherent than chance → **blue** - **Low index (< 5)** → large variance → eggs are noisier than chance → **red** - **Middle (40–90)** → normal random behavior → **green** ### Color table | Color | Index | Meaning | |--------|-----------|---------| | Blue | > 95% | Significantly small variance — deep coherence | | Cyan | 90–95% | Small variance — probable coherence | | Green | 40–90% | Normal random behavior | | Yellow | 10–40% | Slightly elevated variance | | Orange | 5–10% | Strongly elevated variance | | Red | < 5% | Significantly large variance | ## Embed the dot ```html ``` ## API | Endpoint | Description | |----------|-------------| | `POST /api/data` | Submit a trial `{egg_id, timestamp, trial}` | | `GET /api/status` | Latest analysis result | | `GET /api/history?limit=60` | Last N analysis records | | `GET /api/eggs` | Eggs active in the last 2 minutes | ## Environment variables ### Server | Variable | Default | Description | |----------|---------|-------------| | `DB_PATH` | `/data/gcp.db` | SQLite database path | ### Egg | Variable | Default | Description | |----------|---------|-------------| | `SERVER_URL` | `http://localhost:8000` | Server to send data to | | `EGG_ID` | auto-generated | Override the egg's identifier |