diff --git a/.gitignore b/.gitignore index 53ffbcf..3652e61 100644 --- a/.gitignore +++ b/.gitignore @@ -63,6 +63,10 @@ instance/ # Sphinx documentation docs/_build/ +docs/src/.DS_Store +docs/src/img/.DS_Store +docs/src/overrides/.DS_Store +docs/.DS_Store # PyBuilder target/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..ec03dc0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,12 @@ +{ + "yaml.schemas": { + "https://squidfunk.github.io/mkdocs-material/schema.json": "mkdocs.yml" + }, + "yaml.customTags": [ + "!ENV scalar", + "!ENV sequence", + "tag:yaml.org,2002:python/name:material.extensions.emoji.to_svg", + "tag:yaml.org,2002:python/name:material.extensions.emoji.twemoji", + "tag:yaml.org,2002:python/name:pymdownx.superfences.fence_code_format" + ] +} \ No newline at end of file diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 7dac23f..3f17da6 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -23,21 +23,26 @@ nav: - Intro: "intro.md" - Services: "services.md" - Deployment: "deployment.md" - - Development - Contributing: "contributing.md" + - Contributing: "contributing.md" plugins: - search - +extra_css: + - overrides/stylesheets/extra.css theme: name: material custom_dir: src/overrides/ palette: - primary: black - scheme: default + primary: custom + accent: deep orange + features: - navigation.tabs - - navigation.tabs.sticky + - navigation.instant + - navigation.tracking + - navigation.top + - navigation.expand favicon: img/favicon.ico logo: img/logo.png diff --git a/docs/src/img/NASA_SunEarth.jpg b/docs/src/img/NASA_SunEarth.jpg new file mode 100644 index 0000000..8a3301d Binary files /dev/null and b/docs/src/img/NASA_SunEarth.jpg differ diff --git a/docs/src/img/aws_logo.svg b/docs/src/img/aws_logo.svg new file mode 100644 index 0000000..4715937 --- /dev/null +++ b/docs/src/img/aws_logo.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/docs/src/img/devseed_logo.svg b/docs/src/img/devseed_logo.svg new file mode 100644 index 0000000..d0041c6 --- /dev/null +++ b/docs/src/img/devseed_logo.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/src/img/downloaddeploy.png b/docs/src/img/downloaddeploy.png new file mode 100644 index 0000000..664e903 Binary files /dev/null and b/docs/src/img/downloaddeploy.png differ diff --git a/docs/src/img/eoapi_veda.png b/docs/src/img/eoapi_veda.png new file mode 100644 index 0000000..a159a4c Binary files /dev/null and b/docs/src/img/eoapi_veda.png differ diff --git a/docs/src/img/ingestdata.png b/docs/src/img/ingestdata.png new file mode 100644 index 0000000..aff4948 Binary files /dev/null and b/docs/src/img/ingestdata.png differ diff --git a/docs/src/img/msft_logo.svg b/docs/src/img/msft_logo.svg new file mode 100644 index 0000000..e77821b --- /dev/null +++ b/docs/src/img/msft_logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/src/img/nasa_logo.svg b/docs/src/img/nasa_logo.svg new file mode 100644 index 0000000..e776a4b --- /dev/null +++ b/docs/src/img/nasa_logo.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/src/img/pgstac_logo.png b/docs/src/img/pgstac_logo.png new file mode 100644 index 0000000..9fda7ec Binary files /dev/null and b/docs/src/img/pgstac_logo.png differ diff --git a/docs/src/img/sharevisualize.png b/docs/src/img/sharevisualize.png new file mode 100644 index 0000000..ce2cc24 Binary files /dev/null and b/docs/src/img/sharevisualize.png differ diff --git a/docs/src/img/stacfastapi_logo.png b/docs/src/img/stacfastapi_logo.png new file mode 100644 index 0000000..dcd8297 Binary files /dev/null and b/docs/src/img/stacfastapi_logo.png differ diff --git a/docs/src/img/tipg_logo.png b/docs/src/img/tipg_logo.png new file mode 100644 index 0000000..70dca42 Binary files /dev/null and b/docs/src/img/tipg_logo.png differ diff --git a/docs/src/img/titilerpgstac_logo.png b/docs/src/img/titilerpgstac_logo.png new file mode 100644 index 0000000..da49788 Binary files /dev/null and b/docs/src/img/titilerpgstac_logo.png differ diff --git a/docs/src/index.md b/docs/src/index.md index 529abab..bafe7ec 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -2,5 +2,7 @@ template: home.html title: Home +hide: + - navigation --- diff --git a/docs/src/overrides/assets/stylesheets/home.css b/docs/src/overrides/assets/stylesheets/home.css new file mode 100644 index 0000000..6575198 --- /dev/null +++ b/docs/src/overrides/assets/stylesheets/home.css @@ -0,0 +1,389 @@ +.md-main { + display: none; +} +.md-header { + background-color: black; +} +.md-tabs, +.md-header:not(.md-header--shadow) { + background: transparent; + box-shadow: none; + transition: background-color 125ms, + transform 125ms cubic-bezier(0.1, 0.7, 0.1, 1); +} + +.tx-container { + background: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.5)), + url(../../../img/NASA_SunEarth.jpg) no-repeat center top scroll; + background-color: #000; + background-size: cover; + transition: all ease 0.1s; + position: relative; + top: -5rem; + padding: 6rem 0 4rem; +} + +.tx-container:before { + display: block; + position: absolute; + content: ''; + height: clamp(6rem, 14vw, 12rem); + width: clamp(12rem, 40vw, 40rem); + background: var(--md-primary-fg-color); + mix-blend-mode: multiply; + border-radius: 0.5rem 0 0 0.5rem; + pointer-events: none; + z-index: 3; + right: 0; + bottom: -3rem; +} + +.tx-hero { + display: flex; + color: var(--md-primary-bg-color); + justify-content: center; + padding: 0 1rem; +} + +.media-attribution { + position: absolute; + top: 4rem; + right: 1rem; + z-index: 40; + max-width: calc(100% - 2rem); + display: inline-flex; + color: rgb(255, 255, 255); + border-radius: 320rem; + padding: 0rem 0.25rem; + font-size: 0.75rem; + line-height: 1.25rem; + background: rgba(68, 63, 63, 0.32); + overflow: hidden; +} +.media-attribution .twemoji { + font-size: 0.75rem; + height: initial; +} +.media-attribution strong { + display: block; + width: 100%; + max-width: 0px; + overflow: hidden; + font-size: 0.75rem; + font-weight: normal; + white-space: nowrap; + padding: 0rem; + opacity: 0; + transition: all 0.24s ease-in-out 0s; +} +.media-attribution a { + display: flex; + flex-flow: row; + align-items: center; + color: rgb(255, 255, 255); +} +.media-attribution a:hover strong { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 64vw; + padding: 0rem 0.5rem 0rem 0.25rem; + opacity: 1; + color: rgb(255, 255, 255); +} +.tx-hero h1 { + color: currentColor; + font-weight: 700; + font-size: clamp(1.25rem, 7vw, 3rem); + margin: 0; + line-height: 1.125; + text-shadow: 0 0 0.25rem rgba(0, 0, 0, 0.25); +} + +.tx-hero__content { + display: flex; + flex-flow: column nowrap; + margin: 0 auto; + align-items: stretch; +} + +.tx-hero__content .supheading { + color: currentColor; + text-transform: none; +} + +.tx-hero__content .button-wrapper { + display: flex; + gap: 1rem; + flex-flow: column nowrap; + align-items: stretch; +} + +.tx-hero .md-button { + display: inline-flex; + gap: 0.25rem; + align-items: center; + justify-content: center; + background-color: var(--md-default-bg-color); + color: var(--md-default-fg-color); + border-color: transparent; + text-transform: uppercase; + text-align: center; +} +.tx-hero .md-button img { + height: 1rem; + vertical-align: middle; +} + +.tx-hero .md-button--primary { + background-color: var(--md-primary-fg-color); + color: var(--md-default-bg-color); +} + +.tx-hero .md-button:focus, +.tx-hero .md-button:hover { + background-color: var(--md-accent-fg-color); + color: var(--md-default-bg-color); + border-color: var(--md-accent-fg-color); +} + +.feature-item { + display: flex; + flex-direction: column; + align-items: flex-start; + flex: 1 0 0; + align-self: stretch; + border-radius: 0.375rem; + background: #fff; + box-shadow: var(--boxShadowD); +} + +.feature-grid .feature-item { + height: 100%; +} + +.feature-item svg, +.feature-item img { + max-height: 8rem; + object-fit: contain; + padding: 0.5rem; + align-self: stretch; + text-align: center; + border-radius: 0.375rem 0.375rem 0rem 0rem; + border: 6px solid var(--md-primary-fg-color); +} + +.feature-item__description { + padding: 1rem; +} + +.top-hr { + margin-top: 42px; +} + +section + section { + padding: 2rem 0; +} + +.secondary-section { + background: rgb(245, 245, 245) none repeat scroll 0% 0%; + border-top: 1px solid rgb(222, 222, 222); + border-bottom: 1px solid rgb(222, 222, 222); +} + +.dark-section { + background: #2e2b2b; + color: var(--md-default-bg-color); +} + +.dark-section .md-typeset, +.dark-section .md-typeset h2, +.dark-section .md-typeset h3, +.dark-section .supheading { + color: var(--md-default-bg-color); +} +.gradient-section { + background: radial-gradient( + 100% 100% at 47.12% 100%, + rgba(207, 63, 2, 0.12) 0%, + rgba(255, 255, 255, 0) 100% + ), + linear-gradient( + 0deg, + rgba(255, 255, 255, 0.96) 0%, + rgba(255, 255, 255, 0.96) 100% + ), + #443f3f; +} +.gradient-section .supheading { + color: var(--md-default-fg-color); +} +.md-typeset mark { + background: initial; + box-shadow: var(--md-primary-fg-color) 0px -8px 0px 0px inset; +} +.feature-tout { + flex: 1; + width: 100%; +} +.feature-tout .twemoji { + font-size: 4rem; + height: auto; + position: relative; + margin-bottom: 1rem; + color: var(--md-primary-fg-color); +} +.feature-tout .twemoji:after { + position: absolute; + background: rgba(207, 63, 2, 0.12); + border-radius: 100%; + padding: 2.5rem; + content: ''; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.feature-grid { + display: grid; + align-items: stretch; + justify-items: center; + list-style: none; + margin: 0; + padding: 0; + grid-template-columns: 1fr; + gap: 1rem; +} + +.figure-collection { + display: flex; + flex-flow: column nowrap; + gap: 1rem; +} + +.figure-collection figure { + display: flex; + flex-flow: column nowrap; + margin: 1rem 0; + gap: 1rem; + position: relative; +} +.figure-collection figure img { + max-width: 100%; +} + +.text-centered { + text-align: center; +} + +.centered { + margin: 0 auto; + padding: 0 0.75rem; +} +.logo-grid { + align-items: center; +} +.logo-grid figure { + mix-blend-mode: luminosity; +} +a > img { + max-width: 100%; +} + +@media screen and (min-width: 40em) { + .tx-hero { + justify-content: stretch; + align-items: flex-start; + } + + .tx-hero__content { + justify-content: flex-start; + align-items: flex-start; + margin: 0; + } + + .tx-hero__content .button-wrapper { + flex-flow: row nowrap; + align-items: flex-start; + } + + .tx-hero__content .lead { + max-width: 60ch; + font-size: 1rem; + } + .feature-grid { + grid-template-columns: repeat(var(--cols), minmax(10px, 1fr)); + } + .figure-collection figure img { + max-width: 75%; + align-self: center; + } + #eoapi-benefits.figure-collection figure:last-of-type:after { + display: block; + position: absolute; + content: ''; + height: clamp(6rem, 14vw, 12rem); + width: 50vw; + background: var(--md-primary-fg-color); + mix-blend-mode: multiply; + border-radius: 0 0.5rem 0.5rem 0; + pointer-events: none; + z-index: -1; + bottom: 12rem; + left: -20vw; + } + + .width-160 { + max-width: 160ch; + } +} + +@media screen and (min-width: 60em) { + .tx-hero { + padding: 4rem 1rem 6rem; + } + .centered { + padding: 0; + } + .figure-collection figure { + flex-flow: row nowrap; + justify-content: flex-start; + gap: 2rem; + align-items: center; + } + + .figure-collection figure > * { + flex: 1; + flex-shrink: 0; + } + + .figure-collection figure img { + max-width: 50%; + } + #eoapi-benefits.figure-collection figure:nth-of-type(even) img { + margin-right: -5rem; + max-width: 100%; + } + #eoapi-benefits.figure-collection figure:nth-of-type(odd) img { + margin-left: -5rem; + max-width: 100%; + } + #eoapi-benefits.figure-collection figure:last-of-type:after { + bottom: 2rem; + left: -30vw; + } + .figure-collection figure:nth-of-type(even) img { + order: 1; + } + + .figure-collection figure > :first-child { + order: var(--figureOrder); + } + .md-typeset h2 { + font-size: 2rem; + line-height: 2.5rem; + } + section + section { + padding: 4rem 0; + } +} diff --git a/docs/src/overrides/home.html b/docs/src/overrides/home.html index f670e78..d356595 100644 --- a/docs/src/overrides/home.html +++ b/docs/src/overrides/home.html @@ -3,311 +3,310 @@ {% extends "main.html" %} {% block tabs %} {{ super() }} - - - -
-
-
-
-

