Skip to content

A collaborative project by coding bootcamp students & friends, building our first joint application. We're focused on applying best practices, clean code, and effective teamwork. The tech stack includes HTML, CSS, Tailwind, React for the frontend, Django Rest Framework (DRF) for the backend, PostgreSQL for the database, and Render for deployment.

License

Notifications You must be signed in to change notification settings

ci-companeros/lazydog

Repository files navigation

LazyDog - Your Code Compass

GitHub contributors GitHub last commit GitHub language count GitHub license GitHub issues GitHub pull requests GitHub repo size

LazyDog with black glasses LazyDog with black glasses LazyDog with black glasses

LazyDog is a collaborative student resource-sharing platform, designed and built by four developers as part of a continued learning project following a bootcamp.

The platform allows users to share, rate, and comment on educational resources related to various programming and development topics. Our goal is to create a space for students to access, contribute, and engage with high-quality learning materials while reinforcing what we've learned during the bootcamp.

Live Demo OBS Fixa länken! 🚨 🚨 🚨

Content

Overview

LazyDog was built to address the challenge of finding high-quality, categorized educational resources in one place. It is aimed at students and developers looking to discover or contribute valuable content, with features that encourage community engagement through ratings and comments. The platform helps users enhance their learning journey and share insights from a range of development topics.

Core Features

This section outlines the core functionality of the platform and the key features planned for the Minimum Viable Product (MVP).

  1. User Accounts:

    • Users can create an account with a username, email, and password.

    • Logged-in users can submit resources, rate resources, and participate in discussions by leaving comments.

      Screenshots

      Signup Page

      Login Page

  2. Resource Categorization:

    • Resources are organized into categories like programming languages, frameworks, and tools.
    • Each category includes subcategories with various types of resources, such as documentation, articles, YouTube tutorials, and games.

    Example of categorized resources:

    • Project 1 - Introduction to Web Dev: HTML, CSS
      Subcategories: Docs, Articles, YouTube, Games.

    • Project 2 - JavaScript Fundamentals: JavaScript
      Subcategories: Docs, Articles, YouTube, Games.

    • Project 3 - Python Basics: Python
      Subcategories: Docs, Articles, YouTube, Games.

      Screenshots

      Resource Page

  3. Resource Submission:

    • Logged-in users can contribute by submitting new resources through a simple form.

    • The submission includes fields for a URL, title, short description, optional image, category, and tags to ensure proper categorization and relevance.

      Screenshots

      Contribution Page

  4. Rating & Commenting System:

    • Users can rate resources on a 1-5 star scale.

    • The platform displays the average rating and the total number of ratings for each resource.

    • Users can leave comments to discuss resources, provide feedback, or ask questions.

      Screenshots

      Rating Feature

      Comment Feature

  5. User Dashboard:

    • Logged-in users have access to a personal dashboard where they can:

      • View and manage their submitted resources.
      • See their previous comments and ratings.
      • Delete their account and associated data if they choose.
      Screenshots

      User Dashboard

  6. Community Interaction:

    • Resources are rated and commented on by the community, allowing users to engage with and improve the platform.

    • The number of comments and the average rating help users identify the most valuable resources.

      Screenshots

      Resource Detail Page

      Comment Section

  7. Flagging Feature:

    • Users can flag inappropriate or harmful content, ensuring the platform remains a safe and respectful space.

    • Admins review flagged resources or comments and take action when necessary (e.g., removing or moderating content).

      Screenshots

      Flagging feature

      Flagging feature - Admin Dashboard

  8. Responsive Design:

    • The platform is fully optimized for both desktop and mobile devices, ensuring a seamless experience across all screen sizes.

      Screenshots

      Large Screen

      Small Screen

  9. Modern UI/UX:

    • A clean, modern interface with accessible design features to ensure ease of use for all users, regardless of their abilities or preferences of dark or light mode. See further accessibility details in the Testing documentation.

      Screenshots

      Light Mode

      Dark Mode

