hermes 7913596836
All checks were successful
Deploy Feature Branch to Test (haus.test.kies-media.de) / Deploy to Test Environment (push) Successful in 45s
Lint / PHP Syntax Check (push) Successful in 1m0s
PHPUnit / PHP Unit Tests (push) Successful in 36s
Lint / PHP Syntax Check (pull_request) Successful in 27s
Lint / HTML Lint (htmlhint) (push) Successful in 1m40s
Lint / CSS Lint (stylelint) (push) Successful in 1m45s
PHPUnit / PHP Unit Tests (pull_request) Successful in 41s
Lint / CSS Lint (stylelint) (pull_request) Successful in 1m14s
Lint / HTML Lint (htmlhint) (pull_request) Successful in 1m15s
fix(ui): make vertical floor-plan tabs visually obvious as interactive controls
The floor-accordion was rendering as a stack of plain text rows separated
by 1px hairline dividers with no visual affordance indicating they were
clickable tabs. CSS for .floor-icon (a 24px circle with a '+' that
rotates 45° to '×' on open) already existed, but the corresponding
<span class="floor-icon"> element had never been added to the template
— the affordance was completely invisible.

Changes:

1. Template (app/views/home/index.php): add
   <span class="floor-icon" aria-hidden="true">+</span> inside the
   <summary>, enabling the existing rotation/size CSS to take effect.

2. CSS (public/css/haus-schleusingen.css):
   a. Restyle .floor-item from a thin divider to a real card
      (1px --warm border, 4px radius, --white background) with a
      0.75rem gap between items via flexbox column on .floors-accordion.
   b. .floor-header: hover background in --cream, focus-visible
      outline, list-style markers suppressed, padding tightened to
      1.25rem 1.5rem.
   c. .floor-icon: enlarged from 24px to 32px, thicker 1.5px border,
      font-size 1.15rem so the '+' is clearly legible, white
      background that goes cream on hover/open.
   d. .floor-item.open: --accent border, subtle box-shadow
      (0 4px 20px 6% black), and a 3px-wide ::before accent stripe on
      the left edge — the canonical 'active tab' indicator.
   e. .floor-icon rotation on open (45°) now also flips border-color
      and background to --accent / --cream, plus hover state for the
      closed icon.
   f. Renamed dead-code class .floor-size → .floor-area to match the
      template (refactor mismatch left over from the i18n work).
   g. Renamed dead-code class .floor-accordion → .floors-accordion to
      match the template.

Measured on 1265px viewport:
- 4 items, 4 icons (one per tab)
- Each item: 1104x74, white bg, 4px radius, --warm border
- Icon: 32x32 at x=1128 (right edge), white bg, '+' glyph
- Open state (item[1]): border → --accent, left 3px accent stripe,
  icon rotates 45° to '×', subtle box-shadow

Sweep targets for visual confirmation:
- Closed: white card + warm border + '+' icon, hover lifts background
  to cream and icon border to accent.
- Open: accent border + left stripe + '×' icon + soft shadow, body
  expands below to show the floor-plan image and room list.
- Switching tabs: clicking another header collapses the current
  open one (existing JS accordion behaviour).
2026-06-14 14:44:04 +00:00

Landingpage Haus Schleusingen

Statische Landingpage für Haus Schleusingen.
Das Projekt basiert auf reinem HTML, CSS und JavaScript und wird über einen Nginx-Container ausgeliefert.


Inhaltsübersicht


Technologien

Bereich Technologie
Markup HTML5
Styling CSS3
Scripting JavaScript (Vanilla)
Layout Masonry
Webserver Nginx (Alpine)
Container Docker
Linting HTMLHint, Stylelint, ESLint
Formatierung Prettier
Git Hooks Husky + lint-staged

Projektstruktur

├── public/index.php      # Einstiegsseite (PHP-Entry-Point)
├── css/
│   └── haus-schleusingen.css   # Hauptstylesheet
├── js/
│   ├── haus-schleusingen.js    # Haupt-JavaScript
│   └── masonry.pkgd.min.js    # Masonry-Layout-Bibliothek (nicht bearbeiten)
├── fonts/
│   └── fonts.css               # Schriftart-Einbindungen
├── bilder/                     # Bildressourcen
├── nginx.conf                  # Nginx-Konfiguration
├── Dockerfile                  # Docker-Image-Definition (nginx:alpine)
├── package.json                # Projekt-Metadaten & Skripte
├── eslint.config.js            # ESLint-Konfiguration
├── .htmlhintrc                 # HTMLHint-Regeln
├── .stylelintrc.json           # Stylelint-Regeln
├── .prettierrc                 # Prettier-Einstellungen
├── .prettierignore             # Prettier-Ausnahmen
├── .husky/pre-commit           # Git Pre-Commit Hook
├── .dockerignore               # Docker Build-Ausnahmen
└── AGENTS.md                   # Agent-Richtlinien

