Statix
personal blog
Install / Use
/learn @julienlargetpiet/StatixREADME
👉 Quickstart — Deploy Statix in seconds
👉 CLI — Command Line Interface
👉 NeoVim — WorkFlow with NeoVim
👉 Example — Running Statix Blog Example
Presentation
<details> <summary><b>📝 Blog</b> — screenshots (Dark Theme / Default)</summary> <br/> <p align="center"> <img src="presentation_pics/blog/cap0.webp" width="260" /> <img src="presentation_pics/blog/cap1.webp" width="260" /> <img src="presentation_pics/blog/cap2.webp" width="260" /> </p> <p align="center"> <img src="presentation_pics/blog/cap3.webp" width="260" /> <img src="presentation_pics/blog/cap4.webp" width="260" /> <img src="presentation_pics/blog/cap5.webp" width="260" /> </p> <p align="center"> <img src="presentation_pics/blog/cap6.webp" width="260" /> <img src="presentation_pics/blog/cap7.webp" width="260" /> <img src="presentation_pics/blog/cap8.webp" width="260" /> </p> <p align="center"> <img src="presentation_pics/blog/cap9.webp" width="260" /> </p> </details> <details> <summary><b>Some Default Themes & Selection</b> — screenshots</summary> <br/> <p align="center"> <img src="presentation_pics/themes/theme0.webp" width="260" /> <img src="presentation_pics/themes/theme1.webp" width="260" /> </p> <p align="center"> <img src="presentation_pics/themes/theme2.webp" width="260" /> <img src="presentation_pics/themes/theme3.webp" width="260" /> </p> </details> <details> <summary><b>✨ Shiny</b> — screenshots</summary> <br/> <p align="center"> <img src="presentation_pics/shiny/caps0.webp" width="260" /> <img src="presentation_pics/shiny/caps1.webp" width="260" /> </p> <p align="center"> <img src="presentation_pics/shiny/caps3.webp" width="260" /> <img src="presentation_pics/shiny/caps4.webp" width="260" /> </p> </details>Statix — Deterministic Static Publishing with Infrastructure-Aware Analytics
Philosophy
Statix is built around a simple idea:
Publishing should be deterministic, atomic, and observable.
Modern blog platforms often mix:
- runtime rendering
- partial deployments
- third-party tracking
- opaque analytics pipelines
Statix deliberately avoids that.
1️⃣ Deterministic Builds
Every build produces a fully isolated, immutable output.
- No partial states
- No in-place mutation
- No runtime rendering
- No dependency on application availability
A build either succeeds and is promoted — or it does not exist.
Production never sees intermediate artifacts.
2️⃣ Atomic Promotion
Generated output is promoted to production only after full success.
This guarantees:
- No broken deploy windows
- No half-built pages
- No inconsistent state
- No race conditions between content and serving
Statix treats publishing as a controlled state transition, not a file overwrite.
3️⃣ Clear Separation of Concerns
Statix separates responsibilities cleanly:
- Go admin backend → content orchestration & build control
- NGINX → static file serving
- MySQL/MariaDB → structured content storage
- R Shiny module (optional) → infrastructure-level analytics
Each component has a single responsibility.
4️⃣ Privacy-Respecting Analytics
The optional analytics module is:
- Log-based
- Server-side
- Infrastructure-aware
- JS-free
- Cookie-free
Instead of tracking users, Statix analyzes:
- Request behavior
- ASN infrastructure
- Bot patterns
- Median read-time estimation (log-derived)
Analytics are derived from server logs — not client-side surveillance.
5️⃣ Infrastructure Awareness
Statix does not treat all traffic equally.
It can distinguish:
- Residential ISP traffic
- Cloud / hosting providers
- Data center infrastructure
- Suspicious behavioral patterns
This allows infrastructure-level filtering and realistic engagement analysis.
6️⃣ First-Class Writing & Reading Experience
Statix ships with prebuilt authoring support designed for frictionless content creation.
Writers are not forced to fight tooling.
Included out of the box:
- CodeMirror 6 → modern, extensible in-browser editor
- KaTeX → fast, deterministic LaTeX math rendering
- Prism.js → zero-runtime syntax highlighting
This enables:
- Structured article writing
- Code Language awareness
- Mathematical typesetting without client-side heavy engines
- Consistent, static-safe rendering
All rendering is deterministic and build-time resolved.
There is no runtime interpretation layer.
There is no client-side compilation step.
You can also preview your articles in the editing window.
The output remains static, immutable, and production-safe.
Statix does not compromise build guarantees to support rich content.
It integrates expressive tooling — without sacrificing determinism.
7️⃣ Personalization — Without Compromise
Statix allows visual customization without breaking determinism.
Themes and Fonts are prebuilt, curated, and fully versioned.
Switching a theme is an atomic state transition — not a file mutation.
- No in-place CSS edits
- No partial writes
- No runtime rendering
- No rebuild required
A theme change is promoted the same way content is:
Deterministically. Atomically. Safely.
Express identity freely —
without sacrificing infrastructure integrity.
Architecture Overview
Publishing Pipeline
Editor / Admin
↓
Go Admin Backend (127.0.0.1:8080)
↓
Atomic Build Engine
↓
Isolated Immutable Output (dist/)
↓
Promotion to Production
↓
NGINX Static Serving
↓
End Users
Key properties:
- Static output only
- No runtime page rendering
- NGINX serves files directly
- Admin backend never exposed publicly
- Promotion replaces state atomically
Analytics Pipeline (Optional Module)
NGINX access.log
↓
R Shiny Log Analyzer
↓
GeoLite2 (ASN + City)
↓
Infrastructure Classification
↓
Behavioral Heuristics
↓
Engagement Metrics (Median Read Time)
↓
Interactive Dashboard
Key properties:
- No client-side tracking
- No third-party analytics
- ASN-based traffic classification
- Bot filtering via UA + behavior + infrastructure
- Engagement estimated from inter-request deltas
What Statix Is
- Deterministic static publishing engine
- Production-first deployment model
- Infrastructure-aware analytics system
- Self-hosted and transparent
What Statix Is Not
- A dynamic CMS
- A SaaS blogging platform
- A JavaScript-based tracking system
- A marketing analytics suite
Statix prioritizes clarity, control, and system-level correctness over feature sprawl.
Statix (Go) — Production Deployment Guide
NGINX + MySQL/MariaDB + systemd
Statix provides a build engine that operates in either localized or global mode. In localized mode, each page set or instance executes its build process independently. In global mode, a centralized engine orchestrates builds across multiple page sets or environments.
Builds are atomic. Each generation produces an isolated, immutable output that is promoted to production only upon successful completion. No partial or intermediate state is ever exposed.
Architecture:
- Go admin backend → 127.0.0.1:8080
- NGINX reverse proxy
- MySQL or MariaDB database
- Static files served from /var/www/go_blog/dist
- systemd-managed service
- Dedicated non-root system user (goblog)
Domain placeholder used in this guide:
example.com
Replace it with your real domain.
Or folow the Quickstart script
QUICKSTART
$ sudo apt update
$ sudo apt install git
$ git clone https://github.com/julienlargetpiet/statix
$ cd statix
$ bash quickstart.sh
Remove
$ bash uninstall.sh
1️⃣ Prerequisites
Server: Debian / Ubuntu
Privileges: sudo
Install required packages:
sudo apt update
sudo apt install -y nginx mysql-server
If using MariaDB:
sudo apt install -y mariadb-server
Install Go (manual):
wget https://go.dev/dl/go1.23.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.23.0.linux-amd64.tar.gz
/usr/local/go/bin/go version
2️⃣ Create Dedicated System User
sudo useradd -r -s /bin/false goblog
3️⃣ Clone Project Directly to Production Path
sudo mkdir -p /var/www
sudo chown -R goblog:goblog /var/www
sudo -u goblog git clone https://github.com/julienlargetpiet/blog /var/www/go_blog
cd /var/www/go_blog
The project must live directly inside:
/var/www/go_blog
4️⃣ Build Production Binary
From the repo root:
cd /var/www/go_blog
sudo -u goblog /usr/local/go/bin/go build -buildvcs=false -o go_blog_admin ./cmd/admin
Binary location:
/var/www/go_blog/go_blog_admin
5️⃣ Set Correct Linux Permissions
Ownership:
sudo chown -R goblog:goblog /var/www/go_blog
Directories must be traversable by nginx:
sudo find /var/www/go_blog -type d -exec chmod 755 {} \;
Files must be readable by nginx:
sudo find /var/www/go_blog -type f -exec chmod 644 {} \;
Binary must remain executable:
sudo chmod 755 /var/www/go_blog/go_blog_admin
Final permission model:
- Owner: goblog
- nginx: read-only
- No 777 anywhere
6️⃣ Database Setup (MySQL or MariaDB)
Login:
sudo mysql -u root -p
Create database:
CREATE DATABASE go_blog;
Create application user:
CREATE USER 'blog_user'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON go_blog.* TO 'blog_user'@'localhost';
FLUSH PRIVILEGES;
(Optional) restricted backup user:
CREATE USER 'goblog_backup'@'localhost' IDENTIFIED BY 'strong_password';
GRANT SELECT, SHOW VIEW, TRIGGE
Related Skills
node-connect
347.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
108.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
347.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
347.2kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
