# Project export: blossom.io

This document was generated by HackStack to give an AI agent context about a hackathon project. Sections are labeled with their provenance; content marked as truncated was cut to keep this document small.

## Project metadata

- Hackathon: Cal Hacks 10.0
- Tagline: Blossomio represents the latest advancements in accessibility focused study spaces. By creating a pomodoro study timer with in-built "gameify" system, we introduce new and interactive ways to focus.
- Devpost: https://devpost.com/software/blossom-io
- GitHub: https://github.com/blossomio/blossomio.github.io
- Demo: http://blossomio.github.io/
- Team: 2 GitHub contributor(s) — xiingrener (11 commits), blossomio (7 commits)

## Devpost submission (written by the team)

### Inspiration

: Supporting individuals with learning disabilities such as ADHD and autism in academia and work scenarios.

### What it does

: Blossom is a friendly pomodoro study space website. Pomodoro is a study technique where work and break time are separated into time intervals in order to boost productivity, combat procrastination and reduce stress. While maintaining our dedication to simplicity, fun, and efficiency, we gamified pomodoro to make work and study time appealing to our desired userbase. As the pomodoro counter goes down, your plant progressively grows and flourishes. Collect more plants to raise a garden/collection of 'Blossom'ing flowers!

### How we built it

: Was built using HTML, CSS, and JS.

### Challenges we ran into

: First time with JS

### Accomplishments we're proud of

: First time in frontend and JS development.

### What's next

: Including more accessible functions for Blossom such as colorblind mode, invite/study with friends, custom flashcards, data visualization on time usage and garden/collection elements.

## README (from the GitHub repository)

# Blossomio

Blossomio is a gamified pomodoro targeted for individuals with learning disabilities such as ADHD and autism who struggle with engaging in focused studying/working. Creating a gamified element to studying will provide users with fun, study oriented objectives associated with raising a lush, green collection of plants. The more you study with Blossom, the more plants you help 'Blossom'!


## Lessons Learned

This is a project created by Berkeley freshman for CalHacks 10.0 using HTML, CSS, and JS. 
Future elements we hope to update are:
- developing the plant collection game
- adding colorblind customization
- incorporation music player
- Adding study with friends function
- social chatbox with friends
- custom flashcards


## Detected evidence (automated analysis)

Indexed codebase: 24 recognized source files, 886 KB.
- CSS (language) — detected in the code
- HTML (language) — detected in the code
- JavaScript (language) — detected in the code

## Codebase structure (from repository index)

### Files (39 of 39)

```
assets/css/icons/tabler-icons/tabler-icons.css
assets/css/styles_counter.css
assets/css/styles.css
assets/css/styles.min.css
assets/js/app.min.js
assets/js/dashboard.js
assets/js/sidebarmenu.js
assets/plo
assets/scss/component/_card.scss
assets/scss/component/_reboot.scss
assets/scss/layouts/_header.scss
assets/scss/layouts/_layouts.scss
assets/scss/layouts/_sidebar.scss
assets/scss/pages/_dashboard1.scss
assets/scss/prepros.config
assets/scss/styles.scss
assets/scss/utilities/_background.scss
assets/scss/utilities/_icon-size.scss
assets/scss/variables/_theme-variables.scss
assets/scss/variables/_variables.scss
authentication-login.html
authentication-register.html
checko.html
icon-tabler.html
index.html
indexd.html.txt
module_build_template.html
notteepad.html
package.json
README.md
sample-page.html
script.js
script1.js
styles1.css
ui-alerts.html
ui-card.html
ui-forms.html
ui-typography.html
ui-underconstructo.html
```

### Dependencies

- package.json: apexcharts@^3.37.0, bootstrap@^5.2.3, jquery@^3.6.3, sass@^1.54.8

### Recent commits (newest first)

- README.md
- Add files via upload
- Update script1.js
- Update styles1.css
- Update index.html
- Add files via upload
- Delete html directory
- Add files via upload
- Create plo
- Add files via upload
- Delete src directory
- Delete README.md
- Create pla
- Add files via upload
- Add files via upload
- Create plo
- Add files via upload
- Create ple
- Create place
- Add files via upload

## Key source files (fetched from GitHub, selected and truncated for size)

### package.json

```
{
  "name": "vite",
  "description": "Include Bootstrap's source Sass and individual JavaScript plugins with Vite.",
  "version": "0.0.0",
  "private": true,
  "stackblitz": {
    "startCommand": "npm start"
  },
  "devDependencies": {
    "sass": "^1.54.8"
  },
  "dependencies": {
    "apexcharts": "^3.37.0",
    "bootstrap": "^5.2.3",
    "jquery": "^3.6.3"
  }
}

```