The Earth Observation API

- -

Create a full Earth Observation API with Metadata, Raster and Vector services.

- - Get started - - - - Go to GitHub - - + + +
+ +
+
+
+
+

eoAPI

+

Earth Observation Data at Scale

+

Deployed in minutes

+

eoAPI makes massive earth observation (EO) data archives discoverable and + interoperable—the fastest and easiest way to configure, customize, and deploy a full Earth + Observation stack.

+ +

+ {% include ".icons/material/information-outline.svg" %} + Photo + ©NASA +

+ +
+
-
-
-
- - -
-
-

- - pgSTAC Database -

-

PostgreSQL schema and functions for Spatio-Temporal Asset Catalog (STAC).

-

Link: stac-utils/pgstac

-
- -
-

- - Metadata Service -

-

STAC API implementation with FastAPI.

-

Link: stac-utils/stac-fastapi

-
- -
-

- - Raster Service -

-

Dynamic tiler built on top of pgSTAC for Items and Collections.

-

Link: stac-utils/titiler-pgstac

-
- -
-

- - Vector Service -

-

Dynamic tiler built on top of PostgreSQL database.

-

Link: developmentseed/tipg

-
-
- -
-
-
-
+ + + +
+
+
+
+
What is eoAPI?
+

State-of-the-art services to enable data discovery, search, + visualization, and access. + +

