37 Commits
Author SHA1 Message Date
raffaelandClaude Opus 5.5 204e11b966 chore(infra): Gitea-Host auf git.hg-int.dev umstellen
Gitea läuft seit 2026-11-11 auf hivegrid-control (git.hg-int.dev);
git.tool-ctrl.de wird abgeschaltet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 18:54:23 +01:00
ToolCTRLandClaude Opus 4.8 41664c3d0d SEO: Meta-Description auf neue Copy (Bedienung & Gestaltung)
Deploy / build-and-deploy (push) Successful in 22s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 15:42:27 +02:00
ToolCTRLandClaude Opus 4.8 d44a33e63b SEO: Favicon 96x96, GameJam-Uploads noindex, og:image-Metadaten
Deploy / build-and-deploy (push) Successful in 24s
- Favicon aus Emblem neu in 96x96 generiert (Google-SERP braucht min. 48x48),
  Favicon-Links versioniert
- /gamejam-games/: X-Robots-Tag noindex + robots.txt Disallow (Fremdcontent)
- og:image:width/height/alt auf Start, TechDay und GameJam

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 20:01:21 +02:00
ToolCTRLandClaude Opus 4.8 9f832bcec7 SEO: Canonicals/OG auf allen Seiten, WebP, Caching, www-Redirect
Deploy / build-and-deploy (push) Successful in 24s
- alle Unterseiten: Canonical-Tags; techday/gamejam zusaetzlich Open Graph
- techday: Event-JSON-LD (27. Mai 2026, HubWerk01 Bruchsal)
- mITapp-Screenshots als WebP (1,6 MB -> 65 KB) mit width/height/lazy
- dediziertes OG-Bild 1200x630 (Logo + Tagline) fuer Start & GameJam
- server.js: 301 www -> non-www, /index.html -> /, statische Assets
  1 Jahr immutable cachen (HTML weiter no-cache), .webp MIME
- CSS/JS ueberall versioniert (?v=20260610)
- sitemap: lastmod ergaenzt, noindex-Seiten (Impressum/Datenschutz) entfernt

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 19:56:50 +02:00
ToolCTRLandClaude Opus 4.8 41bdd52be8 SEO: SERP-Titel/Description fixen, OG/JSON-LD, robots & sitemap
Deploy / build-and-deploy (push) Successful in 28s
- index.html: beschreibender Titel ohne Em-Dash, gekuerzte Meta-Description,
  Open-Graph/Twitter-Tags, Canonical, Organization-JSON-LD
- Em-Dashes aus allen Seitentiteln entfernt (techday, gamejam, impressum, datenschutz)
- gamejam.html: fehlende Meta-Description ergaenzt
- robots.txt + sitemap.xml neu, .txt/.xml MIME-Typen im Server

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 17:43:39 +02:00
ToolCTRLandClaude Opus 4.8 bfdd37ac40 Landing: Standort-Section (EU-Hosting) mit Paragraf-Wasserzeichen
Deploy / build-and-deploy (push) Successful in 21s
Neue Section zwischen Organisation und Events: positioniert ToolCTRL
als deutsch gehostete, dem deutschen Recht unterstellte Alternative zu
US-Software. Grau hinterlegt, hält den Grau/Weiss-Wechsel intakt.
Grosses, blasses Paragraf-Zeichen als Wasserzeichen im Freiraum oben
rechts (analog zum CTRL-Schriftzug im Hero).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 14:43:35 +02:00
ToolCTRLandClaude Opus 4.7 9ecfc015b1 Form: Vorname/Nachname + Branche, Hero ohne Leistungen-Button
Deploy / build-and-deploy (push) Successful in 21s
Form
- Name in Vorname + Nachname gesplittet (beide Pflicht), 2-Spalten-Grid
- Neues Feld Branche neben Firmenname (optional, 2-Spalten-Grid)
- Telefon-Label auf 'Telefonnummer' vereinheitlicht
- Placeholder ohne Em-Dash

