Skip to content

VCGithubCode/Gratidudes

Repository files navigation

Hackathon 2024 March 😃 World Happiness Day! 😃

HackathonHappy


Great Wall of Gratitude

An image of our landingpage

Great Wall of Gratitude - GitHub repository: GitHub repository

Visit the deployed site: Great Wall of Gratitude

GitHub Issues GitHub last commit (branch) GitHub language count GitHub top language Contributors

Introduction

The Gratitude Wall celebrates World Happiness Day by creating a space for sharing gratitude. This online platform invites users to anonymously express thanks, uplifting stories, and moments of joy.

Our mission is to build a community rooted in gratitude, transforming individual moments of appreciation into a global movement of collective joy.

Central to our mission are user-centric designs that facilitate an intuitive and rewarding experience, making every visit a step towards spreading positivity. "Gratitude Wall" isn't just a site; it's a movement towards acknowledging the beauty in life's small moments and the transformative power of gratitude in building a happier world.

Join us in embracing the power of gratitude. Together, we can make a difference, one thank-you at a time.

Criteria

Our project, "The Great Wall of Gratitude", is designed to foster a community of positivity by allowing users to anonymously share messages of gratitude. With an intuitive user interface and robust backend, our platform stands as a testament to the power of collective appreciation. We're excited to share how our team has effectively met and exceeded the key project objectives. We're excited to share how our team has effectively met and exceeded the key project objectives:

  • We've crafted an immersive and intuitive user interface. This creative approach ensures our design stands out, offering a seamless and engaging user experience.
  • Our project's success stems from meticulous planning and execution. We utilized GitHub Projects for organization, complemented by a comprehensive README.md, to keep our development process transparent and on track.
  • Our efforts were closely aligned with the Hackathon's theme, bringing forward-looking and creative solutions to the forefront. Our project embodies innovation, setting a benchmark for future endeavors.
  • We've achieved a responsive, accessible, and thoroughly tested application, prioritizing user experience across different devices and accessibility needs.
  • Our project introduces features and functionality, offering unique value and engagement.
  • A cornerstone of our project is the collaborative spirit among our team members. Through active participation, inclusive practices, and a commitment to quality, we've fostered an environment of mutual support and excellence.

Content

Goal & UX

User Experience

Our platform offers a seamless user experience, encouraging easy navigation and interaction. Whether posting a message of gratitude or browsing through others' contributions, users find a space that is intuitive, engaging, and uplifting.

Strategy

Site Goals

The primary goal of "The Great Wall of Gratitude" is to cultivate an online space where expressions of gratitude can flourish, connecting individuals through shared positivity. Our strategy focuses on user engagement, platform stability, and community growth.

** For Developers:

Create a secure, scalable platform that facilitates the anonymous sharing of gratitude.

** For Users:

Offer a welcoming space to share and discover messages of gratitude, fostering a sense of community and shared joy.

Back to Content

Problem Statement

In a digital age often marred by negativity, there's a significant need for spaces that promote positivity, gratitude, and community. "Gratitude Wall" aims to fill this gap by providing an accessible platform for individuals to express and share their gratitude, offering a beacon of positivity.

Target Audience

Our platform is designed for anyone looking to share or discover messages of gratitude. It's a universal space for individuals seeking positivity, connection, and a reminder of the good in the world.

Back to Content

Scope and benefit

The scope of our project includes the development of a responsive website where users can post and interact with gratitude messages, the implementation of user authentication to ensure privacy, and the creation of an engaging user interface that promotes interaction.

These EPICs collectively cover the journey of users from their initial encounter with "The Great Wall of Gratitude" through their development into engaged members of the community. Each EPIC is designed to address specific needs and behaviours characteristic of new, returning, and frequent visitors, ensuring a comprehensive and satisfying user experience throughout.

  1. EPIC 1: New Visitor Experience
    Goal: To ensure that new visitors can quickly grasp the purpose of "The Great Wall of Gratitude" and easily navigate through its features.
  2. EPIC 2: Returning Visitor Experience
    Goal: To enhance engagement and interaction for users who return to the site after their initial visit.
  3. EPIC 3: Frequent Visitor Experience
    Goal: To provide a rich and dynamic experience for users who frequently visit and contribute to "The Great Wall of Gratitude".

Pls visit our Kanban board for details.

Back to Content

Structure

#### User Stories

This is an excerpt of our user stories, please visit our Kanban board for details.