### notteepad.html

```html
<!DOCTYPE html>
<html>
<head>
    <title>Notepad App</title>
</head>
<body>
    <div id="notepad">
        <textarea id="text-area" rows="10" cols="40"></textarea>
        <div id="actions">
            <button id="save">Save</button>
            <button id="clear">Clear</button>
        </div>
    </div>
</body>
</html>
```

### module_build_template.html

```html
<!DOCTYPE html>
<html>
<head>
    <title>Notepad App</title>
</head>
<body>
    <!-- Change from here to -->
    <div id="notepad"> 
        <textarea id="text-area" rows="10" cols="40"></textarea>
        <div id="actions">
            <button id="save">Save</button>
            <button id="clear">Clear</button>
        </div>
    </div>
    <!-- here -->
</body>
</html>
```

### script.js

```javascript
// Get all the checkboxes
const checkboxes = document.querySelectorAll('input[type="checkbox"]');

// Add event listeners to each checkbox
checkboxes.forEach((checkbox) => {
    checkbox.addEventListener('change', function() {
        const listItem = this.parentElement; // Get the parent <li> element
        if (this.checked) {
            listItem.classList.add('checked'); // Apply a 'checked' class for styling
        } else {
            listItem.classList.remove('checked'); // Remove the 'checked' class
        }
    });
});
```

### script1.js

```javascript
const image = document.getElementById('scaling-image');
const container = document.getElementById('image-container');
const startButton = document.getElementById('start-button');
const stopButton = document.getElementById('stop-button');
const timerInput = document.getElementById('timer-input');
const countdownDisplay = document.getElementById('countdown1');

let timer; // A variable to hold the timer
let remainingTime = 0; // Track the remaining time in seconds
let timerDuration = 0; // The total duration of the timer in minutes

function scaleImage() {
    const currentScale = parseFloat(image.style.transform.replace('scale(', '').replace(')', '')) || 0;

    if (remainingTime <= 0) {
        // If the timer has reached 0 or gone negative, set the image to full scale
        image.style.transform = `scale(1)`;
        clearInterval(timer);
    } else if (currentScale < 1) {
        // If we haven't reached full scale yet, scale proportionally
        const newScale = 1 - (remainingTime / (timerDuration * 60));
        image.style.transform = `scale(${newScale})`;
    }
}

startButton.addEventListener('click', () => {
    // Start the timer when the "Start Scaling" button is clicked
    timerDuration = parseInt(timerInput.value);
    remainingTime = timerDuration * 60; // Convert minutes to seconds
    updateCountdownDisplay();

    timer = setInterval(() => {
        scaleImage();
        remainingTime -= 1;
        updateCountdownDisplay();

        if (remainingTime <= 0) {
            clearInterval(timer);
        }
    }, 1000); // Run the timer every 1 second
});

stopButton.addEventListener('click', () => {
    // Stop the timer when the "Stop Scaling" button is clicked
    clearInterval(timer);
});

function updateCountdownDisplay() {
    countdownDisplay.textContent = `Time Remaining: ${remainingTime} seconds`;
}

```

### styles1.css

```css
body {
    background-color: #ffffff; /* White background */
    font-family: "Plus Jakarta Sans"; /* Use Plus Jakarta Sans font */
    color: #71DA9E; /* Green text color */
    text-align: left;
    margin: 0;
    padding: 0;
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
}

#container1 {
    background-color: #ffffff; /* White container background */
    border: 2px solid #71DA9E; /* Green border */
    padding: 20px;
    max-width: 600px;
    
    text-align: center;
}

h1 {
    color: #71DA9E; /* Green heading color */
    font-family: "Plus Jakarta Sans"; /* Use Plus Jakarta Sans font for headings */
}

#image-container {
    width: 100%;
    height: auto;
    overflow: hidden;
    text-align: center;
    margin: 20px 0;
    display: flex;
    justify-content: center;
    align-items: flex-end; /* Start at the bottom middle */
    height: 21vh; /* Adjust the height for the image container */
}

#scaling-image {
    width: 80%; /* Increase image size */
    height: auto;
    transform-origin: center bottom; /* Start from the bottom middle */
    transition: transform 1s;
    display: block;
    margin: 0 auto;
    transform: scale(0); /* Start with no scale */
}

#controls {
    margin: 20px 0;
}

.jakarta_sans-font {
    font-family: "Plus Jakarta Sans"; /* Use Plus Jakarta Sans font for labels and buttons */
}

input[type="number"],
button {
    background-color: #71DA9E; /* Green background color */
    color: #ffffff; /* White text color */
    border: none;
    padding: 10px 20px;
    margin-right: 10px;
    cursor: pointer;
    border-radius: 5px;
    font-family: "Plus Jakarta Sans"; /* Use Plus Jakarta Sans font for input and buttons */
}

button {
    font-weight: normal;
}

button:hover {
    background-color: #71DA9E; /* Darker green on hover */
}

#countdown1 {
    color: #71DA9E; /* Green text color */
    font-weight: bold;
    font-size: 1000;
}

```

