{"id":21330086,"url":"https://github.com/yummyume/symmetrical-potato","last_synced_at":"2026-04-11T07:02:29.588Z","repository":{"id":199265417,"uuid":"702004502","full_name":"YummYume/symmetrical-potato","owner":"YummYume","description":"Remix + API Platform.","archived":false,"fork":false,"pushed_at":"2024-02-15T13:33:19.000Z","size":4395,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-16T00:29:13.308Z","etag":null,"topics":["api-platform","bun","caddy","docker","mailcatcher","mariadb","rabbitmq","react","remix","symfony"],"latest_commit_sha":null,"homepage":"https://yam-yam.dev/","language":"TypeScript","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/YummYume.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":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-08T08:04:34.000Z","updated_at":"2024-02-14T17:26:17.000Z","dependencies_parsed_at":"2025-01-22T13:37:00.709Z","dependency_job_id":"822f34a8-dff5-49c5-8201-39b00d1a7854","html_url":"https://github.com/YummYume/symmetrical-potato","commit_stats":null,"previous_names":["yummyume/symmetrical-potato"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/YummYume/symmetrical-potato","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YummYume%2Fsymmetrical-potato","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YummYume%2Fsymmetrical-potato/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YummYume%2Fsymmetrical-potato/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YummYume%2Fsymmetrical-potato/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/YummYume","download_url":"https://codeload.github.com/YummYume/symmetrical-potato/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YummYume%2Fsymmetrical-potato/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31671630,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T17:19:37.612Z","status":"online","status_checked_at":"2026-04-11T02:00:05.776Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["api-platform","bun","caddy","docker","mailcatcher","mariadb","rabbitmq","react","remix","symfony"],"created_at":"2024-11-21T22:14:15.701Z","updated_at":"2026-04-11T07:02:29.567Z","avatar_url":"https://github.com/YummYume.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Symmetrical Potato\n\nPayday 3 inspired project to plan your heists in New York City.\n\nRemix + API Platform + GraphQL.\n\n## Content\n\n- [Symmetrical Potato](#symmetrical-potato)\n  - [Content](#content)\n  - [Installation](#installation)\n  - [Hosts](#hosts)\n  - [Services](#services)\n  - [Generating TypeScript types from the API](#generating-typescript-types-from-the-api)\n  - [Authentication](#authentication)\n  - [Structure](#structure)\n  - [E2E Testing](#e2e-testing)\n\n## Installation\n\n1. Clone the repository\n2. Add the required hosts to your `/etc/hosts` file (see [#hosts](#hosts))\n3. (Optional) Add `.env.local` files to override the various default environment variables\n4. (Optional) Add `compose.override.yml` to override the default compose configuration\n5. Run `make start`\n6. Go to [http://symmetrical-potato.com](http://symmetrical-potato.com) to access the Remix app\n\nAfter the first run, you can use `make stop` \u0026 `make up` to quickly stop and start the containers.\nAll the available commands are listed in the `Makefile`.\n\n## Hosts\n\nAdd the following to your `/etc/hosts` file:\n\n```bash\n127.0.0.1 symmetrical-potato.com\n127.0.0.1 api.symmetrical-potato.com\n127.0.0.1 pma.symmetrical-potato.com\n127.0.0.1 mailcatcher.symmetrical-potato.com\n127.0.0.1 rabbitmq.symmetrical-potato.com\n```\n\nWhich will allow you to access the different services for the project.\n\n| Service             | URL                                                                             |\n| ------------------- | ------------------------------------------------------------------------------- |\n| Remix app (front)   | [symmetrical-potato.com](http://symmetrical-potato.com)                         |\n| API Platform (back) | [api.symmetrical-potato.com](http://api.symmetrical-potato.com)                 |\n| phpMyAdmin          | [pma.symmetrical-potato.com](http://pma.symmetrical-potato.com)                 |\n| MailCatcher         | [mailcatcher.symmetrical-potato.com](http://mailcatcher.symmetrical-potato.com) |\n| RabbitMQ            | [rabbitmq.symmetrical-potato.com](http://rabbitmq.symmetrical-potato.com)       |\n\n## Services\n\nAll the services used by the project.\n\n\u003e [!NOTE]  \n\u003e Some services are only available in dev. They will never by used in production or even test environments.\n\n| Service name  | Host                                                                 | Aliases           | Ports       | Description                                                                                                  |\n| ------------- | -------------------------------------------------------------------- | ----------------- | ----------- | ------------------------------------------------------------------------------------------------------------ |\n| `caddy`       |                                                                      | `sp-caddy`, `api` | `80`, `443` | Caddy is used as the proxy entry to any of the running services. It also services static files from the API. |\n| `front`       | `symmetrical-potato.com`                                             | `sp-front`        |             | The Remix app.                                                                                               |\n| `php`         | `api.symmetrical-potato.com`, `api:9000` (within the Docker network) | `sp-php`          |             | Symfony API with API Platform.                                                                               |\n| `mariadb`     |                                                                      | `sp-mariadb`      |             | The database used by the API.                                                                                |\n| `phpmyadmin`  | `pma.symmetrical-potato.com`                                         | `sp-phpmyadmin`   |             | Used to manage MariaDB easily. Only available in dev.                                                        |\n| `mailcatcher` | `mailcatcher.symmetrical-potato.com`                                 | `sp-mailcatcher`  |             | Catches all mails sent by the API. Only available in dev.                                                    |\n| `rabbitmq`    | `rabbitmq.symmetrical-potato.com`                                    | `sp-rabbitmq`     |             | Queue system for the API (such as mails).                                                                    |\n\n## Generating TypeScript types from the API\n\nUse the `make generate-types` command to generate the TypeScript types from the API.\nThe types will be generated in the `front/app/lib/api/types/index.ts` file.\n\n\u003e [!NOTE]  \n\u003e For convenience, this folder is automatically fixed by ESLint \u0026 Prettier when generating the types.\n\n## Authentication\n\nWe use simple username/password for development purposes.\n\n| Service                 | Username | Password |\n| ----------------------- | -------- | -------- |\n| `phpmyadmin`, `mariadb` | `root`   | `root`   |\n| `rabbitmq`              | `guest`  | `guest`  |\n\n## Structure\n\n\u003e [!NOTE]  \n\u003e The API uses the classic Symfony structure. This will only describe the Remix app structure.\n\nThe Remix app uses the `app/routes` folder for routing, along with the following structure :\n\n| Path                 | Alias          | Description                                                                                     |\n| -------------------- | -------------- | ----------------------------------------------------------------------------------------------- |\n| `app/`               | `~/`           | The base `app` folder where all the files for the app are contained.                            |\n| `app/styles/`        | `~styles/`     | The `styles` folder which contains all SCSS/CSS style for the app.                              |\n| `app/lib/`           | `~lib/`        | The `lib` folder which contains all reusable code (such as utils, API calls, etc...).           |\n| `app/lib/api/`       | `~api/`        | The `lib/api` folder which contains calls to the API (for reusability) and the generated types. |\n| `app/lib/components` | `~components/` | The `lib/components` folder which contains all the reusable components.                         |\n| `app/lib/utils/`     | `~utils/`      | The `lib/utils` folder containing all the reusable utils.                                       |\n\n## E2E Testing\n\nTo run tests, cd into the `E2E` folder and run `make e2e` to run the Playwright tests.\n\nYou can launch the UI by running `make e2e-ui` instead.\n\n\u003e [!NOTE]\n\u003e If this is your first time running the tests, you will need to run `make e2e-install` to install the dependencies. If you are not using Bun, you can check the Makefile and replace the bun/bunx commands with npm/npx, but do not commit another lockfile.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyummyume%2Fsymmetrical-potato","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyummyume%2Fsymmetrical-potato","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyummyume%2Fsymmetrical-potato/lists"}