diff --git a/public/header/minicubes_lazaro.png b/public/header/minicubes_lazaro.png new file mode 100644 index 0000000..3f59eff Binary files /dev/null and b/public/header/minicubes_lazaro.png differ diff --git a/public/header/mpibgc_field.png b/public/header/mpibgc_field.png new file mode 100644 index 0000000..78507ed Binary files /dev/null and b/public/header/mpibgc_field.png differ diff --git a/public/header/workshop_kigali.png b/public/header/workshop_kigali.png new file mode 100644 index 0000000..860cbe7 Binary files /dev/null and b/public/header/workshop_kigali.png differ diff --git a/public/logo_ellis_jena.png b/public/logo_ellis_jena.png index 3f9e944..e56d278 100644 Binary files a/public/logo_ellis_jena.png and b/public/logo_ellis_jena.png differ diff --git a/public/logo_esa.png b/public/logo_esa.png index 6e40547..f007e8b 100644 Binary files a/public/logo_esa.png and b/public/logo_esa.png differ diff --git a/src/app/page.mdx b/src/app/page.mdx index ba77624..b0398f0 100644 --- a/src/app/page.mdx +++ b/src/app/page.mdx @@ -79,18 +79,18 @@ export default function Landing() { avatarSrc="publication_preview/requenamesa_earthvision_2021.gif" /> - - diff --git a/src/app/science/page.mdx b/src/app/science/page.mdx index bf81aa0..b5421d4 100644 --- a/src/app/science/page.mdx +++ b/src/app/science/page.mdx @@ -1,28 +1,52 @@ -# Towards Earth surface forecasting +import { CustomCard, CustomCardHorizontal } from '@/components/CustomCard'; + -## Land Surface Foundation Models +![Stylistic rendering of satellite images and a globe. (© L. Alonso/MPI-BGC)](/header/minicubes_lazaro.png) -## Early Warning +# Towards Earth surface forecasting -## Geospatial Vegetation Forecasting +The EarthNet Initiative develops machine learning models to forecast the Earth's surface dynamics. We take a data-centric stance by primarily leveraging high-resolution satellite remote sensing to forecast and monitor responses of the terrestrial biosphere to weather patterns on different time scales. Our research focuses on the dynamics of the Earth system to enable a wide range of applications around the mitigation of complex climate risks, for instance through impact-based forecasts and early warning systems for extreme weather events. -## Drought Impacts +## What we do +1. **Large-scale satellite image deep learning**: We develop datasets and train large-scale deep neural networks on satellite imagery, to enable a multitude of land surface oriented downstream applications. +2. **Climate risk mitigation**: We study our approaches in the context of extreme climate risks and their associated impacts. In particular, we assess how our AI approaches may support societal responses to changing climate risks. +3. **Tailored machine learning for geoscience**: We adapt and design tailored neural network architectures for uni- and multi-modal environmental tasks. This includes accounting for challenging scenarios like long-range interactions, ecological memory or non-IID datasets. +4. **Collaboration with stakeholders**: We engage with stakeholders from NGOs and the public sector to transfer our scientific findings and methods into tangible real-world impact. -## Heatwave Nowcasting +## Vision +We aim to address gaps in traditional approaches to modeling the land surface, by leveraging machine learning to directly work with the only globally-available observed data: satellite remote sensing. Through an interdisciplinary team with expertise in both, Geosciences and machine learning, we tackle unresolved challenges in forecasting the Earth’s surface to test our process understanding and ultimately contribute to improved climate risk mitigation. -## Anticipatory Action -## Vegetation structure +# Our third-party funded projects -## Carbon cycle monitoring +
+ -# Our thrid-party funded projects + -## [WeatherGenerator](/science/weathergenerator) + -## [ELIAS](/science/elias) + -## [DeepExtremes](/science/deepextremes) +
-## [DeepCube](/science/deepcube) \ No newline at end of file diff --git a/src/components/CustomCard.tsx b/src/components/CustomCard.tsx index b1bb6e4..305a9dc 100644 --- a/src/components/CustomCard.tsx +++ b/src/components/CustomCard.tsx @@ -9,11 +9,18 @@ import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { ComponentType } from "react"; import { FaExternalLinkAlt } from "react-icons/fa"; +// Add this helper function at the top +const isExternalUrl = (url?: string) => { + if (!url) return false; + return url.startsWith('http://') || url.startsWith('https://') || url.startsWith('//'); +}; + + type CustomCardProps = { title: string; description: string; href: string; - target?: string; + target?: string; // Keep this optional for manual override if needed avatarSrc?: string | null; avatarFallback?: string; showIcon?: boolean; @@ -26,7 +33,7 @@ export const CustomCard = ({ title, description, href, - target = "_blank", + target, // Remove default value, we'll determine it automatically avatarSrc = null, avatarFallback = "CN", showIcon = false, @@ -34,6 +41,9 @@ export const CustomCard = ({ iconSize = 24, className = "", }: CustomCardProps) => { + const isExternal = isExternalUrl(href); + const linkTarget = target || (isExternal ? "_blank" : "_self"); + return ( @@ -57,9 +67,14 @@ export const CustomCard = ({
{href ? ( - + {title} - + {isExternal && } ) : ( title @@ -81,7 +96,7 @@ export const CustomCardHorizontal = ({ title, description, href, - target = "_blank", + target, // Remove default value avatarSrc = null, avatarFallback = "CN", showIcon = false, @@ -89,40 +104,53 @@ export const CustomCardHorizontal = ({ iconSize = 24, className = "", }: CustomCardProps) => { + const isExternal = isExternalUrl(href); + const linkTarget = target || (isExternal ? "_blank" : "_self"); + return ( -
- {/* Image Section — responsive positioning */} -
- {avatarSrc ? ( - - - {avatarFallback} - - ) : showIcon && IconComponent ? ( -
- +
+ {/* Image Section — responsive positioning */} +
+ {avatarSrc ? ( + + + {avatarFallback} + + ) : showIcon && IconComponent ? ( +
+ +
+ ) : null}
- ) : null} -
- {/* Content Section — always left aligned */} -
- - {href ? ( - - {title} - - - ) : ( - title - )} - - - {description} - -
-
- + {/* Content Section — always left aligned */} +
+ + {href ? ( + + {title} + {isExternal && } + + ) : ( + title + )} + + + {description} + +
+
+ ); -} +} \ No newline at end of file diff --git a/src/components/Funding.tsx b/src/components/Funding.tsx index 625a329..2a91b2b 100644 --- a/src/components/Funding.tsx +++ b/src/components/Funding.tsx @@ -11,7 +11,7 @@ const Logo = ({ logo }: { logo: LogoItem }) => { alt={logo.alt} width={logo.width} height={logo.height} - className="h-8 w-auto" + className="h-auto w-auto max-h-8 sm:max-h-12 object-contain" priority /> ); @@ -37,7 +37,7 @@ const RenderLogo = ({ logo, defaultLogoText }: { if (Array.isArray(logo)) { return ( -
+
{logo.map((item, index) => ( ))}