script.js
- Validierung jetzt auf vorname/nachname/email/nachricht
- Payload sendet neue Einzelfelder (vorname, nachname, firmenname,
  branche) PLUS zusammengesetzte Backward-Compat-Felder (name, firma
  mit Branche-Suffix in Klammern), damit server.js/Inbox-Schema
  unverändert bleibt

Hero
- 'Leistungen ansehen' Ghost-Button entfernt, nur noch der schwarze
  'Kontakt aufnehmen' CTA

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-03 12:21:39 +02:00
ToolCTRLandClaude Opus 4.7 9d75831130 Impressum/Datenschutz mit echten Daten, Hero-Trennlinie raus
Deploy / build-and-deploy (push) Successful in 22s
Impressum
- Geschäftsführer: Raffael Sheikh
- Telefon +49 1523 7750939 (tel:-Link)
- Registereintrag: Amtsgericht Mannheim, HRB 756189
- USt-IdNr.: DE458565520
- Verantwortlich §18 Abs. 2 MStV: Raffael Sheikh

Datenschutz
- Hosting-Block: Hetzner Online GmbH, Industriestr. 25, 91710 Gunzenhausen
- Zusatzabsatz: Kontaktanfragen werden auf eigenen Servern/Services
  verarbeitet, keine Weitergabe an externe CRM-/Marketing-Dienste

UI
- border-bottom auf .hero entfernt, damit Hero nahtlos in Leistungen
  übergeht (Grid-Hintergrund läuft jetzt durch)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-02 20:12:30 +02:00
ToolCTRLandClaude Opus 4.7 6597f6b303 Landing: Events-Sektion, Grid-Hintergrund, scharfe Form, Konzept-Texte, Telefon im Footer
Deploy / build-and-deploy (push) Successful in 22s
UI / Layout
- Subtiler 72px-Grid auf html (rgba(10,10,10,.032)), body transparent
- Neue Events-Sektion vor #kontakt: TechDay-Card + AI-GameJam-Card mit
  3px-Border + 7px-Offset-Shadow, ganze Card klickbar via stretched-link
- Form mit scharfen Ecken und 12px-Offset-Shadow (raffael-Stil),
  Section-Dark-Button-Schatten, monochromer Form-Status

Navigation
- Nur noch Start / TechDay / GameJam + Kontakt-Button (Anchor-Links
  zur Landingpage raus, da sie ohnehin direkt darunter erscheinen)
- Größere Hover-Fläche pro Nav-Link via padding, Unterstreichung
  via ::after fest positioniert
- Mobile-Nav synchron, TechDay-Page synchron

Copy
- Hero: CTA 'Projekt besprechen' -> 'Kontakt aufnehmen'
- Leistungen: neuer Intro + alle sechs Card-Texte (Hands-Off, Anzug,
  Kommandozentrale, Tools-aneinander-vorbei, zerstueckelte Teil-
  loesungen, waechst-mit-Ihrem-Betrieb)
- Vorgehen -> 'Konzept' / 'Das ToolCTRL Konzept.' mit vier Schritten
  (Situationsanalyse, Grundkonzepte, Umsetzung, Betrieb & Wartung)
- Kontakt-Intro umgeschrieben, Form-Label 'Worum geht es Ihnen?'

