Skip to content

Requirements for MVP

Giulio Troccoli-Allard edited this page Dec 22, 2020 · 2 revisions

Installation [Issue] [PR]

  • Laravel Jetstream (Laravel 8, Livewire and TailwindCss)
  • preset authentication
  • publish all livewire and/or tailwind assets (we're going to use them)
  • set up baic phpunit and dusk test
  • set up github actions

Roles and permission [Issue] [PR]

  • Spatie package - Laratrust
  • Two roles: Super Admin and Editor
  • Create seeder to add test users, with and withut roles
  • Build UI to manage user's role (only for Super Admin) (Laratrust comes with it)

Users [Issue] [PR]

  • Disable registration
  • Allow registration for Super Admin only
  • Role cannot be empty.

Fonts [Issue] [PR]

  • Roboto as default
  • Actor
  • Monserrat

Media [Issue] [PR]

  • Spatie package
  • Look for free media management UI (may come with package)

Pages [Issue] [PR]

  • build a customised 404 page (Not Found)
  • build a customised 403 page (Not Authorised)
  • build a customised generic error page

Posts

  • Models
    • Posts: id, title, text, author_id, photo_id, status, created_at, updated_at, deleted_at, first_published_at
      • index: id (PK), author_id, status, created_at
      • possible status: draft, published, unpublished
  • Pages
    • fonts: Actor for title, Monserrat for body
    • single post page (only if status is published)
    • homepage with paginated posts (in descending publishing date order, i.e. the latest first published on top) (only for published posts)
  • CMS
    • Access to only Super Admin and Editors
    • List of all posts in descending creation date order, i.e. latest on top
      • display: title, first published date, status
      • buttons: Edit (if draft or unpublished), Publish (if draft), Republish (in unpublished), Unpublished (if published), Delete (if draft or unpublished)
      • One button to create a new post
    • Add
      • title, text, photo (all mandatory)
      • status is draft by default
      • the author is the logged in user by default
    • Edit
      • title, text, photo (all mandatory)
      • updates the updated_at field
    • Publish
      • ask for confirmation
      • change status to published (if it was draft or unpublished)
      • set updated_at
      • set first_published_at (if status was draft)
    • Unpublish
      • ask for confirmation
      • set updated_at
      • change status to unpublished (if it was published)
    • Republish
      • ask for confirmation
      • set updated_at
      • change status to published (if it was unpublished)
    • Delete
      • ask for confirmation
      • set deleted_at

Comments

  • Models
    • Comments: id, text, author_email, post_id, status, created_at, updated_at, deleted_at
      • index: id (PK), author_email, post_id, status, created_at
      • possible status: in moderation, published, banned
  • Pages
    • font: Monserrat
    • add list of published comments in single post page
    • add form to the single post page
      • display: text, email
      • save with status in moderation by default
  • CMS
    • Access to only Super Admin and Editors
    • List of all comments in descending creation date order, i.e. latest on top
      • display: text (maybe first 100 chars only), creation date, updated date, status
      • buttons: Review (if in moderation), Approve (if in moderation), Ban (if in moderation)
    • Review
      • show modal with full comment and button Approve, Ban, Keep
    • Keep
      • do nothing (just close the modal)
    • Approve
      • ask for confirmation
      • change status to published (if in moderation)
      • set updated_at
    • Ban
      • as for confirmation
      • change status to banned (if in moderation)

Tag system

  • Models
    • Tags: id, slug, name, created_at, updated_at, deleted_at
      • index: id (PK), slug (unique)
    • TagsPosts: tag_id, post_id, created_at, updated_at, delete_at
  • Pages
    • add tags to single post page
    • add tags to post on homepage
  • CMS
    • modify Post CRUD to allow adding/removing tags (not mandatory)