Voraussetzungen

  • Node.js ≥ 18
  • npm ≥ 9
  • Docker (optional, für Container-Deployment)

Lokale Entwicklung

Kein Build-Step erforderlich das Projekt besteht aus statischen Dateien.

Abhängigkeiten installieren

npm install

Lokalen Server starten

Entweder mit npx serve:

npx serve .

Oder mit dem VS Code Live Server Plugin.

Linting ausführen

# Alle Linter auf einmal
npm run lint

# Oder einzeln
npm run lint:html
npm run lint:css
npm run lint:js

Code formatieren

npm run format

Formatierung prüfen (ohne Änderung)

npm run format:check

Deployment mit Docker

Image bauen

docker build -t landingpage-haus-schleusingen .

Container starten

# PowerShell
docker run -d -p 8080:80 -v ${pwd}:/usr/share/nginx/html:ro landingpage-haus-schleusingen

Die Website ist danach erreichbar unter: http://localhost:8080

Hinweis: Die Website-Dateien werden per Volume-Mount eingebunden (-v), sodass Änderungen ohne Neubau des Images sofort wirksam werden.


Code-Qualität & Linting

Das Projekt verwendet mehrere Werkzeuge zur Sicherstellung der Code-Qualität:

Werkzeug Zweck Befehl
HTMLHint HTML-Linting npm run lint:html
Stylelint CSS-Linting npm run lint:css
ESLint JavaScript-Linting npm run lint:js
Prettier Code-Formatierung npm run format

Alle Linter auf einmal ausführen:

npm run lint

Wichtige Regeln

  • Prettier-Formatierung ist Pflicht Verstöße werden als Fehler gewertet.
  • HTMLHint: Tag-Paarung, Kleinschreibung, eindeutige IDs, alt-Attribut bei Bildern und <title> sind Pflicht.
  • ESLint: Ungenutzte Variablen (no-unused-vars) und undefinierte Variablen (no-undef) ergeben Warnungen.
  • Globale Variablen: browser und jquery sind in der ESLint-Konfiguration freigegeben.
  • Minifizierte Dateien (*.min.js, *.min.css) werden von Linting und Formatierung ausgeschlossen.

Git-Workflow

Pre-Commit Hooks aktivieren

Die Pre-Commit Hooks (Husky + lint-staged) werden automatisch beim Installieren der Abhängigkeiten eingerichtet:

npm install

Der prepare-Script in package.json ("prepare": "husky") sorgt dafür, dass Husky die Git Hooks im .husky/-Verzeichnis registriert. Nach npm install sind die Hooks aktiv kein manueller Schritt nötig.

Falls Hooks nicht laufen: Prüfe ob .husky/pre-commit ausführbar ist (chmod +x .husky/pre-commit) und ob core.hooksPath nicht überschrieben wurde (git config core.hooksPath).

Was wird beim Commit geprüft?

Beim Committen führt Husky automatisch den Pre-Commit Hook (.husky/pre-commit) aus, der lint-staged startet.

lint-staged prüft automatisch:

Dateityp Aktionen
*.html HTMLHint + Prettier
*.css Stylelint (--fix) + Prettier
*.js ESLint (--fix) + Prettier
*.json, *.md Prettier

Es ist kein manueller Schritt nötig beim Committen werden nur die geänderten Dateien automatisch geprüft und formatiert.


Konfigurationsdateien

Datei Beschreibung
.prettierrc Prettier-Einstellungen (Semikolons, doppelte Anführungszeichen, 2er-Einrückung, LF-Zeilenenden)
.prettierignore Ignoriert node_modules, *.min.js, *.min.css
.htmlhintrc HTMLHint-Regeln (Tag-Paarung, Kleinschreibung, IDs, alt-Pflicht)
.stylelintrc.json Stylelint mit stylelint-config-standard und Prettier-Plugin
eslint.config.js ESLint-Flat-Config mit Prettier-Integration
.dockerignore Schließt .git, Skripte und Docker-Dateien vom Build aus

Lizenz

ISC

Description
No description provided
Readme 34 MiB
Languages
PHP 79.6%
CSS 13.8%
JavaScript 3.2%
Shell 1.9%
Python 1.4%