Compare commits

...

10 commits

Author SHA1 Message Date
Aron August Hohmann
74063a3bf1 Minor color code change 2026-07-25 10:53:44 +02:00
Aron August Hohmann
c6d0fa30bb Added SEO and structured data 2026-06-14 18:42:27 +02:00
Aron August Hohmann
fdc26c9b92 Updated HP 2026-06-14 17:32:50 +02:00
Aron August Hohmann
89db801c46 Removed unnecessary asset 2026-06-14 16:54:45 +02:00
Aron August Hohmann
e253375773 Added deploy automation script and updated README 2026-05-17 09:41:11 +02:00
Aron August Hohmann
2bbf353a25 Cleaned up legal texts 2026-05-17 09:26:48 +02:00
Aron August Hohmann
4686dcd6c1 Fixed typo, replaced heraldry with seal 2026-05-17 09:20:42 +02:00
Aron August Hohmann
4b34cf1fb7 Added donauschwaben.online to Links 2026-05-16 19:36:55 +02:00
Aron August Hohmann
f6870cb67e Replaced rosemary with Familienwappen 2026-05-16 19:32:35 +02:00
Aron August Hohmann
1aa6183148 Nutzungsbedingungen renamed to AGB 2026-05-07 17:16:06 +02:00
17 changed files with 529 additions and 111 deletions

View file

@ -1,32 +1,11 @@
# sv
Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli).
## Creating a project
If you're seeing this, you've probably already done this step. Congrats!
```sh
# create a new project
npx sv create my-app
```
To recreate this project with the same configuration:
```sh
# recreate this project
bun x sv create --template minimal --types ts --add tailwindcss="plugins:typography,forms" paraglide="languageTags:en, de, ru+demo:yes" --install bun .
```
Personal Blog
## Developing
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
Once you've created a project and installed dependencies with `bun install`, start a development server:
```sh
npm run dev
# or start the server and open the app in a new browser tab
npm run dev -- --open
bun --bun run dev
```
## Building
@ -34,9 +13,9 @@ npm run dev -- --open
To create a production version of your app:
```sh
npm run build
bun --bun run build
```
You can preview the production build with `npm run preview`.
You can preview the production build with `bun --bun run preview`.
> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment.
To deploy your app, run `bun run deploy`

View file