User story ID [epicid.usid] Task Description Issue No.
US1.1 Create Landing Page A welcoming and informative first page that clearly conveys the website's mission and how users can participate. issue #7
US1.2 Create About Us Page Provides background information about the project and its creators, building trust and connection with new users. issue #25
US1.3 Create Navbar Ensures easy navigation across different sections of the website for a smooth user journey. issue #22
US1.4 Viewer of Hackathon Webinar Allows new visitors to watch a presentation about "The Great Wall of Gratitude", understanding its purpose and the effort behind its creation. issue #55
US1.4 Understanding Website in 7 Seconds Ensures the website's design and content are intuitive enough for new visitors to quickly understand how to use it. issue #99
US2.1 Add Like Button Allows users to interact with posts they appreciate, enhancing engagement. issue #41
US2.2 Create 404 Error Page Ensures that users who encounter dead links or errors are gently guided back to the active parts of the site. issue #37
US2.3 Enhance Design of Add Card Popup Window Improves the user interface for submitting gratitude posts, encouraging more contributions. issue #66
US2.4 Revamp Design of Gratitude Cards Refreshes the appearance of posts for a more appealing and updated look. issue #67
US2.5 Make Text Area on Cards Scrollable Improves user experience by allowing longer messages to be easily read. issue #86
US3.1 Create Thank you Page Rewards users with a dedicated thank you message after they contribute with feed-back. issue #28
US3.2 Add Delete Button for Cards Empowers users to manage their own posts, ensuring content remains relevant and personal. issue #42
US3.3 Add Load More Button Allows users to explore more gratitude posts without overwhelming the initial page load, enhancing site usability. issue #59
US3.4 Create Grid Layout for Gratitude Cards Offers an organized and visually appealing way to browse through the gratitude posts. issue #64
US3.5 On Reload, Cards Load in Random Order Sometimes Twice Addresses a technical challenge to ensure a seamless and predictable user experience. issue #85

Back to Content

#### Feature

The website features three main web pages:

  • The landing page, central to the user experience, this page invites users to share their gratitude by posting messages. Each submission becomes part of 'The Wall', a dynamic display of positive sentiments from the community.
  • The About Page, offers insights into the "The Great Gratitude Walls" platform and its team members.
  • The Contact Page, designed for users to make inquiries or seek assistance, featuring a straightforward form that, upon submission, employs EmailJS to ensure messages are promptly directed to the site administrators.

There are two auxiliary pages:

  • The 404 Page Not Found is a crucial auxiliary page designed to handle instances where a user attempts to access a non-existent section of the website. This page serves not only as a notification of an incorrect or outdated link but also as a gentle guide back to the main content, ensuring users don't feel lost.

  • Upon submitting the contact form, users are directed to the Thank You page, another essential support page that acknowledges their action with gratitude. This page plays a pivotal role in the user interaction cycle by confirming that their message has been successfully sent and is under consideration. It reinforces the platform's community-driven ethos by expressing appreciation for the user's input or inquiry. Additionally, it reassures users that their effort to reach out is valued, with an inviting option to return to the main wall, encouraging continued participation in the platform's positive exchange of messages.

Key Features Include:

  • Message Submission with Validation

Users are encouraged to share their gratitude messages through a form. The system checks for prohibited words to maintain the content's positivity and requires all fields to be filled before submission, promoting responsible community interaction.

  • Persistent Message Display

Utilizing local storage, messages once posted are stored and displayed even after the page is reloaded, ensuring the permanence of the gratitude expressed.

  • Dynamic Interaction

The site integrates a 'like' button for each message, allowing users to interact with and acknowledge others' posts, fostering a supportive environment.

  • Post Management

Beyond adding messages, users can also remove their posts, giving them control over their contributions to the wall.

While the site currently does not feature a searchable database or commenting system, its existing framework lays the groundwork for potential expansions, including these and other interactive elements. The clear and concise error handling, alongside a custom 404 page and a thank-you page for form submissions, ensures a smooth user experience.

Through these carefully designed features and a commitment to a positive community ethos, 'The Great Wall of Gratitude' serves as a beacon of appreciation and kindness in the digital landscape."

Back to Content

Future Features

In no specific order:

  • Enable users to create private or public gratitude journals, where they can track daily reflections and growth over time.
  • Thematic categorization of messages
  • Integration with social media for wider sharing of gratitude.
  • Implement features that celebrate user milestones, such as the number of gratitude posts shared or interactions received, enhancing a sense of achievement and community recognition.
  • Expand the site's accessibility by offering multilingual support, inviting a broader audience to share and explore gratitude across cultures.
  • Partner with wellness apps to enable users to share their gratitude posts directly from other platforms, creating a seamless experience between gratitude expression and personal health tracking.
  • Create 405 Error page