### checko.html

```html
<!DOCTYPE html>
<html>
<head>
    <style>
        /* The container */
        .container {
          display: block;
          position: relative;
          padding-left: 35px;
          margin-bottom: 12px;
          cursor: pointer;
          
          font-size: 22px;
          -webkit-user-select: none;
          -moz-user-select: none;
          -ms-user-select: none;
          user-select: none;
        }
        
        /* Hide the browser's default checkbox */
        .container input {
          position: absolute;
          opacity: 0;
          cursor: pointer;
          height: 0;
          width: 0;
        }
        
        /* Create a custom checkbox */
        .checkmark {
          position: absolute;
          top: 0;
          left: 0;
          height: 25px;
          width: 25px;
          background-color: #eee;
        }
        
        /* On mouse-over, add a grey background color */
        .container:hover input ~ .checkmark {
          background-color: #ccc;
        }
        
        /* When the checkbox is checked, add a blue background */
        .container input:checked ~ .checkmark {
          background-color: #2196F3;
        }
        
        /* Create the checkmark/indicator (hidden when not checked) */
        .checkmark:after {
          content: "";
          position: absolute;
          display: none;
        }
        
        /* Show the checkmark when checked */
        .container input:checked ~ .checkmark:after {
          display: block;
        }
        
        /* Style the checkmark/indicator */
        .container .checkmark:after {
          left: 9px;
          top: 5px;
          width: 5px;
          height: 10px;
          border: solid white;
          border-width: 0 3px 3px 0;
          -webkit-transform: rotate(45deg);
          -ms-transform: rotate(45deg);
          transform: rotate(45deg);
        }

        body {
            font-family: 'Plus Jakarta Sans';
        }
    </style>
</head>
<body> 

    <br>
    <label class="container"> Biology Chapter 12.2-4 Notes
        <input type="checkbox" checked="checked">
        <span class="checkmark"></span>
    </label>
    <label class="container"> Philosophy Discussion Response
        <input type="checkbox">
        <span class="checkmark"></span>
    </label>
    <label class="container"> Rest Eyes
        <input type="checkbox">
        <span class="checkmark"></span>
    </label>
    <label class="container"> Practice Violin (30 minutes)
        <input type="checkbox">
        <span class="checkmark"></span>
    </label>
</body>
</html>
```

### authentication-login.html

```html
<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Modernize Free</title>
  <link rel="shortcut icon" type="image/png" href="../assets/images/logos/favicon.png" />
  <link rel="stylesheet" href="../assets/css/styles.min.css" />
</head>

<body>
  <!--  Body Wrapper -->
  <div class="page-wrapper" id="main-wrapper" data-layout="vertical" data-navbarbg="skin6" data-sidebartype="full"
    data-sidebar-position="fixed" data-header-position="fixed">
    <div
      class="position-relative overflow-hidden radial-gradient min-vh-100 d-flex align-items-center justify-content-center">
      <div class="d-flex align-items-center justify-content-center w-100">
        <div class="row justify-content-center w-100">
          <div class="col-md-8 col-lg-6 col-xxl-3">
            <div class="card mb-0">
              <div class="card-body">
                <a href="./index.html" class="text-nowrap logo-img text-center d-block py-3 w-100">
                  <img src="../assets/images/logos/dark-logo.svg" width="180" alt="">
                </a>
                <p class="text-center">Your Social Campaigns</p>
                <form>
                  <div class="mb-3">
                    <label for="exampleInputEmail1" class="form-label">Username</label>
                    <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
                  </div>
                  <div class="mb-4">
                    <label for="exampleInputPassword1" class="form-label">Password</label>
                    <input type="password" class="form-control" id="exampleInputPassword1">
                  </div>
                  <div class="d-flex align-items-center justify-content-between mb-4">
                    <div class="form-check">
                      <input class="form-check-input primary" type="checkbox" value="" id="flexCheckChecked" checked>
                      <label class="form-check-label text-dark" for="flexCheckChecked">
                        Remeber this Device
                      </label>
                    </div>
                    <a class="text-primary fw-bold" href="./index.html">Forgot Password ?</a>
                  </div>
                  <a href="./index.html" class="btn btn-primary w-100 py-8 fs-4 mb-4 rounded-2">Sign In</a>
                  <div class="d-flex align-items-center justify-content-center">
                    <p class="fs-4 mb-0 fw-bold">New to Modernize?</p>
                    <a class="text-primary fw-bold ms-2" href="./authentication-register.html">Create an account</a>
                  </div>
                </form>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  <script src="../assets/libs/jquery/dist/jquery.min.js"></script>
  <script src="../assets/libs/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
</body>

</html>
```

