Sprint 0 Portfolio - Team-07-Looney/looney-general GitHub Wiki
Team INT 07 - Sprint 0 Portfolio
Introduction
Project Looney is a project for the UVC course. You can find more details over here. It will be developed using microservice architecture - microservices will be created using ExpressJS and the front face will be created via SvelteKit.
The following document will contain information on the team and organization, set up - structure, current situation, branching model and rules, GitHub actions workflows and the backlog.
Authors
- Ana Rivera Faraco - anafaraco01
- Valeria Stamenova - v-stamenova
- Ihor Novikov - IGORnvk
- Jessica Dinova - JessicaDinova
- Laura Birau - LauraBirau
- Daniel Bartha - DanielBartha
Team Members
- Ana Rivera Faraco - anafaraco01 - strength: backend, team work and quick learning / weakness: design and research
- Valeria Stamenova - v-stamenova - strength: backend and database / weakness: frontend
- Ihor Novikov - IGORnvk - strength: frontend and backend / weakness: speach
- Jessica Dinova - JessicaDinova - strength: front end / weakness: research and java
- Laura Birau - LauraBirau - strength: logic and backend / weakness: frontend
- Daniel Bartha - DanielBartha - strength: research / weakness: database and logic
Team and organization
Team Agreements
Working hours
- Stand-up: 10:00
- Lunch: 12:00 - 13:00
- End Work: 16:00
Working place
| Day | Room |
|---|---|
| Monday | GW311 |
| Tuesday | GW307 |
| Wednesday | GW308 |
| Thursday | GW302 |
| Friday | GW311 |
Risk assessment [WIP]
- Everyone should know how everything works, so that if someone is sick we can continue working.
- If someone won´t attend to school, they need to notify the team in advance.
- If someone's laptop breaks, they will do pair-programming.
Sprint 1
Roles
- Team Coach: Valeria (Back-up Ihor)
- Tracker: Jessica (Back-up Ana)
- On-site Customer: Laura (Back-up Daniel)
- Developers: Ana, Ihor and Daniel
Minimum viable product (Roadmap - MVP)
- Full microservice architecture plan
- Database plan
- Plan for the robot
- Habits functionality developed
- App design (styling)
Schedule
| NOV Mon 13 | Tue 14 | Wed 15 | Thu 16 | Fri 17 | Mon 20 | Tue 21 | Wed 22 | Thu 23 | Fri 24 |
|---|---|---|---|---|---|---|---|---|---|
| Sprint Planning 1 | Developing | Developing | Elective Course | IT Conference | Developing | Testing 1 | Developing | Elective Course | Demo 1 & Retro 1 |
Sprint 2
Roles
- Team Coach: Valeria
- Tracker: Jessica
- On-site Customer: Laura
- Developers: Daniel, Ana, Ihor
Minimum viable product (Roadmap - MVP)
- Align Arduino with specific task
- First connection between robot and app
- Moods microservice with my moods and vents
- Improving habit feature based on given feedback
Schedule
| NOV Mon 27 | Tue 28 | Wed 29 | Thu 30 | DEC Fri 1 | Mon 4 | Tue 5 | Wed 6 | Thu 7 | Fri 8 |
|---|---|---|---|---|---|---|---|---|---|
| Sprint Planning 2 | Developing | Developing | Elective Course | Developing | Developing | Testing 2 | Developing | Elective Course | Demo 2 & Retro 2 |
Sprint 3
Roles
- Team Coach: Daniel
- Tracker: Ana
- On-site Customer: Ihor
- Developers: Jessica, Laura and Valeria
Minimum viable product (Roadmap - MVP)
- Robot final version - hardware and software wise
- Mood tracker fully functionality developed
- Finalize design for the final release
Schedule
| DEC Mon 11 | Tue 12 | Wed 13 | Thu 14 | Fri 15 | Mon 18 | Tue 19 | Wed 20 | Thu 21 | Fri 22 | JAN Mon 8 | Tues 9 | Wed 10 | Thu 11 | Fri 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Sprint Planning 3 | Developing | Developing | Elective Course | Developing | Developing | Developing | Developing | Elective Course | Developing | Developing | Developing | Testing 3 | Elective Course | Demo 3 & Retro |
Set up
Structure
After careful consideration we took the decision to have a single repository containing all of our frontend as well as our backend. Initially we wanted to have different repositories per microservice, but we decided against it with two main considerations in mind:
- The set up of CL/CD would be easier - less repositories to set up
- If a release needs to be rollback it would be easier to syncronise
We'd like to point out that if the project was a lot bigger and was going for a longer time, we would've reconsidered this decision.
Current overview
You can see the current version which contains on the backend one microservice (Habits), a gateway and on the frontend a svelte app over here.
Branching model
We will be using the GitFlow branching model for each repository. For more detailed view on the model you can scroll to the bottom
Branches
Forever branches
- Main - protected - contains stable versions
- Development - protected
Temporary branches
Based on the branching model
- Feature - to develop new features that branches off the
developmentbranch - Release - help prepare a new production release - something like a pre-production branch; (from the
developmentbranch and must be merged back to bothdevelopmentandmain) - Hotfix - hotfix branches arise from a bug that has been discovered and must be resolved as soon as possible (most likely in main/production). Most of the time it is "quick and dirty" and can cause technical debt.
Hotfix scenario
In the case that a hotfix is needed there are a couple of steps that should be followed:
- Since hotfix is born in a release, the branch has to be checked out from
mainfollowing the naming convention - Develop the fix on that branch
- After fix is done, create a PR to
mainanddevelopment - Reviewers need to check both and merge if approved
- Tag the new release - eg. X.1, X.2
Our own to make it more specific
- Bugfix - branches arise from a bug that has been discovered and must be resolved UNLIKE the hotfix - it's not an urgent one. Most likely in
developmentsince it's not urgent. Branches off fromdevelopmentbranch - Rework/Refactor - branches that arise because of technical debt
- Test - branches for experimenting safely on them
Naming conventions
All temporarily branches must be in the format: <category/description-in-kebab-case>
Category
The category references the type of development that the developer is going to do in the branch. It is based on the temporary branches.
Example:
- Developer wants to create second factor authentication - feature
- Developer wants to fix bug in production - hotfix
- Developer wants to fix bug in development - bugfix
Short description
The short description includes a short description what others should expect to see in the branch (short description of the user story/issue that is going to be implemented)
Example:
feature/two-factor-authbugfix/dark-mode-rework
Merging and Pull Requests
Temporary branches will inevitably (unless cancelled) be merged in development. There MUST NOT be any direct merges to main from feature/bugfix/test etc. branches. There must be open a pull request for merging to development.
Pull requests
Pull requests are mandatory for each feature (and the rest of temp branches) in order to be accepted in development. Pull requests can be approved, returned for changes, etc. 1 reviewer minimum per pull request. Each pull request must contain the following:
Title
Short description of what is being introduced - 'Feature - Second factor authentication'
Description
Reference the issue that this pull request will close. Details that the reviewer should know (or should be added to the documentation) before testing.
Link any issues that the pull request will close, by using the closing tags e.g. Closes #1
Part for "What should be tested". Checkboxes with short description of the functionality that should be tested.
Development
Refer to the issue that this branch will close/is working on.
Reviewers
Add all team members if not specifically stated otherwise during meeting, stand-up, etc.
Labels
Match all labels of the issue it references. Add additional ones if you think that are necessary (technical debt, help wanted, etc.)
Milestone
Match the milestone to the one of the issue. It refers to the sprint.
More details on branching model
GitHub Actions
Using GitHub Actions, we managed to create two workflows - one for building and one for testing. You can find them and their logs in the repo, quick overview:
Build Workflow
Backend
name: GitHub Actions Backend
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '20.x'
- name: Cd to directory
run: cd backend/api-gateway/code && npm ci
Frontend
name: GitHub Actions Frontend
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '20.x'
- name: Cd to directory
run: cd frontend/src && npm ci
Testing Workflow
Locally running tests
Remotely running tests
name: Test
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '20.x'
- run: echo "Hello there"
- name: Install dependencies
run: |
cd frontend
npm install
npm install --save-dev jest
- name: Run tests
run: |
cd frontend
npm run test
Backlog
- As a user, I want to be able to order the robot, so that I have a physical reminder with me.
- As a user, I want to change the time of my habits so that I can match them with my real-life routine.
- As a user, I want to get reminders about what I have to do so that I don’t fall behind.
- As a user, I want to be able to snooze a habit so that I can do it later.
- As a user, I want to change the color of Looney in the app so that it matches my taste.
- As a user, I want to get information about Looney’s battery so that I can charge him.
- As a user, I want to see my name in the app so that it feels more personalized.
- As a user, I want to be able to delete a habit so that I can keep my in-app routine connected to my real-life routine.
- As a user, I want to be able to create a new habit so that I can personalize the app to fit my needs.
- As a user, I want to be able to perform habits with my robot so that I do not feel alone.
- As a user, I want the app to be consistent, so that I will not get confused while browsing the app.
- As a user, I want the app to be secure so that other users cannot access my account.
- As a user, I want to view a visual representation of my mood over time, enabling me to track and reflect on it.
- As a user, I want a private space where I can write my thoughts, so that I have means of self-expression.
- As a user, I want to be able to save my written thoughts, so that I can read them again later if I wish to.
- As a user, I want to be able to delete my written thoughts, so that no one sees them again.
- As a user, I want to be able to see the location of other users that also feel like me, so that I feel less lonely.
- As a user, I want to be able to obtain advice based on my mood, so that I get guidance on how to feel better.
- As a user, I want to be able to connect my robot with the app easily, so that it is more efficient.
- As a user, I want to use the app independently, without relying on the robot, so that it is more flexible.
- As a user, I want to have login credentials, so that my account is secured.
- As a user, I want the app to help me determine my mood, so that I can realize how I feel and why.
- As a user, I want to be able to stop the currently running habit of the robot, so that it matches real life.
- As a user, I want to be able to start a habit of the robot in the app when I do not have the physical version of the robot, so that I can still get a buddy to do my habits with me.
- As a user, I want to get personal recommendations of the mood I might be feeling based on my response in a chat with the robot, so that I can get a better understanding of my feelings.
- As a user, I want to be able to see a vase filled with all colors of my moods, so that I can reflect upon my feeling at any time and see my personal development.
- As a user, I want to hover over a specific mood in the vase so that I can see what it is.
- As a user, I want to see my venting note when I hover over my mood in the vase, so that I can see what I was thinking back then.
- As a user, I want the app to have a calming color palette, so that I can feel safe and secure.
- As a user, I want my robot to cheer me up when I am feeling down, so that I can cope with my feelings better.
- As a user, I want to be able to turn off the app's notifications, so that I will not be disturbed.
- As a user, I want to have a button to reset a password, so that I can gain access to the app even though I have forgotten my password.
- As a user, I want to have the option to chat in real time with Looney so that I feel less lonely.
- As a user, I want to be able to configure the notification system, so that it does not obstruct my daily life.
- As a user, I want specific notifications about the habits I have to do, so that I get reminded of them.
- As a user, I want specific notifications about checking up on my mood, so that I get reminded to do check-ins with myself.
- As a user, I want Looney to remind me to brush my teeth so that I do not forget.
- As a user, I want Looney to brush his teeth on the screen with me so that I do not feel alone.
- As a user, I want Looney to make sounds when he is brushing his teeth with me so that I have some background sound.
- As a user, I want Looney to remind me to do my homework so that I do not forget.
- As a user, I want Looney to do his homework on the screen with me so that I do not feel alone.
- As a user, I want Looney to make sounds when he is doing his homework with me so that I have some background sound.
- As a user, I want Looney to remind me to drink water so that I do not forget.
- As a user, I want Looney to drink his water on the screen with me so that I do not feel alone.
- As a user, I want Looney to make sounds when he is drinking water with me so that I have some background sound.
- As a user, I want Looney to remind me to eat so that I do not forget.
- As a user, I want Looney to eat on the screen with me so that I do not feel alone.
- As a user, I want Looney to make sounds when he is eating with me so that I have some background sound.
- As a user, I want Looney to stop doing his habit when the time is up so that I know when I have to stop my habit.
- As a user, I want to edit Looney’s habits to better match my own.
- As a user, I want to set the time when Looney would wake up to match my own schedule.
- As a user, I want to set the time when Looney goes to sleep to match my own schedule.
- As a user, I want the app to offer self-help articles as a suggestion to help me cope with loneliness.
- As a user, I want to be able to see what other people say about their feelings so that I do not feel alone in my mood.
- As a user, I want to be able to share my venting with other people so that I feel heard.
- As a user, I want to pause a task that robot is doing at that moment in case I am disturbed with something, so that I can return to it when I am ready again.
- As a user, I want to be able to resume a task so that I can come back to it in case I am interrupted.
- As a user, I want to be able to set a specific time of the day when the habit should be executed, so that I can have better control over Looney.
- As a user, I want to be able to register so that I can gain access to my personalized application.
- As a user, I want to select my mood based on an emoji, so that I can quickly describe/track my mood.
- As a user, I want to be able to set a specific duration for a habit, so that it resembles real life.
- As a user, I want to see a nice starting screen, so it attracts me to the app.
- As a user, I want to have an attractive icon for the app, so that I am drawn to using it.
- As a user, I want to exit the mood tracker at any time and go back to the main screen, so that I do not have to record my mood anymore.
- As a user, I want to exit the habits tracker at any time and go back to the main screen, so that I can undo an action I did not intend to do.
- As a user, I want to cancel the creation of a new task, so that I can interrupt an action I did not want to do.
- As a user, I want the robot to move its ears, so that it can express its feelings better for me to understand.
- As a user, I want to have the option to select my mood from a scale of numbers, so that Looney can better understand me and my feelings.
- As a user, I want to have a visual representation of the robot in my app when I don’t own the physical version of the robot, so that I can still have a buddy to do my habits with.
- As a user, I want to have a "remember me" button, so that I can stay logged in if I want.
- As a user, I want to stay logged in when I select that, so that I don’t have to enter my credentials every time.
- As a user, I want to see an error message if I enter incorrect login details, so that I know when my login attempt has failed.
- As a user, I want the habits form to have real-time validation, so that I can correct any error as I fill out the form.
- As a user, I want to see a list of all my habits, so that I can navigate the app's interface better.
- As a user, I want to access the habits page in the app, so that I can manage my habits.
- As a user, I want to access the mood tracker page in the app, so that I can record my mood.
- As a user, I want to access the mood tracker page in the app, so that I can get a better understanding of my emotions.
- As a user, I want to have the option to log out, so that I can log out of the app at any given time.
- As a user, I want to have the option of changing my password in the app, so that I can change it at any given time.
- As a user, I want to see an error message when I’m creating my new password when it does not match up, so that I know my attempt to change the password failed.
- As a user, I want to have the option to change my email address in the app, so that I can change it at any given time.
- As a user, I want to have the option to change my username in the app, so that I can change it at any given time.
- As a user, I want to access the settings of the app, so that I can change my preferences at any given time.
- As a developer, I want to create a mood tracking module within the app, allowing users to input their emotions and tag them with relevant notes.
- As a developer, I want to implement mood data storage and synchronization between the app and the companion robot, ensuring consistency in the user's emotional tracking experience.
- As a developer, I want to design a mood analysis algorithm to generate insights based on historical mood data, such as identifying trends, patterns, and correlations.
- As a developer, I want to develop a graphical representation module that can display mood history using charts and graphs, providing a visual overview of mood fluctuations.
- As a developer, I want to identify and integrate external APIs or services that can provide social activity recommendations and mental health resources, such as local event databases or mental health articles.
- As a developer, I want to maintain version control using a Git repository, enabling the team to collaborate efficiently and track changes to the codebase.
- As a developer, I want to design a microservice structure so that I can manage and maintain my code better.
- As a user, I want to have a page where I can either see my past data, my vents and input a new feeling, so that I can get a better experience.