For more details on features and to view the user stories, visit our Kanban board.

Back to Content

API Overview

This chapter outlines the structure of the current stable release for our web application. Our goal is to ensure a consistent and reliable interface for interacting with the various data models that form the core of our system, such as Users, Resources, Comments, and more.

Our API provides a stable set of endpoints that facilitate all the necessary CRUD operations for our application's primary models. This version reflects the current data structures, ensuring smooth interaction between the frontend and backend components. Our approach is designed to provide a reliable contract for any client that consumes this API, whether it's our own frontend or third-party integrations.

We recognize that our API will evolve over time to accommodate new features, enhancements, or structural changes. We strive to maintain backward compatibility whenever possible. Major changes—such as modifying existing endpoints, removing fields, or altering the behavior of the API—will be carefully considered to avoid breaking existing integrations and provide a seamless transition for all consumers.

For now, our focus is on delivering a comprehensive, consistent API, with the understanding that any significant changes will be communicated clearly to ensure stability for current and future clients.

Consult our CHANGELOG.md for changes made over time.

Detailed view CRUD operations

User Model

CRUD Operation Endpoint Description Example Data (json) Response
Create /api/users Create a new user json { "username": "john", "password": "secure", "email": "john@mail.com" } 201 Created
Read /api/users/{id} Retrieve a user json { "user_id": 1, "username": "john", "role": "admin" } 200 OK
Update /api/users/{id} Update user info json { "email": "newemail@mail.com" } 200 OK
Delete /api/users/{id} Delete a user - 204 No Content

Resource Model

CRUD Operation Endpoint Description Example Data (json) Response
Create /api/resources Create a new resource json { "title": "Learn Python", "description": "A Python guide", "url": "example.com", "category_id": 1 } 201 Created
Read All /api/resources List all resources json [ { "resource_id": 1, "title": "Learn Python" } ] 200 OK
Read Single /api/resources/{id} Retrieve a resource json { "resource_id": 1, "title": "Learn Python" } 200 OK
Update /api/resources/{id} Update a resource json { "title": "Advanced Python" } 200 OK
Delete /api/resources/{id} Delete a resource - 204 No Content

Comment Model

CRUD Operation Endpoint Description Example Data (json) Response
Create /api/comments Create a new comment json { "resource_id": 1, "content": "Great resource!" } 201 Created
Read All /api/comments List all comments json [ { "comment_id": 1, "content": "Great resource!" } ] 200 OK
Read Single /api/comments/{id} Retrieve a comment json { "comment_id": 1, "content": "Great resource!" } 200 OK
Update /api/comments/{id} Update a comment json { "content": "Updated comment." } 200 OK
Delete /api/comments/{id} Delete a comment - 204 No Content

Rating Model

CRUD Operation Endpoint Description Example Data (json) Response
Create /api/ratings Add a rating json { "resource_id": 1, "score": 5 } 201 Created
Read All /api/ratings List all ratings json [ { "rating_id": 1, "score": 5 } ] 200 OK
Read Single /api/ratings/{id} Retrieve a rating json { "rating_id": 1, "score": 5 } 200 OK
Update /api/ratings/{id} Update a rating json { "score": 4 } 200 OK
Delete /api/ratings/{id} Delete a rating - 204 No Content

Flag Model

CRUD Operation Endpoint Description Example Data (json) Response
Create /api/flags Create a new flag json { "resource_id": 1, "reason": "Inappropriate content" } 201 Created
Read All /api/flags List all flags json [ { "flag_id": 1, "reason": "Inappropriate content" } ] 200 OK
Read Single /api/flags/{id} Retrieve a flag json { "flag_id": 1, "reason": "Inappropriate content" } 200 OK
Update /api/flags/{id} Update flag status json { "status": "Reviewed" } 200 OK
Delete /api/flags/{id} Delete a flag - 204 No Content

Bookmark Model

