{"id":19408293,"url":"https://github.com/vivshaw/my-reads","last_synced_at":"2025-04-24T09:31:53.007Z","repository":{"id":23617107,"uuid":"98957263","full_name":"vivshaw/my-reads","owner":"vivshaw","description":":book: A library management app","archived":false,"fork":false,"pushed_at":"2023-01-24T23:19:50.000Z","size":8052,"stargazers_count":5,"open_issues_count":30,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2023-02-27T01:51:27.990Z","etag":null,"topics":["enzyme","flowtype","jest-tests","material-ui","progressive-web-app","react","react-router","styled-components","udacity","udacity-react-nanodegree"],"latest_commit_sha":null,"homepage":"https://my-reads-vivshaw.herokuapp.com/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vivshaw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-08-01T03:54:45.000Z","updated_at":"2021-12-21T04:25:53.000Z","dependencies_parsed_at":"2023-02-14T02:30:55.444Z","dependency_job_id":null,"html_url":"https://github.com/vivshaw/my-reads","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vivshaw%2Fmy-reads","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vivshaw%2Fmy-reads/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vivshaw%2Fmy-reads/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vivshaw%2Fmy-reads/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vivshaw","download_url":"https://codeload.github.com/vivshaw/my-reads/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250600716,"owners_count":21457017,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["enzyme","flowtype","jest-tests","material-ui","progressive-web-app","react","react-router","styled-components","udacity","udacity-react-nanodegree"],"created_at":"2024-11-10T12:05:52.576Z","updated_at":"2025-04-24T09:31:51.794Z","avatar_url":"https://github.com/vivshaw.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eFlybrary\u003c/h1\u003e\r\n\u003cp align=\"center\"\u003eA bookshelf management app written in React with Material-UI \u0026 styled-components\u003c/p\u003e\r\n\r\n[![CircleCI](https://circleci.com/gh/vivshaw/my-reads.svg?\u0026style=shield)](https://circleci.com/gh/vivshaw/my-reads)\r\n[![Code Climate](https://codeclimate.com/github/vivshaw/my-reads/badges/gpa.svg)](https://codeclimate.com/github/vivshaw/my-reads) [![Test Coverage](https://codeclimate.com/github/vivshaw/my-reads/badges/coverage.svg)](https://codeclimate.com/github/vivshaw/my-reads/coverage)\r\n[![Live Demo](https://img.shields.io/badge/live%20demo-active-blue.svg)](https://my-reads-vivshaw.herokuapp.com/)\r\n[![Docs](https://img.shields.io/badge/docs-documentation.js-ff69b4.svg)](https://vivshaw.github.io/my-reads)\r\n\r\n\u003cdiv align=\"center\"\u003e\u003cimg src=\"https://cdn.rawgit.com/vivshaw/my-reads/master/docs/textlogo.svg\" alt=\"flybrary logo\" /\u003e\u003c/div\u003e\r\n\r\n## Table of Contents\r\n\r\n- [What It Is](#what)\r\n- [Installing](#installing)\r\n- [Testing](#testing)\r\n- [Deploying](#deploying)\r\n- [Documentation](#documentation)\r\n- [To-Do](#to-do)\r\n\r\n## What\r\n\r\nThis is my submission for Project 1 of the [Udacity React Nanodegree](https://www.udacity.com/course/react-nanodegree--nd019). Flybrary\r\nis a LibraryThing-esque library management app that keeps track of what books\r\nyou're reading. The app uses React \u0026 react-router to build an SPA front-end for\r\na RESTful books API. It can search for books, add books to shelves, rate them, and move\r\nthem between shelves. It has a responsive, mobile-first style built with Material-UI\r\nand styled-components that should look equally great on mobile, tablet, or desktop.\r\nIt uses react-loadable for code splitting and react-snapshot for static prerendering.\r\n\r\n[A live demo is available here](https://my-reads-vivshaw.herokuapp.com/).\r\n\r\n## Installing\r\n\r\nInstallation should be a breeze, as this was built with create-react-app \u0026 requires\r\nnothing more than\r\n\r\n```\r\nnpm install\r\nnpm start\r\n```\r\n\r\n## Testing\r\n\r\nThe app has a full test suite written in Jest \u0026 Enzyme that can be run\r\nwith `npm run test`. A coverage report can be generated with `npm run test -- --coverage`.\r\nThe repo has CI set up with CircleCI \u0026 Codeclimate that will\r\nautomagically run the test suite \u0026 generate a coverage report on each git push.\r\n\r\n## Deployment\r\n\r\nThe app has continuous deployment to Heroku on each successful (CI-passing) build of the\r\nmaster branch. The latest passing build is at [my-reads-vivshaw.herokuapp.com](https://my-reads-vivshaw.herokuapp.com/).\r\n\r\nFor manual deployment, you can `npm run build`, and then deploy the built app on\r\nany webserver of your choice.\r\n\r\n## Documentation\r\n\r\nFlybrary is [fully documented](https://vivshaw.github.io/my-reads/) with JSDoc, and some [documentation.js](http://documentation.js.org/)-generated docs are hosted from the docs directory and are [available here](https://vivshaw.github.io/my-reads/). Unfortunately, the auto-generated docs aren't very good due to the lack of a good ESNext-compatible docs library. It was impossible to use JSDoc or ESDoc due to compatibility problems with certain ES6/ES7 features, and even documentation.js required a Babel transpilation step to get it working \u0026 does some weird things with my output. Regardless, the JSDoc in the source itself should be unambiguous.\r\n\r\nTo regenerate docs, use `npm run docs`.\r\n\r\n## To-Do\r\n\r\n- Eventually, I'd like to migrate to a Redux architecture.\r\n- I also have a couple Webpack bugs that I don't think I can fully resolve without ejecting and manually reconfiguring.\r\n- There are a number of performance optimizations that I could tend to.\r\n- Visual style could be spruced up\r\n- The test suites are messy \u0026 incomplete, in large part due to a) many difficulties working with Material-UI in Jest and b) some trouble injecting mocks. Solving either of these could increase coverage \u0026 tidy things up.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvivshaw%2Fmy-reads","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvivshaw%2Fmy-reads","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvivshaw%2Fmy-reads/lists"}