Giter VIP home page Giter VIP logo

chordbook's People

Contributors

bkeepers avatar dependabot[bot] avatar prestoncabe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

chordbook's Issues

Issues loading in Chrome Version 98.0.4758.80 (Official Build) (arm64)

Getting a wonky layout and a bunch of warning in the browser console:

data:application/js…:1 Manifest: property 'start_url' ignored, URL is invalid.
data:application/js…:1 Manifest: property 'scope' ignored, URL is invalid.
data:application/js…:1 Manifest: property 'src' ignored, URL is invalid.
data:application/js…:1 Manifest: property 'src' ignored, URL is invalid.
DevTools failed to load source map: Could not parse content for https://chordbook.app/assets/index.c0a45d7b.js.map: Unexpected token < in JSON at position 0
DevTools failed to load source map: Could not parse content for https://chordbook.app/assets/vendor.cc1db10b.js.map: Unexpected token < in JSON at position 0
DevTools failed to load source map: Could not parse content for https://chordbook.app/assets/DiscoverView.444da593.js.map: Unexpected token < in JSON at position 0
DevTools failed to load source map: Could not parse content for https://chordbook.app/assets/DataSource.d785a46b.js.map: Unexpected token < in JSON at position 0
DevTools failed to load source map: Could not parse content for https://chordbook.app/assets/swipe-back.2c2a8de0.js.map: Unexpected token < in JSON at position 0
DevTools failed to load source map: Could not parse content for https://chordbook.app/assets/tap-click.f2fe236c.js.map: Unexpected token < in JSON at position 0

image

Toggle instruments separately

Currently the toggle to show chords shows both Guitar and Ukulele chords. Allow selecting instrument and decided which to show (still allow both though)

Tooltips for settings bar

Settings bar above each song is currently just icons. Add tooltips that explain what each button is on hover/touch

Browse

by title/artist/popularity

Improve automatic matching of artists

When using {artist: Artist Name} in a songsheet it will be automatically matched to an existing artist. It currently uses Trigram matching against existing artists, giving preference to verified artists (with external metadata)

  • Only match existing artists above a certain threshold (.75? needing tested)
  • If an existing artist with the exact name doesn't exist, kick off a LookupMetadata job to see if it's a new artist that is known
  • Add aliases to artists (21 Pilots => Twenty One Pilots)

User profiles

Each user should get a profile page that shows recent activity, including contributions, setlists, library, etc.

Improve frontend testing

There are decent tests for the Rails backend, but the frontend currently has no tests because I was quickly evolving the stack and didn't want to take time to maintain tests 🤠. (There is an old system test for the editor, but it no longer runs after migrating to ionic in #81.)

It'd be great to add a few different types of tests to cover the frontend:

  • Unit/functional tests for vue components
  • Integration tests for client with a mocked API
  • System tests that runs the Ruby ruby backend and tests a few critical paths

Loading indicators everywhere