CRUD Operation Endpoint Description Example Data (json) Response
Create /api/bookmarks Create a new bookmark json { "resource_id": 1 } 201 Created
Read All /api/bookmarks List all bookmarks json [ { "bookmark_id": 1, "resource_id": 1 } ] 200 OK
Delete /api/bookmarks/{id} Delete a bookmark - 204 No Content

Category Model

CRUD Operation Endpoint Description Example Data (json) Response
Create /api/categories Create a new category json { "name": "Programming", "description": "Coding-related content" } 201 Created
Read All /api/categories List all categories json [ { "category_id": 1, "name": "Programming" } ] 200 OK
Read Single /api/categories/{id} Retrieve a category json { "category_id": 1, "name": "Programming" } 200 OK
Update /api/categories/{id} Update a category json { "description": "Updated description." } 200 OK
Delete /api/categories/{id} Delete a category - 204 No Content

Tag Model

CRUD Operation Endpoint Description Example Data (json) Response
Create /api/tags Create a new tag json { "name": "Python", "description": "Python-related resources" } 201 Created
Read All /api/tags List all tags json [ { "tag_id": 1, "name": "Python" } ] 200 OK
Read Single /api/tags/{id} Retrieve a specific tag json { "tag_id": 1, "name": "Python", "description": "Python-related" } 200 OK
Update /api/tags/{id} Update a tag json { "description": "Updated tag description." } 200 OK
Delete /api/tags/{id} Delete a tag - 204 No Content

Notification Model

CRUD Operation Endpoint Description Example Data (json) Response
Create /api/notifications Create a new notification json { "user_id": 1, "message": "Your resource has been flagged." } 201 Created
Read All /api/notifications List all notifications json [ { "notification_id": 1, "message": "Your resource has been flagged." } ] 200 OK
Read Single /api/notifications/{id} Retrieve a notification json { "notification_id": 1, "message": "Your resource has been flagged." } 200 OK
Update /api/notifications/{id} Update read status json { "is_read": true } 200 OK
Delete /api/notifications/{id} Delete a notification - 204 No Content

Audit Model

CRUD Operation Endpoint Description Example Data (json) Response
Create /api/audits Create an audit record json { "user_id": 1, "action": "Created resource", "entity_type": "Resource", "entity_id": 5 } 201 Created
Read All /api/audits List all audit records json [ { "audit_id": 1, "action": "Created resource" } ] 200 OK
Read Single /api/audits/{id} Retrieve an audit record json { "audit_id": 1, "action": "Created resource", "entity_type": "Resource", "entity_id": 5 } 200 OK
Delete /api/audits/{id} Delete an audit record - 204 No Content

Back to Content

Technologies

  • Frontend:
    • React
  • Backend:
    • Django REST Framework
  • Database:
    • PostgreSQL
  • Deployment:

Back to Content

Agile Development Process

Our Agile Approach

The development of LazyDog is guided by Agile principles, emphasizing flexibility, continuous improvement, and rapid adaptation to change. While not strictly adhering to traditional Agile practices such as scheduled sprints or scrums, the development process is inspired by Agile methodologies.

Read more
  • Instead of working within defined sprint timelines, the project focuses on milestones that align with the overall vision. This straightforward approach prioritizes the development of core functionalities first, allowing for a solid foundation before expanding into more complex features.

  • Bugs and issues encountered during development are recorded as bug issues and added to the backlog. This strategy allows for continuous progress in other areas while ensuring that the backlog is revisited periodically. Prioritization is based on the severity and impact of the issues, maintaining development momentum while systematically addressing and resolving concerns.

  • User feedback is actively sought and analyzed to identify areas for improvement, ensuring that LazyDog evolves to meet the needs and expectations of its users effectively.

MoSCoW Prioritization

  • To assist with task prioritization, labels have been added to user stories.
  • The MoSCoW method involves categorizing tasks with the following labels:
    • MUST HAVE
    • SHOULD HAVE
    • COULD HAVE
    • WON'T HAVE
  • This method helps ensure that essential features are completed first, optimizing resource allocation and effectively guiding the project's development priorities.