@ -4,37 +4,37 @@
"nav_about": "Über mich",
"nav_contact": "Kontakt",
"footer_privacy": "Datenschutzerklärung",
"footer_terms": "Nutzungsbedingungen",
"footer_terms": "AGB",
"footer_imprint": "Impressum",
"hero_title": "Digital Platform & Process Lead",
"hero_subtitle": "Mit möglichst wenig das Meiste erreichen.",
"hero_title": "Business Analyst & Solution Designer",
"hero_subtitle": "Vom fachlichen Problem zur tragfähigen Lösung.",
"hero_location": "Wien, Österreich",
"what_i_do_heading": "Was ich mache",
"what_i_do_1_title": "Business- & System-Alignment",
"what_i_do_1_body": "Ich übersetze fachliche Anforderungen in skalierbare Systeme und Prozesse und schaffe so die Verbindung zwischen Stakeholdern und technischen Teams.",
"what_i_do_2_title": "Plattform- & Prozessdesign",
"what_i_do_2_body": "Ich gestalte Workflows, Verantwortungsmodelle und Dokumentationsstrukturen, die Fehler reduzieren und mit dem Team skalieren.",
"what_i_do_3_title": "Stakeholder-Koordination",
"what_i_do_3_body": "Ich fungiere als Schnittstelle zwischen Fachbereichen, IT und externen Partnern, um stabile Datenflüsse und eine reibungslose Umsetzung sicherzustellen.",
"what_i_do_4_title": "End-to-End Plattforminitiativen",
"what_i_do_4_body": "Von der Idee bis zum Rollout — ich übernehme die Verantwortung für den gesamten Lebenszyklus von Plattformprojekten, inklusive Strategie, Umsetzung und Adoption.",
"what_i_do_1_title": "Anforderungsanalyse & Solution Design",
"what_i_do_1_body": "Ich erhebe und strukturiere fachliche und technische Anforderungen gemeinsam mit Stakeholdern und übersetze sie in tragfähige Lösungsarchitekturen von der Problemdefinition bis zum High-Level-Design.",
"what_i_do_2_title": "Business- & System-Alignment",
"what_i_do_2_body": "Ich schaffe die Verbindung zwischen Fachbereichen und technischen Teams: Systemintegration, Datenflüsse und Architekturentscheidungen immer mit Blick auf den Business-Kontext.",
"what_i_do_3_title": "Stakeholder-Koordination & Governance",
"what_i_do_3_body": "Ich fungiere als Schnittstelle zwischen IT, Fachabteilungen und externen Partnern mit klaren Dokumentationsstrukturen, Qualitätsstandards und abgestimmten Verantwortungsmodellen.",
"what_i_do_4_title": "End-to-End Projektverantwortung",
"what_i_do_4_body": "Von der Konzeption bis zum Rollout übernehme ich die Gesamtverantwortung für Plattform- und Integrationsprojekte inklusive Strategie, Steuerung und nachhaltiger Adoption.",
"work_heading": "Ausgewählte Projekte",
"work_1_title": "Internes PIM-System",
"work_1_problem": "Die nativen Möglichkeiten von Magento sowie fragmentierte Prozesse zwischen Marketing, Einkauf, Produktentwicklung, Finance und Webteam führten zu Engpässen und inkonsistenten Datenstrukturen, die sich nur schwer skalieren ließen.",
"work_1_approach": "Initiierung und Leitung der Entwicklung eines internen PIM-Systems von der Konzeption bis zum Rollout, inklusive technischer Ausrichtung, Architekturentscheidungen und Implementierungsstrategie.",
"work_1_problem": "Fragmentierte Produktdatenprozesse zwischen Marketing, Einkauf, Produktentwicklung, Finance und Webteam führten zu Engpässen und inkonsistenten Datenstrukturen, die sich nur schwer skalieren ließen.",
"work_1_approach": "Erhebung und Strukturierung der fachlichen Anforderungen, Design des Datenmodells (Entity-Schema, Attributstrukturen, Beziehungen) sowie Spezifikation der Datenflüsse aus heterogenen Quellen. Steuerung der Umsetzung von der Konzeption bis zum Rollout.",
"work_1_outcome": "Optimierung der abteilungsübergreifenden Produktdatenprozesse durch ein maßgeschneidertes internes Tool bei rund 8090 % geringeren Kosten im Vergleich zu vergleichbaren SaaS-Lösungen.",
"work_2_title": "Migration der Bewertungsplattform",
"work_2_problem": "Das Unternehmen musste seine Bewertungsinfrastruktur von Reviews.io auf Trusted Shops migrieren, was die Abstimmung mehrerer Stakeholder aus Marketing, IT und Recht erforderte.",
"work_2_approach": "Übernahme der End-to-End-Verantwortung für die Migration inklusive Koordination der beteiligten Teams, Steuerung des Rollout-Zeitplans sowie Sicherstellung der Daten- und Prozesskontinuität.",
"work_2_problem": "Das Unternehmen musste seine Bewertungsinfrastruktur von Reviews.io auf Trusted Shops migrieren mit mehreren betroffenen Stakeholdern aus Marketing, IT und Customer Support sowie harter Anforderung an Datenkontinuität.",
"work_2_approach": "End-to-End Projektverantwortung: Anforderungsaufnahme, Koordination aller beteiligten Teams, Steuerung des Rollout-Zeitplans sowie Sicherstellung der Daten- und Prozesskontinuität während des gesamten Übergangs.",
"work_2_outcome": "Erfolgreiche Umstellung der Plattform ohne Unterbrechung der kundenrelevanten Bewertungsprozesse.",
"work_3_title": "Workflow- & Prozessstandardisierung",
"work_3_problem": "Produkt- und Content-Workflows waren uneinheitlich und stark manuell geprägt, was zu Engpässen und einer hohen Fehlerquote führte.",
"work_3_approach": "Einführung von Task-Tracking, Dokumentationssystemen und eines TMS für Landingpage-Übersetzungen. Aufbau einer zentralen Wissensbasis für QA, Uploads und Workflows.",
"work_3_problem": "Produkt- und Content-Workflows waren uneinheitlich und stark manuell geprägt, was zu Engpässen, hoher Fehlerquote und mangelnder Skalierbarkeit führte.",
"work_3_approach": "Anforderungsanalyse, Einführung von Task-Tracking und Dokumentationssystemen sowie eines TMS für Landingpage-Übersetzungen. Aufbau einer zentralen Wissensbasis für QA, Uploads und Workflows.",
"work_3_outcome": "Bis zu 90 % Effizienzsteigerung in Produktprozessen, ca. 60 % schnellere Übersetzungszyklen und rund 5 Stunden weniger organisatorischer Aufwand pro Woche.",
"work_label_problem": "Problem",
@ -45,11 +45,20 @@
"how_i_work_body": "Ich starte immer vom fachlichen Problem, nicht von der Lösung. Jedes System, jeder Prozess und jedes Tool muss sich gegenüber der Alternative rechtfertigen nämlich nichts zu tun oder weniger zu tun. Ich priorisiere nach Impact, halte Lösungen so einfach wie möglich und stelle sicher, dass Veränderungen durch Dokumentation, klare Übergabemodelle und abgestimmte Stakeholder nachhaltig wirken.",
"languages_heading": "Sprachen",
"languages_list": "Deutsch & Ungarisch — Muttersprache<br>Englisch — C2<br>Italienisch & Japanisch — A2",
"languages_list": "Deutsch & Ungarisch — Native<br>Englisch — C2",
"contact_cta_heading": "Kontakt aufnehmen",
"contact_cta_body": "Interesse an einer Zusammenarbeit?",
"contact_cta_link": "Nachricht senden",
"contact_heading": "Kontakt",
"contact_intro": "Interesse an einer Zusammenarbeit oder Feedback zum Blog? Schreib mir gerne über einen meiner Socials oder per E-Mail."
"contact_intro": "Interesse an einer Zusammenarbeit oder Feedback zum Blog? Schreib mir gerne über einen meiner Socials oder per E-Mail.",
"meta_home_title": "Business Analyst & Solution Designer",
"meta_home_description": "Aron August Hohmann Business Analyst & Solution Designer in Wien. Anforderungsanalyse, Solution Design und Systemintegration für digitale Plattformen.",
"meta_blog_title": "Blog",
"meta_blog_description": "Artikel über Solution Design, Plattformentscheidungen und digitale Prozesse von Aron August Hohmann.",
"meta_contact_title": "Kontakt",
"meta_contact_description": "Kontakt aufnehmen mit Aron August Hohmann Business Analyst & Solution Designer in Wien."
}