Kontakt
- E-Mail global admin@ -> info@ (5 Dateien inkl. script.js Fallback)
- Telefon +49 1523 7750939 in Footer-Kontaktspalte (index + techday),
  klickbar via tel:

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-02 19:59:42 +02:00
raffaelandClaude Opus 4.8 0a9983b6d9 feat: forward leads to central lead-inbox (ADR 012)
Deploy / build-and-deploy (push) Successful in 22s
handleLead forwards to LEAD_INBOX_URL/v1/leads (DE field aliases map
server-side); local ndjson/csv stays as fallback. No-op until
LEAD_INBOX_URL/LEAD_INBOX_KEY are set, so safe to deploy.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 19:27:55 +02:00
ToolCTRLandClaude Opus 4.7 d9fd1621ff GameJam: Preise-Section entfernt (durch Gewinner-Section ersetzt)
Deploy / build-and-deploy (push) Successful in 21s
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 18:41:31 +02:00
ToolCTRLandClaude Opus 4.7 e94e0a36ec GameJam: Gewinner korrigiert + Section nach unten verschoben
Deploy / build-and-deploy (push) Successful in 21s
Richtige Reihenfolge: Platz 1 Banana Bandit, Platz 2 Ship IT,
Platz 3 Firestarter. Gewinner-Section von oben (unter Hero) ans
Seitenende verschoben (zwischen Galerie und Footer).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 18:38:03 +02:00
ToolCTRLandClaude Opus 4.7 ba7ee347e6 GameJam: Gewinner-Section ergänzt (Top 3)
Deploy / build-and-deploy (push) Successful in 21s
Nach dem Event: Podium direkt unter dem Hero im Preise-Stil.
Platz 1 Firestarter (hervorgehoben, Pokal), Platz 2 Ship IT,
Platz 3 Banana Bandit, jeweils mit Gutschein-Betrag.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 18:32:46 +02:00
ToolCTRLandClaude Opus 4.7 92f113f89b GameJam: Galerie-iframes laden wieder sofort, aber ohne Auto-Ton
Deploy / build-and-deploy (push) Successful in 21s
Klick-Platzhalter zurückgenommen. Stattdessen am iframe
allow="autoplay 'none'" gesetzt: das Spiel lädt sichtbar, der Browser
blockiert automatischen Ton (auch via AudioContext). Erst eine
User-Geste im Spiel (Reinklicken) erlaubt den Ton.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 18:21:26 +02:00
ToolCTRLandClaude Opus 4.7 49c24c1833 GameJam: Galerie-Spiele erst auf Klick laden (kein Auto-Ton)
Deploy / build-and-deploy (push) Successful in 20s
Statt jedes eingereichte Spiel sofort in ein iframe zu laden (wodurch
mehrere Spiele gleichzeitig Ton abspielten), zeigt die Galerie jetzt
einen "Spiel starten"-Platzhalter. Das iframe (und damit Ton) wird
erst beim Klick erzeugt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 18:13:28 +02:00
ToolCTRLandClaude Opus 4.7 bede371528 GameJam: Mitbringen-Section spezifiziert Mac/Linux-Laptop
Deploy / build-and-deploy (push) Successful in 37s
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 16:24:22 +02:00
ToolCTRLandClaude Opus 4.7 0cfc264c4b GameJam: Hart-Deadline für Einreichungen am 27.05.2026 22:00 Berlin
Deploy / build-and-deploy (push) Successful in 21s
server.js: handleGamejamUpload lehnt nach UPLOAD_DEADLINE mit HTTP 410
und Klartext-Hinweis ab. gamejam.html: Formular wird nach Ablauf
clientseitig gesperrt und ein roter Status zeigt den abgelaufenen
Termin. Doppelschicht (Server + UI), Server ist verbindlich.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:36:59 +02:00
ToolCTRLandClaude Opus 4.7 63be60b88a GameJam: kleine "Mitbringen"-Section ergänzt
Deploy / build-and-deploy (push) Successful in 20s
Zwischen "So läuft's" und "Bewertung": ein Satz, dass Teilnehmer ihr
eigenes Gerät (am besten Laptop) mitbringen und sonst nur Lust auf
ein KI-Spiel brauchen.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:22:32 +02:00
ToolCTRLandClaude Opus 4.7 616cd60c6d Produktion: ClamAV-Scan deaktiviert (CLAMAV_ENABLED=false)
Deploy / build-and-deploy (push) Successful in 20s
Solange in der Coolify-Umgebung kein clamd erreichbar ist, würden
GameJam-Uploads sonst mit 503 (fail-closed) abgelehnt. Für den
TechDay morgen schalten wir den Scan im Container-ENV ab; Uploads
laufen unverändert, nur ohne Virenprüfung. Lokal bleibt der Default
true (Scan aktiv, wenn clamd läuft).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:16:20 +02:00
ToolCTRL 730aac65f8 Revert "Produktion: ClamAV in den App-Container integriert"
Deploy / build-and-deploy (push) Successful in 20s
This reverts commit bec5dc7363.
2026-05-26 14:14:20 +02:00
ToolCTRLandClaude Opus 4.7 8e05f323e2 GameJam: Logos verlinken zu LinkedIn
Deploy / build-and-deploy (push) Successful in 32s
- Topbar mITup-Logo: linkedin.com/company/it-meetup-bruchsal/
- Footer ToolCTRL-Logo: linkedin.com/company/toolctrl/
- Footer mITup-Logo: linkedin.com/company/it-meetup-bruchsal/