Back to Content

Skeleton

#### Wireframe

Our wireframe designs laid the foundation for a user-friendly layout, ensuring that posting and browsing gratitude messages is intuitive and enjoyable. We crafted a responsive design through wireframe planning. This ensured that whether on a smartphone or desktop, users would enjoy a seamless experience. Wireframes also acted as a visual guide during the development process, helping to organize the placement of elements. It has a sleek user interface that clearly displays the site board and control buttons for a seamless navigation experience.

Logo

Logo

Landing page

Landing Page

About

About page

Contact page

Contact page

Thank you page

Thank you Page

404

Page not found

Header

header

Footer

footer

Style guide

style-guide

Back to Content

Surface

Design Elements

##### Color Scheme

The website features a warm, inviting palette with gradient of each colour that reflects the spirit of gratitude and positivity.

Colour Scheme

Yellow

Yellow

Orange

Orange

Cabaret

Cabaret

Voodoo

Voodoo

Neutral

Neutral

Signal (danger, information, success) colour

signal - button

Back to Content

##### Typography

We've chosen fonts that are easy to read and convey a friendly, welcoming tone, enhancing the overall user experience. The team selected the fonts Poppins, Arial, Helvetica, and employed Sans-serif as a fallback option.

Poppins Light

Poppins Light

Poppins Medium

Poppins Medium

Poppins Extra bold+

Poppins Extra bold

Back to Content

Imagery

We choose images that foster a welcoming, inclusive, and vibrant community space, encouraging users to share, discover, and connect through gratitude. All imagery is from free sources.

Back to Content

Accessibility

Accessibility is a core consideration for "The Great Wall of Gratitude". Our platform is designed to be accessible to users with diverse needs, ensuring everyone can participate in sharing gratitude. We enhanced our website's accessibility by adopting several strategies:

  • Implementing semantic HTML to structure content meaningfully.
  • Adding hover states to buttons for visual feedback during navigation.
  • Selecting sans serif fonts, which are easier for dyslexic users to read.
  • Utilizing aria-labelledby attributes and others to aid screen reader users in interacting with dynamic content.
  • Styling interactive elements with :hover and :focus in CSS for better keyboard navigation.
  • Employing CSS media queries and a flexible grid layout to accommodate various devices, including those with screen magnifiers.
  • Relying on textual content and CSS for design, improving accessibility for users with assistive technologies.

Back to Content

Responsiveness

The website is fully responsive, providing a seamless experience on devices of all sizes, from smartphones to desktops. Please visit AmIResonsive

Back to Content

Technology Stack

Languages

