Commit Graph

92 Commits

Author SHA1 Message Date
Sascha ed129ee56d refactor: clean up code formatting and improve readability in audit and email service files 2026-09-20 14:42:40 +02:00
Sascha 47b23001ec feat: add QuickcheckPage component with form and styling
- Implemented QuickcheckPage component with a form for user input.
- Added validation for email and consent checkboxes.
- Integrated form submission to a specified endpoint.
- Created SCSS styles for the QuickcheckPage layout and components.
2026-09-20 14:42:03 +02:00
Sascha 2bdcb5303e style: update color variables and improve hover effects across components 2026-07-30 18:42:49 +02:00
Sascha 3565503da4 fix: allow bare domains in URL validation and update related error messages 2026-07-30 10:42:44 +02:00
Sascha 776c3bc96e feat: enhance accessibility features and improve footer link handling 2026-07-29 19:57:15 +02:00
Sascha 36ae846caa fix: clarify NoNewPrivileges handling in audit-webhook.service 2026-07-29 19:01:39 +02:00
Sascha 45ff50e34c fix: return 403, not 500, for disallowed CORS origins
The cors() origin callback rejected disallowed origins by calling
callback(new Error(...)), which Express routes to the generic error
handler - previously hardcoded to always respond 500 and log
"Unhandled error". A rejected origin is expected, routine traffic
(bots, scanners, or a deliberate CORS test), not a server fault, and
was being reported and logged as one.

The request was already being correctly rejected either way (no data
processed, no email sent) - this only fixes the status code and log
noise, not a security gap.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-29 18:56:35 +02:00
Sascha f50442a5c8 fix: reach audit services from a Dockerized reverse proxy (Caddy)
The actual VPS setup has no native nginx - Forgejo and Caddy run via
docker-compose, with Caddy terminating TLS for git.sascha-bach.de and
talk.sascha-bach.de. Caddy itself sits inside that Docker network, so
127.0.0.1 from its container's point of view is not this host - it
could not reach either the audit endpoint or the webhook listener.