+
+

eoAPI presents an open-source and reusable framework for harnessing earth + observation data. eoAPI takes the work out of constructing a cloud-native EO infrastructure through + a set of sensible defaults that fit most EO and geospatial infrastructure needs. Built with + modularity as a core principle, eoAPI can easily be customized to your needs.

+
+
+
    +
  • +
    + + {% include ".icons/material/database-marker-outline.svg" %} + +

    STAC Powered

    +

    A suite of STAC-focused technologies that consistently perform well as a backend

    +
    +
  • +
  • +
    + + {% include ".icons/material/folder-home.svg" %} + +

    Sensible Defaults

    +

    Seamless deployment, configuration, and customization while preserving flexibility. +

    +
    +
  • +
  • +
    + + {% include ".icons/material/cloud-braces.svg" %} + +

    Cloud agnostic

    +

    Quickly deploy, configure, and scale EO services, anywhere.

    +
    +
  • +
+
+
+
+ + +
+
+
+
+
End-To-End Earth Observation Infrastructure
+
+
    +
  • +
    + pgstac logo +
    +

    + Catalog Your Data +

    +
    + pgSTAC - Postgres STAC Extension +
    +

    pg-STAC is an optimized Postgres schema to index and search large-scale STAC + collections. +

    + stac-utils/pgstac +

    +
    +
  • +
    + stac-fastapi logo +
    +

    + Make it Searchable +

    +
    + stac-fastapi - REST API Service +
    +

    stac-fastapi is an Open Geospatial Consortium (OGC) Features API compliant FastAPI + application for STAC metadata search. +

    + stac-utils/stac-fastapi + +

    +
    +
    + titiler-pgstac logo +
    +

    + Visualize Raster Data +

    +
    + titiler-pgstac - Raster Tiling Service +
    +

    titiler-pgSTAC is a TiTiler extension that connects to pgSTAC to support large-scale + dynamic mosaic tiling for visualizing STAC collections and items. +

    + stac-utils/titiler-pgstac + +
    +
    +
    + tipg logo +
    +

    + Visualize Vector Data +

    +
    + tipg - Vector Tiling Service +
    +

    tipg is an Open Geospatial Consortium (OGC) Features and Tiles API for vector datasets. +

    + developmentseed/tipg +
    +
    +
