# Capstone Project
# Blog App Capstone Project
Project specifications
# Frontend App
Expected Frontend App Structure
# Pages
Landing page
- Navigation Bar
- Sections:
- List all recent blog posts
- Each blog post should display:
- Image
- Author
- Title
- Description
- Categories
- Button 'π' for author should open the "Delete Blog Modal".
- Button 'π' for author should open the "Edit Blog Modal".
- onClick on blog should open the "Blog Read Page" for the blog selected.
- Each blog post should display:
- List all categories
- Each category should display:
- Title
- Description
- Colour
- Button 'π' should open the "Delete Category Modal".
- Button 'π' should open the "Edit Category Modal".
- onClick on category should open the "Blogs Page" blog posts filtered by the category selected.
- Each category should display:
- List all recent blog posts
Categories page
- Displays all categories
- Each category should display:
- Title
- Description
- Colour
- Button 'π' should open the "Delete Category Modal".
- Button 'π' should open the "Edit Category Modal".
- onClick on category should open the "Blogs Page" blog posts filtered by the category selected.
- Button "Add Category" for users to open "Add Category Modal" to create a category.
Blogs Page
- Displays all categories for filtering
- Display only title of category
- onClick on category should filter the "Blogs Page" blog posts by category selected.
- Display all blog posts
- Each blog post should display:
- Image
- Author
- Date
- Title
- Description
- Categories
- Button 'π' for author should open the "Delete Blog Modal".
- Button 'π' for author should open the "Edit Blog Modal".
- onClick on blog should open the "Blog Read Page" for the blog selected.
- Each blog post should display:
- Button "Add Blog Post" for users to open "Add Blog Modal" to a blog post.
- Displays all categories for filtering
Blog Read Page
- Display following details:
- Image
- Title
- Date
- By Author
- Name and Surname
- Description
- Loop through and display each section with details:
- Title
- Text
- Display author card with details:
- "About the author"
- Profile Image
- Bio
- onClick of Author should open the βAuthor Profile Pageβ for author selected.
- Display following details:
Author Profile Page
- Display following details:
- Name
- Surname
- Profile Image
- Short Bio
- "Author Blog Posts" Section:
- Display all blog posts by author
- Button 'π' for author should open the "Delete Blog Modal".
- Button 'π' for author should open the "Edit Blog Modal".
- Display all blog posts by author
- Button 'π' for author should open the "Edit Profile Modal" to update profile.
- Display following details:
Login Page
- Display Title:
- "Please login"
- Display input for the following:
- Email Address
- Password
- Button "Sign in" on success should open the "Landing Page".
- onClick "Register" should open the "Registration Page".
- Display Title:
Registration Page
- Display Title:
- "Author registration"
- Display input for the following:
- First name
- Last name
- Bio
- Email Address
- Password
- Button "Register" on success should open the "Landing Page".
- onClick "Login" should open the "Login Page".
- Display Title:
# Expected Frontend Pages
# Landing Page
# Blogs Page
# Blog Reading Page
# Categories Page
# Author Profile Page
# Login Page
# Registration Page
# Modals
Create Blog Modal
- Display input for the following:
- Image
- Categories
- On selection category should display
- Title
- Description
- Content:
- Button "+" to create new sections allowing the inputs:
- Section Header
- Section Text
- Button "π" to delete section created above.
- Button "+" to create new sections allowing the inputs:
- Button "Close"
- Button "Save changes"
- Display input for the following:
Edit Blog Modal
- Display input with populated information for the following:
- Image
- Categories
- On selection category should display.
- Title
- Description
- Content:
- Button "+" to create new sections allowing the inputs:
- Section Header
- Section Text
- Button "π" to delete section created above.
- Button "+" to create new sections allowing the inputs:
- Button "Close"
- Button "Save changes"
- Display input with populated information for the following:
Delete Blog Modal
- Display the following:
- "Are you sure"
- Blog Image
- Blog Title
- Button "Close"
- Button "Delete"
- Display the following:
Create Category Modal
- Display input for the following:
- Title
- Description
- Color Hexadecimal
- Button "Close"
- Button "Save changes"
- Display input for the following:
Edit Category Modal
- Display input with populated information for the following:
- Title
- Description
- Color Hexadecimal
- Button "Close"
- Button "Save changes"
- Display input with populated information for the following:
Delete Category Modal
- Display the following:
- "Are you sure"
- Category Colour
- Category Title
- Button "Close"
- Button "Delete"
- Display the following:
Edit Profile Modal
- Display input with populated information for the following:
- Image
- First Name
- Last Name
- Bio
- Button "Close"
- Button "Save changes
- Display input with populated information for the following:
# Expected Frontend Modals
# Add Blog
# Edit Blog
# Delete Blog
# Add Category
# Edit Category
# Delete Category
# Edit Profile
# Backend App
Expected Backend Structure
# Backend Actions and Routes
Authentication:
- CRUD
- Login User
- login
- Register New User
- register
- Update User
- updateUser
- Fetch User By ID
- getUser
- Login User
- CRUD
Categories:
- CRUD
- Create Category
- createCategory
- Edit Category
- updateCategory
- Delete Category
- deleteCategory
- Fetch Category
- Fetch All
- getCategories
- Fetch By ID
- getCategory
- Fetch All
- Create Category
- CRUD
Blog Posts:
- CRUD
- Create Blog
- createBlog
- Edit Blog
- updateBlog
- Delete Blog
- deleteBlog
- Fetch Blog
- Fetch All
- getBlogs
- Fetch By Blog ID
- getBlog
- Fetch By Author ID
- getBlogsByAuthorId
- Fetch By Category ID
- getBlogsByCategoriesId
- Fetch All
- Create Blog
- CRUD
# Category Definition
Category: {
id: string / ObjectId;
title: string;
description: string;
color: string;
createdAt: Date;
updatedAt: Date;
}
# Blog Definition
Blog: {
id: string / ObjectId;
authorId: string / ObjectId;
categoryIds: array / ObjectId;
title: string;
description: string;
image: string;
content: array;
createdAt: Date;
updatedAt: Date;
}
# Author Definition
Author: {
id: string / ObjectId;
firstName: string;
lastName: string;
email: string;
bio: string;
image: string;
password: string;
}