# Í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="https://3924059971-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJWCB43mX_-7DO7e_Oj%2Fuploads%2FEGFyCwfwVtObRZjVf7i7%2Fimage%20(8).png?alt=media&#x26;token=011255da-e5e1-4d1f-941f-a07352991b31" 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.
