{"id":13472793,"url":"https://github.com/kentcdodds/bookshelf","last_synced_at":"2025-05-13T22:03:20.982Z","repository":{"id":37333893,"uuid":"185924208","full_name":"kentcdodds/bookshelf","owner":"kentcdodds","description":"Build a ReactJS App workshop","archived":false,"fork":false,"pushed_at":"2024-11-25T23:58:30.000Z","size":6385,"stargazers_count":2686,"open_issues_count":0,"forks_count":1168,"subscribers_count":46,"default_branch":"main","last_synced_at":"2025-04-26T03:08:21.376Z","etag":null,"topics":["epicreact-dev","kcd-edu","react"],"latest_commit_sha":null,"homepage":"https://www.epicreact.dev/modules/build-an-epic-react-app-v1/build-an-epic-react-app-welcome","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kentcdodds.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-10T05:29:39.000Z","updated_at":"2025-04-22T10:50:28.000Z","dependencies_parsed_at":"2024-05-30T07:12:18.948Z","dependency_job_id":"d0b27c17-17d3-425d-8b13-32a799376cce","html_url":"https://github.com/kentcdodds/bookshelf","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kentcdodds%2Fbookshelf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kentcdodds%2Fbookshelf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kentcdodds%2Fbookshelf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kentcdodds%2Fbookshelf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kentcdodds","download_url":"https://codeload.github.com/kentcdodds/bookshelf/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251336400,"owners_count":21573189,"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":["epicreact-dev","kcd-edu","react"],"created_at":"2024-07-31T16:00:58.046Z","updated_at":"2025-04-28T15:20:51.697Z","avatar_url":"https://github.com/kentcdodds.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","🌐 Web Development - Frontend","Applications"],"sub_categories":[],"readme":"\u003cdiv\u003e\n  \u003ch1 align=\"center\"\u003e\u003ca href=\"https://www.epicreact.dev/modules/build-an-epic-react-app-v1/build-an-epic-react-app-welcome\"\u003eBuild an Epic React App 🚀 EpicReact.Dev\u003c/a\u003e\u003c/h1\u003e\n  \u003cstrong\u003e\n    Building a full React application\n  \u003c/strong\u003e\n  \u003cp\u003e\n    The React and JavaScript ecosystem is full of tools and libraries to help\n    you build your applications. In this (huge) workshop we’ll build an\n    application from scratch using widely supported and proven tools and\n    techniques. We’ll cover everything about building frontend React\n    applications, from the absolute basics to the tricky parts you'll run into\n    building real world React apps and how to create great abstractions.\n  \u003c/p\u003e\n\n  \u003ca href=\"https://epicreact.dev\"\u003e\n    \u003cimg\n      alt=\"Learn React from Start to Finish\"\n      src=\"https://kentcdodds.com/images/epicreact-promo/er-1.gif\"\n    /\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003chr /\u003e\n\n\u003c!-- prettier-ignore-start --\u003e\n[![Build Status][build-badge]][build]\n[![All Contributors][all-contributors-badge]](#contributors)\n[![GPL 3.0 License][license-badge]][license]\n[![Code of Conduct][coc-badge]][coc]\n\u003c!-- prettier-ignore-end --\u003e\n\n## Prerequisites\n\n- You'll want experience with React before going through this material. The\n  lessons get progressively more advanced. Once you hit something you're\n  unfamiliar with, that's your cue to go back and review the other parts of\n  EpicReact.Dev.\n\n\u003e NOTE: The EpicReact.dev videos were recorded with React version ^16.13 and all\n\u003e material in this repo has been updated to React version ^18. Differences are\n\u003e minor and any relevant differences are noted in the instructions.\n\n## System Requirements\n\n- [git][git] v2.13 or greater\n- [NodeJS][node] `\u003e=16`\n- [npm][npm] v8.16.0 or greater\n\nAll of these must be available in your `PATH`. To verify things are set up\nproperly, you can run this:\n\n```shell\ngit --version\nnode --version\nnpm --version\n```\n\nIf you have trouble with any of these, learn more about the PATH environment\nvariable and how to fix it here for [windows][win-path] or\n[mac/linux][mac-path].\n\n## Demo\n\nHosted on [https://bookshelf.lol](https://bookshelf.lol)\n\n## Setup\n\n\u003e If you want to commit and push your work as you go, you'll want to\n\u003e [fork](https://docs.github.com/en/free-pro-team@latest/github/getting-started-with-github/fork-a-repo)\n\u003e first and then clone your fork rather than this repo directly.\n\nAfter you've made sure to have the correct things (and versions) installed, you\nshould be able to just run a few commands to get set up:\n\n```\ngit clone https://github.com/kentcdodds/bookshelf.git\ncd bookshelf\nnode setup\n```\n\nThis may take a few minutes.\n\nIf you get any errors, please read through them and see if you can find out what\nthe problem is. If you can't work it out on your own then please [file an\nissue][issue] and provide _all_ the output from the commands you ran (even if\nit's a lot).\n\nIf you can't get the setup script to work, then just make sure you have the\nright versions of the requirements listed above, and run the following commands:\n\n```\nnpm install\nnpm run validate\n```\n\nIf you are still unable to fix issues and you know how to use Docker 🐳 you can\nsetup the project with the following command:\n\n```\ndocker-compose up\n```\n\nIt's recommended you run everything locally in the same environment you work in\nevery day, but if you're having issues getting things set up, you can also set\nthis up using [GitHub Codespaces](https://github.com/features/codespaces)\n([video demo](https://www.youtube.com/watch?v=gCoVJm3hGk4)) or\n[Codesandbox](https://codesandbox.io/s/github/kentcdodds/bookshelf).\n\n## Running the app\n\nTo get the app up and running (and really see if it worked), run:\n\n```shell\nnpm start\n```\n\nThis should start up your browser. If you're familiar, this is a standard\n[react-scripts](https://create-react-app.dev/) application.\n\nYou can also open the production deployment:\n[bookshelf.lol](https://bookshelf.lol).\n\n## Running the tests\n\n```shell\nnpm test\n```\n\nThis will start [Jest](https://jestjs.io/) in watch mode. Read the output and\nplay around with it. The tests are there to help you reach the final version,\nhowever _sometimes_ you can accomplish the task and the tests still fail if you\nimplement things differently than I do in my solution, so don't look to them as\na complete authority.\n\n## Working through the exercises\n\nTo get started, run:\n\n```shell\nnode go\n```\n\nThis will allow you to choose which exercise you want to work on. From there,\nopen the `INSTRUCTIONS.md` file and follow the instructions.\n\nIf you'd like to work on an extra credit, but you want to skip the preceding\nsteps, you can run `node go` again:\n\n```shell\nnode go\n```\n\nThis will let you choose the next exercise or you can choose which part of the\nexercise you'd like to work on. This will update your `exercise` files to the\ncorrect version for you to work on that extra credit.\n\n### Exercises\n\nThe exercises are in different branches. Each branch changes the\n`INSTRUCTIONS.md` file to contain instructions you need to complete the\nexercise.\n\nThe purpose of the exercise is **not** for you to work through all the material.\nIt's intended to get your brain thinking about the right questions to ask me as\n_I_ walk through the material.\n\n### Helpful Emoji 🐨 💰 💯 📝 🦉 📜 💣 💪 🏁 👨‍💼 🚨\n\nEach exercise has comments in it to help you get through the exercise. These fun\nemoji characters are here to help you.\n\n- **Kody the Koala** 🐨 will tell you when there's something specific you should\n  do version\n- **Marty the Money Bag** 💰 will give you specific tips (and sometimes code)\n  along the way\n- **Hannah the Hundred** 💯 will give you extra challenges you can do if you\n  finish the exercises early.\n- **Nancy the Notepad** 📝 will encourage you to take notes on what you're\n  learning\n- **Olivia the Owl** 🦉 will give you useful tidbits/best practice notes and a\n  link for elaboration and feedback.\n- **Dominic the Document** 📜 will give you links to useful documentation\n- **Berry the Bomb** 💣 will be hanging around anywhere you need to blow stuff\n  up (delete code)\n- **Matthew the Muscle** 💪 will indicate that you're working with an exercise\n- **Chuck the Checkered Flag** 🏁 will indicate that you're working with a final\n- **Peter the Product Manager** 👨‍💼 helps us know what our users want\n- **Alfred the Alert** 🚨 will occasionally show up in the test failures with\n  potential explanations for why the tests are failing.\n\n### Workflow\n\n- Checkout the exercise branch\n- Read through the `INSTRUCTIONS.md`\n- Start exercise\n- Go through every mentioned file and follow the instructions from the emoji\n- We all come back together\n- I go through the solution and answer questions\n- Move on to the next exercise.\n- Repeat.\n\n### App Data Model\n\n- User\n\n  - id: string\n  - username: string\n\n- List Item\n\n  - id: string\n  - bookId: string\n  - ownerId: string\n  - rating: number (-1 is no rating, otherwise it's 1-5)\n  - notes: string\n  - startDate: number (`Date.now()`)\n  - finishDate: number (`Date.now()`)\n\n\u003e For convenience, our friendly backend engineers also return a `book` object on\n\u003e each list item which is the book it's associated to. Thanks backend folks!\n\n\u003e /me wishes we could use GraphQL\n\nIf your \"database\" gets out of whack, you can purge it via:\n\n```javascript\nwindow.__bookshelf.purgeUsers()\nwindow.__bookshelf.purgeListItems()\n```\n\n- Book\n\n  - id: string\n  - title: string\n  - author: string\n  - coverImageUrl: string\n  - pageCount: number\n  - publisher: string\n  - synopsis: string\n\n## Troubleshooting\n\n\u003cdetails\u003e\n  \n  \u003csummary\u003eRunning \"node go\" does not list any branches\u003c/summary\u003e\n  \nThis means there was something wrong when you ran the setup.\n\n\u003e If you made your own fork of `bookshelf` through GitHub, you may have only got\n\u003e the `main` branch -- that's the default option\n\nAdd a new `upstream` remote\n\n```\ngit remote add upstream https://github.com/kentcdodds/bookshelf.git\n```\n\n\u003e You might get an `error: remote upstream already exists.` -- no problem!\n\nTrack all the branches from that original repository\n\n```\ngit push origin --tags \"refs/remotes/upstream/*:refs/heads/*\"\n```\n\n\u003c/details\u003e\n\n## Contributors\n\nThanks goes to these wonderful people\n([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://kentcdodds.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1500684?v=3?s=100\" width=\"100px;\" alt=\"Kent C. Dodds\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKent C. Dodds\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=kentcdodds\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=kentcdodds\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#infra-kentcdodds\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=kentcdodds\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://vojta.io\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/25487857?v=4?s=100\" width=\"100px;\" alt=\"Vojta Holik\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eVojta Holik\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#design-vojtaholik\" title=\"Design\"\u003e🎨\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=vojtaholik\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://richardkaufman.dev\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/80982?v=4?s=100\" width=\"100px;\" alt=\"Richard B. Kaufman-López\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRichard B. Kaufman-López\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=Sparragus\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/SekibOmazic\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/3735902?v=4?s=100\" width=\"100px;\" alt=\"Sekib Omazic\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSekib Omazic\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=SekibOmazic\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://stackshare.io/jdorfman/decisions\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/398230?v=4?s=100\" width=\"100px;\" alt=\"Justin Dorfman\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJustin Dorfman\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#fundingFinding-jdorfman\" title=\"Funding Finding\"\u003e🔍\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://nashkabbara.com\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/31865?v=4?s=100\" width=\"100px;\" alt=\"Nash Kabbara\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNash Kabbara\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=nkabbara\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=nkabbara\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/bookshelf/issues?q=author%3Ankabbara\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://in.linkedin.com/in/umr55766\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/16179313?v=4?s=100\" width=\"100px;\" alt=\"UMAIR MOHAMMAD\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eUMAIR MOHAMMAD\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=umr55766\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/onemen\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/3650909?v=4?s=100\" width=\"100px;\" alt=\"onemen\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eonemen\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=onemen\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://www.redd.one\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/14984911?v=4?s=100\" width=\"100px;\" alt=\"Artem Zakharchenko\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eArtem Zakharchenko\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=kettanaito\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://htttp://www.leonardoelias.me\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/1995213?v=4?s=100\" width=\"100px;\" alt=\"Leonardo Elias\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLeonardo Elias\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=leonardoelias\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://motdde.com\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/12215060?v=4?s=100\" width=\"100px;\" alt=\"Oluwaseun Oyebade\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eOluwaseun Oyebade\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/issues?q=author%3Amotdde\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.wesbos.com\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/176013?v=4?s=100\" width=\"100px;\" alt=\"Wes Bos\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eWes Bos\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-wesbos\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/awareness481\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/12380586?v=4?s=100\" width=\"100px;\" alt=\"Jesse Jafa\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJesse Jafa\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-awareness481\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/hd4ng\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/29898753?v=4?s=100\" width=\"100px;\" alt=\"Huy Dang\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eHuy Dang\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/issues?q=author%3Ahd4ng\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://gabrielabud.com\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/7684770?v=4?s=100\" width=\"100px;\" alt=\"Gabriel Abud\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGabriel Abud\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=Buuntu\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://kodyclemens.com\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/43357615?v=4?s=100\" width=\"100px;\" alt=\"Kody Clemens\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKody Clemens\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=kodyclemens\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://cale.xyz\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/12165290?v=4?s=100\" width=\"100px;\" alt=\"calec\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ecalec\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=calec\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/emzoumpo\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/2103443?v=4?s=100\" width=\"100px;\" alt=\"Emmanouil Zoumpoulakis\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eEmmanouil Zoumpoulakis\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=emzoumpo\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/milamer\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/12884134?v=4?s=100\" width=\"100px;\" alt=\"Christian Schurr\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eChristian Schurr\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=milamer\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/bookshelf/issues?q=author%3Amilamer\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.b2m9.com\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/8492232?v=4?s=100\" width=\"100px;\" alt=\"Bob Massarczyk\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBob Massarczyk\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=b2m9\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://radiant-sands-51546.herokuapp.com/profile/deepak.chandani\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/15975603?v=4?s=100\" width=\"100px;\" alt=\"Deepak Chandani\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDeepak Chandani\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=deepak-chandani\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://frontendwizard.dev\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/1124448?v=4?s=100\" width=\"100px;\" alt=\"Juliano Farias\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJuliano Farias\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=frontendwizard\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/RobbertWolfs\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/12511178?v=4?s=100\" width=\"100px;\" alt=\"Robbert Wolfs\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRobbert Wolfs\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=RobbertWolfs\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=RobbertWolfs\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/komisz\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/45998348?v=4?s=100\" width=\"100px;\" alt=\"komisz\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ekomisz\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/issues?q=author%3Akomisz\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://michaeldeboey.be\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/6643991?v=4?s=100\" width=\"100px;\" alt=\"Michaël De Boey\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMichaël De Boey\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#projectManagement-MichaelDeBoey\" title=\"Project Management\"\u003e📆\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=MichaelDeBoey\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/marcosvega91\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/5365582?v=4?s=100\" width=\"100px;\" alt=\"Marco Moretti\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMarco Moretti\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=marcosvega91\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://vk.com/vasilii_kovalev\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/10310491?v=4?s=100\" width=\"100px;\" alt=\"Vasilii Kovalev\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eVasilii Kovalev\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=vasilii-kovalev\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=vasilii-kovalev\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://twitter.com/peramanathan\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/9104920?v=4?s=100\" width=\"100px;\" alt=\"Peramanathan Sathyamoorthy\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePeramanathan Sathyamoorthy\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=p10ns11y\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://wbeuil.com\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/8110579?v=4?s=100\" width=\"100px;\" alt=\"William BEUIL\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eWilliam BEUIL\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=wbeuil\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://andrewli.ca\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/9060674?v=4?s=100\" width=\"100px;\" alt=\"Andrew Li\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAndrew Li\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=andrewli-ca\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/tonykhaov\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/53958746?v=4?s=100\" width=\"100px;\" alt=\"Tony Khaov\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTony Khaov\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=tonykhaov\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/degeens\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/33414262?v=4?s=100\" width=\"100px;\" alt=\"Stijn Geens\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eStijn Geens\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=degeens\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/andresgallego\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/1014950?v=4?s=100\" width=\"100px;\" alt=\"Andrés Gallego\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAndrés Gallego\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-andresgallego\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/michaljuris\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/391000?v=4?s=100\" width=\"100px;\" alt=\"Michal Juriš\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMichal Juriš\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/issues?q=author%3Amichaljuris\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/jkmuka\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/6767449?v=4?s=100\" width=\"100px;\" alt=\"jkmuka\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ejkmuka\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/issues?q=author%3Ajkmuka\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/raqib-rasheed\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/71254614?v=4?s=100\" width=\"100px;\" alt=\"raqib-rasheed\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eraqib-rasheed\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/issues?q=author%3Araqib-rasheed\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Luke-kb\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/7802494?v=4?s=100\" width=\"100px;\" alt=\"Luke-kb\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLuke-kb\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=Luke-kb\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://peter.hozak.info/\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/1087670?v=4?s=100\" width=\"100px;\" alt=\"Peter Hozák\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePeter Hozák\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=Aprillion\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/cxc421\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/18439296?v=4?s=100\" width=\"100px;\" alt=\"Chris Chuang\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eChris Chuang\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=cxc421\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/bookshelf/issues?q=author%3Acxc421\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://valentin-hervieu.fr\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/2678610?v=4?s=100\" width=\"100px;\" alt=\"Valentin Hervieu\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eValentin Hervieu\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=ValentinH\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://triki.io\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/6273120?v=4?s=100\" width=\"100px;\" alt=\"~Sami Triki\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003e~Sami Triki\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=SamiTriki\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/falldowngoboone\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/3603771?v=4?s=100\" width=\"100px;\" alt=\"Ryan Boone\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRyan Boone\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=falldowngoboone\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://juanlatorre.cl/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4494526?v=4?s=100\" width=\"100px;\" alt=\"Juan Latorre\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJuan Latorre\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/issues?q=author%3Ajuanlatorre\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Groszczu\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/45833713?v=4?s=100\" width=\"100px;\" alt=\"Roch Goszczyński\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRoch Goszczyński\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=Groszczu\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/kentcdodds/bookshelf/issues?q=author%3AGroszczu\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/hmttrp\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4592406?v=4?s=100\" width=\"100px;\" alt=\"Hendrik Mittrop\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eHendrik Mittrop\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=hmttrp\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/payapula\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/7134153?v=4?s=100\" width=\"100px;\" alt=\"payapula\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003epayapula\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=payapula\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://jelte.tech\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/35220102?v=4?s=100\" width=\"100px;\" alt=\"Jelte Homminga\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJelte Homminga\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=jeltehomminga\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://omridagan.dev\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/23617146?v=4?s=100\" width=\"100px;\" alt=\"Omri Dagan\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eOmri Dagan\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=daganomri\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/justindomingue\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1284993?v=4?s=100\" width=\"100px;\" alt=\"Justin Domingue\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJustin Domingue\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=justindomingue\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://www.maferland.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5889721?v=4?s=100\" width=\"100px;\" alt=\"Marc-Antoine Ferland\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMarc-Antoine Ferland\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=maferland\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/marioleed\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1763448?v=4?s=100\" width=\"100px;\" alt=\"Mario Sannum\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMario Sannum\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=marioleed\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.atrenko.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/648689?v=4?s=100\" width=\"100px;\" alt=\"jansabbe\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ejansabbe\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=jansabbe\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://aswin.design/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5960217?v=4?s=100\" width=\"100px;\" alt=\"Aswin\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAswin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=aswinckr\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/iacopo87\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/8019803?v=4?s=100\" width=\"100px;\" alt=\"Iacopo Pazzaglia\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eIacopo Pazzaglia\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=iacopo87\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.lucianoayres.com.br\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/20209393?v=4?s=100\" width=\"100px;\" alt=\"Luciano Ayres\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLuciano Ayres\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=lucianoayres\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/sadikaya\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2705775?v=4?s=100\" width=\"100px;\" alt=\"Sadi Kaya\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSadi Kaya\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=sadikaya\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/rowinbot\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/18468260?v=4?s=100\" width=\"100px;\" alt=\"Rowin Hernández\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRowin Hernández\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=rowinbot\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/arturopie\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/762752?v=4?s=100\" width=\"100px;\" alt=\"Arturo Pie\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eArturo Pie\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=arturopie\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://jasik.xyz\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/10626596?v=4?s=100\" width=\"100px;\" alt=\"Caleb Jasik\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eCaleb Jasik\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=jasikpark\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://serverkhalilov.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/16454623?v=4?s=100\" width=\"100px;\" alt=\"Server Khalilov\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eServer Khalilov\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=red17electro\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/AngadSethi\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/58678541?v=4?s=100\" width=\"100px;\" alt=\"Angad Sethi\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAngad Sethi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=AngadSethi\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/marydavis\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/176437?v=4?s=100\" width=\"100px;\" alt=\"Mary\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMary\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=marydavis\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/DiegoCardoso\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/262432?v=4?s=100\" width=\"100px;\" alt=\"Diego Cardoso\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDiego Cardoso\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=DiegoCardoso\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/kmccoan\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4242047?v=4?s=100\" width=\"100px;\" alt=\"kmccoan\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ekmccoan\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=kmccoan\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://ehsan.tatasadi.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/18641021?v=4?s=100\" width=\"100px;\" alt=\"Ehsan Tatasadi\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eEhsan Tatasadi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=tatasadi\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/PM6\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/12296209?v=4?s=100\" width=\"100px;\" alt=\"PM6\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePM6\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=PM6\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/benjaminmatthews\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/6886936?v=4?s=100\" width=\"100px;\" alt=\"benjaminmatthews\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ebenjaminmatthews\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=benjaminmatthews\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://junagao.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/615616?v=4?s=100\" width=\"100px;\" alt=\"juliane nagao\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ejuliane nagao\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=junagao\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Creeland\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/518406?v=4?s=100\" width=\"100px;\" alt=\"Creeland A. Provinsal \"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eCreeland A. Provinsal \u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=Creeland\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://jakemccambley.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/74033573?v=4?s=100\" width=\"100px;\" alt=\"Jake McCambley\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJake McCambley\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/kentcdodds/bookshelf/commits?author=McCambley\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the\n[all-contributors](https://github.com/kentcdodds/all-contributors)\nspecification. Contributions of any kind welcome!\n\n## Workshop Feedback\n\nEach exercise has an Elaboration and Feedback link. Please fill that out after\nthe exercise and instruction.\n\nAt the end of the workshop, please go to this URL to give overall feedback.\nThank you!\n\n- Part 1: https://kcd.im/bra1-ws-feedback\n- Part 2: https://kcd.im/bra2-ws-feedback\n- Part 3: https://kcd.im/bra3-ws-feedback\n- Part 4: https://kcd.im/bra4-ws-feedback\n\n\u003c!-- prettier-ignore-start --\u003e\n[npm]: https://www.npmjs.com/\n[node]: https://nodejs.org\n[git]: https://git-scm.com/\n[build-badge]: https://img.shields.io/github/actions/workflow/status/kentcdodds/bookshelf/validate.yml?branch=main\u0026logo=github\u0026style=flat-square\n[build]: https://github.com/kentcdodds/bookshelf/actions?query=workflow%3Avalidate\n[license-badge]: https://img.shields.io/badge/license-GPL%203.0%20License-blue.svg?style=flat-square\n[license]: https://github.com/kentcdodds/bookshelf/blob/main/LICENSE\n[coc-badge]: https://img.shields.io/badge/code%20of-conduct-ff69b4.svg?style=flat-square\n[coc]: https://github.com/kentcdodds/bookshelf/blob/main/CODE_OF_CONDUCT.md\n[emojis]: https://github.com/kentcdodds/all-contributors#emoji-key\n[all-contributors]: https://github.com/kentcdodds/all-contributors\n[all-contributors-badge]: https://img.shields.io/github/all-contributors/kentcdodds/bookshelf?color=orange\u0026style=flat-square\n[win-path]: https://www.howtogeek.com/118594/how-to-edit-your-system-path-for-easy-command-line-access/\n[mac-path]: http://stackoverflow.com/a/24322978/971592\n[issue]: https://github.com/kentcdodds/bookshelf/issues/new\n\u003c!-- prettier-ignore-end --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkentcdodds%2Fbookshelf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkentcdodds%2Fbookshelf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkentcdodds%2Fbookshelf/lists"}