# Core Concepts



![](https://4101535908-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MXQVCL50RwglOms2GWH%2F-MXWMB2VQZZDnEp4S-4E%2F-MXWMsB5NZlx2Dv9DAJn%2Fmodels.jpg?alt=media\&token=31f8b5c6-ced5-4982-88a8-93eec0319afa)

## Projects

Projects are our way of grouping chunks together. Usually a project would correspond to a particular website or application.

## Chunks

A chunk is a piece of content, stored on the EditMode platform. Currently, this takes the form of plain text, rich text or an image. A chunk is represented by an alphanumeric identifier, which can be used to identify and access that chunk from elsewhere. Chunks can store anything from a single heading to a full blog article including links, paragraphs and formatting. It's up to you how you choose to architect your content. Right now, all chunks that you store on the platform are public.

## Collections and Custom Fields

A very common use case when displaying content is to have a list of resources which have the same attributes. An example of this would be the "Meet The Team" page on a website, which might display each employee's name, title, and headshot. We call this repeatable content.

Collections are what allows us to define and display repeatable content. A collection is simply a "Group" of chunks with the same fields. For example, you might create a "Team Member" collection, which has fields `First Name`, `Last Name`, `Title` and `Headshot`.

Fields can hold different types of information. For example, the `First Name` field above would hold text, whereas the `Headshot` field would hold an image.

## Tags

Sometimes, we may want to group chunks together to make it easier to keep track of them from editmode.com. For example, you may have a contact page on your website with a chunk for your heading, description, phone number, address, and email. If you want to allow someone to easily find and edit these chunks, it is useful to be able to group them together.

## Variables

Variables are great for personalised content. For example – Sending an email template to a batch of recipients. In this case we can use variables to replace a piece of content with a specific value. e.g. "Hi `{{first_name}}`". Variables can be used in any text-based content using the double curly braces notation `{{variable_name}}`, an autocomplete list will start showing up to ease the access to these variables.

![](https://4101535908-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MXQVCL50RwglOms2GWH%2F-MXWNoxzRuGCYybeyHd3%2F-MXWNxlqcubUJX9Q-bES%2Fvariable.gif?alt=media\&token=6aee164c-3322-4d87-aac0-038af9b61188)

## Caching

In order to keep your application speedy, Editmode minimizes the amount of network calls it makes by caching content where it can.

If you’re using `editmode` ruby gem, your application would automatically have `/editmode/clear_cache/` endpoint. [Read more about Rails Caching](https://docs.editmode.com/editmode-docs/client-libraries/editmode-for-rails#caching)

You may have **custom caching** in your app that needs specific identifier for cache purging. After updating a content, Editmode will ping each urls that you’ve listed and pass content specific attributes such as `identifier`, `collection_id`, and `updated_at_url`.

You can configure cache expiration webhooks in Editmode.com to ensure your application is notified when your content gets updated.
