{"id":13416355,"url":"https://github.com/thoughtbot/upcase","last_synced_at":"2025-04-09T05:11:44.189Z","repository":{"id":608228,"uuid":"245397","full_name":"thoughtbot/upcase","owner":"thoughtbot","description":"Sharpen your programming skills.","archived":false,"fork":false,"pushed_at":"2024-09-17T07:03:01.000Z","size":60706,"stargazers_count":309,"open_issues_count":11,"forks_count":36,"subscribers_count":32,"default_branch":"main","last_synced_at":"2024-09-18T04:22:34.200Z","etag":null,"topics":["product"],"latest_commit_sha":null,"homepage":"https://thoughtbot.com/upcase","language":"Ruby","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/thoughtbot.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":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2009-07-07T17:35:57.000Z","updated_at":"2024-09-16T11:52:42.000Z","dependencies_parsed_at":"2023-07-06T22:16:31.261Z","dependency_job_id":"563863a9-e870-4af7-a8e0-474b6d9176c8","html_url":"https://github.com/thoughtbot/upcase","commit_stats":{"total_commits":4850,"total_committers":174,"mean_commits":"27.873563218390803","dds":0.7987628865979381,"last_synced_commit":"17c2d9f7f5bbb749f7e78673922982cc47abf19e"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fupcase","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fupcase/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fupcase/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fupcase/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot","download_url":"https://codeload.github.com/thoughtbot/upcase/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247980843,"owners_count":21027808,"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":["product"],"created_at":"2024-07-30T21:00:57.588Z","updated_at":"2025-04-09T05:11:44.163Z","avatar_url":"https://github.com/thoughtbot.png","language":"Ruby","readme":"\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n\n- [Upcase](#upcase)\n- [Development](#development)\n  - [Rules of the road](#rules-of-the-road)\n  - [Setup](#setup)\n  - [Designing In The Browser](#designing-in-the-browser)\n  - [Protocol](#protocol)\n  - [Continuous Integration](#continuous-integration)\n  - [Ongoing](#ongoing)\n  - [Amazon AWS S3](#amazon-aws-s3)\n  - [Deployment](#deployment)\n  - [Sending email on staging](#sending-email-on-staging)\n- [Viewing email in development](#viewing-email-in-development)\n- [Product Management](#product-management)\n- [Admin Access](#admin-access)\n- [Testing With User Accounts](#testing-with-user-accounts)\n- [Credits](#credits)\n- [License](#license)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n# Upcase\n\nUpcase is a Rails application deployed to Heroku.\nThis project is in **maintenance mode** and is not being actively developed.\n\n# Development\n\n## Rules of the road\n\nThis project is now following Sandi Metz's Rules.\n\nYou can read a [description of the rules here](https://thoughtbot.com/blog/sandi-metz-rules-for-developers).\n\nAll new code should follow these rules. If you make changes in a pre-existing\nfile that violates these rules you should fix the violations as part of\nyour work.\n\n## Setup\n\n1. Get the code.\n\n        % git clone git@github.com:thoughtbot/upcase.git\n\n2. Setup your environment.\n\n        % bin/setup\n\n3. Start the application.\n\n        % bin/dev\n\n4. Verify that the app is up and running.\n\n        % open http://localhost:5000/upcase\n\n## Designing In The Browser\n\nWe are using `https://github.com/guard/guard-livereload` and\n`https://github.com/johnbintz/rack-livereload`. When you save a file, the open\nbrowser will automatically refresh, and you can view your changes.\n\nRun `bundle exec guard` to start the guard server to auto refresh your browser.\n\n## Protocol\n\n1. Look for cards in the **Next Up** list.\n2. When you start a card, add yourself and move the card to the **In Progress**\n   list.\n3. When opening a pull request, move the card to the **Code Review** list and\n   ask in Slack for a review.\n4. Once the review is complete, merge into master as usual. Wait for CI to\n   finish running the build.\n5. Once CI is finished running the build, it will deploy to staging. Move the\n   card to **On Staging for acceptance** at this time. Comment on the card with\n  acceptance instructions. Include a URL to staging. Ask in Slack for\n  acceptance.\n\nIn order to avoid bottlenecks and confusion:\n\n* Try to only work on one card at a time. Bring all the way from **Next Up** to\n  **Verified on staging** as quickly as possible.\n* Prioritize reviewing others' work, both during code reviews and acceptance on\n  staging.\n* Feel free to be persistent when looking for reviews and acceptance.\n\nFor more information, check out the [guides] and [Playbook].\n\n[guides]: https://github.com/thoughtbot/guides/tree/master/protocol/rails\n[Playbook]: http://playbook.thoughtbot.com/#tasks\n\n## Ongoing\n\n* Run test suite before committing to the master branch.\n\n        % rake\n\n* Reset development data as needed.\n\n        % rake dev:prime\n\n* Dump production data into your local db. (Note that you need to drop your\n  local database first).\n\n        % rake db:drop\n        % heroku pg:pull DATABASE_URL upcase_development -r production\n\n* To test that adding/removing GitHub users works, use the GitHub user\n  \"cpyteltest\".\n\n## Amazon AWS S3\n\nTo test integration with AWS S3, set the following environment variables:\n\n    AWS_BUCKET\n    AWS_ACCESS_KEY_ID\n    AWS_SECRET_ACCESS_KEY\n\n## Deployment\n\nCircleCI deploys to staging automatically when a build passes on master.\n\nOnce your changes have been verified on staging, deploy to production:\n\n    ./bin/deploy production\n\n## Sending email on staging\n\nWe override the recipient on staging to be `ENV['EMAIL_RECIPIENTS']` so that no\none else can receive email from the staging server.\n\nWe have it set to `learn+staging@thoughtbot.com`, which is a mailing list.\nInstead of changing the variable, ask to be put on the mailing list.\n\nTo set it:\n\n    heroku config:set EMAIL_RECIPIENTS=gabe@thoughtbot.com,melissa@apprentice.io -r staging\n\nTo see what the current recipient is:\n\n    heroku config:get EMAIL_RECIPIENTS -r staging\n\n# Viewing email in development\n\nTo preview how emails look in the browser without having to send them (via\nstaging) you can visit the rails mailer preview index and navigate to the\nemails that have preview classes implemented.\n\nTo preview the emails point your browser to\n`http://localhost:5000/rails/mailers` and select the mailer there.\n\n# Product Management\n\nCheck the [Upcase processes] repository for guides on where to find and how to\ndo common tasks like customer support, content production, related repositories\nand trello boards, and others.\n\n[Upcase processes]: https://github.com/thoughtbot/upcase-processes\n\n# Admin Access\n\n1. Register on the [Upcase](https://upcase.com/sign_up) site.\n\n2. Update your user.\n\n        % heroku run console -r production\n        % user = User.find_by_email('foo@example.com')\n        % user.admin = true\n        % user.save!\n        % exit\n\n3. Access the [general admin panel](http://upcase.com/admin) or\n   the [workshop admin panel](http://upcase.com/admin).\n\n# Testing With User Accounts\n\nThe `rake dev:prime` task will create user accounts that you can test with in\ndevelopment mode.\n\n# License\n\nThis application is Copyright © 2007 thoughtbot, inc.\n\nIf you submit a Contribution to this application's source code, you hereby grant\nto thoughtbot, inc. a worldwide, royalty-free, exclusive, perpetual and\nirrevocable license, with the right to grant or transfer an unlimited number of\nnon-exclusive licenses or sublicenses to third parties, under the Copyright\ncovering the Contribution to use the Contribution by all means, including but\nnot limited to:\n\n* to publish the Contribution,\n* to modify the Contribution, to prepare Derivative Works based upon or\n  containing the Contribution and to combine the Contribution with other\n  software code,\n* to reproduce the Contribution in original or modified form,\n* to distribute, to make the Contribution available to the public, display and\n  publicly perform the Contribution in original or modified form.\n\n# Credits\n\nThank you to all [the contributors](https://github.com/thoughtbot/upcase/contributors)!\n\n\u003c!-- START /templates/footer.md --\u003e\n## About thoughtbot\n\n![thoughtbot](https://thoughtbot.com/thoughtbot-logo-for-readmes.svg)\n\nThis repo is maintained and funded by thoughtbot, inc.\nThe names and logos for thoughtbot are trademarks of thoughtbot, inc.\n\nWe love open source software!\nSee [our other projects][community].\nWe are [available for hire][hire].\n\n[community]: https://thoughtbot.com/community?utm_source=github\n[hire]: https://thoughtbot.com/hire-us?utm_source=github\n\n\n\u003c!-- END /templates/footer.md --\u003e\n","funding_links":[],"categories":["Ruby","Miscellaneous","Examples"],"sub_categories":["Rails codebases to study"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthoughtbot%2Fupcase","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthoughtbot%2Fupcase","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthoughtbot%2Fupcase/lists"}