+
+
+
+ + +
+
+
+
+
harness eoapi benefits
+
+
+
+ Download eoAPI and deploy anywhere +
+

Download and Deploy

+

Get started by downloading all the eoAPI resources you need. With our easy-to-follow + guides and documentation, you'll have eoAPI up and running in minutes.

+
+
+
+ Ingest your data +
+

Ingest Data & Metadata

+

Whether working with raster or vector data, eoAPI's flexible design allows you to + ingest STAC Collections quickly. +

+
+
+
+ Share imagery +
+

Share, Visualize, and Analyze

+

Now that your data is ingested, eoAPI provides the tools to share, + visualize, and analyze it. From simple sharing options to advanced analytics + capabilities, eoAPI is designed to help you make the most out of your geospatial data. +

+ +
+
+ +
+
+
+
+ + +
+
+
+
+
Why eoAPI
+

We believe that the community of people who would benefit from STAC is + larger than the current + core + community and early adopters of STAC.

+
+

The potential of Earth Observation data is immense in helping us understand our + ever-changing planet. To fulfill this potential, we must provide EO data that can be easily + integrated into modern applications and decision-making tools. It's crucial that it's easy to + discover, interoperable, ingestible, and optimized for applications. This is a significant challenge + for many organizations, and our mission at Development Seed is to address this challenge.