Externe Links öffnen in neuem Tab. Das Topbar-ToolCTRL-Logo bleibt
der Zurück-zur-Startseite-Link.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:11:39 +02:00
ToolCTRLandClaude Opus 4.7 bec5dc7363 Produktion: ClamAV in den App-Container integriert
Deploy / build-and-deploy (push) Successful in 33s
Dockerfile installiert clamav-daemon + clamav-freshclam und konfiguriert
clamd auf TCP 127.0.0.1:3310 mit DB-Verzeichnis auf der persistenten
Coolify-Volume (/app/data/clamav-db).

entrypoint.sh startet clamd und freshclam vor dem Node-Server, wartet
auf clamd-PING und exec't dann node als unprivilegierter Nutzer. tini
übernimmt PID 1 für Signal-Forwarding.

Folge: GameJam-Uploads werden in Produktion automatisch per ClamAV
geprüft, ohne dass Coolify manuell angepasst werden muss. Erster
Deploy lädt einmalig ~300 MB Virendefinitionen auf die Volume,
Folge-Starts in ~30 s. RAM-Bedarf des Containers ~1.5 GB.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 13:40:19 +02:00
ToolCTRLandClaude Opus 4.7 9639e2d72b GameJam-Preise: Amazon-Gutscheine statt Claude-Accounts
Deploy / build-and-deploy (push) Successful in 21s
Platz 1: 50 EUR Amazon-Gutschein
Platz 2: 25 EUR Amazon-Gutschein
Platz 3: 25 EUR Amazon-Gutschein

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 17:55:27 +02:00
Raffael Sheikh 95d0e21bbf Fix deploy workflow syntax check
Deploy / build-and-deploy (push) Successful in 22s
2026-05-24 22:18:51 +02:00
Raffael Sheikh a9dbc23d7e Add Coolify deployment workflow
Deploy / build-and-deploy (push) Failing after 11m57s
2026-05-24 22:13:55 +02:00
ToolCTRLandClaude Opus 4.7 49bb59a4ab Tagline-Tausch, Mobil-Padding und CSS-Cache-Buster
- Footer-Signatur und Seitentitel: "from vision to version" durch die
  Tagline "Die Software, die eure Branche längst verdient hat" ersetzt