View file

@ -1,39 +1,40 @@
{
"$schema": "https://inlang.com/schema/inlang-message-format",
"back": "Back",
"nav_about": "About me",
"nav_contact": "Contact",
"footer_privacy": "Privacy Policy",
"footer_terms": "Terms of Service",
"footer_imprint": "Legal Notice",
"hero_title": "Digital Platform & Process Lead",
"hero_subtitle": "Doing the most with the least.",
"$schema": "https://inlang.com/schema/inlang-message-format",
"back": "Back",
"nav_about": "About me",
"nav_contact": "Contact",
"footer_privacy": "Privacy Policy",
"footer_terms": "Terms of Service",
"footer_imprint": "Legal Notice",
"hero_title": "Business Analyst & Solution Designer",
"hero_subtitle": "From business problem to lasting solution.",
"hero_location": "Vienna, Austria",
"what_i_do_heading": "What I Do",
"what_i_do_1_title": "Business & Systems Alignment",
"what_i_do_1_body": "Translating business requirements into scalable systems and processes — bridging the gap between stakeholders and technical teams.",
"what_i_do_2_title": "Platform & Process Design",
"what_i_do_2_body": "Designing workflows, ownership models, and documentation structures that reduce errors and scale with the team.",
"what_i_do_3_title": "Stakeholder Coordination",
"what_i_do_3_body": "Acting as the interface between business units, IT, and external partners to keep data flows stable and initiatives on track.",
"what_i_do_4_title": "Platform Initiatives End-to-End",
"what_i_do_4_body": "From concept to deployment — owning the full lifecycle of platform projects including strategy, rollout, and adoption.",
"what_i_do_1_title": "Requirements Analysis & Solution Design",
"what_i_do_1_body": "I gather and structure business and technical requirements together with stakeholders, translating them into viable solution architectures — from problem definition through to high-level design.",
"what_i_do_2_title": "Business & Systems Alignment",
"what_i_do_2_body": "I bridge the gap between business units and technical teams: system integration, data flows, and architecture decisions always grounded in business context.",
"what_i_do_3_title": "Stakeholder Coordination & Governance",
"what_i_do_3_body": "I act as the interface between IT, business departments, and external partners — with clear documentation structures, quality standards, and aligned ownership models.",
"what_i_do_4_title": "End-to-End Project Ownership",
"what_i_do_4_body": "From concept to deployment — I take full responsibility for platform and integration projects, including strategy, coordination, and lasting adoption.",
"work_heading": "Selected Work",
"work_1_title": "Internal PIM System",
"work_1_problem": "Magento's native capabilities and the fragmented workflows connecting marketing, procurement, product development, finance, and the website team created bottlenecks and data inconsistencies that were difficult to scale.",
"work_1_approach": "Initiated and led the development of an internal PIM system from concept to deployment, owning technical direction, architecture decisions, and rollout strategy.",
"work_1_problem": "Fragmented product data workflows across marketing, procurement, product development, finance, and the website team created bottlenecks and data inconsistencies that were difficult to scale.",
"work_1_approach": "Gathered and structured business requirements, designed the data model (entity schema, attribute structures, relationships), and specified data flows from heterogeneous sources. Managed delivery from concept to rollout.",
"work_1_outcome": "Streamlined cross-departmental product data workflows with a purpose-built internal tool — delivered at ~8090% lower cost than comparable SaaS solutions.",
"work_2_title": "Review Platform Migration",
"work_2_problem": "The company needed to migrate its customer review infrastructure from Reviews.io to Trusted Shops, involving multiple stakeholders across marketing, IT, and Customer Support.",
"work_2_approach": "Took end-to-end responsibility for the migration — coordinating cross-functional teams, managing the rollout timeline, and ensuring continuity of review data and processes.",
"work_2_problem": "The company needed to migrate its customer review infrastructure from Reviews.io to Trusted Shops involving multiple stakeholders across marketing, IT, and Customer Support, with a hard requirement on data continuity.",
"work_2_approach": "End-to-end project ownership: requirements gathering, coordination of all involved teams, rollout timeline management, and ensuring continuity of review data and processes throughout the transition.",
"work_2_outcome": "Successful platform transition with no disruption to customer-facing review flows.",
"work_3_title": "Workflow & Process Standardisation",
"work_3_problem": "Product and content workflows were inconsistent and manual, creating bottlenecks and high error rates across the team.",
"work_3_approach": "Introduced task tracking, documentation systems, and a TMS for landing page translations. Built a central knowledge base covering QA, uploads, and workflows.",
"work_3_problem": "Product and content workflows were inconsistent and manual, creating bottlenecks, high error rates, and limited scalability across the team.",
"work_3_approach": "Requirements analysis, introduction of task tracking and documentation systems, and a TMS for landing page translations. Built a central knowledge base covering QA, uploads, and workflows.",
"work_3_outcome": "Up to 90% efficiency gains in product workflows. ~60% reduction in translation turnaround time. ~5 hours saved per week in organisational overhead.",
"work_label_problem": "Problem",
@ -44,12 +45,21 @@
"how_i_work_body": "I start from the business problem, not the solution. Every system, process, or tool I introduce has to justify itself against the alternative of doing nothing — or doing less. I prioritise by impact, keep things as simple as the situation allows, and make sure changes actually stick through documentation, handover models, and stakeholder alignment.",
"languages_heading": "Languages",
"languages_list": "German & Hungarian — Native<br>English — C2<br>Italian & Japanese — A2",
"languages_list": "German & Hungarian — Native<br>English — C2",
"contact_cta_heading": "Get in touch",
"contact_cta_body": "Interested in working together?",
"contact_cta_link": "Send a message",
"contact_heading": "Contact",
"contact_intro": "Interested in working together or have feedback about the blog? Reach out via one of my socials or drop me an email.",
"contact_email_label": "Email"
"contact_email_label": "Email",
"meta_home_title": "Business Analyst & Solution Designer",
"meta_home_description": "Aron August Hohmann Business Analyst & Solution Designer based in Vienna. Requirements analysis, solution design, and system integration for digital platforms.",
"meta_blog_title": "Blog",
"meta_blog_description": "Articles on solution design, platform decisions, and digital processes by Aron August Hohmann.",
"meta_contact_title": "Contact",
"meta_contact_description": "Get in touch with Aron August Hohmann Business Analyst & Solution Designer based in Vienna."
}