Currently app hows not indication when activity is happening

  • index.html before vue app is initialized
  • SearchResults
  • GenreList
  • app/frontend/views/*ListView.vue
  • app/frontend/views/*DetailView.vue
  • Any other view that makes uses client or DataSource`
  • Splash page for PWA/native apps

Autoscroll

I don't personally find it useful, but other guitar tab websites have an autoscroll feature.

Multi-tenet

Require login for new/edit, and start adding personalization

  • Favorites
  • Suggest edits
  • Playlists

Search

by title/artist/lyrics

Chordpro linter

In the interest of consistency across songsheets, it would be great to add some kind of chordpro linter. Off the top of my head, here are just a few rules the linter could have, but there are probably a lot more.

  • Expand shorthand ({t: Foo} => {title: Foo})
  • Preferred order of song elements (title, subtitle, artist, album, key, tempo, start_of_verse, etc)
  • Use {start_of_verse}/{start_of_chorus} instead of {comment: Verse 1}
  • Warn on unknown directives, like {link: https://youtube.com/…}

The linter should probably be written in JavaScript since it needs to run in the editor on the client. It would probably make sense to use the parser in ChordSheetJS as the basis for the linter so syntax support is consistent.

More margin/padding on larger screens

On tablet and desktop, Ionic's default padding/margin feels too small to me. I think it should be about double what it currently is on large screens.

image

This would probably involve adding responsive styles for .ion-padding* and .ion-margin* classes (or maybe there's a variable that would affect both)

Print styles

Prints of the song sheets should look beautiful

Improve offline support

The app is currently set up as a Progressive Web App (PWA) with a service worker work offline (static assets/images are cached), but it doesn't quite work yet.

Here are a few suggested changes:

  • Show offline indicator
  • Aggressively cache public API responses (anything that doesn't require authentication)
  • Cache any recently viewed songsheet
  • Cache all library songsheets items for each user

Show errors for unparsable songsheets

A handful of the existing imported songsheets have parser errors and just show a blank page when viewing them. It should either show a generic error message with a link to edit, or just redirect to edit and show parse errors there.

Editor

Add a chordpro-optimized editor to make it quick and easy to add new songs

  • Chordpro syntax highlighting/validation
  • Autocomplete of chordpro syntax and chords
  • Toolbar or inline popups to insert verse/chorus/tab/chord/etc

I evaluated several existing web-based editors, and here are some thoughts:

  • CodeMirror looks quicker/easier to get started with and has the features needed
  • monaco seems to be the darling for code editing, but I'm not sure it's a great fit. It's very advance, has a lot more bells/whistles than I need, and it seems poorly documented.

Adjust font size

Add buttons to settings bar to allow increasing/decreasing font size

Horizontal scroll view

Before moving to ionic (#81), there was an option for horizontal scrolling when viewing a songsheet. This is really nice on screens in landscape mode because a lot of songs can fit all on one screen.

Some of the code is still there, so just need to add toggles in the UI for it.

cc #51

iOS App

Native iOS app can be built with:

ionic build --prod
npx cap sync
ionic capacitor open ios
  • Publish to app store
  • Automate build/publish from releases

Duplicate artists when creating songsheet with name mismatch

I haven't tested this since #230, so it may be less of an issue now that fuzzy search on artists is improved, but it likely still will happen in some cases.

Steps to reproduce:

  1. There is an existing artist called "Florence + The Machine"
  2. Create a songsheet with {artist: Florence and The Machine} (and instead of +)
  3. AssociateSongsheetMetadata job will create a new artist if the name is different enough
  4. LookupMetadata job runs and renames new artist to Florence + The Machine, thus creating a duplicate

Solution is probably to have LookupMetadata job look for existing artists matching the canonical name.

Show music player on each song

Thea ability to quickly play the song

  • Select preferred service
    • Apple Music
    • Spotify
    • YouTube
  • Keyboard shortcuts (space = play/pause)

Improve support for multiple versions of the same song

#108 adds a menu to switch between versions of the same song, but there is much room for improvement:

  • Add some kind of unique identification of the version (e.g. ver 1, ver 2, etc)
  • If an artist has multiple versions of the track on different albums, all should be considered versions of the same song and should show up in the version menu.
  • If the songsheet is not associated with a track, it should still return any songsheets with the same title / artist combination

Sort lists

All lists (artists, albums, tracks, songsheets) should be sortable by:

  • recently added
  • popular
  • recently viewed
  • alphabetical
  • etc

Add toggle for menu

On tablet and desktop screens there is a sidebar instead of a tab bar. It would be ideal to be able to add a toggle to collapse the menu down to just icons, especially when using the horizontal songsheet view.

image

Save to library

Depends on #13

A user can save any songsheet, track, artist, or album to their library.

Jam sessions

  • one person starts a new session and shares link with bandmates
  • anyone can add songs to the queue
  • Could even do stuff with keeping scroll in sync

Suggest changes

To prevent the proliferation of versions (e.g. ver1, ver2…ver8, ver9, etc), a user can suggest changes to an existing songsheet, and there should be mechanisms to make those changes part of the existing songsheet.

MUST:

  • A user can edit an existing songsheet and save changes
  • The original author can accept suggested changes
  • A quorum (3?) of users can accept a specific change, which will update the original songsheet

SHOULD:

  • Suggested changes are visible and highlighted when other users view a songsheet with 👍/👎 buttons
  • Users can comment on a suggested change

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.