diff --git a/package.json b/package.json
index d596b55..a1e7cb3 100644
--- a/package.json
+++ b/package.json
@@ -16,9 +16,12 @@
"@tailwindcss/typography": "^0.5.20",
"@tailwindcss/vite": "^4.3.3",
"astro": "^7.3.5",
+ "plaiceholder": "^3.0.0",
+ "sharp": "^0.35.5",
"tailwindcss": "^4.3.3"
},
"devDependencies": {
+ "@types/node": "^26.6.4",
"daisyui": "^5.7.46"
}
}
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 467250a..d63e65a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -10,20 +10,29 @@ importers:
dependencies:
'@lucide/astro':
specifier: ^1.48.0
- version: 1.48.0(astro@7.3.5(jiti@2.7.0))
+ version: 1.48.0(astro@7.3.5(@types/node@26.6.4)(jiti@2.7.0))
'@tailwindcss/typography':
specifier: ^0.5.20
version: 0.5.20(tailwindcss@4.3.3)
'@tailwindcss/vite':
specifier: ^4.3.3
- version: 4.3.3(vite@8.3.1(esbuild@0.28.2)(jiti@2.7.0))
+ version: 4.3.3(vite@8.3.1(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0))
astro:
specifier: ^7.3.5
- version: 7.3.5(jiti@2.7.0)
+ version: 7.3.5(@types/node@26.6.4)(jiti@2.7.0)
+ plaiceholder:
+ specifier: ^3.0.0
+ version: 3.0.0(sharp@0.35.5(@types/node@26.6.4))
+ sharp:
+ specifier: ^0.35.5
+ version: 0.35.5(@types/node@26.6.4)
tailwindcss:
specifier: ^4.3.3
version: 4.3.3
devDependencies:
+ '@types/node':
+ specifier: ^26.6.4
+ version: 26.6.4
daisyui:
specifier: ^5.7.46
version: 5.7.46
@@ -810,6 +819,9 @@ packages:
'@types/nlcst@2.0.3':
resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==}
+ '@types/node@26.6.4':
+ resolution: {integrity: sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg==}
+
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
@@ -1331,6 +1343,11 @@ packages:
resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==}
engines: {node: '>=12'}
+ plaiceholder@3.0.0:
+ resolution: {integrity: sha512-jwHxxHPnr1BwRzPCeZgEK2BMsEy2327sWynw3qb6XC/oGgGDUTPtR8pFxFQmNArhMBwhkUbUr5OPhhIJpCa8eQ==}
+ peerDependencies:
+ sharp: '>= 0.30.6'
+
postcss-selector-parser@6.0.10:
resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
engines: {node: '>=4'}
@@ -1464,6 +1481,9 @@ packages:
uncrypto@0.1.3:
resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==}
+ undici-types@8.9.0:
+ resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==}
+
undici@8.11.2:
resolution: {integrity: sha512-u4UB2/IrKdU6lFxumHmmo1a3fCQO5tzQllRorfoRS63txhrB7xTpSn1PftwC4qEHkOaqP95fCWW4lJzwErwzhQ==}
engines: {node: '>=22.19.0'}
@@ -1884,8 +1904,7 @@ snapshots:
'@esbuild/win32-x64@0.28.2':
optional: true
- '@img/colour@1.1.0':
- optional: true
+ '@img/colour@1.1.0': {}
'@img/sharp-darwin-arm64@0.35.5':
optionalDependencies:
@@ -2010,9 +2029,9 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.6.0
- '@lucide/astro@1.48.0(astro@7.3.5(jiti@2.7.0))':
+ '@lucide/astro@1.48.0(astro@7.3.5(@types/node@26.6.4)(jiti@2.7.0))':
dependencies:
- astro: 7.3.5(jiti@2.7.0)
+ astro: 7.3.5(@types/node@26.6.4)(jiti@2.7.0)
'@napi-rs/wasm-runtime@1.2.4(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
dependencies:
@@ -2185,12 +2204,12 @@ snapshots:
postcss-selector-parser: 6.0.10
tailwindcss: 4.3.3
- '@tailwindcss/vite@4.3.3(vite@8.3.1(esbuild@0.28.2)(jiti@2.7.0))':
+ '@tailwindcss/vite@4.3.3(vite@8.3.1(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0))':
dependencies:
'@tailwindcss/node': 4.3.3
'@tailwindcss/oxide': 4.3.3
tailwindcss: 4.3.3
- vite: 8.3.1(esbuild@0.28.2)(jiti@2.7.0)
+ vite: 8.3.1(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)
'@tybys/wasm-util@0.10.4':
dependencies:
@@ -2215,6 +2234,10 @@ snapshots:
dependencies:
'@types/unist': 3.0.3
+ '@types/node@26.6.4':
+ dependencies:
+ undici-types: 8.9.0
+
'@types/unist@3.0.3': {}
'@ungap/structured-clone@1.4.0': {}
@@ -2232,7 +2255,7 @@ snapshots:
aria-query@5.3.2: {}
- astro@7.3.5(jiti@2.7.0):
+ astro@7.3.5(@types/node@26.6.4)(jiti@2.7.0):
dependencies:
'@astrojs/compiler-rs': 0.5.1
'@astrojs/internal-helpers': 0.11.0
@@ -2282,13 +2305,13 @@ snapshots:
unifont: 0.7.5
unstorage: 1.17.5
verkit: 0.4.1
- vite: 8.3.1(esbuild@0.28.2)(jiti@2.7.0)
- vitefu: 1.1.3(vite@8.3.1(esbuild@0.28.2)(jiti@2.7.0))
+ vite: 8.3.1(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)
+ vitefu: 1.1.3(vite@8.3.1(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0))
xxhash-wasm: 1.1.0
yargs-parser: 22.0.0
zod: 4.6.5
optionalDependencies:
- sharp: 0.35.5
+ sharp: 0.35.5(@types/node@26.6.4)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -2754,6 +2777,10 @@ snapshots:
picomatch@4.0.7: {}
+ plaiceholder@3.0.0(sharp@0.35.5(@types/node@26.6.4)):
+ dependencies:
+ sharp: 0.35.5(@types/node@26.6.4)
+
postcss-selector-parser@6.0.10:
dependencies:
cssesc: 3.0.0
@@ -2833,10 +2860,9 @@ snapshots:
sax@1.6.1: {}
- semver@7.8.5:
- optional: true
+ semver@7.8.5: {}
- sharp@0.35.5:
+ sharp@0.35.5(@types/node@26.6.4):
dependencies:
'@img/colour': 1.1.0
detect-libc: 2.1.2
@@ -2867,7 +2893,7 @@ snapshots:
'@img/sharp-win32-arm64': 0.35.5
'@img/sharp-win32-ia32': 0.35.5
'@img/sharp-win32-x64': 0.35.5
- optional: true
+ '@types/node': 26.6.4
shiki@4.4.3:
dependencies:
@@ -2931,6 +2957,8 @@ snapshots:
uncrypto@0.1.3: {}
+ undici-types@8.9.0: {}
+
undici@8.11.2: {}
unified@11.0.5:
@@ -2997,7 +3025,7 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
- vite@8.3.1(esbuild@0.28.2)(jiti@2.7.0):
+ vite@8.3.1(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0):
dependencies:
lightningcss: 1.33.0
picomatch: 4.0.7
@@ -3005,13 +3033,14 @@ snapshots:
rolldown: 1.2.11
tinyglobby: 0.2.17
optionalDependencies:
+ '@types/node': 26.6.4
esbuild: 0.28.2
fsevents: 2.3.3
jiti: 2.7.0
- vitefu@1.1.3(vite@8.3.1(esbuild@0.28.2)(jiti@2.7.0)):
+ vitefu@1.1.3(vite@8.3.1(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)):
optionalDependencies:
- vite: 8.3.1(esbuild@0.28.2)(jiti@2.7.0)
+ vite: 8.3.1(@types/node@26.6.4)(esbuild@0.28.2)(jiti@2.7.0)
xxhash-wasm@1.1.0: {}
diff --git a/public/annaelbe.svg b/public/hamburg/2026/annaelbe.svg
similarity index 99%
rename from public/annaelbe.svg
rename to public/hamburg/2026/annaelbe.svg
index 1cc7d6b..507e2e2 100644
--- a/public/annaelbe.svg
+++ b/public/hamburg/2026/annaelbe.svg
@@ -1,685 +1,685 @@
-
-
-
-
+
+
+
+
diff --git a/public/bezahlkarte.png b/public/hamburg/2026/bezahlkarte.png
similarity index 100%
rename from public/bezahlkarte.png
rename to public/hamburg/2026/bezahlkarte.png
diff --git a/public/ccchh.svg b/public/hamburg/2026/ccchh.svg
similarity index 100%
rename from public/ccchh.svg
rename to public/hamburg/2026/ccchh.svg
diff --git a/public/citydataexplosion.svg b/public/hamburg/2026/citydataexplosion.svg
similarity index 100%
rename from public/citydataexplosion.svg
rename to public/hamburg/2026/citydataexplosion.svg
diff --git a/public/didays2026.ics b/public/hamburg/2026/didays2026.ics
similarity index 100%
rename from public/didays2026.ics
rename to public/hamburg/2026/didays2026.ics
diff --git a/public/digitalcourage.svg b/public/hamburg/2026/digitalcourage.svg
similarity index 100%
rename from public/digitalcourage.svg
rename to public/hamburg/2026/digitalcourage.svg
diff --git a/public/endof10.svg b/public/hamburg/2026/endof10.svg
similarity index 100%
rename from public/endof10.svg
rename to public/hamburg/2026/endof10.svg
diff --git a/public/hamburg/2026/logo.svg b/public/hamburg/2026/logo.svg
new file mode 100644
index 0000000..a03b0d2
--- /dev/null
+++ b/public/hamburg/2026/logo.svg
@@ -0,0 +1,287 @@
+
+
diff --git a/public/logo_social.png b/public/hamburg/2026/logo_social.png
similarity index 100%
rename from public/logo_social.png
rename to public/hamburg/2026/logo_social.png
diff --git a/public/ogr.svg b/public/hamburg/2026/ogr.svg
similarity index 100%
rename from public/ogr.svg
rename to public/hamburg/2026/ogr.svg
diff --git a/public/osm.svg b/public/hamburg/2026/osm.svg
similarity index 100%
rename from public/osm.svg
rename to public/hamburg/2026/osm.svg
diff --git a/public/repaircafe.svg b/public/hamburg/2026/repaircafe.svg
similarity index 98%
rename from public/repaircafe.svg
rename to public/hamburg/2026/repaircafe.svg
index 135a3bd..2ef4228 100644
--- a/public/repaircafe.svg
+++ b/public/hamburg/2026/repaircafe.svg
@@ -3,8 +3,8 @@