{"id":14975972,"url":"https://github.com/cleverbeagle/pup","last_synced_at":"2025-04-04T13:10:06.659Z","repository":{"id":19808733,"uuid":"74712781","full_name":"cleverbeagle/pup","owner":"cleverbeagle","description":"The Ultimate Boilerplate for Products.","archived":false,"fork":false,"pushed_at":"2023-03-07T22:35:41.000Z","size":3134,"stargazers_count":553,"open_issues_count":12,"forks_count":138,"subscribers_count":32,"default_branch":"master","last_synced_at":"2025-03-26T21:09:04.404Z","etag":null,"topics":["apollo","app","boilerplate","example","graphql","graphql-client","graphql-server","javascript","markdown","meteor","meteorjs","mongodb","nodejs","react","security","sitemap","ssr","styled-components","webhooks","websockets"],"latest_commit_sha":null,"homepage":"https://cleverbeagle.com/pup","language":"JavaScript","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/cleverbeagle.png","metadata":{"files":{"readme":"README.md","changelog":"History.md","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":"2016-11-25T00:19:34.000Z","updated_at":"2025-01-29T22:14:48.000Z","dependencies_parsed_at":"2024-09-23T19:01:43.743Z","dependency_job_id":null,"html_url":"https://github.com/cleverbeagle/pup","commit_stats":{"total_commits":308,"total_committers":12,"mean_commits":"25.666666666666668","dds":"0.38636363636363635","last_synced_commit":"9f4aa404ee4d561ef11d204df619dbf6879220e3"},"previous_names":[],"tags_count":22,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cleverbeagle%2Fpup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cleverbeagle%2Fpup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cleverbeagle%2Fpup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cleverbeagle%2Fpup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cleverbeagle","download_url":"https://codeload.github.com/cleverbeagle/pup/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247182337,"owners_count":20897379,"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":["apollo","app","boilerplate","example","graphql","graphql-client","graphql-server","javascript","markdown","meteor","meteorjs","mongodb","nodejs","react","security","sitemap","ssr","styled-components","webhooks","websockets"],"created_at":"2024-09-24T13:53:02.875Z","updated_at":"2025-04-04T13:10:06.637Z","avatar_url":"https://github.com/cleverbeagle.png","language":"JavaScript","readme":"### Pup\nThe Ultimate Boilerplate for Products.\n\n[Read the Documentation](https://cleverbeagle.com/pup)\n\n[![CircleCI](https://circleci.com/gh/cleverbeagle/pup.svg?style=shield)](https://circleci.com/gh/cleverbeagle/pup)\n\nWant to work side-by-side with an experienced, trusted mentor? [Check out Clever Beagle](http://cleverbeagle.com).\n\n---\n\n**NOTE:** The following represents example `README.md` content for your product. **_The information below should be customized for your product._**\n\n---\n\n1. Infrastructure\n2. Settings \u0026 Configuration\n3. Dependencies\n4. Commands\n5. Git \u0026 Branching\n6. Testing\n7. Releasing\n\n### 1. Infrastructure\n\nThe following explains how the `production` and `staging` environments for this app are managed and configured.\n\n#### Where is DNS configured for this app?\n\nDNS for the app is configured and managed via [DNSimple](https://dnsimple.com).\n\n#### Where does the database live?\n\nThe database is hosted via [Compose](https://compose.com). A single deployment `cleverbeagle` exists with a `pup` database for the `production` environment and a `pup-staging` database for the `staging` environment. Additionally, the \"Oplog Access\" add-on has been enabled to [improve the performance of Meteor in `production`](https://galaxy-guide.meteor.com/apm-optimize-your-app-for-oplog.html).\n\n#### Where does this app live?\n\nThe app is deployed to [https://galaxy.meteor.com](https://galaxy.meteor.com). It has two versions:\n\n1. `staging` which is accessed via `https://pup-staging.cleverbeagle.com` and is used to test a release in a production environment _before_ being deployed to `production`.\n2. `production` which is accessed via `https://pup.cleverbeagle.com` and is the live, customer-facing server.\n\nDeployment to these domains is controlled via NPM scripts defined in the `package.json` file at the root of the project, `npm run staging` and `npm run production`.\n\n#### How does the SSL work?\n\nSSL certificates are generated via the UI at [https://galaxy.meteor.com/cleverbeagle](https://galaxy.meteor.com/cleverbeagle). Each application's certificates are managed via the app's settings page:\n\n- [Staging Server Settings Dashboard](https://galaxy.meteor.com/app/pup-staging.cleverbeagle.com/settings)\n- [Production Server Settings Dashboard](https://galaxy.meteor.com/app/pup.cleverbeagle.com/settings)\n\nSSL certificates are auto-generated by Galaxy using the Let's Encrypt Certificate Authority and shouldn't require any maintenance. If maintenance or edits are required, locate the \"Domains \u0026 Encryption\" section of the app's settings page (linked above) and click on the domain you'd like to manage.\n\n### 2. Settings \u0026 Configuration\n\nSettings for the app are defined in three files at the root of the project:\n\n- `settings-development.json` contains the settings specific to the `development` environment (i.e., when running the app on your computer).\n- `settings-staging.json` contains the settings specific to the `staging` environmnet (i.e., when deploying the app to `pup-staging.cleverbeagle.com`).\n- `settings-production.json` contains the settings specific to the `production` environment (i.e., when deploying the app to `pup.cleverbeagle.com`).\n\nEach settings file should **_only be used in conjunction with the environment it's intended for_**. Further, each settings file's contents should be restricted to that specific environment (i.e., don't use an API key intended for the `production` environment in `development` and vice-versa—only break this rule when a given service's API key provisioning makes this prohibitive).\n\n#### How do I load the settings file?\n\nSettings files are automatically loaded for you as part of the NPM commands listed below. It's best to rely on these instead of doing it manually.\n\n#### How do I access the accounts used in the settings files?\n\nIf you need to obtain an API key, password, or other secret information, you can find this in the [Clever Beagle 1Password Vault](https://cleverbeagle.1password.com). If you do not have access to this, send a direct message to @rglover in Slack or email him ryan.glover@cleverbeagle.com.\n\n### 3. Dependencies\n\nDependencies for `pup.cleverbeagle.com` are installed via NPM and Meteor's Atmosphere package system. Atmosphere dependencies are installed automatically on app startup. NPM dependencies can be installed with the following command **before the first startup of the application**:\n\n```\nmeteor npm install\n```\n\n### 4. Commands\n\nThe following NPM commands can be used when working on the app.\n\n#### dev\n\n```\n$ npm run dev\n```\n\nRuns the app development server at `http://localhost:3000` and loads the `settings-development.json` file.\n\n#### staging\n\n```\n$ npm run staging\n```\n\nDeploys the app to the staging server at `https://pup-staging.cleverbeagle.com` and loads the `settings-staging.json` file.\n\n#### production\n\n```\n$ npm run production\n```\n\nDeploys the app to the production server at `https://pup.cleverbeagle.com` and loads the `settings-production.json` file.\n\n#### test\n\n```\n$ npm run test\n```\n\nRuns all [Jest](https://jestjs.io/) test suites in the app once and then quits.\n\n#### test-watch\n\n```\n$ npm run test-watch\n```\n\nRuns all [Jest](https://jestjs.io/) test suites in the app in watch mode and reruns whenever a test or file in the app changes.\n\n#### test-e2e\n\n```\n$ npm run test-e2e\n```\n\nRuns all end-to-end tests using [TestCafe](https://github.com/DevExpress/testcafe) once and then quits.\n\n### 5. Git \u0026 Branching\n\n[Read the \"Managing branches in Git\" tutorial in the Pup docs](https://cleverbeagle.com/pup/v2/tutorials/managing-branches-in-git)\n\n### 6. Testing\n\nThere are two types of testing performed in relation to the app: manual and automated. Manual testing is any testing where you're _manually_ clicking around the app yourself to test things out. Automated testing is any where you're relying on the automated test suites in the app to test things out.\n\n#### Test Users\n\nWhen you start the app for the first time in development and staging mode, we create a set of test users to use when testing different permissions:\n\n| Email Address | Password | Roles | Notes |\n|:----------------|:--------:|:-------:|:-------------------------------|\n| admin@admin.com | password | `admin` | Full access to the application.\n| user+1@test.com | password | `user`  | Access to user-only features.\n| user+2@test.com | password | `user`  | Access to user-only features.\n| user+3@test.com | password | `user`  | Access to user-only features.\n| user+4@test.com | password | `user`  | Access to user-only features.\n| user+5@test.com | password | `user`  | Access to user-only features.\n\n#### Test Data\n\nWhen you start the app for the first time, we create test data for all collections in the application. If you ever want to \"start over\" with fresh data in your `development` environment, stop the app and in your terminal run:\n\n```\nmeteor reset\n```\n\nUpon restarting the app, the databased will be reseeded with the default test data.\n\n**FAIR WARNING**: This command will **PERMANENTLY ERASE** (😈) any data that you've added to the app manually. If you've added something that you will need/want after the reset, make sure to back it up first.\n\n#### Writing Tests\n\n[Read the \"Writing and running automated tests\" tutorial in the Pup docs](https://cleverbeagle.com/pup/v2/tutorials/writing-and-running-automated-tests)\n\n### 7. Releasing\n\nReleasing the app to both the `staging` and `production` environment should be performed primarily via continuous integration. This is configured via Circle CI and the `.circleci/config.yml` file at the root of the app.\n\nIf an emergency deployment is required, the `npm run staging` and `npm run production` commands detailed in the \"NPM Commands\" section above can be utilized.\n\n#### Performing a release\n\nIn order for a release to be pushed to either the `staging` or `production` environment via continuous integration, code must be pushed to:\n\n- The `master` branch when releasing new code into production.\n- The `staging` branch when releasing new code to the `staging` server.\n\nWhen code is pushed, the continuous integration service should pick this change up and automatically deploy per the rules in the `.circleci/config.yml` file in the app.\n\n#### Tagging releases on master\n\nWhen code has been tested and confirmed ready for production, it's important to tag the release in Git so that it's clear when and where certain code is introduced. In order to tag a release, it's recommended that the [Git Extras library](https://github.com/tj/git-extras/blob/master/Commands.md#git-release) be used, specifically, the `git release \u003cSemantic Version Number\u003e` command be utilized.\n\nThis pushed the code to the `master` branch while also creating a tag locally and remotely, all simultaneously.\n\nFor more information on Semantic Versioning, [visit the official documentation site](https://semver.org/).\n","funding_links":[],"categories":["Boilerplate"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcleverbeagle%2Fpup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcleverbeagle%2Fpup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcleverbeagle%2Fpup/lists"}