{"id":21228233,"url":"https://github.com/hexlet/hexlet-sicp","last_synced_at":"2025-05-16T13:08:06.618Z","repository":{"id":38001758,"uuid":"204966447","full_name":"Hexlet/hexlet-sicp","owner":"Hexlet","description":"Hexlet SICP is a service for those studying the book Structure and Interpretation of Computer Programs. Track your progress and match yourself against others on the global leaderboard.","archived":false,"fork":false,"pushed_at":"2025-04-21T15:21:57.000Z","size":20709,"stargazers_count":107,"open_issues_count":53,"forks_count":135,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-04-21T16:30:50.998Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"https://sicp.hexlet.io","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Hexlet.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-08-28T15:38:17.000Z","updated_at":"2025-04-21T15:22:02.000Z","dependencies_parsed_at":"2025-02-01T02:11:10.349Z","dependency_job_id":"d9518b9f-6d5c-41b7-9929-a22f0be6c93f","html_url":"https://github.com/Hexlet/hexlet-sicp","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/Hexlet%2Fhexlet-sicp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hexlet%2Fhexlet-sicp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hexlet%2Fhexlet-sicp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hexlet%2Fhexlet-sicp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hexlet","download_url":"https://codeload.github.com/Hexlet/hexlet-sicp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254535829,"owners_count":22087399,"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":["hacktoberfest"],"created_at":"2024-11-20T23:15:15.481Z","updated_at":"2025-05-16T13:08:06.600Z","avatar_url":"https://github.com/Hexlet.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hexlet SICP\n\n[![github action status](https://github.com/Hexlet/hexlet-sicp/actions/workflows/master.yml/badge.svg)](https://github.com/Hexlet/hexlet-sicp/actions)\n\n[![codecov](https://codecov.io/gh/Hexlet/hexlet-sicp/branch/master/graph/badge.svg)](https://codecov.io/gh/Hexlet/hexlet-sicp)\n\n[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)\n\nRead this in another language: [Русский](README.ru.md)\n\nHexlet SICP is a service for those studying the book Structure and Interpretation of Computer Programs. Track your progress and match yourself against others on the global leaderboard.\n\n[How to study _Structure and Interpretation of Computer Programs_ (SICP)](https://guides.hexlet.io/how-to-learn-sicp/)\n\n## For contributors\n\n* Discuss the project on Telegram: https://t.me/hexletcommunity/12\n\n### Recorded meetings\n\n* [Recorded meetings playlist](https://www.youtube.com/playlist?list=PL37_xn2SVZdCJ-xgB-phFaWrp25Kc3cLk)\n\n## FAQ\n\nQ: I get this error `Illuminate\\Session\\TokenMismatchException: CSRF token mismatch.`\nA: Reset your config cache `php artisan config:clear`\n\n## Requirements\n\nRun `composer check-platform-reqs` to check PHP deps:\n\n* PHP ^8.3\n* Composer\n* Node.js (v16+) \u0026 NPM (6+)\n* SQLite for local, PostgreSQL for production\n* [heroku cli](https://devcenter.heroku.com/articles/heroku-cli#download-and-install); [How to deploy Laravel on Heroku](https://ru.hexlet.io/blog/posts/kak-razvernut-prilozhenie-laravel-na-heroku) (in Russian)\n\n[What is a Version Manager?](https://guides.hexlet.io/version-managers/)\n\n## Setup\n\n### Local setup\n\nTo run on the local interpreter and SQLite:\n\n```sh\nmake setup # set up the project\nmake start # start server at http://127.0.0.1:8000/\nmake test # run tests\n```\n\n### Running on PostgreSQL (deployed in a Docker container)\n\n1. Install deps and prepare the config file\n\n    ```sh\n    make setup\n    ```\n\n2. Put your database credentials in the *.env* file\n\n    ```dotenv\n    DB_CONNECTION=pgsql\n    DB_HOST=localhost\n    DB_PORT=54320\n    DB_DATABASE=postgres\n    DB_USERNAME=postgres\n    DB_PASSWORD=secret\n    ```\n\n3. Start the database container and seed\n\n    ```sh\n    make compose-start-database\n    make db-prepare\n    ```\n\n4. Run the local server\n\n    ```sh\n    make start\n    ```\n\n### Setup in Docker\n\n1. Prepare the `.env` file\n\n    ```sh\n    make env-prepare\n    ```\n\n2. Put your database credentials in the `.env` file\n\n    ```dotenv\n    DB_CONNECTION=pgsql\n    DB_HOST=database\n    DB_PORT=5432\n    DB_DATABASE=postgres\n    DB_USERNAME=postgres\n    DB_PASSWORD=secret\n    ```\n\n3. Build and start the app\n\n    ```sh\n    make compose-setup # build project\n    make compose-start # start server at http://127.0.0.1:8000/\n    ```\n\n    ```sh\n    make compose-bash  # start bash session inside docker container\n    make test          # run tests inside docker container\n    ```\n\n## Coding stardards and other rules\n\n* Pull requests should be as small as reasonably possible\n* All code must comply with the PSR12 and Laravel standards (we also use some custom rules for added challenge)\n* Every pull request must pass all tests\n* All controller actions must have test coverage ([Start writing (appropriate) tests](https://ru.hexlet.io/blog/posts/how-to-test-code) (in Russian))\n* The forms are made using [laraeast/laravel-bootstrap-forms](https://github.com/laraeast/laravel-bootstrap-forms)\n* RoR's resource routing convention is used for the most part. In a very rare case when a route doesn't seem to fit the convention, it should be discussed first\n* All strings must be stored in locale files\n* To enable Rollbar logging, set the variable `LOG_CHANNEL=rollbar` and `ROLLBAR_TOKEN=` ([docs](https://docs.rollbar.com/docs/laravel))\n* To add an exercise, put its contents (a listing or pic) at `resources/views/exercise/listing/#_#.blade.php` and its text description, at `resources/lang/{locale}/sicp.php` under the key `exercises.#.#` (mind the locale).\n* To generate helper files (for autocompletion), use `make ide-helper`\n* Run `php artisan` and check out all available commands!\n\n## GitHub Auth Setup Guide\n\nIntegrate the app with your GitHub account (read more at https://developer.github.com/apps/about-apps/). To integrate the app:\n\n* Enter your GitHub account and go to _Settings_\n* On the right, choose _GitHub Apps_, then push _New GitHub App_\n* A form will pop up. In the _GitHub App name_ field, type the app name (for example, _Hexlet-SICP_)\n* In _Homepage URL_, put the web address hosting your deploy (for example, _https://hexlet-sicp.herokuapp.com_)\n* In _User authorization callback URL_, put the URL to redirect to, once a user authorizes via GitHub. (for example, _https://hexlet-sicp.herokuapp.com/oauth/github/callback_)\n* In _Webhook URL_, put the URL to dispatch events to (for example, _https://hexlet-sicp.herokuapp.com/oauth/github/callback_)\n* Set the permission to access email (_User permissions-\u003eEmail addresses-\u003eRead only_)\n* Save the app settings (push _Create GitHub App_)\n* The app page will open. Copy the Client ID and Client secret\n* Generate a private key (push _Generate a private key_)\n\nIf deployed on Heroku, set the environment variables for your deploy. To set environment variables:\n\n* Open _Settings_\n* In the _Config Vars_ setting, add the following variables: GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET and GITHUB_URL_REDIRECT and set them to the respective Client ID, Client secret and User authorization callback URL\n* Then, reset the configuration cache: ```heroku run php artisan config:cache```\n\n### Setting up a testing database\n\n1. Create a separate Postgres database.\n   Connection settings are available in the `pgsql_test` section of `config/database.php`.\n   How to set up a test database from scratch:\n\n    ```shell\n    sudo apt install postgresql\n    sudo -u postgres createuser --createdb $(whoami)\n    sudo -u postgres createuser hexlet_sicp_test_user\n    sudo -u postgres psql -c \"ALTER USER hexlet_sicp_test_user WITH ENCRYPTED PASSWORD 'secret'\"\n    createdb hexlet_sicp_test\n    ```\n\n2. Run tests on your testing database: `DB_CONNECTION=pgsql_test make test`\n\n### Adding a pre-commit hook\n\n```shell\ngit config core.hooksPath .githooks\n```\n\n##\n\n[![Hexlet Ltd. logo](https://raw.githubusercontent.com/Hexlet/assets/master/images/hexlet_logo128.png)](https://hexlet.io/?utm_source=github\u0026utm_medium=link\u0026utm_campaign=exercises-sicp)\n\nThis repository is created and maintained by the team and the community of Hexlet, an educational project. [Read more about Hexlet](https://hexlet.io/?utm_source=github\u0026utm_medium=link\u0026utm_campaign=exercises-sicp).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhexlet%2Fhexlet-sicp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhexlet%2Fhexlet-sicp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhexlet%2Fhexlet-sicp/lists"}