This project provides a work-in-progress codebase for a web-based activity that assists in learning the piano.
The project has two parts:
- A server (written in Python using Flask) which manages the data for the application
- A client (written in ES6 using React) which displays the activity to the user in a web browser
- Make sure python (version 3.5+) and node JS are installed on your system
- Install Flask into the python environment using
pip install flask
- Navigate to the
client
folder and runnpm install
- Once dependencies are installed, run
npm run build
to build the client project - Navigate to the
server
folder, runpython run_server.py
- Open http://localhost:5000/ to access the activity
This is a small starter project which we hope will become a fully-fledged activity. Your task is to add new functionality to this project to produce a working end product.
The server and client need to be finished off such that:
- notes are served in a sequence (at the moment the same note is served over and over again - perhaps this could make a tune?)
- keys pressed by the user are checked on the server, against the current note in the sequence
- the sequence of notes progresses when the user provides the correct key (until the end of the sequence)
- a new method is added which provides the user with summary data of correct/incorrect attempts within the provided sequence
- when a key is pressed, it is checked with the server (using this.props.checkAnswer in App.js) to determine if this is the matching key, and feedback is given to the user (in a user-friendly manner of your design)
- the next note is then requested from the server, and displayed to the user
- a way for the activity to be completed, and a summary reported to the user's of their success (e.g. which keys were correct, and which they need to work on)
Demonstrate what you can do by adding your own functionality, e.g.
- storage of data in a data store (e.g. sqlite)
- support for multiple users: logging into a user session and storing where each user is up to in the activity
- improvement of look and feel, e.g. show off some CSS artisanry (or add other packages such as SCSS), or add audio when pressing the keys
- add unit tests that provide good testing coverage
- add a Redux store to the project such that state is no longer stored within App.js
- user results are reported on a separate page which can also be navigated to as a single page app (SPA)
- additional functionality of your choosing which adds educational value to the activity (be creative!)
- add a way for users to share their results, or upload their own sequences/tunes to teach each other
Implement as much as you reasonably can, and document any ideas that you don't have the time to build - we may have the opportunity to try and implement some of them together.