Compare commits
10 commits
92b94dbd06
...
74063a3bf1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
74063a3bf1 | ||
|
|
c6d0fa30bb | ||
|
|
fdc26c9b92 | ||
|
|
89db801c46 | ||
|
|
e253375773 | ||
|
|
2bbf353a25 | ||
|
|
4686dcd6c1 | ||
|
|
4b34cf1fb7 | ||
|
|
f6870cb67e | ||
|
|
1aa6183148 |
17 changed files with 529 additions and 111 deletions
33
README.md
33
README.md
|
|
@ -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`
|
||||
|
|
|
|||
|
|
@ -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 80–90 % 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."
|
||||
}
|
||||
|
|
@ -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 ~80–90% 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."
|
||||
}
|
||||
|
|
@ -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
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 |
57
src/lib/components/SEO.svelte
Normal file
57
src/lib/components/SEO.svelte
Normal 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>
|
||||
5
src/links/donauschwaben.online.md
Normal file
5
src/links/donauschwaben.online.md
Normal 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.
|
||||
---
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 |
31
static/images/wappen_siegel.svg
Normal file
31
static/images/wappen_siegel.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 165 KiB |
|
|
@ -1,3 +1,2 @@
|
|||
# allow crawling everything by default
|
||||
User-agent: *
|
||||
Disallow:
|
||||
Disallow: /l/
|
||||
Loading…
Add table
Reference in a new issue