Files
herbapi/herbapi-ui/src/pages/sources.rs
T
florian.berthold f5d8149fb8 Add wildlife display, species filtering, updated data sources
- Species struct: 13 new wildlife fields (nectar/pollen, bee/butterfly/bird counts, native status)
- Species list: filter dropdowns for plant_layer, nitrogen_fixer, drought_tolerance, native_status
- Species detail: Wildlife & Ecology card with visual nectar/pollen bars, bee counts, native badges
- Data sources page: added NaturaDB, Dreschflegel, Bingenheimer Saatgut
- API: list_species now supports filter query params
2026-03-15 01:02:30 +01:00

122 lines
5.0 KiB
Rust

use dioxus::prelude::*;
struct DataSource {
name: &'static str,
url: &'static str,
description: &'static str,
data_used: &'static str,
license: &'static str,
}
const SOURCES: &[DataSource] = &[
DataSource {
name: "GBIF",
url: "https://gbif.org",
description: "Global Biodiversity Information Facility — the world's largest open biodiversity data network.",
data_used: "Taxonomy and German common names. Used for species name lookups and vernacular name enrichment.",
license: "CC0",
},
DataSource {
name: "Reinsaat",
url: "https://reinsaat.at",
description: "Austrian biodynamic seed producer.",
data_used: "Cultivar data, sowing calendars, spacing info. Scraped from product catalog.",
license: "Proprietary",
},
DataSource {
name: "Magic Garden Seeds",
url: "https://magicgardenseeds.com",
description: "Specialist seed shop with a wide range of rare and heritage varieties.",
data_used: "Cultivar data, growing info. Scraped from product catalog.",
license: "Proprietary",
},
DataSource {
name: "PFAF (Plants for a Future)",
url: "https://pfaf.org",
description: "Permaculture plant database with extensive information on useful plants.",
data_used: "Species data: uses, tolerances, hardiness zones, height/spread, bloom periods. Data from community SQLite export.",
license: "Open data",
},
DataSource {
name: "FloraWeb / BIOLFLOR",
url: "https://floraweb.de",
description: "German Federal Agency for Nature Conservation plant information system.",
data_used: "Ellenberg indicator values for soil pH, moisture, light requirements.",
license: "Public data",
},
DataSource {
name: "Arche Noah",
url: "https://arche-noah.at",
description: "Austrian heritage seed library dedicated to preserving crop diversity.",
data_used: "Cultivar data and heritage varieties.",
license: "Proprietary",
},
DataSource {
name: "Wikidata",
url: "https://wikidata.org",
description: "Free and open knowledge base providing structured data to Wikimedia projects and beyond.",
data_used: "Structured data: USDA zones, taxonomy links.",
license: "CC0",
},
DataSource {
name: "NaturaDB",
url: "https://naturadb.de",
description: "German native plant database with extensive wildlife interaction data.",
data_used: "Wildlife interaction data (pollinators, wild bees, butterflies, birds), native status classification, nectar/pollen values.",
license: "Content scraped for research",
},
DataSource {
name: "Dreschflegel",
url: "https://dreschflegel-saatgut.de",
description: "German organic seed cooperative offering open-pollinated and heritage varieties.",
data_used: "Cultivar data. Scraped from catalog.",
license: "Proprietary",
},
DataSource {
name: "Bingenheimer Saatgut",
url: "https://bingenheimersaatgut.de",
description: "Demeter-certified biodynamic seed company from Germany.",
data_used: "Cultivar data. Scraped from catalog.",
license: "Proprietary",
},
];
#[component]
pub fn Sources() -> Element {
rsx! {
div { class: "page sources-page",
h1 { "Data Sources" }
p { class: "sources-intro",
"HerbAPI aggregates plant data from multiple open sources. We are grateful to these projects for making botanical knowledge freely available."
}
div { class: "sources-grid",
for source in SOURCES.iter() {
div { class: "source-card",
div { class: "source-header",
h3 { class: "source-name", "{source.name}" }
a {
class: "source-url",
href: "{source.url}",
target: "_blank",
rel: "noopener",
"{source.url}"
}
}
p { class: "source-description", "{source.description}" }
div { class: "source-details",
div { class: "source-detail",
span { class: "source-detail-label", "Data used" }
span { class: "source-detail-value", "{source.data_used}" }
}
div { class: "source-detail",
span { class: "source-detail-label", "License" }
span { class: "source-detail-value source-license", "{source.license}" }
}
}
}
}
}
}
}
}