Skip to content
App to manage a list of learning resources for a user, stored to localStorage.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



This app manages a library of resources for a user, stored to localStorage. It uses ui-router to manage view changes, and ng-table to add filtering and sorting to the table view.


If you would like to run this locally and develop against it run:

git clone
cd learning-library
npm install
npm start

This should start the project in development mode using webpack-dev-server on http://localhost:8080/.


Test stack is mocha/karma/chai/sinon with associated promise handling libraries, and should run with npm test.


Deployment uses gh-pages. Run npm run deploy to build the project and deploy to the gh-pages branch on Github.


  • I chose to allow duplicate entries so that multiple copies of books or websites with the same title would not conflict. At the moment each resource has a secret uuid assigned to it as a unique key to keep track of the unique entry and there are no checks for duplicates.
  • This issue requires Babel to be transpiled into ES5 instead of ES6, otherwise everything breaks on Firefox, IE, and Safari. Since I was already transpiling, this made more sense than to use than the $$ngIsClass hack.
  • There's no way to edit the type of a resource. Not hard to add with the current setup a shared model between the types that currently only includes options that all types can have. But my original idea was to have components for each type that could also manage media or other functionality in specific ways, which would make changing types not make sense in the future, which is why it's not an option currently. I went with a default type for quick use (assuming 'books' are the most common use case, that would require user data), but it might make more sense to make it a force selection if people are forgetting to set the type before creation. It is 'sticky' per usage, so if a user wants to create 20 podcasts they can change it and it should stay on 'podcasts' until they close the overlay.

Known Issues

  • Add/Edit resource will flip the library view back to the default list view. Waiting on sticky-states update to work with ui-router 1.0.0.
  • The overlay for add/edit is not a true modal and won't dismiss on click outside.
  • There are some issues with the way ng-table handles the promise to grab data changing the context. Solved this for now by explicitly stating context to use internal functions, but I'd like to find a more elegant solution.
  • Filtering seems slow, needs optimization.
  • Move off eventing to central state model (spike on Redux).

Future Features

  • Better design.
  • More permanent data storage.
  • Filtering/Sorting for card view
  • More types (video, music, games, apps)
  • Media uploads
  • Favorite resources
  • Collections
  • Tags
  • Social media sharing integration
  • Automated builds on push to master
You can’t perform that action at this time.