> For the complete documentation index, see [llms.txt](https://docs.devland.is/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devland.is/technical-overview/island.is-public-web-data-flow.md).

# Ísland.is Public Web Data Flow

When a user visits <https://island.is>, the picture below roughly describes how the data flows through different systems and eventually gets returned back to the user as a web page.

<figure><img src="/files/wxMBYF4espx1m0hL1qUN" alt=""><figcaption></figcaption></figure>

1. We are using Cloudfront as our CDN. There we cache HTML responses, which means if a user requests a page that's found in cache, then Cloudfront will immediately answer with a cached response instead of forwarding that request to the "web".
2. Web is a Next.js server that gets it's data from the api server via GraphQL endpoints.
3. Api is a monolithic server that is essentially a gateway for Digital Iceland frontends. \
   Developers have a choice whether they'd like to cache GraphQL endpoints and for how long that cache lasts. You can add a special `?bypass-cache=<bypass-secret>` query parameter to the end of the browser url to bypass both the CDN cache and the server cache. \
   Data gets fetched from Contentful or Elasticsearch, depending on whether we are getting single entries or searching/filtering.
4. Contentful is the CMS for the Ísland.is project and acts as the "source of truth" for our data.
5. Search-indexer is a service that syncs data from Contentful into Elasticsearch. When content changes in the CMS then a webhook calls the search-indexer and it syncs the updated data into Elasticsearch.
6. Elasticsearch is used as a search engine for the web. Content gets synced fom Contentful into Elasticsearch via the search-indexer.
