diff --git a/.gitignore b/.gitignore
index 27d943d..b8448b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
build/
*.o
*~
+cpp/flake.nix
+cpp/flake.lock
+cpp/.direnv/*
diff --git a/GPN24/120px-GPN24.png b/GPN24/120px-GPN24.png
new file mode 100644
index 0000000..601a2b6
Binary files /dev/null and b/GPN24/120px-GPN24.png differ
diff --git a/GPN24/120px-GPN24_.png b/GPN24/120px-GPN24_.png
new file mode 100644
index 0000000..7960c47
Binary files /dev/null and b/GPN24/120px-GPN24_.png differ
diff --git a/GPN24/120px-GPN24_wifi0.png b/GPN24/120px-GPN24_wifi0.png
new file mode 100644
index 0000000..c6d3679
Binary files /dev/null and b/GPN24/120px-GPN24_wifi0.png differ
diff --git a/GPN24/120px-GPN24_wifi1.png b/GPN24/120px-GPN24_wifi1.png
new file mode 100644
index 0000000..3aae552
Binary files /dev/null and b/GPN24/120px-GPN24_wifi1.png differ
diff --git a/GPN24/120px-GPN24_wifi2.png b/GPN24/120px-GPN24_wifi2.png
new file mode 100644
index 0000000..fac9b2d
Binary files /dev/null and b/GPN24/120px-GPN24_wifi2.png differ
diff --git a/GPN24/120px-GPN24_wifi3.png b/GPN24/120px-GPN24_wifi3.png
new file mode 100644
index 0000000..f9e58f4
Binary files /dev/null and b/GPN24/120px-GPN24_wifi3.png differ
diff --git a/GPN24/300px-GPN24.png b/GPN24/300px-GPN24.png
new file mode 100644
index 0000000..051db97
Binary files /dev/null and b/GPN24/300px-GPN24.png differ
diff --git a/GPN24/300px-GPN24_g.png b/GPN24/300px-GPN24_g.png
new file mode 100644
index 0000000..1a8bcf5
--- /dev/null
+++ b/GPN24/300px-GPN24_g.png
@@ -0,0 +1,62 @@
+
+
+
+
diff --git a/GPN24/300px-GPN24_g.svg b/GPN24/300px-GPN24_g.svg
new file mode 100644
index 0000000..219dc69
--- /dev/null
+++ b/GPN24/300px-GPN24_g.svg
@@ -0,0 +1,65 @@
+
+
+
+
diff --git a/GPN24/300px-GPN24_gray.png b/GPN24/300px-GPN24_gray.png
new file mode 100644
index 0000000..5260033
Binary files /dev/null and b/GPN24/300px-GPN24_gray.png differ
diff --git a/GPN24/300px-GPN24_gray2.png b/GPN24/300px-GPN24_gray2.png
new file mode 100644
index 0000000..eeddc67
--- /dev/null
+++ b/GPN24/300px-GPN24_gray2.png
@@ -0,0 +1,71 @@
+
+
+
+
diff --git a/GPN24/300px-GPN24_gray3.png b/GPN24/300px-GPN24_gray3.png
new file mode 100644
index 0000000..c56ba50
--- /dev/null
+++ b/GPN24/300px-GPN24_gray3.png
@@ -0,0 +1,99 @@
+
+
+
+
diff --git a/GPN24/300px-GPN24_gray3.svg b/GPN24/300px-GPN24_gray3.svg
new file mode 100644
index 0000000..3fdb958
--- /dev/null
+++ b/GPN24/300px-GPN24_gray3.svg
@@ -0,0 +1,102 @@
+
+
+
+
diff --git a/GPN24/300px-GPN24_gray4.svg b/GPN24/300px-GPN24_gray4.svg
new file mode 100644
index 0000000..c1983eb
--- /dev/null
+++ b/GPN24/300px-GPN24_gray4.svg
@@ -0,0 +1,135 @@
+
+
+
+
diff --git a/cpp/.envrc b/cpp/.envrc
new file mode 100644
index 0000000..3550a30
--- /dev/null
+++ b/cpp/.envrc
@@ -0,0 +1 @@
+use flake
diff --git a/cpp/Makefile b/cpp/Makefile
new file mode 100644
index 0000000..eb3e48f
--- /dev/null
+++ b/cpp/Makefile
@@ -0,0 +1,23 @@
+BUILD_DIR := build
+
+.PHONY: all configure build clean run
+
+all: build
+
+configure:
+ cmake -S . -B $(BUILD_DIR) -G Ninja \
+ -DCMAKE_BUILD_TYPE=Debug \
+ -DCMAKE_C_COMPILER=clang \
+ -DCMAKE_CXX_COMPILER=clang++
+ -DBUILD_CLI_VIS=1
+
+build: configure
+ cmake --build $(BUILD_DIR)
+ @# Symlink compile_commands.json to root so clangd picks it up
+ @ln -sf $(BUILD_DIR)/compile_commands.json compile_commands.json
+
+run: build
+ ./$(BUILD_DIR)/myapp
+
+clean:
+ rm -rf $(BUILD_DIR) compile_commands.json
diff --git a/cpp/flake.nix b/cpp/flake.nix
new file mode 100644
index 0000000..71ce971
--- /dev/null
+++ b/cpp/flake.nix
@@ -0,0 +1,28 @@
+{
+ description = "C++ dev shell with CMake and clangd";
+
+ inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+
+ outputs = { self, nixpkgs }:
+ let
+ systems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+ forAll = f: nixpkgs.lib.genAttrs systems (s: f nixpkgs.legacyPackages.${s});
+ in {
+ devShells = forAll (pkgs: {
+ default = pkgs.mkShell {
+ packages = with pkgs; [
+ cmake
+ clang-tools # provides clangd, clang-format, clang-tidy
+ llvmPackages.clang
+ ninja # optional but pairs well with cmake
+ catch2 # testing framework
+ ];
+
+ shellHook = ''
+ export CC=clang
+ export CXX=clang++
+ '';
+ };
+ });
+ };
+}
diff --git a/Specification.rst b/examples/v1/Specification.rst
similarity index 100%
rename from Specification.rst
rename to examples/v1/Specification.rst
diff --git a/examples/v1/franzwerk.bin b/examples/v1/franzwerk.bin
new file mode 100644
index 0000000..f7d4a9b
Binary files /dev/null and b/examples/v1/franzwerk.bin differ
diff --git a/examples/v1/gpn24.bin b/examples/v1/gpn24.bin
new file mode 100644
index 0000000..57117a0
Binary files /dev/null and b/examples/v1/gpn24.bin differ
diff --git a/examples/v1/template.bin b/examples/v1/template.bin
new file mode 100644
index 0000000..4f32e36
Binary files /dev/null and b/examples/v1/template.bin differ
diff --git a/examples/v1/time.bin b/examples/v1/time.bin
new file mode 100644
index 0000000..b038503
Binary files /dev/null and b/examples/v1/time.bin differ
diff --git a/examples/v1/time_nice.bin b/examples/v1/time_nice.bin
new file mode 100644
index 0000000..902709d
Binary files /dev/null and b/examples/v1/time_nice.bin differ
diff --git a/ts-editor/.gitignore b/ts-editor/.gitignore
new file mode 100644
index 0000000..bceeac2
--- /dev/null
+++ b/ts-editor/.gitignore
@@ -0,0 +1,37 @@
+# dependencies (bun install)
+node_modules
+
+# output
+out
+dist
+public
+*.tgz
+
+# code coverage
+coverage
+*.lcov
+
+# logs
+logs
+_.log
+report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
+
+# dotenv environment variable files
+.env
+.env.development.local
+.env.test.local
+.env.production.local
+.env.local
+
+# caches
+.eslintcache
+.cache
+*.tsbuildinfo
+
+# IntelliJ based IDEs
+.idea
+
+# Finder (MacOS) folder config
+.DS_Store
+.claude/
+.claude/settings.local.json
diff --git a/ts-editor/CLAUDE.md b/ts-editor/CLAUDE.md
new file mode 100644
index 0000000..764c1dd
--- /dev/null
+++ b/ts-editor/CLAUDE.md
@@ -0,0 +1,106 @@
+
+Default to using Bun instead of Node.js.
+
+- Use `bun ` instead of `node ` or `ts-node `
+- Use `bun test` instead of `jest` or `vitest`
+- Use `bun build ` instead of `webpack` or `esbuild`
+- Use `bun install` instead of `npm install` or `yarn install` or `pnpm install`
+- Use `bun run
+