<commit_before># Technical Architecture

Netlify CMS is a React Application, using Redux for state management with immutable data structures (immutable.js).

## State shape / reducers
**Auth:** Keeps track of the logged state and the current user.

**Config:** Holds the environment configuration (backend type, available collections & fields).

**Collections** List of available collections, its fields and metadata information.

**Entries:** Entries for each field.

**EntryDraft:** Reused for each entry that is edited or created. It holds the entry's temporary data util it's persisted on the backend.

**Medias:** Keeps references to all media files uploaded by the user during the current session.

## Selectors:
Selectors are functions defined within reducers used to compute derived data from the Redux store. The available selectors are:
<commit_msg>Added a small introduction to architecture.md<commit_after># Technical Architecture

Netlify CMS is a React Application, using Redux for state management with immutable data structures (immutable.js).

The core abstractions for content editing are `collections`, `entries` and `widgets`.

Each `collection` represents a collection of entries. This can either be a collection of similar entries with the same structure, or a set of entries that each of their own structure.

The structure of an entry is defined as a series of fields, each with a `name`, a `label` and a `widget` .

The `widget` determines the UI widget that the content editor will use when editing this field of an entry, as well as how the content of the field is presented in the editing preview.

Entries are loaded and persisted through a `backend` that will typically represent a `git` repository. 

## State shape / reducers
**Auth:** Keeps track of the logged state and the current user.

**Config:** Holds the environment configuration (backend type, available collections & fields).

**Collections** List of available collections, its fields and metadata information.

**Entries:** Entries for each field.

**EntryDraft:** Reused for each entry that is edited or created. It holds the entry's temporary data util it's persisted on the backend.

**Medias:** Keeps references to all media files uploaded by the user during the current session.

## Selectors:
Selectors are functions defined within reducers used to compute derived data from the Redux store. The available selectors are:

{'fraction_non_alphanumeric': 0.06278397356464271, 'fraction_numerical': 0.0, 'mean_word_length': 4.936274509803922, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3046937', 'n_tokens_mistral': 570, 'n_tokens_neox': 556, 'n_words': 347}