Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,798 changes: 1,236 additions & 1,562 deletions package-lock.json

Large diffs are not rendered by default.

28 changes: 14 additions & 14 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,33 @@
"build": "astro build",
"preview": "astro preview",
"astro": "astro",
"check": "prettier --check . && eslint 'src/**/*.{js,astro}'",
"check": "prettier --check . && eslint 'src/**/*.{ts,js,astro}'",
"prettier": "prettier"
},
"dependencies": {
"@fontsource/poppins": "^5.2.7",
"@jop-software/astro-cookieconsent": "^3.0.1",
"@tailwindcss/vite": "^4.1.18",
"astro": "^5.16.11",
"@tailwindcss/vite": "^4.2.4",
"astro": "^6.2.2",
"astro-icon": "^1.1.5",
"astro-pagefind": "^1.8.5",
"maplibre-gl": "^5.16.0",
"preline": "^3.2.3",
"sass": "^1.97.2",
"astro-pagefind": "^1.8.6",
"maplibre-gl": "^5.24.0",
"preline": "^4.1.3",
"sass": "^1.99.0",
"scrollama": "^3.2.0",
"tailwindcss": "^4.1.18",
"tailwindcss": "^4.2.4",
"vanilla-cookieconsent": "^3.1.0"
},
"devDependencies": {
"@iconify-json/gis": "^1.2.5",
"@iconify-json/mdi": "^1.2.3",
"@typescript-eslint/eslint-plugin": "^8.53.0",
"@typescript-eslint/parser": "^8.53.0",
"eslint": "^9.39.2",
"@typescript-eslint/eslint-plugin": "^8.59.2",
"@typescript-eslint/parser": "^8.59.2",
"eslint": "^10.3.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-astro": "^1.5.0",
"prettier": "^3.8.0",
"eslint-plugin-astro": "^1.7.0",
"prettier": "^3.8.3",
"prettier-plugin-astro": "^0.14.1",
"prettier-plugin-tailwindcss": "^0.7.2"
"prettier-plugin-tailwindcss": "^0.8.0"
}
}
6 changes: 3 additions & 3 deletions src/components/News.astro
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const t = useTranslations(pageLang);
const p = useLocalePages(pageLang);

