Files
authschwenkonline/STANDARDS.md
T
Frank Schwenk 93c78f503e feat: Authelia SSO stack for auth.schwenk.online
Compose + Traefik ForwardAuth middleware, Redis sessions, SMTP via 0012.de, TOTP and ACL for consumer apps (e.g. pi.schwenk.online).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-01 10:29:17 +02:00

3.9 KiB
Raw Blame History

STANDARDS.md — Code Quality & Conventions

Global defaults. Project code wins when it already establishes a pattern.

Project SOUL.md overrides STANDARDS.md for UI/UX scope (e.g. desktop-first vs. mobile-first, polish level, tone). Name conflicts in AGENTS.md ack.


Top Principles

  1. Sanitize input — treat all external data as hostile
  2. KISS — simplest solution that works
  3. Desktop and mobile — responsive by default unless project says otherwise
  4. Human-readable — code and UI copy should be clear to humans
  5. Coding standards — follow language/community conventions; match existing project style

Priority Ranking

When trade-offs conflict, prefer in this order:

  1. Sound long-term architecture
  2. Readability
  3. Performance
  4. Consistency with existing code
  5. Minimal diff size

Stack Preferences

Area Preference
Scripting (simple file ops, glue) Shell > Python
Greenfield backend / tooling Python > Node > PHP
Frontend SPA / PWA React/Vite when project needs it — not default for every app
Containers Always use compose.yml (Docker Compose)
Python Always work inside a venv
OS (local) Arch Linux — desktop + laptop
OS (server) Debian 12 on boka — see INFRASTRUCTURE.md
Licenses Prefer open source

Existing projects: respect Laravel, PHP, Astro, React, etc. already in the repo — do not migrate stacks without explicit request.


Common Stacks (in use)

Pattern Examples Notes
Static + nginx + Traefik f12rocks, eselhoefe.de, frank-schwenk.de Build scripts, serve via nginx container
Astro schwenkonline, kkentertainment Static output, minimal JS

Docker / Traefik

  • External network: traefik
  • TLS: traefik.http.routers.<name>.tls.certresolver=myresolver
  • Entrypoint: websecure
  • Use compose.dev.yml for local dev stacks when the project provides one

CI/CD

Gitea Actions runner available on boka. Reference: schwenkonline/.gitea/workflows/deploy.yml.
Add or trigger CI/CD only with Fränky's explicit approval.


Python

  • Virtual environment for every project
  • Pin dependencies when the project already does
  • Prefer stdlib + small deps for private/small tools

Docker

  • One compose.yml per deployable stack (compose.yaml in vendor/third-party trees is OK)
  • Every service: restart: unless-stopped — no exception unless Fränky or project docs say otherwise
  • Named services, explicit volumes, documented host paths
  • No destructive prod container ops without explicit approval

Shell

  • Prefer shell for simple file operations and glue
  • set -euo pipefail for non-trivial scripts
  • Quote variables; sanitize paths from user input
  • Language: comments and --help text in English (unless client project — ask if unsure)

Testing

  • Mock anything that needs mocking
  • Run test suite before handoff when one exists
  • Fränky tests locally before prod when possible

Web / UI

  • Mobile-first — test at 390×844 and 360×800 for web projects
  • prefers-reduced-motion — respect reduced motion preferences
  • Privacy by design — no tracking/analytics without explicit approval
  • Error messages: helpful, not condescending
  • Accessibility: semantic HTML, keyboard navigation where applicable

Security Baseline

  • Validate and sanitize all input
  • Secrets in env vars — never in source
  • See BOUNDARIES.md

New vs. Existing Projects

Existing: match stack, patterns, deploy flow in repo.
Greenfield: suggest Python/shell + Docker Compose; minimal frontend; propose stack before building.


Docs

  • README with run/test/deploy commands is usually enough
  • Auxiliary .md files fine — see AGENTS.md
  • New docs: session language — no mid-session switching