{"id":17070509,"url":"https://github.com/oakmac/phase2-backend-project-requirements","last_synced_at":"2026-03-16T07:31:02.905Z","repository":{"id":66970615,"uuid":"164702499","full_name":"oakmac/phase2-backend-project-requirements","owner":"oakmac","description":"Phase 2 Backend Project Requirements for DigitalCrafts Flex coding bootcamp","archived":false,"fork":false,"pushed_at":"2019-10-12T01:55:18.000Z","size":13,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-28T17:26:07.404Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oakmac.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"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-01-08T17:45:04.000Z","updated_at":"2022-03-09T02:41:22.000Z","dependencies_parsed_at":null,"dependency_job_id":"e88ad389-64ba-4565-b9fa-4ba6f497990e","html_url":"https://github.com/oakmac/phase2-backend-project-requirements","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/oakmac%2Fphase2-backend-project-requirements","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oakmac%2Fphase2-backend-project-requirements/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oakmac%2Fphase2-backend-project-requirements/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oakmac%2Fphase2-backend-project-requirements/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oakmac","download_url":"https://codeload.github.com/oakmac/phase2-backend-project-requirements/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245090875,"owners_count":20559298,"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":[],"created_at":"2024-10-14T11:31:59.247Z","updated_at":"2026-03-16T07:31:02.856Z","avatar_url":"https://github.com/oakmac.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Phase 2 Backend Project Requirements\n\nThis is the final project for \"Phase 2\" of the Flex course for [DigitalCrafts]\nHouston. It is focused on backend technologies using [Node.js].\n\n\u003e NOTE: You must complete this project in accordance with the requirements laid out\n  below in order to fulfill Texas state requirements for credit for the course. If\n  you have any questions or concerns about the requirements, please see an\n  instructor.\n\n[DigitalCrafts]:https://www.digitalcrafts.com/\n[Node.js]:https://nodejs.org/\n\n## Project Description\n\nYour task is to build a copy of an existing web application using the backend\ntechnologies we have learned in Phase 2: [express.js], [PostgreSQL], [knex.js],\netc.\n\nYou will not be designing something \"new\" for this project. Pick something that\nalready exists and build it from scratch with your team. Examples: a Twitter\nclone, a simplified Facebook clone, a basic forum, a small ecommerce website,\netc. The project scope should be well-understood and defined up-front. Please\nverify your project plans with an instructor before beginning coding.\n\nYou will need some HTML + CSS in order for the application to work, but it is ok\nto keep this part simple (hint: use a CSS framework). Focus on thoroughness of\nthe implementation using backend technologies like `GET` and `POST` requests,\ndatabase schema and queries, user authentication, form submission and\nvalidation, HTML templates, etc.\n\n[express.js]:https://expressjs.com/\n[PostgreSQL]:https://www.postgresql.org/\n[knex.js]:https://knexjs.org/\n\n## Due Date\n\nEach team will present their project in class on **Saturday, Oct 26th**.\n\nWe will have Career Day during class on **Tue, Oct 22nd** and **Thu, Oct 24th**. Please plan ahead :)\n\n## Technical Requirements\n\nYour application **must**:\n\n- You must use some form of HTML templating\n  - Pure JavaScript functions that return strings, or use [template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals)\n  - [mustache](http://mustache.github.io/), [handlebars](https://handlebarsjs.com/), [ejs](https://ejs.co/), [pug](https://pugjs.org/api/getting-started.html), etc\n\n- Your project must support database [schema migrations](https://en.wikipedia.org/wiki/Schema_migration).\n\n- User actions should trigger [CRUD operations](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) against the database.\n  - You must have at least **two** `\u003cform\u003e` submissions that insert or edit data in a database.\n  - The forms should handle input validation and show errors in the UI (if necessary)\n  - Do not use AJAX for form submission; use a native HTML `\u003cform\u003e` element\n  - This [Working with forms](https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/forms) tutorial might be helpful\n\n- Have user authentication using [passport.js](http://www.passportjs.org/)\n  - must support at least one OAuth provider (Twitter, Facebook, GitHub, etc)\n  - must support passport.js \"local strategy\" backed with a database\n\n- Code must follow some organization scheme.\n  - Everything cannot be in one super long file.\n  - Break different parts of the code into different files / modules.\n  - No \"spaghetti code\".\n  - Bonus / optional: consider using a build system with [npm scripts]\n\n- Client-side JavaScript should be less than 200 lines of code.\n  - Note: this does not include libraries\n  - No cheating by writing all of your JS on one line, etc\n  - The focus is backend, not frontend. But you will need some client-side code in some circumstances\n\n- Your project must be hosted somewhere publicly reachable via `https`\n  - Note that you do not need to purchase a domain name for your project. But it\n    should be reachable via a public URL somewhere.\n  - Examples: [Zeit Now](https://zeit.co/now), [Heroku](https://www.heroku.com/), [DigitalOcean](https://www.digitalocean.com/)\n\n- Your project must have a `README.md` file written using [Markdown] with at least the following:\n  - Explanation of what the project is / what it does.\n  - What technologies you used.\n  - List of team members.\n\n- Your repo must be connected to [Travis CI](https://travis-ci.org/):\n  - You must have at least one test of an API endpoint that touches the database\n  - This tutorial might be helpful: [Test Driven Development with Node](https://mherman.org/blog/test-driven-development-with-node/)\n  - Put a build status badge in your `README.md` that links to your latest build\n  - Hint: don't forget to test for [StandardJS]!\n\n- (optional) Have at least one AJAX-based GET endpoint that powers a dynamic dropdown or type-ahead component\n  - This part will require some client-side JavaScript\n  - Example components:\n    - http://autocompletejs.com/examples#2000\n    - https://jqueryui.com/autocomplete/#remote\n\n- (optional) Your project must be able to swap between database types by using a config file.\n  - In other words, your database should not be tied to just PostgresQL\n  - Hint: use an abstraction layer like [knex.js](https://knexjs.org/) or [Sequelize](http://docs.sequelizejs.com/)\n\n[Markdown]:https://guides.github.com/features/mastering-markdown/\n[StandardJS]:https://standardjs.com/\n[npm scripts]:https://deliciousbrains.com/npm-build-script/\n\n## Workflow Requirements\n\n- You can work solo, or on a team of up to 3 students\n\n- Create one GitHub repo and add all group members as collaborators.\n\n- Collaborate using Pull Requests (PRs):\n  - No one should commit to the master branch directly.\n  - Every PR should be reviewed and approved by at least one team member (not the person who originated the PR).\n  - PRs should not be merged by the person who opened it (no self-merging).\n  - See below for [suggested PR rejection criteria](#suggested-pr-rejection-criteria)\n\n- Project features and bugs should be tracked using GitHub Issues.\n  - Use of additional project management tooling (Trello, JIRA, etc) is at your team's discretion\n\n## Suggested PR Rejection Criteria\n\nIt's ok to reject a PR or have a PR rejected - that is what the PR process is\nfor! Remember if your PR is rejected that doesn't mean you are a bad person and\nstink at life. It just means that your teammate(s) see something that could be\nimproved. The PR process is more about sharing knowledge than \"you did something\nwrong\".\n\nAny of the following are valid reasons to reject a PR:\n\n- Breaks the build (Travis CI breaks)\n- Does not fulfill feature\n- Breaks other feature\n- Does not follow team coding style / standards\n- Too much to review / large code diff (ie: should be broken up into smaller PRs)\n- Code in the PR does not match up with commit message\n- Commit message is vague\n\n## Learning Objectives\n\n\u003e TODO: finish this section\n\nThe focus of this project is less about creativity and more about completeness and thoroughness of implementation.\n\n--------------------------------------------------------------------------------\n\nThis requirements document is licensed as [CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/):\n\n\u003e You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foakmac%2Fphase2-backend-project-requirements","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foakmac%2Fphase2-backend-project-requirements","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foakmac%2Fphase2-backend-project-requirements/lists"}