/show-me-the-money

Sick of all these expensive agile techniques like stand ups and retros? This Application is designed to be able to display the real-time cost of a meeting as it occurs so that you can encourage your Dev's back to their computers.

Primary LanguageTypeScript

$how Me The Money

Team Members and Roles

Team Members: Estrella, Isaac, Jack, Josh, Louis, Reuben, Ryan, Olivia, Pat, Sam

Roles

Product Owner: Jack
Scrum master: Josh
Vibes watcher: Reuben
Git manager: Ryan
FE Lead: Sam
BE Lead: Olivia
Hype people: Everyone!!

Teamwork principles

General principles

  • Everyone gets heard
  • Process over product
  • Focus on function over form
  • Prioritise personal goals --> individuals may want to lean into strengths or challenge areas
  • Focus on MVP
  • Have set full group standup times
  • Be transparent by actively checking in with others and communicating issues
  • Be respectful and communicative
  • Find ways to help everyone stay on the same page
  • Pleasure over pressure
  • Share and celebrate wins (even small ones)!

Decision making

  • Product owner to keep production on track
  • Lead responsible for comms
  • Democratic decision making

Practical teamwork

  • Front-end/back-end split --> 6 frontend, 4 backend?
  • Pair programming
  • Create a development branch
  • Add review protections to the main branch
  • Name branches by feature
  • Have team leads

Conflicts

  • Improvised standups
  • Quickly and kindlY address any issues that might arise
  • Have a mediator if required --> this could be another group member or an external person (facily, humanskills etc)
  • Be open, honest and transparent
  • Do checkins --> small and big
  • Approach relevant person if there is an issue
  • Communicate in group chat to prevent issues arising

Personal learning objectives (focus areas)

Group objective: Gain experience across the stack and working in a larger team.

Estrella:

  • across stack
  • Css/Bulma

Isaac:

  • Work across the stack (flexible)
  • Backend
  • Pairing

Jack:

  • Have fun
  • Make something to be proud of
  • Redux

Josh:

  • Sass/Bulma
  • Testing
  • Redux

Louis:

  • Work across the stack (flexible)
  • Auth

Reuben:

  • Redux
  • Auth

Ryan:

  • Have fun with frontend tech
  • Front end

Olivia:

  • Work across the stack (flexible)
  • Backend
  • Testing

Pat:

  • Backend
  • Fullstack

Sam:

  • Smooth operations
  • Frontend

Week 7 Large group project

Meetings are expensive, but sometimes we forget how expensive they are and feel the need to talk for too long about topics that are unimportant for the meeting purpose.

This is an app to display the costs of meetings, and track the costs of your meetings over time.

The idea of the App is to be able to display the real-time cost of a meeting as it occurs. This cost is calculated based on the hourly wages of the meeting's attendees and the current duration of the meeting.

The intended effect of this App is to make meeting attendees aware of how much this time is costing the business.

The Tech

A Boilerplate is already set up for you with everything you will need to get started. This boilerplate is set up to use:

The mobile responsiveness is also being handled by some neat JS and Bulma classes, be sure to incorporate this perspective in your project goals!

User Stories

MVP

As a user:

  • I want to register for the App under my name, and state my hourly wage
  • I want to start a new meeting, and add all the meeting members. (MVP: Add member names and wages manually)
  • I want to start my created meeting, and see a ($) cost tracker display the current meeting cost every second
  • I want to be able to save a meeting's cost, attendees, duration, and date/time when it is finished for later viewing
  • I want to be able to view previous meetings in date/time order, and see more information about a past meeting.
  • I want to see a graph of meeting costs over time

Stretch

  • I want to be able to select existing users of the App as meeting attendees, so that our wages don't have to be shown / inputted manually. If a meeting attendee doesn't have an account, I want to be able to manually add them to the App.
  • I want to set a Maximum Cost an Maximum Duration for my Meeting, and see colourised progress bar displaying both a these
  • I want to be able to state my yearly salary rather than hourly rate as an option on register
  • I want to be able to view all meetings that I am an attenee for, and I want information about my meetings to not be visible to all users of the app.
  • I want to create a group of regular attendees for my meeting group to make setting up my meeting easier.
  • I want to be able to write notes or summaries for meetings upon saving them.

Views (Client Side)

name purpose
Login Welcome unregistered users and encourage them to login / sign up
Home Welcome registered users and display links to other parts of the site
CreateMeeting View for user to arrange meeting attendees and information before starting the timer
Meeting View to display current meeting time, cost and other information while the meeting is in progress
History Display a list of past meetings the user has attended with select preview information
PastMeeting Display a single meeting from the history list, displaying more information and a list of attendees for the past meeting

Reducers (Client Side)

name purpose
currentMeeting Track meeting progress such as current cost and current duration
meetings store the list of meetings the user has attended in the past
attendees store the list of attendees who can attend meetings

Actions

meetings

type data purpose
RECEIVE_MEETINGS meetings retrieve meetings from the db and store in redux
ADD_MEETING meeting Add a single meeting to the history after it is created

currentMeeting

type data purpose
START_MEETING attendees ([]), meeting_name a meeting has started, set initial meeting state
UPDATE_RUNNING_TOTAL null Ubdate running totals based on current time
END_MEETING null Revert to initial state

attendees

type data purpose
RECEIVE_ATTENDEES attendees retrieve attendees from the db and store in redux
ADD_ATTENDEE attendee Add a single attendee to the store after it is created

API (Client - Server)

Method Endpoint Protected Usage Response
Get /api/meetings Yes Get a Users Meeting History An Array of Meetings
Post /api/meetings Yes Save a completed meeting The Meeting that has been saved in db read format

DB (Server Side)

There should be two tables for MVP. You may want/need to add additional columns and tables.

Meetings

Table name: meetings

Column Name Data Type
id Integer
meeting_name String
duration Integer
start_time Timestamp
attendees Integer
total_cost Decimal

Attendees

Table name: attendees

Column Name Data Type
id Integer
name String
wage Decimal

Meetings and Attendees

Table name: meeting_attendee

Column Name Data Type
id Integer(Increments)
meeting_id Integer
attendee_id Integer

Authentication

Authentication is already set up in the client side of this project using Auth0. Users are currently able to login and logout.

When you wish to protect your server side routes (those for registered users only), you may need to reference other exercises or materials.

If you wish to replace the Auth0 authentication with your own, so you can customise the login for example, you will need to update the client/index.tsx file of the project with your own Auth0 details.

Setup

Run the following commands in your terminal:

npm install
npm run dev

To run before merging:

npm run lint
npm run format
npm run test

Deploying!

There are several scripts in this project that may be useful when deploying your app to Dokku.

To push your local main branch:

npm run dokku:deploy

Run dokku migrations and seeds:

npm run dokku:migrate
npm run dokku:seed

Provide feedback on this repo