For more details, please follow this link to our GitHub Kanban board.


Back to Content

Installation

To set up the project locally, follow these steps:
  1. Clone the Repository:

    git clone https://github.com/your-username/lazydog.git
  2. Navigate to the Project Directory:

    cd lazydog
  3. Install Backend Dependencies:

    pip install -r requirements.txt
  4. Install Frontend Dependencies:

    npm install
  5. Run the Backend Server:

    python manage.py runserver
  6. Run the Frontend Development Server:

    npm start

Back to Content

Usage

For detailed instructions on using the LazyDog platform, refer to the Usage Guide.

Back to Content

Design Details

This section provides an overview of the core design elements for the platform, with links to detailed documents.

Development Framework - 5 Planes of Web Development

Our design and development process follows the 5 Planes of Web Development: Strategy, Scope, Structure, Skeleton, and Surface. This framework guides our approach to ensure a user-centered design.

➡️ Design Document - 5 Planes Framework

Frontend Design

➡️ Design Document - Color Schemes
➡️ Design Document - Typography
➡️ Design Document - Wireframes (Figma design? 🚨🚨🚨)
➡️ Design Document - UI Components

Backend Design

➡️ Design Document - Entity Relationship Diagram
➡️ ERD relationships explained

Workflow & Processes

This section covers both frontend user interactions and backend processes, detailing how data flows through the platform.

➡️ Design Document - Workflow

User Experience

➡️ Design Document - Wireframes

Defensive Design

Defensive design ensures a smooth user experience by providing clear feedback during user interactions.

  • Success Messages:
    Users receive positive feedback after successfully completing actions, confirming their requests were processed.

    Success message

  • Error Handling:
    If an action fails due to invalid data or other issues, users get specific, actionable error messages to guide them.

    Error message


Back to Content

Testing

Testing is integral to ensuring the application operates as intended. Comprehensive testing documentation, including strategies and results, is available in the Testing Document.

What we tested
  • Functionality: Ensured that all features—such as resource submissions, ratings, and comments—work as intended.
  • Usability: Validated that users can navigate easily, interact with elements, and complete actions like signing up, logging in, submit and searching for resources.
  • Performance: Checked the app's responsiveness, load times, and efficiency, especially on mobile devices.
How we tested
  • Unit Testing: Each component and function was tested individually to confirm that they perform correctly in isolation.
  • Manual Testing: A hands-on approach was used to simulate real user interactions, validating the flow and behavior of the app in various scenarios.
  • Cross-Browser and Device Testing: We ensured the platform works smoothly on different browsers (Chrome, Firefox, Safari) and across multiple screen sizes (mobile, tablet, desktop).
  • Code Validation: The code was checked for errors, optimized, and debugged for performance improvements.

Back to Content

Contributing

Contributions are welcome!

Please review the Contributing Guidelines for more information on how to get involved.

Deployment

Detailed instructions for deploying the application can be found in the Deployment Guide.

Back to Content

Credits

A heartfelt thank you to everyone who contributed to our learning journey. We also appreciate the tools and services that supported us throughout this project.

Code Used
  • {{RESOURCE_DESCRIPTION}}, created by {{AUTHOR}} and sourced from {{SOURCE_NAME}}
Acknowledgements

We would like to give special thanks to the tutorials, courses, and communities that provided invaluable guidance and support throughout the development of this project.


Back to Content

License

This project is licensed under the MIT License. See the LICENSE file for more details.



Readme authors: EVondrus, JaqiKal, NiclO1337 & JorgenDIF

Back to Content

About

A collaborative project by coding bootcamp students & friends, building our first joint application. We're focused on applying best practices, clean code, and effective teamwork. The tech stack includes HTML, CSS, Tailwind, React for the frontend, Django Rest Framework (DRF) for the backend, PostgreSQL for the database, and Render for deployment.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •