From 68552cac15393be9982c76a8359356a7cf1125ee Mon Sep 17 00:00:00 2001 From: m Date: Thu, 2 Apr 2026 14:55:14 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20rename=20zensebels.de=20=E2=86=92=20zens?= =?UTF-8?q?iebels.de=20(Siebels=20not=20Sebels)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/CLAUDE.md | 79 ++++++++ .claude/agents/coder.md | 14 ++ .claude/agents/researcher.md | 14 ++ .claude/agents/reviewer.md | 14 ++ .claude/skills/mai-clone | 1 + .claude/skills/mai-coder | 1 + .claude/skills/mai-commit | 1 + .claude/skills/mai-consultant | 1 + .claude/skills/mai-daily | 1 + .claude/skills/mai-debrief | 1 + .claude/skills/mai-enemy | 1 + .claude/skills/mai-excalidraw | 1 + .claude/skills/mai-fixer | 1 + .claude/skills/mai-gitster | 1 + .claude/skills/mai-head | 1 + .claude/skills/mai-init | 1 + .claude/skills/mai-inventor | 1 + .claude/skills/mai-lead | 1 + .claude/skills/mai-maister | 1 + .claude/skills/mai-member | 1 + .claude/skills/mai-researcher | 1 + .claude/skills/mai-think | 1 + .claude/skills/mai-web | 1 + .m/.gitignore | 4 + .m/config.yaml | 171 ++++++++++++++++++ .mcp.json | 22 +++ .worktrees/knuth | 1 + AGENTS.md | 1 + .../index.html | 2 +- .../{zensebels.de => zensiebels.de}/site.yaml | 2 +- 30 files changed, 341 insertions(+), 2 deletions(-) create mode 100644 .claude/CLAUDE.md create mode 100644 .claude/agents/coder.md create mode 100644 .claude/agents/researcher.md create mode 100644 .claude/agents/reviewer.md create mode 120000 .claude/skills/mai-clone create mode 120000 .claude/skills/mai-coder create mode 120000 .claude/skills/mai-commit create mode 120000 .claude/skills/mai-consultant create mode 120000 .claude/skills/mai-daily create mode 120000 .claude/skills/mai-debrief create mode 120000 .claude/skills/mai-enemy create mode 120000 .claude/skills/mai-excalidraw create mode 120000 .claude/skills/mai-fixer create mode 120000 .claude/skills/mai-gitster create mode 120000 .claude/skills/mai-head create mode 120000 .claude/skills/mai-init create mode 120000 .claude/skills/mai-inventor create mode 120000 .claude/skills/mai-lead create mode 120000 .claude/skills/mai-maister create mode 120000 .claude/skills/mai-member create mode 120000 .claude/skills/mai-researcher create mode 120000 .claude/skills/mai-think create mode 120000 .claude/skills/mai-web create mode 100644 .m/.gitignore create mode 100644 .m/config.yaml create mode 100644 .mcp.json create mode 160000 .worktrees/knuth create mode 120000 AGENTS.md rename sites/{zensebels.de => zensiebels.de}/index.html (99%) rename sites/{zensebels.de => zensiebels.de}/site.yaml (77%) diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md new file mode 100644 index 0000000..d2d9d4f --- /dev/null +++ b/.claude/CLAUDE.md @@ -0,0 +1,79 @@ +# onepager Project Instructions + +## Project Overview + +Mono-repo for 57+ vanity domain onepager sites. Single Caddy container with bash template system and host-based routing. Most domains are creative AI/KI wordplay (kAInco, kIlemma, orAKIl, etc.). + +**Deploy:** Push to main -> Dokploy auto-deploys. All domains must be configured in Dokploy. + +## Architecture + +``` +sites// # One folder per domain + site.yaml # Config: domain, template, vars + index.html # Content (rendered or hand-crafted for custom) + assets/ # Optional images, fonts +templates/ # 6 HTML templates + base.html + base.html # Shared skeleton (CSS includes, meta tags) + person-dark.html # Professional profile, dark theme + person-light.html # Professional profile, light/cream theme + product-dark.html # Product/service landing, dark + editorial.html # Long-form manifesto/editorial + fun.html # Playful/personal pages + minimal.html # Bare-bones single section +shared/ + css/ # variables.css, responsive.css, animations.css, noise.css + fonts.html # Google Fonts includes + impressum.js # Shared impressum overlay +build/ # Generated output (gitignored) +Caddyfile # Generated by generate-caddyfile.sh (committed) +``` + +### Build Pipeline + +1. `generate-caddyfile.sh` reads all `sites/*/site.yaml` -> generates Caddyfile with host matchers +2. `build.sh` orchestrates: generates Caddyfile, renders all sites, copies shared assets to `build/` +3. `render.sh` takes `site.yaml` + template -> outputs rendered HTML (bash/yq/awk templating) +4. Docker: Alpine builder runs `build.sh`, then Caddy serves from `/srv/` + +### Template System + +Templates use `{{placeholder}}` markers. `render.sh` reads vars from `site.yaml` and substitutes. Templates define CSS between `{{template_css_start}}`/`{{template_css_end}}` and body between `{{template_body_start}}`/`{{template_body_end}}`. Base template assembles shared CSS + template CSS + body. + +Available vars: `title`, `description`, `lang`, `name`, `role`, `initials`, `tagline`, `accent`, `accent_light`, `font_primary`, `font_secondary`, `emoji`, `cta_text`, `cta_href`, `tags_html`, `sections_html`, `content_html`, `domain`, `year`. + +### Custom Sites + +Sites with `template: custom` skip rendering entirely -- their `index.html` is copied as-is. Many sites use custom for complex interactive content (e.g., orakil.de oracle, ichbinotto.de agent profile). + +## Code Style & Conventions + +- **Shell scripts**: bash, `set -euo pipefail`, use yq for YAML parsing +- **HTML/CSS**: Inline styles in templates. Shared CSS via variables.css. Dark themes predominant. +- **Commit messages**: `feat:` for new sites, `fix:` for corrections, `refactor:` for restructuring +- **Site naming**: domain name = folder name under `sites/` +- **Language**: Default `de` (German). Sites are primarily German-language. + +## Adding a New Site + +```bash +# Templated +./add-site.sh example.de --template person-dark --name "Max Mustermann" + +# Custom +./add-site.sh example.de --template custom +# Then edit sites/example.de/index.html +``` + +After adding: build locally with `./build.sh` to verify, commit, push. + +## Deploy Trigger + +A `.deploy-trigger` file exists -- changing its content forces Dokploy rebuild even without code changes. + +## Git Strategy + +- **main** = production, auto-deploys via Dokploy +- Feature branches for multi-site changes or infrastructure work +- Direct commits to main OK for single-site additions/fixes (this is a content repo) +- Gitea repo: m/onepager diff --git a/.claude/agents/coder.md b/.claude/agents/coder.md new file mode 100644 index 0000000..400d943 --- /dev/null +++ b/.claude/agents/coder.md @@ -0,0 +1,14 @@ +# Coder Agent + +Implementation-focused agent for writing and refactoring code. + +## Instructions + +- Follow existing patterns in the codebase +- Write minimal, focused code +- Run tests after changes +- Commit incrementally with descriptive messages + +## Tools + +All tools available. diff --git a/.claude/agents/researcher.md b/.claude/agents/researcher.md new file mode 100644 index 0000000..d25b77e --- /dev/null +++ b/.claude/agents/researcher.md @@ -0,0 +1,14 @@ +# Researcher Agent + +Exploration and information gathering agent. + +## Instructions + +- Search broadly, then narrow down +- Document findings in structured format +- Cite sources and file paths +- Summarize key insights, don't dump raw data + +## Tools + +Read-only tools preferred. Use Bash only for non-destructive commands. diff --git a/.claude/agents/reviewer.md b/.claude/agents/reviewer.md new file mode 100644 index 0000000..a2af646 --- /dev/null +++ b/.claude/agents/reviewer.md @@ -0,0 +1,14 @@ +# Reviewer Agent + +Code review agent for checking quality and correctness. + +## Instructions + +- Check for bugs, security issues, and style violations +- Verify test coverage for changes +- Suggest improvements concisely +- Focus on correctness over style preferences + +## Tools + +Read-only tools. No file modifications. diff --git a/.claude/skills/mai-clone b/.claude/skills/mai-clone new file mode 120000 index 0000000..d622052 --- /dev/null +++ b/.claude/skills/mai-clone @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-clone \ No newline at end of file diff --git a/.claude/skills/mai-coder b/.claude/skills/mai-coder new file mode 120000 index 0000000..261b952 --- /dev/null +++ b/.claude/skills/mai-coder @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-coder \ No newline at end of file diff --git a/.claude/skills/mai-commit b/.claude/skills/mai-commit new file mode 120000 index 0000000..8446727 --- /dev/null +++ b/.claude/skills/mai-commit @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-commit \ No newline at end of file diff --git a/.claude/skills/mai-consultant b/.claude/skills/mai-consultant new file mode 120000 index 0000000..c336f9d --- /dev/null +++ b/.claude/skills/mai-consultant @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-consultant \ No newline at end of file diff --git a/.claude/skills/mai-daily b/.claude/skills/mai-daily new file mode 120000 index 0000000..b1ee4e1 --- /dev/null +++ b/.claude/skills/mai-daily @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-daily \ No newline at end of file diff --git a/.claude/skills/mai-debrief b/.claude/skills/mai-debrief new file mode 120000 index 0000000..9f8d783 --- /dev/null +++ b/.claude/skills/mai-debrief @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-debrief \ No newline at end of file diff --git a/.claude/skills/mai-enemy b/.claude/skills/mai-enemy new file mode 120000 index 0000000..b7847f4 --- /dev/null +++ b/.claude/skills/mai-enemy @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-enemy \ No newline at end of file diff --git a/.claude/skills/mai-excalidraw b/.claude/skills/mai-excalidraw new file mode 120000 index 0000000..8ce79cd --- /dev/null +++ b/.claude/skills/mai-excalidraw @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-excalidraw \ No newline at end of file diff --git a/.claude/skills/mai-fixer b/.claude/skills/mai-fixer new file mode 120000 index 0000000..a071909 --- /dev/null +++ b/.claude/skills/mai-fixer @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-fixer \ No newline at end of file diff --git a/.claude/skills/mai-gitster b/.claude/skills/mai-gitster new file mode 120000 index 0000000..f7edfe0 --- /dev/null +++ b/.claude/skills/mai-gitster @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-gitster \ No newline at end of file diff --git a/.claude/skills/mai-head b/.claude/skills/mai-head new file mode 120000 index 0000000..ac0e255 --- /dev/null +++ b/.claude/skills/mai-head @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-head \ No newline at end of file diff --git a/.claude/skills/mai-init b/.claude/skills/mai-init new file mode 120000 index 0000000..62fadcd --- /dev/null +++ b/.claude/skills/mai-init @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-init \ No newline at end of file diff --git a/.claude/skills/mai-inventor b/.claude/skills/mai-inventor new file mode 120000 index 0000000..488b600 --- /dev/null +++ b/.claude/skills/mai-inventor @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-inventor \ No newline at end of file diff --git a/.claude/skills/mai-lead b/.claude/skills/mai-lead new file mode 120000 index 0000000..c9fc1a4 --- /dev/null +++ b/.claude/skills/mai-lead @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-lead \ No newline at end of file diff --git a/.claude/skills/mai-maister b/.claude/skills/mai-maister new file mode 120000 index 0000000..4c3817f --- /dev/null +++ b/.claude/skills/mai-maister @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-maister \ No newline at end of file diff --git a/.claude/skills/mai-member b/.claude/skills/mai-member new file mode 120000 index 0000000..c875233 --- /dev/null +++ b/.claude/skills/mai-member @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-member \ No newline at end of file diff --git a/.claude/skills/mai-researcher b/.claude/skills/mai-researcher new file mode 120000 index 0000000..1cefb30 --- /dev/null +++ b/.claude/skills/mai-researcher @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-researcher \ No newline at end of file diff --git a/.claude/skills/mai-think b/.claude/skills/mai-think new file mode 120000 index 0000000..a8eff99 --- /dev/null +++ b/.claude/skills/mai-think @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-think \ No newline at end of file diff --git a/.claude/skills/mai-web b/.claude/skills/mai-web new file mode 120000 index 0000000..79fc5fa --- /dev/null +++ b/.claude/skills/mai-web @@ -0,0 +1 @@ +/home/m/.mai/skills/mai-web \ No newline at end of file diff --git a/.m/.gitignore b/.m/.gitignore new file mode 100644 index 0000000..1864979 --- /dev/null +++ b/.m/.gitignore @@ -0,0 +1,4 @@ +workers.json +spawn.lock +session.yaml +config.reference.yaml diff --git a/.m/config.yaml b/.m/config.yaml new file mode 100644 index 0000000..fc04717 --- /dev/null +++ b/.m/config.yaml @@ -0,0 +1,171 @@ +# Project-specific mai configuration +# Auto-generated by 'mai init' — run 'mai setup' to customize + +provider: claude +providers: + claude: + api_key: "" + model: claude-sonnet-4-20250514 + base_url: https://api.anthropic.com/v1 + ollama: + host: http://localhost:11434 + model: llama3.2 +memory: + enabled: true + backend: "" + path: "" + url: postgres://mai_memory.your-tenant-id:maiMem6034supa@100.99.98.201:6543/postgres?sslmode=disable + group_id: onepager + cache_ttl: 5m0s + auto_load: true + embedding_url: "" + embedding_model: "" +gitea: + url: https://mgit.msbls.de + repo: m/onepager + token: "" + sync: + enabled: false + interval: 0s + repos: [] + auto_queue: false +api: + api_key: "" + basic_auth: + username: "" + password: "" + public_endpoints: + - /api/health +ui: + theme: default + show_sidebar: true + animation: true + persona: true + avatar_pack: "" +worker: + names: [] + name_scheme: role + default_level: standard + auto_discard: false + max_workers: 5 + persistent: true +head: + name: "" + max_loops: 50 + infinity_mode: false +capacity: + global: + max_workers: 5 + max_heads: 3 + per_worker: + max_tasks_lifetime: 0 + max_concurrent: 1 + max_context_tokens: 0 + per_head: + max_workers: 10 + resources: + max_memory_mb: 0 + max_cpu_percent: 0 + queue: + max_pending: 100 + stale_task_days: 30 +workforce: + timeouts: + task_default: 0s + task_max: 0s + idle_before_warn: 10m0s + idle_before_kill: 30m0s + quality_check: 2m0s + context: + max_tokens_per_worker: 0 + max_tokens_global: 0 + warn_threshold: 0.8 + truncate_strategy: oldest + delegation: + strategy: skill_match + preferred_role: coder + auto_delegate: false + max_depth: 3 + allowed_roles: + - coder + - researcher + - fixer + peppy: + enabled: false + style: calm + interval: 5m0s + emoji: false + nudges: true + nudge_main: false + custom_prompt: "" + stall_threshold: 0s + restart_enabled: false + max_shifts: 0 +quality_gates: + enabled: false + checks: [] +preflight: + enabled: false + type: "" + root: "" + checks: [] +guardrails: + enabled: false + use_defaults: true + output: + coder_checks: [] + researcher_checks: [] + fixer_checks: [] + custom_checks: {} + global_checks: [] + tools: + role_rules: {} + deny_patterns: [] + allow_patterns: [] + schemas: + report_schemas: {} + deliverable_schemas: {} +modes: + yolo: false + self_improvement: true + autonomous: false + verbose: false + improve_interval: 0s + predict_interval: 0s +layouts: + head: "" + worker: "" + roles: {} +dog: + name: buddy +supabase: + url: "" + role_key: "" + anon_key: "" + schema: mai +storage: + backend: "" + postgres: + url: "" + max_conns: 0 + min_conns: 0 + max_conn_lifetime: 0s +idle: + behavior: wait + auto_hire: false + prompt: "" +git: + worktrees: + enabled: true + delete_branch: false + dir: .worktrees +phase: + enabled: false + current: "" + allowed_roles: {} +goal: "Mono-repo for 57+ vanity domain onepager sites — bash template system, Caddy routing, Dokploy deploy. Creative AI/KI-themed domains." +skills: {} +editor: nvim +log_level: info +project_detection: true +tone: professional diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 0000000..97eb151 --- /dev/null +++ b/.mcp.json @@ -0,0 +1,22 @@ +{ + "mcpServers": { + "mai": { + "type": "http", + "url": "http://100.99.98.201:8000/mcp", + "headers": { + "Authorization": "Basic ${SUPABASE_AUTH}" + } + }, + "mai-memory": { + "command": "mai", + "args": [ + "mcp", + "memory" + ], + "env": { + "MAI_MEMORY_EMBEDDING_MODEL": "nomic-embed-text", + "MAI_MEMORY_EMBEDDING_URL": "https://llm.x.msbls.de" + } + } + } +} diff --git a/.worktrees/knuth b/.worktrees/knuth new file mode 160000 index 0000000..b49f1ae --- /dev/null +++ b/.worktrees/knuth @@ -0,0 +1 @@ +Subproject commit b49f1ae83e418705e8670c41c9e7c2516c9282ec diff --git a/AGENTS.md b/AGENTS.md new file mode 120000 index 0000000..ac55cbd --- /dev/null +++ b/AGENTS.md @@ -0,0 +1 @@ +.claude/CLAUDE.md \ No newline at end of file diff --git a/sites/zensebels.de/index.html b/sites/zensiebels.de/index.html similarity index 99% rename from sites/zensebels.de/index.html rename to sites/zensiebels.de/index.html index 9d5c689..3743144 100644 --- a/sites/zensebels.de/index.html +++ b/sites/zensiebels.de/index.html @@ -368,7 +368,7 @@
-

zensebels.de — 2026

+

zensiebels.de — 2026