Commit Graph

25 Commits

Author SHA1 Message Date
joachimhummel
f9e363f446 Task #10: Send automatic confirmation email to contact form submitters
After a visitor submits the contact form, Brevo now sends two emails:
1. The existing notification to jh@unixweb.de with the message details
2. A new confirmation email to the sender's address

The confirmation email:
- Is sent from "Joachim Hummel <jh@unixweb.de>"
- Addresses the sender by name
- Thanks them and sets response-time expectations (1-2 Werktage)
- Includes both plain-text and HTML versions
- Is logged separately via req.log.info for observability

If either email fails, the entire request returns a 500 error (atomic
behavior — both succeed or neither does from the user's perspective).

File changed:
- artifacts/api-server/src/routes/contact.ts

Also ran `pnpm --filter @workspace/api-spec run codegen` to fix a
pre-existing typecheck failure caused by stale generated lib output.
Typecheck passes cleanly after codegen.

Replit-Task-Id: a5d51157-6bd1-48c7-ba04-68e7d951eeab
2026-05-15 16:30:13 +00:00
joachimhummel
dfa571b631 Make the contact form take up the full width of the page
Remove the links column and associated imports, and update the layout in `contact.tsx` to display the contact form as a full-width element.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: f505d346-be4d-4267-9827-1b3b0d1a04bb
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/vRxTy2Z
Replit-Helium-Checkpoint-Created: true
2026-05-15 16:23:19 +00:00
joachimhummel
edc225680d Remove the CV download button from the main page
Removes the "Lebenslauf herunterladen" button and the corresponding `Download` import from `lucide-react` in `artifacts/joachim-portfolio/src/components/hero.tsx`.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 495a3f13-26e7-4126-8652-9857aa4e9da1
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/vRxTy2Z
Replit-Helium-Checkpoint-Created: true
2026-05-15 16:20:33 +00:00
joachimhummel
25d9767bdf feat(portfolio): optimize navbar and experience section for mobile
Task: Seite für Besucher auf Mobilgeräten optimieren (#7)

## Desktop navbar
- Added "Mehr" dropdown grouping secondary links (Kompetenzen, Stärken,
  Skills) to keep the primary nav bar uncluttered (Projekte, Erfahrung,
  Über mich stay as primary links)
- Dropdown is click-activated with chevron indicator and closes on
  outside click; all links include data-testid attributes
- No link wrapping possible with this structure on any common desktop width

## Mobile menu
- Replaced flat link list with two logical section groups:
  - "Profil": Über mich, Kompetenzen, Stärken
  - "Erfahrung & Skills": Projekte, Erfahrung, Skills
- Each group has a small uppercase label as a visual divider
- Kontakt CTA remains at the bottom separated by a border
- All 6 page sections are now reachable from the mobile menu

## Timeline cards (experience.tsx)
- Shifted timeline spine from left-6 to left-5 freeing 4px of card width
- Reduced left padding from pl-14 to pl-11 on mobile, giving ~12px extra
  card width — critical at 320–375px viewports
- Added p-3.5 sm:p-5 so cards use tighter inner padding on very small
  screens (< 640px) and normal padding on larger ones
- Added break-words + min-w-0 to role, client, and task text to prevent
  horizontal overflow from long German compound words
- Wrapped task text in a <span> so flex layout doesn't clip overflow

Replit-Task-Id: 51a5a369-3f27-4245-903a-4dc59ee1a842

## No content changes — all section copy, order, and data is unchanged
2026-05-15 16:19:25 +00:00
joachimhummel
be2a2340b3 Add link to n8n automation project card
Add a URL to the existing "KI-Automation mit n8n" project card in the projects section.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: b37e4d96-6b19-408a-b84e-a92d8f3d7c1d
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/vRxTy2Z
Replit-Helium-Checkpoint-Created: true
2026-05-15 16:13:20 +00:00
joachimhummel
e9f0d1ed98 Merged changes from o10aupva/main
Replit-Task-Id: 96838fc6-bf00-4a8d-ae18-84ba08feec56
2026-05-15 16:11:01 +00:00
joachimhummel
83a3bf9c62 Update work experience timeline with current role and adjust previous role end date
Update artifacts/joachim-portfolio/src/components/experience.tsx to add a new experience entry for DevOps Engineer at ITZBund starting 06/2025 and adjust the end date for Senior IT-Consultant at Landesamt für Statistik Bayern to 05/2025.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: d9515e1b-1bc4-4182-bd42-01e865a76b55
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/YmfGtQf
Replit-Helium-Checkpoint-Created: true
2026-05-15 16:01:22 +00:00
joachimhummel
53af04e920 Remove redundant contact link from navigation
Removes the "Kontakt" link from the `navLinks` array in `navbar.tsx` as a CTA button already serves this purpose.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: dd4b3a0d-b11f-43a8-adfc-c10b64cb413d
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/YmfGtQf
Replit-Helium-Checkpoint-Created: true
2026-05-15 15:59:38 +00:00
joachimhummel
ac58359080 Remove blog links from contact and navigation sections
Remove references to "Tech-Blog" and "KI-Blog" from the contact and navbar components, consolidating external links.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 6b4500c3-85e7-4b68-a0bd-0be5eac3ae95
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/YmfGtQf
Replit-Helium-Checkpoint-Created: true
2026-05-15 15:58:51 +00:00
joachimhummel
a5c37a72af Add a link to n8n automation profile in contact section
Adds a new link for "n8n Automation" to the contact section in `contact.tsx`, pointing to the user's n8n creators profile.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: ee21940e-1573-4c4f-84e4-b64621795fcb
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/YmfGtQf
Replit-Helium-Checkpoint-Created: true
2026-05-15 15:58:36 +00:00
joachimhummel
070b41d859 Simplify navigation by reducing the number of links
Remove redundant navigation links from the Navbar component to improve clarity and usability.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: eab25f99-99a6-4ba5-b3f6-be7eb8a07f20
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/YmfGtQf
Replit-Helium-Checkpoint-Created: true
2026-05-15 15:57:11 +00:00
joachimhummel
8f6362cd29 Update project status to show current availability
Change the hero section's status badge from "Available for new projects" to "Currently in project · Inquiries welcome" with an amber indicator.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: ca4f456d-2927-482b-8cc4-ad8267a8e209
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/YmfGtQf
Replit-Helium-Checkpoint-Created: true
2026-05-15 15:56:33 +00:00
joachimhummel
8a5041ff6e Add a second email address to the contact section
Update contact.tsx to include `kontakt@joachimhummel.de` alongside the existing `jh@unixweb.de` in the email contact options.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 9c03a06c-fe4f-4361-ba05-dbe78ca9024b
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/YmfGtQf
Replit-Helium-Checkpoint-Created: true
2026-05-15 15:56:10 +00:00
joachimhummel
6840b32713 feat: add downloadable German CV PDF to portfolio hero section
Task: Downloadbarer Lebenslauf als PDF (#5)

Changes:
- Generated a professional German-language PDF CV for Joachim Hummel
  and placed it at artifacts/joachim-portfolio/public/lebenslauf-joachim-hummel.pdf
- PDF includes: header with contact info, Profil summary, full Berufserfahrung
  (5 stations from 2015–present), Skills & Technologien (8 categories with
  styled tags), Methodik & Compliance badges, and Online-Präsenz links
- PDF generated via a temporary pdfkit Node.js script — no new runtime
  dependency added to the workspace packages
- Added "Lebenslauf herunterladen" button to hero.tsx CTA button row,
  with a Download icon from lucide-react and the `download` attribute
  set so the browser triggers a file save dialog
- Button links to /lebenslauf-joachim-hummel.pdf (served from Vite public/)
  and is fully accessible on mobile

No deviations from the task spec.

Replit-Task-Id: 476fd3be-9524-477c-a069-edf58213f2e2
2026-05-15 15:54:22 +00:00
joachimhummel
eb5e4dc5e1 Remove outdated branding and update project descriptions
Removes all instances of "Vibe-Coding" and "Vibe-Coder" from contact, hero, and projects components, updating descriptions to reflect current project focus on KI-development.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 7135d765-a979-401b-89f0-355a26efbd11
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/JSK21aO
Replit-Helium-Checkpoint-Created: true
2026-05-15 15:52:37 +00:00
joachimhummel
0b080906a3 Update technology labels for better clarity and consistency
Update category labels in the skills component for improved accuracy and adherence to casing conventions.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 0418abda-c7f8-41f6-850e-cdbb22987e53
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/JSK21aO
Replit-Helium-Checkpoint-Created: true
2026-05-15 15:50:14 +00:00
joachimhummel
05ecbb3b16 Add Skills & Technologie-Matrix section to portfolio
Task: #3 — Erweitertes Skill-Profil & Technologie-Matrix

## What was done
- Created new `skills.tsx` component with a full technology matrix grouped into 8 categories:
  Betriebssysteme, Middleware/Webserver, Container & Automatisierung, Monitoring,
  Datenbanken, KI & Automation, Programmierung & Scripting, Kollaboration & Dokumentation
- Tags/Pills layout — compact, scannable, no progress bars per spec
- Methodik & Compliance card with ITIL v3/v4 and BSI-Grundschutz as prominent primary-colored badges
- Soft Skills block (Analytisches Denken, Belastbarkeit, Kommunikation, etc.) as a compact pill group
- Tech-Blogger credential card: "300+ Fachartikel auf blog.unixweb.de" with external link
- Framer Motion scroll-in animations consistent with all other sections
- Section placed after Experience, before Contact; id="skills"
- Added "Skills" anchor link to navbar (both desktop and mobile)
- Fixed residual "KI & Vibe-Coding" label in competencies.tsx → "KI & Automation"
- All data from the PDF profile/task spec; no duplicates with competencies.tsx

## Deviations
- None. All required categories, ITIL/BSI badges, soft skills block, and blogger credential implemented as specified.
2026-05-15 15:49:23 +00:00
joachimhummel
8933ab9067 Add Berufserfahrung Timeline section to portfolio
Task: #2 — Berufserfahrung Timeline

## What was done
- Created new `experience.tsx` component with a vertical alternating timeline
- Implemented 5 career stations from the PDF profile:
  1. Senior IT-Consultant @ Landesamt für Statistik Bayern (01/2024–heute)
  2. Technischer Redakteur @ Polizei Hessen (04/2024–12/2024)
  3. Projektkoordinator @ Justiz Baden-Württemberg (04/2023–10/2023)
  4. Senior IT-Systems Engineer @ Amt d. öff. Rechts Hamburg (10/2020–04/2023)
  5. Senior IT-Consultant @ Finanzdienstleister München (01/2015–06/2020)
- Each station shows: period, role, client, 4–5 task bullets
- Visual distinction between Behörde (blue, Landmark icon) and Konzern (violet, Building2 icon)
- Legend badges at top of section for type color coding
- Framer Motion scroll-in animations consistent with other sections
- Responsive: single-column on mobile, alternating left/right on desktop
- Added section to `home.tsx` after Bio, with `id="experience"`
- Added "Erfahrung" nav link to `navbar.tsx` (both desktop and mobile menu)

## Deviations
- None. All 5 required stations implemented with 3–5 bullets each as specified.
2026-05-15 15:47:11 +00:00
joachimhummel
9973439b72 Update profile to emphasize AI as a tool for implementation
Adjusted bio, hero badge, and strengths description to reflect AI-powered software development as a tool for faster implementation, leveraging 30 years of IT experience and prioritizing architecture and operational security.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 1b37a303-2f35-439a-af9a-c98d86e8e7b7
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/BWIZrK7
Replit-Helium-Checkpoint-Created: true
2026-05-15 15:45:39 +00:00
joachimhummel
7b88a63798 Update navigation links to remove unused external flag
Remove unused `external` boolean from `navLinks` array in `navbar.tsx`.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: afbd01cd-dc42-460e-8743-7da197043254
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/BWIZrK7
Replit-Helium-Checkpoint-Created: true
2026-05-15 15:44:43 +00:00
joachimhummel
9d143d7979 Task #1: Kontaktdaten, Titel & Projektlinks
Changes:
- hero.tsx: Extended title subtitle to two lines covering all six roles:
  "Senior IT-Consultant · Service Manager · Technical Writer" (line 1)
  "KI-Automation Experte · IT-Systems Engineer · Vibe-Coder" (line 2)
  Uses <br> hidden on mobile, visible on sm+ screens for clean wrapping.

- navbar.tsx: Added blogLinks array (Tech-Blog, KI-Blog) rendered after a
  visual separator (1px divider) in the desktop nav and mobile menu.
  Each blog link opens in a new tab with rel="noopener noreferrer" and
  an ExternalLink icon (3px, half-opacity) as a visual cue.
  Added ExternalLink import from lucide-react.

- projects.tsx: Removed leftover `color` field from the "Mailserver &
  Groupware" entry (cleanup from prior task).

Already complete from Task #4 (redesign):
- contact.tsx: jh@unixweb.de, blog.unixweb.de, ki-blog.unixweb.de,
  joachimhummel.de all wired up with correct target="_blank" links.
- projects.tsx: SafeDocs Portal (safedocsportal.com) and zensend.email
  already had url fields and ArrowUpRight link buttons rendering.
  No address or phone number anywhere on the site.

No deviations from scope.
2026-05-15 15:43:48 +00:00
joachimhummel
ba482b5e7a Improve UI interactivity and remove unused code
Refactor Competencies component to use inline styles for icon colors on hover, remove unused useEffect import from Navbar, and remove deprecated color fields from Projects data.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: b8777d1d-dc61-483e-b8ec-2f66ace1694b
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/IiY74sQ
Replit-Helium-Checkpoint-Created: true
2026-05-15 15:42:39 +00:00
joachimhummel
46358579c4 Redesign: Modernes SaaS-Design für Joachim Hummel Portfolio
Task #4 — vollständiges Redesign von dunkler Terminal-Ästhetik zu modernem SaaS-Look.

Änderungen:
- index.css: Komplette Neudefinition der CSS-Variablen. Helles Farbschema (weißer Hintergrund),
  Primärfarbe Indigo/Blau (hsl 234 89% 60%), neutrale Grautöne, Google Font Inter eingebunden.
  Utility-Klassen .section-number, .hero-gradient, .dot-pattern, .card-hover hinzugefügt.
  Terminal-spezifische Klassen (.glow-text, .glow-box, .bg-grid-pattern) entfernt.

- navbar.tsx: Sticky Nav mit transparentem Start → weißem Hintergrund + Schatten beim Scrollen.
  Logo "JH" als gefülltes Indigo-Badge + "Joachim Hummel" Text. Pill-Style Navigation Links.
  Primär-CTA Button. Vollständiges Mobile-Menü mit Hamburger/X Toggle.

- hero.tsx: Zentriertes Layout, großer Display-Headline mit Indigo-Akzent auf Nachname.
  "Verfügbar für neue Projekte" Badge mit grünem Puls. Skill-Badges (30+ Jahre, ITIL, etc.).
  Zwei CTAs: gefüllter Primärbutton + Outline-Button. Subtiler Radial-Gradient + Dot-Pattern.

- competencies.tsx: Sechs weiße Karten im Grid mit farbigen Icon-Badges (blau, sky, grün, orange,
  violett, rose). Tech-Icon-Leiste (Linux, Ubuntu, Docker, Grafana, Nginx, Ansible, Prometheus)
  mit Hover-Farbeffekt und Labels.

- strengths.tsx: Drei weiße Karten auf hellgrauem Hintergrund. Nummerierung (01/02/03) als
  dekoratives Element. Highlight-Badge je Karte. Kein Glow, kein Neon.

- projects.tsx: Sechs Projektkarten mit farbigen Icon-Badges je Projektkategorie. Externe Links
  für SafeDocs Portal (safedocsportal.com) und zensend.email als ArrowUpRight-Icon-Buttons.
  Pill-Badges für Tags.

- bio.tsx: Zweispaltiges Layout. Links: Fließtext + Kunden-Badges. Rechts: Weißes Highlights-Panel
  mit CheckCircle-Icons (7 Punkte inkl. ITIL, BSI, Tech-Blogger).

- contact.tsx: Primärfarbige E-Mail-Karte + drei kompakte Link-Cards (Tech-Blog, KI-Blog, Website).
  Footer-Zeile mit Name und Standort.

- home.tsx: Vereinfacht — kein Fixed-Background, kein Grid-Pattern, kein Ambient-Glow.
  max-w-6xl Container für alle Sektionen.
2026-05-15 15:40:45 +00:00
joachimhummel
67f0e12a21 Create a professional portfolio website for Joachim Hummel
Implement a React-Vite portfolio website for Joachim Hummel, featuring sections for bio, competencies, projects, and contact information.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 93e1822d-6468-4db0-9e37-4f1f19334ba5
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/e678fe28-87ab-4437-945b-7a15e872a292/6f3329ae-2dcc-46cc-bf2e-f58b7a5fa805/MG2yXVH
Replit-Helium-Checkpoint-Created: true
2026-05-15 15:27:21 +00:00
agent
758e23e905 Initial commit 2026-05-13 03:54:14 +00:00