View file

@ -7,6 +7,7 @@
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"deploy": "scp -r build/* root@85.215.224.52:/var/www/aronhohmann.eu/",
"prepare": "svelte-kit sync || echo ''",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"

174
src/lib/assets/favicon.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 93 KiB

View file

@ -0,0 +1,57 @@
<script lang="ts">
interface ArticleMeta {
publishedTime: string;
tags?: string[];
}
interface Props {
title: string;
description: string;
type?: 'website' | 'article';
canonicalUrl: string;
article?: ArticleMeta;
jsonLd?: Record<string, unknown>;
}
let {
title,
description,
type = 'website',
canonicalUrl,
article,
jsonLd
}: Props = $props();
const fullTitle = `${title} | Aron August Hohmann`;
</script>
<svelte:head>
<title>{fullTitle}</title>
<meta name="description" content={description} />
<!-- Canonical -->
<link rel="canonical" href={canonicalUrl} />
<!-- Open Graph -->
<meta property="og:type" content={type} />
<meta property="og:title" content={fullTitle} />
<meta property="og:description" content={description} />
<meta property="og:url" content={canonicalUrl} />
<meta property="og:site_name" content="Aron August Hohmann" />
<meta property="og:image" content="https://aronhohmann.eu/images/aron_august_hohmann.avif" />
<!-- Article-specific OG -->
{#if type === 'article' && article}
<meta property="article:published_time" content={article.publishedTime} />
{#if article.tags}
{#each article.tags as tag (tag)}
<meta property="article:tag" content={tag} />
{/each}
{/if}
{/if}
<!-- JSON-LD -->
{#if jsonLd}
{@html `<script type="application/ld+json">${JSON.stringify(jsonLd)}<\/script>`}
{/if}
</svelte:head>

View file

@ -0,0 +1,5 @@
---
name: Donauschwaben Online
url: https://donauschwaben.online
description: DSO is a Non-Profit Project that aims to spread awareness and education about the Danube Swabian people.
---

View file

@ -1,19 +1,32 @@
<script lang="ts">
import './layout.css';
import favicon from '$lib/assets/favicon.ico';
import favicon from '$lib/assets/favicon.svg';
import { getLocale, locales, localizeHref } from '$lib/paraglide/runtime';
import { m } from '$lib/paraglide/messages.js';
import { page } from '$app/state';
let { children } = $props();
const localeNames: Record<string, string> = {
en: 'English',
de: 'Deutsch'
};
</script>
<svelte:head><link rel="icon" href={favicon} /></svelte:head>
<svelte:head>
<link rel="icon" href={favicon} />
<!-- hreflang alternates -->
{#each [...locales] as locale (locale)}
<link
rel="alternate"
hreflang={locale}
href={`https://aronhohmann.eu${page.data.translationSlug
? localizeHref(`/blog/${page.data.translationSlug}`, { locale })
: page.data.metadata
? localizeHref('/blog', { locale })
: localizeHref(page.url.pathname, { locale })}`}
/>
{/each}
<link rel="alternate" hreflang="x-default" href={`https://aronhohmann.eu${page.url.pathname}`} />
</svelte:head>
<!-- Header -->
<header class="border-b fixed border-black w-full z-50">
@ -21,19 +34,18 @@
<nav class="flex gap-5 text-white items-center justify-center min-h-10" style="background-color: #0a3d57;">
{#each [...locales].sort() as locale}
<a
href={page.data.translationSlug
? localizeHref(`/blog/${page.data.translationSlug}`, { locale })
: page.data.metadata
href={page.data.translationSlug
? localizeHref(`/blog/${page.data.translationSlug}`, { locale })
: page.data.metadata
? localizeHref('/blog', { locale })
: localizeHref(page.url.pathname, { locale })}
data-sveltekit-reload
class="transition cursor-pointer"
data-sveltekit-reload
class="transition cursor-pointer"
>
{getLocale() === locale ? `> ${localeNames[locale]} <` : localeNames[locale]}
{getLocale() === locale ? `> ${localeNames[locale]} <` : localeNames[locale]}
</a>
{/each}
</nav>
<!-- Main Navigation -->
<nav id="main" class="bg-white border-b border-gray-200 flex justify-center items-center gap-8 px-5 min-h-10">
<a href="/{getLocale()}">{ m.nav_about() }</a>
@ -49,16 +61,15 @@
<!-- Footer -->
<footer class="flex flex-col justify-center items-center gap-5 mt-30 text-white px-1.5 pt-12" style="background-color: #0a3d57;">
<div class="opacity-60 mb-15">
<div class="mb-15">
<img
src="/images/rosemary.svg"
alt=""
width="100"
height="100"
style="filter: invert(1);"
src="/images/wappen_siegel.svg"
alt=""
width="200"
height="200"
style="filter: invert(1);"
/>
</div>
<div class="flex flex-row gap-2 mb-15">
<a href="/{getLocale()}">{ m.nav_about() }</a>
<span> | </span>
@ -68,13 +79,10 @@
<span> | </span>
<a href="/{getLocale()}/links">Links</a>
</div>
<div class="text-center">
<small>© Aron August Hohmann</small>
</div>
<div class="h-0.5"></div>
<nav class="text-xs text-center text-gray-200 w-full flex justify-center items-center gap-2 md:gap-5 min-h-10" style="background-color: #072d40;">
<a href="/{getLocale()}/l/imp">{ m.footer_imprint() }</a>
<span> | </span>

View file

@ -1,7 +1,44 @@
<script lang="ts">
import { m } from '$lib/paraglide/messages.js';
import { getLocale } from '$lib/paraglide/runtime';
import SEO from '$lib/components/SEO.svelte';
import { page } from '$app/state';
const locale = getLocale();
const canonicalUrl = `https://aronhohmann.eu${page.url.pathname}`;
const personJsonLd = {
'@context': 'https://schema.org',
'@type': 'Person',
name: 'Aron August Hohmann',
url: 'https://aronhohmann.eu',
image: 'https://aronhohmann.eu/images/aron_august_hohmann.avif',
jobTitle: 'Business Analyst & Solution Designer',
worksFor: {
'@type': 'Organization',
name: 'Holzkern Time for Nature GmbH'
},
address: {
'@type': 'PostalAddress',
addressLocality: 'Vienna',
addressCountry: 'AT'
},
sameAs: [
'https://www.linkedin.com/in/aron-august-hohmann/',
'https://aronhohmann.eu'
]
};
</script>
<SEO
title={m.meta_home_title()}
description={m.meta_home_description()}
type="website"
{canonicalUrl}
jsonLd={personJsonLd}
/>
<!-- Hero -->
<section class="flex flex-col md:flex-row items-center md:items-start gap-10 max-w-3xl mx-auto px-4 py-16">
<img
@ -12,7 +49,7 @@
<div class="flex flex-col justify-center gap-2 self-center">
<h1 class="text-3xl font-bold">Aron August Hohmann</h1>
<p class="text-lg font-semibold text-gray-800">{m.hero_title()}</p>
<p class="text-[#156793] italic">{m.hero_subtitle()}</p>
<p class="text-brand italic">{m.hero_subtitle()}</p>
<p class="text-sm text-gray-500 mt-1">{m.hero_location()}</p>
</div>
</section>
@ -31,7 +68,7 @@
{ title: m.what_i_do_3_title(), body: m.what_i_do_3_body() },
{ title: m.what_i_do_4_title(), body: m.what_i_do_4_body() },
] as item}
<div class="border border-gray-300 p-5 hover:border-[#156793] transition-colors">
<div class="border border-gray-300 p-5 hover:border-brand transition-colors">
<h3 class="font-semibold mb-2 text-gray-900">{item.title}</h3>
<p class="text-sm text-gray-700 leading-relaxed">{item.body}</p>
</div>
@ -67,19 +104,19 @@
outcome: m.work_3_outcome(),
},
] as study}
<div class="border-l-2 border-[#156793] pl-6">
<div class="border-l-2 border-brand pl-6">
<h3 class="font-bold text-lg mb-4 text-gray-900">{study.title}</h3>
<div class="flex flex-col gap-3 text-sm">
<div>
<span class="font-semibold text-[#156793] uppercase tracking-wider text-xs">{m.work_label_problem()}</span>
<span class="font-semibold text-brand uppercase tracking-wider text-xs">{m.work_label_problem()}</span>
<p class="mt-1 text-gray-800 leading-relaxed">{study.problem}</p>
</div>
<div>
<span class="font-semibold text-[#156793] uppercase tracking-wider text-xs">{m.work_label_approach()}</span>
<span class="font-semibold text-brand uppercase tracking-wider text-xs">{m.work_label_approach()}</span>
<p class="mt-1 text-gray-800 leading-relaxed">{study.approach}</p>
</div>
<div>
<span class="font-semibold text-[#156793] uppercase tracking-wider text-xs">{m.work_label_outcome()}</span>
<span class="font-semibold text-brand uppercase tracking-wider text-xs">{m.work_label_outcome()}</span>
<p class="mt-1 text-gray-800 leading-relaxed">{study.outcome}</p>
</div>
</div>
@ -116,7 +153,7 @@
<section class="max-w-3xl mx-auto px-4 py-14">
<h2 class="text-xl font-bold mb-2 text-gray-900">{m.contact_cta_heading()}</h2>
<p class="text-gray-700 mb-4">{m.contact_cta_body()}</p>
<a href="/contact" class="inline-block bg-[#156793] text-white px-5 py-2 text-sm font-semibold hover:bg-[#0f4f70] transition-colors">
<a href="/contact" class="inline-block bg-brand text-white px-5 py-2 text-sm font-semibold hover:bg-[#0f4f70] transition-colors">
{m.contact_cta_link()}
</a>
</section>

View file

@ -1,10 +1,45 @@
<script lang="ts">
import { m } from '$lib/paraglide/messages.js';
import {getLocale} from "$lib/paraglide/runtime";
import SEO from '$lib/components/SEO.svelte';
import { page } from '$app/state';
const locale = getLocale();
const canonicalUrl = `https://aronhohmann.eu${page.url.pathname}`;
const personJsonLd = {
'@context': 'https://schema.org',
'@type': 'Person',
name: 'Aron August Hohmann',
url: 'https://aronhohmann.eu',
image: 'https://aronhohmann.eu/images/aron_august_hohmann.avif',
jobTitle: 'Business Analyst & Solution Designer',
worksFor: {
'@type': 'Organization',
name: 'Holzkern Time for Nature GmbH'
},
address: {
'@type': 'PostalAddress',
addressLocality: 'Vienna',
addressCountry: 'AT'
},
sameAs: [
'https://www.linkedin.com/in/aron-august-hohmann/',
'https://aronhohmann.eu'
]
};
let { data } = $props();
</script>
<SEO
title={m.meta_blog_title()}
description={m.meta_blog_description()}
type="website"
{canonicalUrl}
jsonLd={personJsonLd}
/>
<div class="max-w-2xl mx-auto px-4 py-12">
<h1 class="text-3xl font-bold mb-8">Blog</h1>
@ -16,7 +51,7 @@
<li class="py-6">
<a href={`/${getLocale()}/blog/${post.slug}`} class="group block">
<p class="text-sm text-brand/80">{post.date}</p>
<h2 class="text-xl font-semibold group-hover:text-[#156793] transition">{post.title}</h2>
<h2 class="text-xl font-semibold group-hover:text-brand transition">{post.title}</h2>
<p class="text-gray-600">{post.description}</p>
</a>
</li>

View file

@ -1,14 +1,51 @@
<script lang="ts">
import { m } from '\$lib/paraglide/messages.js';
import SEO from '$lib/components/SEO.svelte';
import { page } from '$app/state';
let { data } = $props();
const { metadata, content: Content } = data;
import { m } from '\$lib/paraglide/messages.js';
const canonicalUrl = `https://aronhohmann.eu${page.url.pathname}`;
const blogPostingJsonLd = {
'@context': 'https://schema.org',
'@type': 'BlogPosting',
headline: metadata.title,
description: metadata.description,
datePublished: metadata.date,
url: canonicalUrl,
inLanguage: metadata.lang,
author: {
'@type': 'Person',
name: 'Aron August Hohmann',
url: 'https://aronhohmann.eu'
},
publisher: {
'@type': 'Person',
name: 'Aron August Hohmann',
url: 'https://aronhohmann.eu'
},
...(metadata.tags && { keywords: metadata.tags.join(', ') })
};
</script>
<SEO
title={metadata.title}
description={metadata.description}
type="article"
{canonicalUrl}
article={{
publishedTime: metadata.date,
tags: metadata.tags
}}
jsonLd={blogPostingJsonLd}
/>
<div class="max-w-2xl mx-auto px-4 py-12">
<a href="/blog" class="text-sm text-[#156793] hover:text-[#0f4f70] transition mb-8 block">{ m.back() }</a>
<a href="/blog" class="text-sm text-brand hover:text-[#0f4f70] transition mb-8 block">{ m.back() }</a>
<h1 class="text-4xl font-bold mb-2">{data.metadata.title}</h1>
<p class="text-gray-400 text-sm mb-8">{data.metadata.date}</p>

View file

@ -1,6 +1,34 @@
<script lang="ts">
import { m } from '$lib/paraglide/messages.js';
const email = atob('bWFpbEBhcm9uaG9obWFubi5ldQ==');
import { getLocale } from '$lib/paraglide/runtime';
import SEO from '$lib/components/SEO.svelte';
import { page } from '$app/state';
const locale = getLocale();
const canonicalUrl = `https://aronhohmann.eu${page.url.pathname}`;
const personJsonLd = {
'@context': 'https://schema.org',
'@type': 'Person',
name: 'Aron August Hohmann',
url: 'https://aronhohmann.eu',
image: 'https://aronhohmann.eu/images/aron_august_hohmann.avif',
jobTitle: 'Business Analyst & Solution Designer',
worksFor: {
'@type': 'Organization',
name: 'Holzkern Time for Nature GmbH'
},
address: {
'@type': 'PostalAddress',
addressLocality: 'Vienna',
addressCountry: 'AT'
},
sameAs: [
'https://www.linkedin.com/in/aron-august-hohmann/',
'https://aronhohmann.eu'
]
};
import { siMastodon, siGithub, siXing } from 'simple-icons';
@ -14,8 +42,17 @@
},
{ icon: siXing, label: 'Xing', href: 'https://www.xing.com/profile/AronAugust_Hohmann', handle: 'AronAugust_Hohmann' },
];
</script>
<SEO
title={m.meta_contact_title()}
description={m.meta_contact_description()}
type="website"
{canonicalUrl}
jsonLd={personJsonLd}
/>
<div class="max-w-3xl mx-auto px-4 py-16">
<h1 class="text-3xl font-bold mb-10">{m.contact_heading()}</h1>

View file

@ -1,13 +1,17 @@
# Impressum
**20.10.2025**
**01.03.2026**
### Eigentümer, Betreiber und Inhaltlich Verantwortlicher
Aron August Hohmann
Brunnengasse 23/13
1160 Wien
---
Kontakt: [aronhohmann.eu/contact](/contact)
### Blattlinie

View file

@ -1,6 +1,6 @@
# Datenschutzerklärung
**20.10.2025**
**01.03.2026**
## 1. Auf der Webseite

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 40 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 165 KiB

View file

@ -1,3 +1,2 @@
# allow crawling everything by default
User-agent: *
Disallow:
Disallow: /l/