Giter Site home page Giter Site logo

golubitsky-music-flashcards's Introduction

Build and Deploy

This project was bootstrapped with Create React App.

Develop

npm start

App is live and reload on save is enabled.

Test

npm test

Deploy

This occurs automatically on push to master.

npm run deploy

App is live.

TODO

Features

  • Display all 12 notes in random order.
    • Sometimes with flats.
    • Sometimes with sharps.
  • Flashcards for polychord fractions.
    • Cards probably shouldn't be duplicated for front/back. Consumer should flip them.
  • Flashcards for six and seven chord equality.
    • Half diminished 7 == minor 6
    • minor 7 == major 6
  • Flashcards for chord -> mode
    • Major
    • Melodic minor
    • Harmonic minor
    • Natural minor (same as major)
    • A single page to display all data.
  • Flashcards for scale degree -> mode.
  • Flashcards for flatted scale degrees -> mode.
  • Flashcards for half-dim7 == minor 6 chords.
  • Flashcards for turnarounds (e.g. C A D G) and/or cool progressions.
    • ii V⁷ [ii V⁷]/ii (d G⁷ e A⁷)
    • ii V⁷ I△ V⁷/ii (d G⁷ C△ A⁷)
    • [ii V⁷]/iii [ii V⁷]/ii ii V⁷ I△ (f# B⁷ e A⁷ d G⁷ C△)
    • Minor 1 6 2 5 (i.e Bésame/My Favorite)
  • Flashcards for intervals
    • Ascending
    • Descending (implemented via "Reverse" but this isn't a good solution for all sensible notes)
    • Descending (truly)
    • Ear training. Tones. Use this?
    • Thirds and Sevenths
      • △, m7, 7
      • o
      • ø —— might not be necessary, 3 and 7 are same as for m7.
    • 7th chords: all 4 notes.
      • Per quality.
      • All qualities.
      • Shuffled notes.
    • Triads (having realized that there are 24 permutations of each 7th chord!)
      • Per quality (M, m, dim, aug).
      • All qualities.
      • Shuffled notes.
  • Flashcards UI enhancements.
    • Customization of how the lines on a flashcard will be displayed (i.e. 'main' + 'supporting'; or all same size); see Stella progression.
    • Indicate current deck (perhaps on card).
    • Front/Back is a toggle (relevant after multiple types of flashcards).
    • Optimize button placement for mobile.
    • Change behavior of "tap on card" to: 1st tap: flip card; 2nd tap: show random card.
    • Rows of buttons.
    • Implement DisplayNames.
  • Random rhythms.
  • Flash Cards: separate sub-screens per deckType.
    • Main menu (i.e. existing FlashCards screen) to list only deckTypes.
    • Each deckType has its own screen and has buttons for its decks + options.

Technical

  • Refactor chordParser. Seek recursive implementation.
  • I wouldn’t write anything serious in JavaScript without https://lodash.com/, which includes such niceties as _.shuffle, _.sum, and _.cloneDeep. Alternative libraries such as https://ramdajs.com/ can serve this purpose too.
  • For your prototype, CSS Grid looks more appropriate than Flexbox. It has been safe to use in production for at least a year: https://caniuse.com/css-grid It has more properties to keep track of than Flexbox, but https://grid.layoutit.com/ makes them trivial to keep straight. After you learn what terms like “gap” and fr mean, I think there’s no need to hand-write the CSS for your grids; that tool can do it more easily.
  • CSS: how to use CSS Grid (like 4 columns by 3 rows) to fill parent container horizontally and vertically?
  • CSS: how to set font-size based on parent container size?
  • Move shuffle logic out of UI
  • Unskip interval tests.
  • Flashcards
    • 2 lines of text on each back side (to support different formatting/smaller for second line).
    • 3 lines of text on each side. Simplify to single array to hold all lines per side.
    • DeckSelection React Component. Does this require state management? (no)
    • Export constants, not functions.
    • Move deck definitions out of UI.
    • Do not export DECKS (solution was to remove DECKS and rename AVAILABLE_DECKS -> DECKS).
    • Use deck.displayName to make prettier UI.
    • Clean up deck selection logic in the UI (abstract more).
  • Seems like layers is the way to go: foundation, services, screens.
  • Use consistent flat symbol throughout codebase (polychordFractions seem to have the symbol, others use letter "b").
  • Constantize flat, sharp symbols.
  • Constantize intervals. Possibly chord symbols/intervals should be in separate constants.
  • Refactor chords.js tests to be more data-driven/DRY.
  • notesInOneChord should be in its own module.
  • Omitting "M" from Major chords could be DRYer.
  • Prototype state management from child screen to parent screen (use one of the existing toggles).
  • Use absolute imports using jsconfig.json to make it easier to move files around.
  • Prototype end-to-end testing with cypress.

golubitsky-music-flashcards's People

Contributors

golubitsky avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.