### authentication-register.html

```html
<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Blossom.io</title>
  <link rel="shortcut icon" type="image/png" href="../assets/images/logos/tlogoo.png" />
  <link rel="stylesheet" href="../assets/css/styles.min.css" />
</head>

<body>
  <!--  Body Wrapper -->
  <div class="page-wrapper" id="main-wrapper" data-layout="vertical" data-navbarbg="skin6" data-sidebartype="full"
    data-sidebar-position="fixed" data-header-position="fixed">
    <!-- Sidebar Start -->
    <aside class="left-sidebar">
      <!-- Sidebar scroll-->
      <div>
        <div class="brand-logo d-flex align-items-center justify-content-between">
          <a href="./index.html" class="text-nowrap logo-img">
            <img src="../assets/images/logos/tlogoo.png" width="180" alt="" />
          </a>
          <div class="close-btn d-xl-none d-block sidebartoggler cursor-pointer" id="sidebarCollapse">
            <i class="ti ti-x fs-8"></i>
          </div>
        </div>
        <!-- Sidebar navigation-->
        <nav class="sidebar-nav scroll-sidebar" data-simplebar="">
          <ul id="sidebarnav">
            <li class="nav-small-cap">
              <i class="ti ti-dots nav-small-cap-icon fs-4"></i>
              <span class="hide-menu">blossom.io</span>
            </li>
            
            <li class="nav-small-cap">
              <i class="ti ti-dots nav-small-cap-icon fs-4"></i>
              <span class="hide-menu"></span>
            </li>
            <li class="sidebar-item">
              <a class="sidebar-link" href="./ui-underconstructo.html" aria-expanded="false">
                <span>
                  <i class="ti ti-article"></i>
                </span>
                <span class="hide-menu">pomodoro</span>
              </a>
            </li>
            
            <li class="sidebar-item">
              <a class="sidebar-link" href="./ui-card.html" aria-expanded="false">
                <span>
                  <i class="ti ti-cards"></i>
                </span>
                <span class="hide-menu">gameify</span>
              </a>
            </li>
            
            <li class="sidebar-item">
              <a class="sidebar-link" href="./ui-typography.html" aria-expanded="false">
                <span>
                  <i class="ti ti-typography"></i>
                </span>
                <span class="hide-menu">colorblind</span>
              </a>
            </li>
            
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            
            <li class="sidebar-item">
              <a class="sidebar-link" href="./authentication-register.html" aria-expanded="false">
                <span>
                  <i class="ti ti-user-plus"></i>
                </span>
                <span class="hide-menu">invite</span>
              </a>
            </li>
            
          </ul>
          
        </nav>
        <!-- End Sidebar navigation -->
      </div>
      <!-- End Sidebar scroll-->
    </aside>
    <!--  Sidebar End -->
    <!--  Main wrapper -->
    <div class="body-wrapper">
      <!--  Header Start -->
      
      <!--  Header End -->
      <div class="container-fluid">
        <!--  Row 1 -->
        <div class="row">
          <div class="col-lg-8 d-flex align-items-strech">
            <div class="card w-100">
              <div class="card-body">
                <div class="d-sm-flex d-block align-items-center justify-content-between mb-9">
                  <div class="mb-3 mb-sm-0">
                    <h5 class="card-title fw-semibold">cannot join other sprouts at the moment! &nbsp please come back another day :))</h5>
                    <p>( under construction )</p>
                  </div>
                  
              </div>
            </div>
          </div>
        </div>
        
          
          
        
      </div>
    </div>
  </div>
  <script src="../assets/libs/jquery/dist/jquery.min.js"></script>
  <script src="../assets/libs/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
  <script src="../assets/js/sidebarmenu.js"></script>
  <script src="../assets/js/app.min.js"></script>
  <script src="../assets/libs/apexcharts/dist/apexcharts.min.js"></script>
  <script src="../assets/libs/simplebar/dist/simplebar.js"></script>
  <script src="../assets/js/dashboard.js"></script>
</body>

</html>
```