### Tools and Libraries
  • Am I Responsive? - To show the website image on a range of devices.
  • [Bootstrap](https://getbootstrap.com/docs/5.2/getting-started/introduction/) - Responsive design. - Responsive design.
  • Coolors - Color generator
  • CSS Validation Service - Used to check code ensuring that my CSS is error-free and adheres to the latest web standards.
  • DevTools - help in edit pages on-the-fly and diagnose problems quickly.
  • Diffchecker - text - used to check code snippets
  • Figma - Used to create wireframes.
  • Git - For version control.
  • Gitpod Streamlines your development process by providing a pre-configured, cloud-based development environment that's instantly ready for coding.
  • GitHub Essential for version control, allowing you to track changes, collaborate with others (if applicable), and secure online code storage.
  • Google Fonts - To import the fonts used on the website
  • Illustrator - Used for graphics, icons i.e. site design
  • JSHint - JSHint is a static code analysis tool used in software development for checking if JavaScript source code complies with coding rules.
  • LeonardoAI - To produce images for hackathon page and hackathon presentation
  • Markup Validation Service - Used to check code ensuring that my HTML is error-free and adheres to the latest web standards.
  • Slack - is a cloud-based team communication platform.
  • TinyPNG - WebP, PNG and JPEG Compression
  • Visual Studio Code - A versatile and powerful IDE that supports Python development well, offering debugging tools, extensions for Python, and integrated Git control. While Gitpod provides its own web-based VS Code editor, one might use the desktop version for local development or when offline.
  • Wave
  • Web Disability Sim - a google chrome extension that allows you to view your site as people with accessibility needs would see it.

Back to Content

Development Process

The development of our project follows a structured yet flexible approach, ensuring that we can adapt to changes and feedback while maintaining progress towards our goals. Our methodology emphasizes collaboration, iterative development, and a high degree of transparency both within the development team and with our stakeholders.

For details please visit our project team slack Canvas and our Kanban board

Back to Content

Agile Methodology

Our project uses Agile methodology, a framework that enables us to respond to the unpredictability of building software through incremental, iterative work cadences, known as sprints. This approach fosters adaptability and encourages a rapid and flexible response to change, which is vital in the dynamic environment of software development.

At the start of each sprint, our team engages in sprint planning to set the direction

for our upcoming work, involving prioritization of the product backlog to address the most critical tasks first, defining clear sprint goals aligned with project milestones, and assigning tasks based on expertise and workload. Throughout development, we navigate trade-offs between scope, quality, time, and resources to maintain a balance between delivering high-quality work efficiently and managing priorities. Adopting Agile methodologies allows us to remain adaptable and focused, ensuring we meet user needs while striving for excellence.

For details please visit our project team slack Canvas and our Kanban board

Back to Content

Collaboration Tools

The team used Slack for quick collaboration purposes and Github projects to track User Stories, Bugs and Time plan.

The Team used slack team channel Canvas to ensure everyone stayed updated on project progress and discussions, see GratiDudes Canvas

Back to Content

Programming Paradigms

The script utilizes a mix of paradigms to structure the logic for managing user interactions and data storage for a message board application, emphasizing sequence, modularity, and responsiveness to events.

Imperative Programming

The script directly specifies a sequence of operations to execute in order to achieve a desired outcome. This is seen in how functions are structured: a series of steps to manipulate the DOM based on user input or actions, such as adding a post to the display or filtering out prohibited words.

Procedural Programming

A subset of imperative programming, this paradigm organizes code into reusable procedures or functions. The script embodies this through defined functions like generatePost, addRecentMessage, and addToLocalStorage, which modularize the code for specific tasks, enhancing readability and maintainability.

Event-Driven Programming

This paradigm is centered around the handling of user-generated events. The script demonstrates this through the use of event listeners (addEventListener) that trigger specific functions (handleAddButton, initializeAddUserMessage) when the user interacts with the UI, such as clicking buttons or submitting a form.

Back to Content

Testing

We performed continuous manual testing of our site while developing it. Validation of HTML, CSS and JavaScript is OK.

Back to Content

Prerequisites and Deployment

The site was developed in VS Code/Gitpod, stored in GitHub as the local repository. Github Pages was used to deploy the live website. The instructions to achieve this are below.

Local Deployment

How to Fork

To fork “The Great Gratitude Wall”

  1. Log in (or sign up) to Github.

  2. Go to the repository for this project, VCGithubCodel/Gratidudes

  3. Click the Fork button in the top right corner.

How to Clone

To clone “The Great Gratitude Wall”

  1. Log in (or sign up) to GitHub.

  2. Go to the repository for this project, VCGithubCodel/Gratidudes

  3. Click on the code button, select whether you would like to clone with HTTPS, SSH or GitHub CLI and copy the link shown.

  4. Open the terminal in your code editor and change the current working directory to the location you want to use for the cloned directory.

  5. Type 'git clone' into the terminal and then paste the link you copied in step 3. Press enter.

Obtaining EmailJS API

  1. Sign up for a EmailJS account in the EmailJS website.
  2. Create an email service in your EmailJS dashboard.
  3. Install EmailJS Library. You can do this by including the EmailJS script in your HTML file or by installing it via npm if you're using a package manager like npm or yarn.
npm install --save @emailjs/browser

or

$ yarn add @emailjs/browser
  1. In your EmailJS dashboard, navigate to the "API Keys" section and copy your API key.
  2. Add this code snippet before your closing tags. Making sure you have added your public key.
<script type="text/javascript"
        src="https://cdn.jsdelivr.net/npm/@emailjs/browser@4/dist/email.min.js">
</script>
<script type="text/javascript">
  (function(){
      emailjs.init({
        publicKey: "YOUR_PUBLIC_KEY",
      });
  })();
</script>
  1. Create an email template in your EmailJS dashboard. This template will define the content and structure of the emails you'll send.
  2. Write JavaScript function to send email using EmailJS. Below is a basic syntax for the code:
emailjs.send(serviceID, templateID, templateParams, options);
  1. Call your function whenever you want to send an email.

Back to Content

Version Control

Throughout the development and testing phases of the project, Git and GitHub were utilized for version control management, along with the implementation of a Kanban board for task tracking and workflow organization.

Back to Content

Credits and Acknowledgements

### Code Used

script.js

/** Function handle load more button  using JQuery*/
function handleLoadMoreButton() {
    $(".post-it-note").css("display", "none");
    $(".post-it-note").slice(0, 9).show();
    if ($(".post-it-note:hidden").length != 0) {
        $("#load-more-btn").show();
    }
    $("#load-more-btn").on('click', function (e) {
        e.preventDefault();
        const currentPage = $(".post-it-note:visible").length / 9;
        $(".post-it-note").slice(currentPage * 9, (currentPage + 1) * 9).slideDown();
        if ($(".post-it-note:hidden").length == 0) {
            $("#load-more-btn").fadeOut('slow');
        }
    });
}
How to prepend

Can I insert elements to the beginning of an element using .appendChild()?

Back to Content

email.js

EmailJS service

A JavaScript function designed to send an email using the EmailJS service when a form is submitted, provided the form passes a validation check


/* jshint esversion: 11, jquery: true */

let emailFeedBack = document.getElementById('feedback-email');

function sendMail(contactForm) {
    if (validateForm(this)) {
        emailjs.send("service_8utwynu", "template_t2x0o52", {
                "from_name": contactForm.name.value,
                "reply_to": contactForm.email.value,
                "subject": contactForm.title.value,
                "message": contactForm.enquiry.value
            })
            .then(
                function (response) {
                    emailFeedBack.innerText = "Email succesfully sent!";
                    contactForm.setAttribute("hidden", true);

                },
                function (error) {
                    console.log("FAILED", error);
                }
            );
        return false;
    } else {
        this.addEventListener('submit', function (event) {
            event.preventDefault();
        });
    }
}


// Form validation
function validateForm() {

    let nameInput = document.forms["contact-form"]["name-input"];
    let emailInput = document.forms["contact-form"]["email-input"];
    let subjectInput = document.forms["contact-form"]["subject-input"];
    let enquiryInput = document.forms["contact-form"]["enquiry-input"];

    if (nameInput.value === "") {
        emailFeedBack.innerText = "Please input name";
        nameInput.classList.add("is-invalid");
        return false;
    } else if (emailInput.value === "") {
        emailFeedBack.innerText = "Please input email";
        emailInput.classList.add("is-invalid");
        return false;
    } else if (subjectInput.value === "") {
        emailFeedBack.innerText = "Please input a subject to your message";
        subjectInput.classList.add("is-invalid");
        return false;
    } else if (enquiryInput.value === "") {
        emailFeedBack.innerText = "Please input your message";
        enquiryInput.classList.add("is-invalid");
        return false;
    } else {
        return true;
    }
}

Back to Content

contact.html

Redirect to another webpage using JavaScript

This code was inspired by GeeksforGeeks

Back to Content

thank-you.html - Style

/* Inner shadow was modified using guidance from: https://devdevout.com/css/css-inner-shadow */
  box-shadow:
    inset 0 0 0 1px hsla(0, 0%, 0%, .1),
    inset 3px 3px 3px hsla(0, 0%, 100%, .2),
    inset -3px -3px 3px hsla(0, 0%, 0%, .2),
    33px 18px 6px hsla(0, 0%, 0%, .3);
/* Sticky note animation. Amended from, */
/* CSS animations: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animations/Using_CSS_animations */
/* The @keyframes Rule and properties: https://www.w3schools.com/css/css3_animations.asp */
/* @keyframes examples: https://developer.mozilla.org/en-US/docs/Web/CSS/@keyframes */
@keyframes fadeInSpin {
  from {
    opacity: 0;
    transform: rotate(-360deg);
  }

  to {
    opacity: 1;
    transform: rotate(0deg);
  }
}

/* Pin appears after sticky note stopped spinning */
@keyframes fadeIn {
  0% {
    visibility: hidden;
    opacity: 0;
  }

  100% {
    visibility: visible;
    opacity: 1;
  }
}

Back to Content

404 page

Back to Content

Acknowledgements

The GratiDudes would like to thank

  • Our Hackathon organizers

Back to Content

The GratiDudes Team and contributors

Dude Role
Amirhossein Bayani Frontend and Design
Vernell C Scrum master and Frontend/content
Patrick Hladun Design Lead and Frontend
Jacqueline K Frontend and documentation
Emma Lamont Frontend and Project Presentation
Mikaela Virtucio Frontend, Content, Functionality
Lauren Y Frontend
Raymond Brien Frontend and Design

Back to Content


About

Code Institute World Happiness Day Themed Hackathon March 2024 2nd Place Winner

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published