# Helx Website Manager
- [Helx Website Manager](#helx-website-manager)
- [Product Description](#product-description)
- [Types of user:](#types-of-user)
- [Stakeholders](#stakeholders)
- [Notes](#notes)
- [Feautures](#feautures)
- [Edit content on a page](#edit-content-on-a-page)
- [Introduction](#introduction)
- [Product Requirements](#product-requirements)
- [Define content types](#define-content-types)
- [Introduction](#introduction-1)
- [Product Requirements](#product-requirements-1)
- [Create a new post](#create-a-new-post)
- [Introduction](#introduction-2)
- [Product Requirements](#product-requirements-2)
- [Edit a post](#edit-a-post)
- [Introduction](#introduction-3)
- [Product Requirements](#product-requirements-3)
- [Delete a post](#delete-a-post)
- [Introduction](#introduction-4)
- [Product Requirements](#product-requirements-4)
- [Media Library](#media-library)
- [Introduction](#introduction-5)
- [Product Requirements](#product-requirements-5)
- [Upload images to Media Library](#upload-images-to-media-library)
- [Introduction](#introduction-6)
- [Product Requirements](#product-requirements-6)
- [Upload videos to the Media Library](#upload-videos-to-the-media-library)
- [Introduction](#introduction-7)
- [Product Requirements](#product-requirements-7)
- [Upload documents to the Media Library](#upload-documents-to-the-media-library)
- [Introduction](#introduction-8)
- [Product Requirements](#product-requirements-8)
## Product Description
**Codename:** musk
**Document Version:** 1.0
The application is a content management system that will let users manage the content in their website.
##### Types of user:
1. **Site Admin**
The person in charge of managing the core parts of the website
2. **Editor**
A person able to create content in the website
3. **Reader**
The end users visiting the website
4. **Developer**
The person in charge of developing the website templates.
##### Stakeholders
1. **Site Admins**
They are the ones who will be paying and hosting their websites in our platform. So it's very important keep their interest with the features they want/like the most.
2. **Developers**
They are the ones who will be developing and customizing the platform, it's important to keep the platform attractive and easy to develop for. Hopefully this will increase the popularity of the platform and Developers are going to start bringing more **Site Admins** and **Editors**
##### Notes
- MVP requirements are going to be market with the `[MVP]` label below and should be given high priority.
- A key feature is creating custom content types (posts, news, products, etc) which will make the platform extra customizable and expand range of sites than be created with it. As these content types are specific to every project's needs we are going to refer to them in this document as POSTS, taking a blog as an example with posts being custom content type.
## Feautures
### Edit content on a page
#### Introduction
This will allow **Site Admins** or **Editors** to manage the pages in their website. The content is their's so they should be able to update it whenever they want in order to keep their website up to date.
This feature is important for **Site Admins** and **Editors** as **Developers** are just going to design templates while site admins and editors will update content as they please.
#### Product Requirements
- User can edit the title of the page
- User can change the slug of the page
- `[MVP]` User can edit paragraphs and headers in a page
- User can replace images in the page using a direct url
- User can replace images in the page using their clipboard
- `[MVP]` User can replace images in the page with one from their device
- `[MVP]` User can replace images in the page with other images from the media library
- User can preview changes before publishing
---
### Define content types
#### Introduction
As stated in the [Notes](#notes) section of this document, Posts is just a way to refer in this document to instances of the custom content types used in the project.
This feature will let **Developers** define the schema of the content types to be used in the website.
Schema definitions should list all fields with their type, along with some metadata (eg: is the field required? what's the default value?)
#### Product Requirements
- `[MVP]` User must specify the name of the content type
- `[MVP]` User must define the name of the properties and their types
- `[MVP]` User should be able to mark a property as required
- `[MVP]` User should be able to mark a property as unique
- `[MVP]` User should be able to give a default value to a property
- `[MVP]` User can mark the type as collection or single value
---
### Create a new post
#### Introduction
This feature will allow **Site Admins** or **Editors** to create new posts, this way the website will not feel static and they can keep creating any amount of content.
#### Product Requirements
- `[MVP]` User can create a new post from the Post listing screen
- `[MVP]` User can edit any field on the post
- `[MVP]` User must set a value for required fields
- `[MVP]` User can't set a duplicated value for unique fields
- `[MVP]` Each field must pass their corresponding validation rules before being able to save
- If the content type has preview enabled user should be able to see it's preview
- User should be able to save post as Draft
- User should be able to schedule post publication
---
### Edit a post
#### Introduction
This feature will allow **Site Admins** and **Editors** to edit posts, this way if they made a mistake while creating them or are outdated.
#### Product Requirements
- `[MVP]` User can go to the edit screen from the Post listing screen
- `[MVP]` User can go to the edit screen from the Post screen
- `[MVP]` User can't unset value of required fields
- `[MVP]` User can't set a duplicated value for unique fields
- `[MVP]` Each field must pass their corresponding validation rules before being able to save
- If the content type has preview enabled user should be able to see it's preview
- User should be able to save changes as Draft
- User should be able to schedule publication of the changes
---
### Delete a post
#### Introduction
This feature will allow **Site Admins** and **Editors** to delete posts, this way if it's not needed anymore they can be deleted
#### Product Requirements
- `[MVP]` User can trash a post to schedule it for deletion
- Posts should be deleted after a set amount of time
---
### Media Library
#### Introduction
This will allow **Site Admins** and **Editors** to manage multimedia content (images, videos and files) on their website. All multimedia content should be shown here and be easily navigable.
Users will be able to choose images and videos directly from the Media Library instead of having to re-upload files from their devices, thus avoiding file duplication.
#### Product Requirements
- `[MVP]` Users can upload images from their devices
- `[MVP]` Users can upload videos from their devices
- Users can upload other types of files from their devices
- Users should be able to upload multiple sizes of an image
- Users should be able to upload multiple files at the same time
- Users should be able to crop images
- Users should be able to delete images
---
### Upload images to Media Library
#### Introduction
This will allow users to upload images in order to use them on the website. This way the user can choose them from the content library instead of re-uploading files, thus avoiding file duplication and save storage space.
#### Product Requirements
- `[MVP]` User can upload an image from their device
- User can upload an image from an external url
- User can upload an image from their clipboard
- `[MVP]` User can see a preview of the image they uploaded
- User can crop the image
- User can add metadata to the image
- User can upload multiple images at once
- User can upload multiple versions or sizes of an image (for responsiveness or accessibility)
---
### Upload videos to the Media Library
#### Introduction
This will allow users to upload video files to the media library.
#### Product Requirements
- `[MVP]` User can upload a video from their device
- User can add metadata to the video
### Upload documents to the Media Library
#### Introduction
This will allow users to upload other types of files to the media library (.zip, .pdf, .excel, etc), which could be used for download links or other purposes.
#### Product Requirements
- `[MVP]` User can upload other types of files to the Media Library
- User can add metadata to the files