### ui-card.html

```html
<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Blossom.io</title>
  <link rel="shortcut icon" type="image/png" href="../assets/images/logos/tlogoo.png" />
  <link rel="stylesheet" href="../assets/css/styles.min.css" />
</head>

<body>
  <!--  Body Wrapper -->
  <div class="page-wrapper" id="main-wrapper" data-layout="vertical" data-navbarbg="skin6" data-sidebartype="full"
    data-sidebar-position="fixed" data-header-position="fixed">
    <!-- Sidebar Start -->
    <aside class="left-sidebar">
      <!-- Sidebar scroll-->
      <div>
        <div class="brand-logo d-flex align-items-center justify-content-between">
          <a href="./index.html" class="text-nowrap logo-img">
            <img src="../assets/images/logos/tlogoo.png" width="180" alt="" />
          </a>
          <div class="close-btn d-xl-none d-block sidebartoggler cursor-pointer" id="sidebarCollapse">
            <i class="ti ti-x fs-8"></i>
          </div>
        </div>
        <!-- Sidebar navigation-->
        <nav class="sidebar-nav scroll-sidebar" data-simplebar="">
          <ul id="sidebarnav">
            <li class="nav-small-cap">
              <i class="ti ti-dots nav-small-cap-icon fs-4"></i>
              <span class="hide-menu">blossom.io</span>
            </li>
            
            <li class="nav-small-cap">
              <i class="ti ti-dots nav-small-cap-icon fs-4"></i>
              <span class="hide-menu"></span>
            </li>
            <li class="sidebar-item">
              <a class="sidebar-link" href="./ui-underconstructo.html" aria-expanded="false">
                <span>
                  <i class="ti ti-article"></i>
                </span>
                <span class="hide-menu">pomodoro</span>
              </a>
            </li>
            
            <li class="sidebar-item">
              <a class="sidebar-link" href="./ui-card.html" aria-expanded="false">
                <span>
                  <i class="ti ti-cards"></i>
                </span>
                <span class="hide-menu">gameify</span>
              </a>
            </li>
            
            <li class="sidebar-item">
              <a class="sidebar-link" href="./ui-typography.html" aria-expanded="false">
                <span>
                  <i class="ti ti-typography"></i>
                </span>
                <span class="hide-menu">colorblind</span>
              </a>
            </li>
            
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            
            <li class="sidebar-item">
              <a class="sidebar-link" href="./authentication-register.html" aria-expanded="false">
                <span>
                  <i class="ti ti-user-plus"></i>
                </span>
                <span class="hide-menu">invite</span>
              </a>
            </li>
            
          </ul>
          
        </nav>
        <!-- End Sidebar navigation -->
      </div>
      <!-- End Sidebar scroll-->
    </aside>
    <!--  Sidebar End -->
    <!--  Main wrapper -->
    <div class="body-wrapper">
      <!--  Header Start -->
      
      <!--  Header End -->
      <div class="container-fluid">
        <!--  Row 1 -->
        <div class="row">
          <div class="col-lg-8 d-flex align-items-strech">
            <div class="card w-100">
              <div class="card-body">
                <div class="d-sm-flex d-block align-items-center justify-content-between mb-9">
                  <div class="mb-3 mb-sm-0">
                    <h5 class="card-title fw-semibold">this mode is currently photosynthesizing! &nbsp please come back another day :))</h5>
                    <p>( under construction )</p>
                  </div>
                  
              </div>
            </div>
          </div>
        </div>
        
          
          
        
      </div>
    </div>
  </div>
  <script src="../assets/libs/jquery/dist/jquery.min.js"></script>
  <script src="../assets/libs/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
  <script src="../assets/js/sidebarmenu.js"></script>
  <script src="../assets/js/app.min.js"></script>
  <script src="../assets/libs/apexcharts/dist/apexcharts.min.js"></script>
  <script src="../assets/libs/simplebar/dist/simplebar.js"></script>
  <script src="../assets/js/dashboard.js"></script>
</body>

</html>
```

[11 more indexed source files omitted to keep this export small. The full file list is in the Codebase structure section above.]