{"id":15474966,"url":"https://github.com/linuxbozo/18fagilebpa","last_synced_at":"2025-03-28T13:25:21.189Z","repository":{"id":33893847,"uuid":"37607201","full_name":"LinuxBozo/18FAgileBPA","owner":"LinuxBozo","description":null,"archived":false,"fork":false,"pushed_at":"2015-07-01T15:38:15.000Z","size":402,"stargazers_count":0,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-10-19T02:15:24.361Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":false,"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/LinuxBozo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-06-17T16:35:32.000Z","updated_at":"2018-02-06T18:49:16.000Z","dependencies_parsed_at":"2022-09-01T00:11:33.167Z","dependency_job_id":null,"html_url":"https://github.com/LinuxBozo/18FAgileBPA","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/LinuxBozo%2F18FAgileBPA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LinuxBozo%2F18FAgileBPA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LinuxBozo%2F18FAgileBPA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LinuxBozo%2F18FAgileBPA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LinuxBozo","download_url":"https://codeload.github.com/LinuxBozo/18FAgileBPA/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246035784,"owners_count":20713159,"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-02T03:06:00.048Z","updated_at":"2025-03-28T13:25:21.168Z","avatar_url":"https://github.com/LinuxBozo.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 18FAgileBPA - RFQ993471\n\n[![Stories in Ready](https://badge.waffle.io/devis/18FAgileBPA.svg?label=ready\u0026title=Ready)](http://waffle.io/devis/18FAgileBPA)\n[![Circle CI](https://circleci.com/gh/devis/18FAgileBPA.svg?style=svg)](https://circleci.com/gh/devis/18FAgileBPA)\n[![Test Coverage](https://codeclimate.com/github/devis/18FAgileBPA/badges/coverage.svg)](https://codeclimate.com/github/devis/18FAgileBPA/coverage)\n[![Code Climate](https://codeclimate.com/github/devis/18FAgileBPA/badges/gpa.svg)](https://codeclimate.com/github/devis/18FAgileBPA)\n\n## Background\n\n* **Project Vision** - Consumers want to know about food recalls as soon as possible. And following a food recall, many consumers will want to know  where they might find locally produced alternatives to recalled foods.\nOur prototype is a Minimum Viable Product (MVP) that will meet those needs and ... [see the rest of the Project Vision](https://github.com/devis/18FAgileBPA/wiki/Project-Charter#vision)\n* **Project Roadmap** - By the submission date, we will develop a Minimum Viable Product (MVP) with a basic feature set for an individual user: Produce data for two public API endpoints that ... [see the rest of the Project Roadmap](https://github.com/devis/18FAgileBPA/wiki/Project-Road-Map)\n* **Prototype**: [https://devis18f.herokuapp.com](https://devis18f.herokuapp.com) continuously deployed on [Heroku IaaS](https://www.heroku.com)\n* **Our Approach** - Read about the [approach](#approach) we used to develop this MVP prototype\n\n## Contributing\n\nPlease use the [fork and pull](https://help.github.com/articles/using-pull-requests#fork--pull) collaborative model, basing your pull requests on the `master` branch.\n\n### Prerequisites for Development Environment\n\nMake sure you have [node.js](https://nodejs.org) installed (currently, version 0.12.4), and you can use the `npm` command:\n\n```shell\n$ npm version\n```\n\nInstall [Grunt](http://gruntjs.com), our chosen build task runner, globally:\n\n```shell\n$ npm install -g grunt-cli\n```\n\n### Running Locally\n\nClone this repository\n\n```shell\n$ git clone https://github.com/devis/18FAgileBPA.git\n$ cd 18FAgileBPA\n```\n\nThen install dependencies from the project root directory:\n\n```shell\n$ npm install\n```\n\nStart the server with a grunt task:\n\n```shell\n$ grunt serve\n```\n\nYou can now open [http://localhost:8000](http://localhost:8000) in your browser.\n\n### Testing\n\n#### Unit tests\n\nTo run the unit tests, use the grunt task:\n```shell\n$ grunt test\n```\n\nThere are two sets of tests that are run, one using [mocha](http://mochajs.org/) and [must](https://github.com/moll/js-must) for the backend, and one using [karma](http://karma-runner.github.io/) and [jasmine](http://jasmine.github.io/) for the frontend. When complete, you will see the results of both sets of tests (pass/fail) as well as text summaries of the code coverage, as instrumented by [istanbul](http://istanbul-js.org/), assuming there are no test failures.\n\nYou can view the full details of this coverage in a drill-down enabled report by opening:\n\n - Backend report: `coverage/lcov-report/index.html`\n - Frontend report: `coverage/html-report/index.html`\n\n## Deploying\n\nThe steps defined here describe a mostly manual deployment process. This process can be automated with the use of continuous integration systems, like [Circle CI](https://circleci.com/) or [Jenkins](https://jenkins-ci.org/), and other configuration management tools, such as [Puppet](https://puppetlabs.com/) or [Chef](https://www.chef.io/).\n\n### Using Heroku\n\nIf you would like to use [Heroku](https://heroku.com) like we have, you can follow our [Heroku deployment guide](HEROKU_DEPLOYMENT.md).\n\n### Your own server\n\nIf you use [Docker](https://www.docker.com/) for virtualization, we have developed a [Docker container](https://github.com/devis/18FAgileBPA-docker) for your convenience.\n\nYou can also follow our [manual deployment guide](MANUAL_DEPLOYMENT.md), which provides general recommendations on installing and running the software on your own system.\n\n## Approach\n\n_See our [Approach Criteria Evidence](APPROACH_EVIDENCE.md)_\n\n###Initial status\n* Received notice of openFDA data source\n* Stakeholders\n  * Appointed internal staff as proxy users\n  * Proxy users conducted brainstorming sessions to identify a problem we could solve using openFDA data\n* Now with a problem defined, and a client to work for, we began our normal process, modified somewhat given the compressed timeframe and unusual circumstances.\n\n### Project Initiation / Communication Plan\n* Identify roles\n* Name a Product Owner\n* Create Project Plan and Schedule\n* Specify Communications Plan\n  * Set up chat room\n  * Set scrum time\n  * Set up code repository, issue tracker, project wiki\n* Conduct project kickoff meeting with the client (in this case our proxy users)\n* Create Risk Management plan, to be updated\n  * during and after requirements elicitation with the customer\n  * during release and iteration planning meetings\n  * during retrospectives\n\n### Initial Requirements Elicitation and Design Session\n* Craft a [vision](https://github.com/devis/18FAgileBPA/wiki/Project-Charter#vision) for the project with users\n* Conduct requirements workshop\n* Produce draft user stories (no acceptance criteria yet)\n* Initial prioritization of features/stories\n* Enter draft users stories directly as Github issues, with a 'user-story' label\n\n### Technical Approach\nWith vision and high-level user stories completed, design software infrastructure best suited to solving this problem.\n\n#### Configuration Management\n- [Grunt](http://gruntjs.com)\n - Provides scripted builds\n- [npm](https://www.npmjs.com)\n - Handles automated dependency management\n- [Docker](http://docker.com)\n - Provides portable containers of pre-configured software\n\n##### Back-end / API stack\n- [node.js](https://nodejs.org/)\n - JavaScript on the server\n- [Express](http://expressjs.com/)\n - Minimilist web application framework\n- [KrakenJS](http://krakenjs.com/)\n - Security and templating for Express applications\n\n##### Front-end / UI tools\n- [AngularJS](https://angularjs.org/)\n - Single Page Application (SPA) framework\n- [Browserify](http://browserify.org/)\n - Isomorphic JavaScript framework\n- [Skeleton](http://getskeleton.com/)\n - Lightweight style guide and CSS library\n\n#### Continuous Integration\n- [Circle CI](https://circleci.com/)\n\n#### Application Monitoring\n- [Data Dog](http://www.datadoghq.com/)\n - See our [public metrics](https://p.datadoghq.com/sb/zraJRV-89b5c7fe6a)\n\n#### Code Quality monitoring\n- [Code Climate](https://codeclimate.com)\n\n#### Continuous Deployment\n- [Circle CI](https://circleci.com/)\n- [Heroku](https://heroku.com)\n\n### Design Session: Complete/Prioritize User Stories\n* for each story, lead a discussion between developers and users\n  * add acceptance criteria to users stories\n  * update stories or add new ones as required\n* prioritize stories according to business value, as determined by users\n\n### Release Planning/Iteration Planning\nWith user stories completed and prioritized, conduct initial release planning meeting:\n* Add estimates to each story\n* Group the stories into multiple releases, based on users priorities and developer time estimates\n* Break user stories into tasks\n* Assign stories to developers for the first iteration\n* Publish a project [Project Road Map](https://github.com/devis/18FAgileBPA/wiki/Project-Road-Map) with our initial release specified as our minimum viable product (MVP).\n\n## Daily Scrum\nStart iterative development process. Given the compressed time frame:\n* Use continuous deployment so the latest code would always be on the prototype server, so planning specific releases became less important\n* Use a more flexible iteration process: First iteration would include user stories for an MVP.\n  * took responsibility for producing an MVP by the submission date.\n  * subsequent iterations could be planned during daily scrums to add additional features from our release plan and road map\n\n## Acceptance Testing\n* Using continuous deployment allowed continuous testing\n* Product Owner performed acceptance testing as builds were deployed, incorporating additional testing feedback from users\n  * Throughout testing, new issues or defects were recorded, and new user stories added to the backlog\n  * Product Owner closed user stories as acceptance criteria were met\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinuxbozo%2F18fagilebpa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flinuxbozo%2F18fagilebpa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinuxbozo%2F18fagilebpa/lists"}