- Hero-Mobil-Padding auf 140 px erhöht (mehr Luft zum Header)
- Stylesheet-Link mit Versions-Parameter, damit Browser zuverlässig
  frische CSS laden

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 14:25:08 +02:00
ToolCTRLandClaude Opus 4.7 80ab0f491a Hero-Texte an Außenkommunikationspaket angepasst
Hero-Headline auf die offizielle Underline gesetzt (moderne, durch-
dachte All-in-One-Software für übersehene Branchen), Untertext aus
One-Liner und Elevator-Pitch mit UI/UX-USP. Headline-Größe und
Meta-Description entsprechend angepasst.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 21:56:28 +02:00
ToolCTRLandClaude Opus 4.7 2705f1c889 Hero-Grafik: echtes ToolCTRL-Emblem als Mittelpunkt
Gezeichnete ctrl-Taste im Workflow-Schema durch das echte
Marken-Emblem (emblem-black.svg) ersetzt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 20:07:31 +02:00
ToolCTRLandClaude Opus 4.7 a624a1150b Testweise: Space Grotesk als Schrift der gesamten Seite
Hausschrift auf Space Grotesk umgestellt (Schrift der GameJam-Seite),
für kohärente Typografie über alle Seiten. Lokal gehostet.
Schibsted-Grotesk-Dateien bleiben als Fallback erhalten.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 19:54:50 +02:00
ToolCTRLandClaude Opus 4.7 2f83a247a4 Weiße Buttons: graue Tiefe statt schwarz
btn-ghost nutzt grauen Rand und graue Tastenkante (wie die
Icon-Keycaps) statt Schwarz, weicherer Schatten.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 19:46:45 +02:00
ToolCTRLandClaude Opus 4.7 d54bd2c6a9 Leistungs-Icons als plastische 3D-Keycaps
Icon-Flächen in den Leistungs-Kacheln zu zweischichtigen Tasten
umgebaut: grauer Tastenkörper mit erhöhter, gewölbter Oberfläche,
Glanzkante und weichem Bodenschatten.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 19:32:04 +02:00
ToolCTRLandClaude Opus 4.7 85049b90f1 TechDay: mITapp-Abschnitt mit echten Mockups
Platzhalter durch drei mITapp-Screenshots ersetzt (Dashboard,
Event-Roadmap, Networking per QR-Code), je auf 1100px skaliert
und mit Beschriftung im 3-Spalten-Raster.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 18:09:19 +02:00
ToolCTRLandClaude Opus 4.7 2fcc98dc20 TechDay: Keyvisual, GameJam-Teaser und Layout-Feinschliff
- Der-TechDay-Abschnitt zweispaltig mit offiziellem Event-Keyvisual
- GameJam-Abschnitt: Hero-Element der GameJam-Seite als HTML nachgebaut
  (Kicker, "Human in the Loop", Subline, Raster-Hintergrund)
- Event-Infos: breitere Label-Spalte, sauberer Abstand bei "Veranstalter"

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 17:59:43 +02:00
ToolCTRLandClaude Opus 4.7 7117bc2c38 TechDay: Speaker-Karte mit Foto und Rolle aktualisiert
- Rundes Profilbild von David Bertram in der Speaker-Karte (wie in
  der mITapp), Bild auf 320px skaliert
- Rolle: "Co-Founder & Head of Product, ToolCTRL" (Heidelberg entfernt)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 17:46:57 +02:00
ToolCTRLandClaude Opus 4.7 a0c306374f TechDay-Bruchsal-2026-Seite ergänzt
- public/techday.html: Eventseite im Landingpage-Stil mit Hero,
  Event-Beschreibung, Vortrag (Speaker David Bertram), mITapp-Abschnitt
  mit Platzhaltern, GameJam-Verweis und Event-Infos
- styles.css: Styles für TechDay-Seite (Hero, Talk-Split, Speaker-Karte,
  Screenshot-Platzhalter)
- index.html: Navigations-Verweis "TechDay" in Header, Mobilmenü und
  Footer; GameJam zusätzlich im Footer

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 17:43:15 +02:00
ToolCTRLandClaude Opus 4.7 b629bbc90a GameJam-Seite integriert
- public/gamejam.html: teilnehmerseitige AI-GameJam-Seite (TechDay
  Bruchsal, 27.05.) mit eigenem Schwarz-Weiß-Styling, Zurück-Link zur
  Landingpage
- server.js: abhängigkeitsfreier Multipart-Parser plus Endpunkte
  POST /api/gamejam/upload und GET /api/gamejam/games
- index.html: Navigations-Verweis "GameJam" in Header und Mobilmenü
- .gitignore: hochgeladene Spiele und Einreichungen ausgeschlossen

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 17:16:58 +02:00
ToolCTRLandClaude Opus 4.7 143748dc0d Initial commit: ToolCTRL Landing Page
Statische Landing Page mit Lead-Formular, Impressum und
Datenschutzerklärung, ausgeliefert von einem abhängigkeitsfreien
Node-Server mit lokaler Lead-Erfassung.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 16:43:28 +02:00