Files
web_meineordi/CLAUDE.md
2026-03-31 20:48:49 +02:00

41 lines
2.1 KiB
Markdown

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project
Static website for **Dr. med. Carina Kautsch**, Ärztin für Allgemeinmedizin, 1160 Wien.
Served via `nginx:alpine` in Docker. No build step, no framework, no CMS.
Full project context (infrastructure, design decisions, open items) is in `meineordi-project-summary.md`.
## Architecture
Everything is a single file: `index.html` contains all HTML, CSS, and JavaScript inline.
`logo.png` and `favicon.svg` are served as static assets alongside it.
The only dynamic behaviour is client-side JavaScript:
- **`SCHLIESSZEITEN` array** — at the very top of `<body>`, the sole place to edit holiday closures. `renderClosures()` reads it and builds cards; empty array shows a "no closures" message automatically.
- **Today's hours** — populated on load from a hardcoded day→time map.
- **Font size toggle** — switches `body.large-font` class (18px → 22px), persisted in `localStorage`.
- **Hamburger menu** — toggles `.open` class on mobile nav.
## Deployment
Changes go live by:
1. Commit & push to `https://git.stranto.com/cgasser/web_meineordi` (branch: `master`)
2. Portainer → Stacks → `meineordi`**Pull and redeploy**
Portainer builds the Docker image directly from the repo (via `build: .` in `docker-compose.yml`).
The container joins `nginx_internal_network` (shared with Nginx Proxy Manager).
NPM routes `new.meineordi.at` → container `meineordi-web` port `80`.
## Key constraints
- **No external CSS/JS files** — everything must stay embedded in `index.html`.
- **No framework, no npm, no build step** — plain HTML/CSS/JS only.
- **`logo.png` must exist** in the repo root — it is `COPY`'d into the image by the Dockerfile. Missing it breaks the Docker build.
- **Primary color is `#C8102E`** — do not change, it is extracted from the practice logo.
- **Base font size is 18px** — deliberately large for older patients; large mode is 22px.
- Google Maps embed uses a no-API-key URL. If Google blocks it, switch to the official Maps Embed API (`/maps/embed/v1/place?key=...`).