Both services now optionally bind an additional address via
DOCKER_BRIDGE_HOST (the Docker bridge's gateway IP), alongside their
existing 127.0.0.1 listener. Deliberately not 0.0.0.0: on a VPS with a
public IP and no confirmed firewall, that would also accept connections
arriving on the public interface, bypassing the reverse proxy's TLS
termination entirely.

DEPLOYMENT.md now documents both the nginx and the Caddy-in-Docker
path side by side, since this is the configuration actually in use.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-29 18:43:08 +02:00
Sascha aaa9a9f567 feat: enhance deployment documentation and nginx configuration for Gitea webhook handling 2026-07-29 18:20:39 +02:00
Sascha 960943bd60 feat: implement auto-deploy webhook for audit endpoint 2026-07-29 17:57:21 +02:00
Sascha ee8ca1beb7 feat: add free accessibility audit landing page (B2B)
Adds /de/audit and /en/audit with a lead-magnet page (WCAG audit for
free, PDF report + 15min walkthrough) and a request form (name,
company, email, URL, agency/client, motivation), including the
mandatory § 14 BGB business-only notice and confirmation checkbox.

Also, since the site turned out to run exclusively on the Bitpalast
static host rather than Vercel:
- remove vercel.json, port its security headers, agent-discovery
  Link header and .well-known CORS/cache headers into public/.htaccess
- fix the .htaccess rewrite so prerendered routes are served instead of
  falling back to the empty SPA shell
- self-host Comfortaa/Quicksand via Fontsource instead of Google Fonts
- add a separate backend/ Express service for the audit endpoint,
  meant to run on the IONOS VPS independently of the static site
- update the privacy policy to reflect the form and font hosting

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-29 17:43:50 +02:00
Sascha 91a6180f44 feat: update social links to use Git instead of Codeberg and enhance project descriptions 2026-07-27 13:23:54 +02:00
saschab 7cdf122014 .github/copilot-instructions.md gelöscht 2026-07-24 14:02:32 +02:00
saschab 77ba300c15 AGENTS.md gelöscht 2026-07-24 14:02:06 +02:00
Sascha 1ff8c6dfa9 fix: standardize formatting and ensure newline at end of files in various JSON and markdown files 2026-07-15 17:30:57 +02:00
Sascha c7aee23415 feat: enhance portfolio with agent discovery files and improve accessibility features 2026-07-15 17:30:39 +02:00
Sascha b863dd9186 feat: update ProjectsSection to use localized project data and enhance project interface 2026-07-07 13:01:38 +02:00
Sascha e57f0e7753 Merge branch 'master' of https://codeberg.org/saschab/portfolio-page 2026-07-03 12:06:08 +02:00
Sascha 8df3ce4bbd feat: add client testimonial for Lukas Mobile Massage in German and English landing references 2026-07-03 12:06:06 +02:00
Sascha Bach 26869367d6 Merge branch 'master' of https://codeberg.org/saschab/portfolio-page 2026-07-02 14:47:47 +02:00
Sascha Bach 4924f1f898 Refactor code structure for improved readability and maintainability 2026-07-02 14:43:04 +02:00
Sascha 4190be4d15 feat: add business registration section to TextConfig interface 2026-05-20 13:32:32 +02:00
Sascha 051d614364 feat: add business registration information to imprint sections for German and English localization 2026-05-20 13:26:09 +02:00
Sascha e7fa5dcb8d feat: add VAT ID to imprint sections for German and English localization
Co-authored-by: Copilot <copilot@github.com>
2026-05-07 14:40:22 +02:00
Sascha b28a26b7e9 feat: add VAT ID and update privacy policy dates in imprint sections for localization
Co-authored-by: Copilot <copilot@github.com>
2026-05-07 14:38:39 +02:00
Sascha 8deb151241 Refactor code structure for improved readability and maintainability 2026-04-30 13:29:08 +02:00
Sascha dfe535eb1b feat: enhance German localization for landing sections with updated descriptions and new legal compliance information 2026-04-22 13:13:32 +02:00
Sascha 63002b70b3 refactor: remove unused personalConfig import from Navigation component 2026-04-16 21:20:28 +02:00
Sascha ed093e8027 Refactor theme styles for improved accessibility and consistency
- Updated light and dark themes across contact, hero, projects, services, skills SCSS files to enhance color contrast for better readability.
- Replaced gradients with solid colors where necessary to ensure AAA compliance.
- Adjusted button and text colors for improved visibility and user experience.
- Introduced a new logo SVG asset for branding consistency.
- Modified global color variables to align with the new design scheme.
2026-04-16 21:19:03 +02:00
Sascha 0f4a379716 Add German and English localization for landing and technical sections
- Created German localization files for landing sections: about me, experience, hero, processes, reasons, references, winnings.
- Created English localization files for landing sections: about me, experience, hero, processes, reasons, references, winnings.
- Added German localization for technical sections: about, certifications, hero, services, skills.
- Added English localization for technical sections: about, certifications, hero, services, skills.
- Introduced SCSS file for landing hero section styling.
2026-04-08 13:14:49 +02:00
Sascha 8ae3c33cd2 fix: update language settings to default to German and adjust browser language detection 2026-04-07 16:48:50 +02:00
Sascha ea5507b51f feat: update accessibility text and improve color consistency across sections 2026-03-30 16:02:18 +02:00
Sascha 1fbc500c19 refactor: standardize HTML and JavaScript formatting; improve readability 2026-03-26 21:19:58 +01:00
Sascha bdbce1c3ad feat: enhance text configuration and localization for appointment booking
- Added new text configurations for appointment hints and links in TextConfig.ts and contact.ts.
- Updated imprint.ts with detailed privacy policy sections regarding online appointment booking, including data handling and legal basis.
- Introduced new appointment-related fields in personal.ts for scheduling.
- Implemented SEO enhancements across HomePage, ImprintPage, LandingPage, and PrivacyPolicy pages using usePageSeo hook.
- Created a prerendering script to generate static HTML for SEO optimization.
- Added .htaccess and robots.txt for server configuration and search engine indexing control.
- Developed a sitemap.xml for better search engine visibility.
- Improved styling for contact section and imprint page to accommodate new appointment features.
2026-03-26 21:19:46 +01:00
Sascha 54d3a810d2 refactor: centralize feature card icon and color mappings; improve bio paragraph key handling 2026-03-10 16:53:49 +01:00
Sascha 18c508bba0 feat: Replace GitHub links with Codeberg links and update related text and aria labels 2026-03-09 15:29:19 +01:00
Sascha 311f60abe6 feat: Add landing page sections and localization for German and English
- Implemented ReferencesSection and WinningsSection components for the landing page.
- Added localization files for German and English, covering various sections including About Me, Experience, Processes, Reasons, References, and Winnings.
- Created useScrollReveal hook for scroll-based animations.
- Developed styles for new sections: experience, processes, reasons, references, and winnings.
- Updated LandingPage component to include new sections.
2026-03-09 15:21:09 +01:00
Sascha 514b189030 fix: update CV content for clarity and accuracy; improve formatting and language consistency 2026-02-10 14:05:37 +01:00
Sascha f04fe3dfcb feat: add BackToTopButton component and enhance accessibility with custom hooks for keyboard navigation and screen reader announcements 2026-02-02 15:22:33 +01:00
Sascha b389effd5e refactor: standardize types across components, improve theme and language handling. add sticky menu and navigation section indicator 2026-02-02 14:36:52 +01:00
Sascha e8c7d3d90d add project images and update projects data structure; include @types/node dependency 2026-01-23 15:19:18 +01:00
Sascha 0aa172a85a ts fixes 2026-01-20 15:20:15 +01:00
Sascha 231803db2d adding learning certificate, styling fixes 2026-01-20 15:18:09 +01:00
Sascha Bach 2169c2994b refactoring 2025-11-26 13:19:59 +01:00
Sascha Bach d99c0e2429 zweisprachigkeit implementiert 2025-11-26 12:21:04 +01:00
Sascha Bach c587bec2c7 refactoring 2025-11-26 12:01:50 +01:00
Sascha eacb5fc724 portfolio-screenshot da 2025-11-25 15:25:38 +01:00
Sascha 34b02f69be text centralization 2025-11-03 16:58:40 +01:00
Sascha c83b6e07cf even more sonarqube fixes 2025-10-30 17:26:30 +01:00
Sascha acbdb1ea3c sonarqube fixes 2025-10-30 17:20:24 +01:00