const pages = await getCollection('posts', (entry) => {
const [lang, ...slug] = entry.slug.split('/');
const [lang, ...slug] = entry.id.split('/');
if (lang !== pageLang) {
return undefined;
}
Expand All @@ -26,9 +26,9 @@ pages.sort((a, b) => b.data.date.getTime() - a.data.date.getTime());

const paths = pages
.map((page) => {
const [lang, ...slug] = page.slug.split('/');
const [lang, ...slug] = page.id.split('/');
if (slug.length === 0) {
throw new Error(`Empty slug: ${page.slug}`);
throw new Error(`Empty slug: ${page.id}`);
}
return {params: {lang: asLocale(lang), slug: slug.join('/')}, props: page};
})
Expand Down
2 changes: 1 addition & 1 deletion src/components/about/about-de.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Wir sind ein eingespieltes Team, das Kompetenzen aus Geographie und Informatik einbringt, um Ihre Probleme fachlich korrekt und effizient zu lösen. Unser Beraterstab unterstützt uns dabei gezielt mit Expertise aus der Umwelt- und Klimaforschung, Fernerkundung, Modellierung und dem Internet of Things.
Wir sind ein eingespieltes Team, das Kompetenzen aus Geographie und Informatik einbringt, um Ihre Probleme fachlich korrekt und effizient zu lösen. Unser Beirat unterstützt uns dabei gezielt mit Expertise aus der Umwelt- und Klimaforschung, Fernerkundung, Modellierung und dem Internet of Things.

Die Vision des Geo Engine-Teams ist Geodaten und Zeitreihen unkompliziert in Analysen und Geschäftsprozessen einzubringen. Wir setzen dabei unsere selbstentwickelte Plattform **Geo Engine** ein, die vielfältige Datenquellen anbindet, robuste Prozessierungen liefert und viele Schnittstellen bereitstellt. Die Anwendungsfälle in Unternehmen sind damit vielfältig: als Web-UI und via Python-Bibliothek für Data Scientists, als API für Prozessintegration und als Reports für Entscheidungsträger.

Expand Down
2 changes: 1 addition & 1 deletion src/components/services/Services.astro
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const p = useLocalePages(Astro.currentLocale);
const pageLang = Astro.currentLocale;

const services = await getCollection('services', (entry) => {
const [lang, ...slug] = entry.slug.split('/');
const [lang, ...slug] = entry.id.split('/');
if (lang !== pageLang) {
return undefined;
}
Expand Down
18 changes: 10 additions & 8 deletions src/content.config.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// 1. Import utilities from `astro:content`
import {defineCollection, z, reference} from 'astro:content';
import {defineCollection, reference} from 'astro:content';
import {z} from 'astro/zod';

// 2. Import loader(s)
import {glob, file} from 'astro/loaders';
Expand All @@ -12,13 +13,13 @@ const publications = defineCollection({
id: z.number(), // mandatory
authors: z.string().nonempty(),
title: z.string().nonempty(),
url: z.string().url(),
url: z.url().nonempty(),
source: z.string().nonempty(),
}),
});

const posts = defineCollection({
// loader: glob({pattern: '{de,en}/*.md', base: './src/posts'}),
loader: glob({pattern: '{de,en}/*.md', base: './src/content/posts'}),
schema: ({image}) =>
z.object({
title: z.string().nonempty(),
Expand All @@ -28,7 +29,7 @@ const posts = defineCollection({
});

const references = defineCollection({
// loader: glob({pattern: '{de,en}/*.md', base: './src/posts'}),
loader: glob({pattern: '{de,en}/*.md', base: './src/content/references'}),
schema: ({image}) =>
z.object({
title: z.string().nonempty(),
Expand All @@ -37,7 +38,7 @@ const references = defineCollection({
});

const services = defineCollection({
// loader: glob({pattern: '{de,en}/*.md', base: './src/services'}),
loader: glob({pattern: '{de,en}/*.md', base: './src/content/services'}),
schema: () =>
z.object({
title: z.string().nonempty().max(100),
Expand Down Expand Up @@ -65,6 +66,7 @@ const cookies = defineCollection({
});

const data = defineCollection({
loader: glob({pattern: '{de,en}/*.md', base: './src/content/data'}),
schema: ({image}) =>
z.object({
title: z.string().nonempty().max(100),
Expand All @@ -84,7 +86,7 @@ const data = defineCollection({
});

const scroller = defineCollection({
type: 'data',
loader: glob({pattern: '*.json', base: './src/content/scroller'}),
schema: ({image}) =>
z.array(
z.object({
Expand All @@ -96,8 +98,8 @@ const scroller = defineCollection({
en: z.string().nonempty(),
}),
location: z.object({
center: z.array(z.number().finite()).length(2),
zoom: z.number().finite().positive(),
center: z.array(z.number()).length(2),
zoom: z.number().positive(),
pitch: z.number().int().positive(),
bearing: z.number().int(),
}),
Expand Down
20 changes: 17 additions & 3 deletions src/data/publications.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,18 @@
[
{
"authors": "Seonyoung Park, Minji Koh, Haedam Baek, Minsu Cho, Byung-gil Kim, Zeyd Boukhers, Gyunam Park, Christian Beilschmidt, Johannes Drönner",
"title": "AI-BioDynamics: Artificial Intelligence for Biodiversity Mapping and Conservation Decision-Making",
"url": "https://doi.org/10.5194/egusphere-egu26-16158",
"source": "EGU General Assembly 2026, Vienna, Austria, 3–8 May 2026, EGU26-16158",
"id": 43
},
{
"authors": "Christian Beilschmidt, Johannes Drönner",
"title": "ML mit Satellitenbildern in der Geo Engine: Eine Operationalisierung von ML-Diensten",
"url": "https://pretalx.com/fossgis2026/talk/LKYU7Q/",
"source": "FOSSGIS 2026",
"id": 42
},
{
"authors": "Christian Beilschmidt, Dominik Brandenstein, Johannes Drönner, Michael Mattig, Bernhard Seeger",
"title": "Integrating AI into Research Data Workflows: Leveraging ONNX Models within Geo Engine for Analyzing Biodiversity Data",
Expand Down Expand Up @@ -107,14 +121,14 @@
{
"authors": "Christian Beilschmidt, Johannes Drönner",
"title": "Workflows in Geo Engine: Von der UI zum Python-Notebook und zurück",
"url": "https://av.tib.eu/media/56783",
"url": "https://doi.org/10.5446/56783",
"source": "FOSSGIS 2022",
"id": 26
},
{
"authors": "Christian Beilschmidt, Johannes Drönner",
"title": "Geoanwendungen und-verarbeitung in Rust: ein Einstieg in die GeoRust-Community",
"url": "https://av.tib.eu/media/56740",
"url": "https://doi.org/10.5446/56740",
"source": "FOSSGIS 2022",
"id": 25
},
Expand Down Expand Up @@ -149,7 +163,7 @@
{
"authors": "Christian Beilschmidt, Johannes Drönner, Michael Mattig",
"title": "Geo Engine: Explorative Datenanalyse mit raum-zeitlicher Workflowverarbeitung",
"url": "https://av.tib.eu/media/53871",
"url": "https://doi.org/10.5446/53871",
"source": "FOSSGIS 2021",
"id": 20
},
Expand Down
2 changes: 1 addition & 1 deletion src/i18n/translations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export const translations = {
'Wir sind ein interdisziplinäres Team, das Expertise aus Informatik, Geographie vereint und viel Erfahrung in Datenverarbeitung mitbringt.',
'team.link': 'Lernen Sie uns kennen!',
'team.leadership': 'Führungsteam',
'team.advisors': 'Berater',
'team.advisors': 'Beirat',
'team.publications': 'Publikationen',
'technology.title': 'Die Geo Engine: Unser offener Technologiestack',
'technology.text':
Expand Down
Binary file removed src/images/team/koslowski.jpeg
Binary file not shown.
13 changes: 12 additions & 1 deletion src/layouts/Layout.astro
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,18 @@ const pageTitle = `${title} - Geo Engine`;
}
<!-- Preline UI -->
<script>
import 'preline/dist/preline.js';
import {HSStaticMethods} from 'preline/dist/preline.js';

// Explicitly calling a method from the import prevents tree-shaking
const init = () => {
HSStaticMethods.autoInit();
};

// Standard Astro lifecycle event
document.addEventListener('astro:page-load', init);

// Re-init after transitions
document.addEventListener('astro:after-swap', init);
</script>
</body>
</html>
2 changes: 1 addition & 1 deletion src/pages/[lang]/data/[...slug].astro
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export async function getStaticPaths() {
const pages = await getCollection('data');

const paths = pages.map((page) => {
const [lang, ...slug] = page.slug.split('/');
const [lang, ...slug] = page.id.split('/');
return {params: {lang, slug: slug.join('/') || undefined}, props: page};
});

Expand Down
2 changes: 1 addition & 1 deletion src/pages/[lang]/posts/[...slug].astro
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export async function getStaticPaths() {
const pages = await getCollection('posts');

const paths = pages.map((page) => {
const [lang, ...slug] = page.slug.split('/');
const [lang, ...slug] = page.id.split('/');
return {params: {lang, slug: slug.join('/') || undefined}, props: page};
});

Expand Down
6 changes: 3 additions & 3 deletions src/pages/beispiele-referenzen.astro
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const t = useTranslations(Astro.currentLocale);
const pageLang = Astro.currentLocale;

const references = await getCollection('references', (entry) => {
const [lang, ...slug] = entry.slug.split('/');
const [lang, ...slug] = entry.id.split('/');
if (lang !== pageLang) {
return undefined;
}
Expand Down Expand Up @@ -57,12 +57,12 @@ function isNotLast<T>(arr: T[], index: number): boolean {
{
references.map((reference, i) => (
<>
<Section id={reference.slug}>
<Section id={reference.id}>
<h2 class="mb-4 text-2xl font-semibold">{reference.data.title}</h2>
<div class="reference">
<Picture
src={reference.data.image}
alt={reference.slug}
alt={reference.id}
widths={pictureWidths()}
class="float-right mx-auto rounded-xl object-cover pb-4 md:w-1/2 md:pl-4"
/>
Expand Down
4 changes: 2 additions & 2 deletions src/pages/data.astro
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const t = useTranslations(Astro.currentLocale);
const pageLang = Astro.currentLocale;

const data = await getCollection('data', (entry) => {
const [lang, ..._slug] = entry.slug.split('/');
const [lang, ..._slug] = entry.id.split('/');
if (lang !== pageLang) {
return undefined;
}
Expand All @@ -30,7 +30,7 @@ const data = await getCollection('data', (entry) => {
<!-- Card -->
{
data.map((datum) => (
<a class="group flex flex-col focus:outline-hidden" href={slugToDataLink(datum.slug)}>
<a class="group flex flex-col focus:outline-hidden" href={slugToDataLink(datum.id)}>
<div class="aspect-w-16 aspect-h-12 overflow-hidden rounded-2xl bg-gray-100 dark:bg-neutral-800">
<Image
class="rounded-2xl object-cover transition-transform duration-500 ease-in-out group-hover:scale-105 group-focus:scale-105"
Expand Down
2 changes: 1 addition & 1 deletion src/pages/data/[...slug].astro
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export async function getStaticPaths() {
const pages = await getCollection('data');

const paths = pages.map((page) => {
const [lang, ...slug] = page.slug.split('/');
const [lang, ...slug] = page.id.split('/');
return {params: {lang, slug: slug.join('/') || undefined}, props: page};
});

Expand Down
2 changes: 1 addition & 1 deletion src/pages/posts/[...slug].astro
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export async function getStaticPaths() {
const pages = await getCollection('posts');

const paths = pages.map((page) => {
const [lang, ...slug] = page.slug.split('/');
const [lang, ...slug] = page.id.split('/');
return {params: {lang, slug: slug.join('/') || undefined}, props: page};
});

Expand Down
6 changes: 3 additions & 3 deletions src/pages/services.astro
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const t = useTranslations(Astro.currentLocale);
const pageLang = Astro.currentLocale;

const services = await getCollection('services', (entry) => {
const [lang, ...slug] = entry.slug.split('/');
const [lang, ...slug] = entry.id.split('/');
if (lang !== pageLang) {
return undefined;
}
Expand All @@ -40,7 +40,7 @@ for (const referenceRef of new Set(services.flatMap((service) => service.data.re
{
services.map((service) => (
<>
<Section id={service.slug}>
<Section id={service.id}>
<h2 class="my-4 text-2xl font-semibold">{service.data.title}</h2>
<p>{service.body}</p>
</Section>
Expand All @@ -61,7 +61,7 @@ for (const referenceRef of new Set(services.flatMap((service) => service.data.re
{service.data.references
.map((referenceRef) => references.get(referenceRef))
.map((reference) => (
<a class="group relative block overflow-hidden rounded-lg" href={p('references') + `#${reference.slug}`}>
<a class="group relative block overflow-hidden rounded-lg" href={p('references') + `#${reference.id}`}>
<Image
class="size-40 w-full rounded-lg bg-gray-100 object-cover dark:bg-neutral-800"
src={reference.data.image}
Expand Down
3 changes: 1 addition & 2 deletions src/pages/ueber-uns.astro
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import mattig from '../images/team/Mattig.png';
import seeger from '../images/team/Seeger.jpg';
import schweitzer from '../images/team/Schweitzer.png';
import bendix from '../images/team/bendix.jpg';
import koslowski from '../images/team/koslowski.jpeg';
import kraemer from '../images/team/kraemer.jpeg';
import meyer from '../images/team/meyer.jpeg';
import wagner from '../images/team/wagner.jpeg';
Expand All @@ -27,7 +26,7 @@ const t = useTranslations(Astro.currentLocale);

const Intro = language === 'de' ? deIntro : enIntro;

const publications = await getCollection('publications');
const publications = (await getCollection('publications')).sort((a, b) => b.data.id - a.data.id);
---

<style>
Expand Down
Loading