+
+
+
+ +
+
+
+
+
eoAPI in action
+
+
+
+
+

NASA IMPACT's VEDA Project

+

NASA IMPACT is leading the way for how NASA (and space agencies worldwide) can increase + the + societal impact of their data through cloud-optimized data distribution. They've + invested + significant resources in advancing modern public EO data standards, tools, and + platforms. + You + can see eoAPI services in action throughout the VEDA platform.

+
+ NASA VEDA platform screenshot +
+
+
+
+
+ +
+
+
+
+
+
Bespoke Solutions
+

Want to discuss a customized solution for your needs? +

+ Contact us +
+
+
Driven by Community
+

eoAPI is a community-driven initiative built on collaboration. We welcome your contributions, + feedback, and suggestions. Join the discussion or open a pull request in the + eoAPI + repository +

+
+
+ Development Seed Logo +
+
+
+ {% endblock %} {% block content %}{% endblock %} -{% block footer %}{% endblock %} +{% block footer %}{% endblock %} \ No newline at end of file diff --git a/docs/src/overrides/main.html b/docs/src/overrides/main.html new file mode 100644 index 0000000..8f500e3 --- /dev/null +++ b/docs/src/overrides/main.html @@ -0,0 +1,8 @@ +{% extends "base.html" %} + + +{% block extrahead %} + + + +{% endblock %} \ No newline at end of file diff --git a/docs/src/overrides/stylesheets/extra.css b/docs/src/overrides/stylesheets/extra.css new file mode 100644 index 0000000..d6a8c82 --- /dev/null +++ b/docs/src/overrides/stylesheets/extra.css @@ -0,0 +1,41 @@ +:root, +[data-md-color-scheme='default'] { + --md-heading-font: 'Oswald'; + --md-primary-fg-color: #cf3f02; + --md-default-fg-color: #443f3f; + --boxShadowD: 0px 12px 24px 0px rgba(68, 63, 63, 0.08), + 0px 0px 4px 0px rgba(68, 63, 63, 0.08); +} +body { + margin: 0; + padding: 0; + /* font-size: 16px; */ +} +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: var(--md-heading-font); + font-weight: bold; +} +.md-typeset h1, +.md-typeset h2, +.md-typeset h3, +.md-typeset h4 { + font-weight: bold; + color: var(--md-default-fg-color); + margin: 0; +} +.md-button, +.md-typeset .md-button { + font-family: var(--md-heading-font); +} +.md-content .supheading { + font-family: var(--md-heading-font); + text-transform: uppercase; + color: var(--md-primary-fg-color); + font-size: 0.75rem; + font-weight: bold; +}