{"id":13786051,"url":"https://github.com/maxime1992/pizza-sync","last_synced_at":"2025-09-03T17:09:38.367Z","repository":{"id":87594956,"uuid":"80497550","full_name":"maxime1992/pizza-sync","owner":"maxime1992","description":"Pizza-Sync is a web app built on the frontend with angular, ngrx and on the backend with Nest. It let you and your friends/colleagues choose a pizza before placing a group order. Built using https://github.com/maxime1992/angular-ngrx-starter","archived":false,"fork":false,"pushed_at":"2018-09-22T19:15:12.000Z","size":60493,"stargazers_count":168,"open_issues_count":3,"forks_count":48,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-05-11T22:37:19.615Z","etag":null,"topics":["angular","nestjs","ngrx","parsing","pizza","socket-io"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/maxime1992.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2017-01-31T06:39:10.000Z","updated_at":"2024-11-28T16:44:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"909f990a-2144-484b-8f86-60d536cf7fd9","html_url":"https://github.com/maxime1992/pizza-sync","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/maxime1992/pizza-sync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxime1992%2Fpizza-sync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxime1992%2Fpizza-sync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxime1992%2Fpizza-sync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxime1992%2Fpizza-sync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maxime1992","download_url":"https://codeload.github.com/maxime1992/pizza-sync/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxime1992%2Fpizza-sync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273477152,"owners_count":25112622,"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","status":"online","status_checked_at":"2025-09-03T02:00:09.631Z","response_time":76,"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":["angular","nestjs","ngrx","parsing","pizza","socket-io"],"created_at":"2024-08-03T19:01:08.672Z","updated_at":"2025-09-03T17:09:38.358Z","avatar_url":"https://github.com/maxime1992.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"![Image](./logo/png/PS_logo_high_res_2.png?raw=true)\n\n\u003chr\u003e\n\n## Features\n\n- :pizza: Display pizzas from a given \"pizza provider\" (Ormeau, Ormeau with mocked data, Tutti Pizza, ...)\n- :camera: Add your own pizzas pictures for a given pizza provider\n- :octocat: \"Connect\" with your github username (no need for auth) and display your profile picture\n- :heavy_plus_sign: Select 1 pizza or more, remove if needed\n- :electric_plug: Realtime update with other people connected\n- :money_with_wings: Choose pizzas by size/price\n- :mag_right: Choose pizzas by ingredients, even if the pizza provider website doesn't provide this feature!\n- :abc: Search pizza(s) by name\n- :dizzy: Display an \"easy order view\" with pizzas grouped by their names\n- :notebook: Download a CSV file that you can open with Calc or Excel to handle the money for the current order (who already paid and how much)\n- :hourglass_flowing_sand: Set a countdown to limit the time of the order (from command line, realtime update on clients)\n- :video_game: Possibility to implement your own pizza provider (with an helper class to keep things easy)\n- :wrench: Possibility to implement new commands (with an helper class too)\n\n| []()                                                                                                                   | []()                                                                                                                   |\n| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |\n| ![Image](https://user-images.githubusercontent.com/4950209/44301952-0e582380-a318-11e8-8642-bed4b6a76fb9.png?raw=true) | ![Image](https://user-images.githubusercontent.com/4950209/44301953-0ef0ba00-a318-11e8-9489-69d999647ce4.png?raw=true) |\n| Enter your name or Github nickname..                                                                                     |..and sign in.                                                                                                                |\n| ![Image](https://user-images.githubusercontent.com/4950209/44301954-0ef0ba00-a318-11e8-9c5c-03109f575405.png?raw=true) | ![Image](https://user-images.githubusercontent.com/4950209/44301955-0ef0ba00-a318-11e8-9a8b-bcc590a51df7.png?raw=true) |\n| See connected people and their order(s)..                                                                            | ..or how a pizza looks like.                                                                                             |\n| ![Image](https://user-images.githubusercontent.com/4950209/44301956-0ef0ba00-a318-11e8-874f-4200c6e171a5.png?raw=true) | ![Image](https://user-images.githubusercontent.com/4950209/44301957-0ef0ba00-a318-11e8-9922-c7461a197154.png?raw=true) |\n| Find your favourite pizza by name..                                                                                                      | ...or by ingredients.                                                                                                      |\n| ![Image](https://user-images.githubusercontent.com/4950209/44301958-0ef0ba00-a318-11e8-9d49-e983c7f88737.png?raw=true) | ![Image](https://user-images.githubusercontent.com/4950209/44301959-0f895080-a318-11e8-837c-9bf402a76a8e.png?raw=true) |\n| Discover which ingredients are still available during a search.                                                                        | Access the *easy order view* before making a phone call.                                                                  |\n| ![Image](https://user-images.githubusercontent.com/4950209/44301961-13b56e00-a318-11e8-95e4-e97fc7d8069d.png?raw=true) | ![Image](https://user-images.githubusercontent.com/4950209/44301963-144e0480-a318-11e8-8ab7-bdd31202d476.png?raw=true) |\n| Admin can set the countdown..                                                                                            | ..but also the list of providers and choose one                                                                     |\n\n## Why ?\n\nThis project has been built to easily order pizzas with my former colleagues.\n\nWe usually ordered at [l'Ormeau](http://pizzadelormeau.com/) and thus, the backend part of the project is parsing this website.  \n_(note: at the time I built the app, L'Ormeau website was [like that](https://web.archive.org/web/20170619073245/http://www.pizzadelormeau.com/nos-pizzas))_\n\n**_Pizza-Sync_** also accepts others _pizzas-providers_! So if you want to use it with your local pizzeria, you'd just have to add a new `pizza-provider` that parses the website.\n\n## Is it just about Pizza ?\n\nIt could :pizza: :heart: ... But not totally.\n\n**It's also a demo to show how to use Angular with the following stack :**\n\n- **@angular/cli**\n- **@angular/material**\n- **@angular/flex-layout**\n- **@ngrx/store**\n- **@ngrx/effects**\n- **@ngrx/entity**\n- **socket.io**\n\n**And [NestJs](https://github.com/nestjs/nest) on the backend.**\n\nThis is a medium size project, not too complicated but still, with a lot of things in it (normalized data with Redux, real time, little cli to interact with the app in real time from command line on the server, ...). If you see things to improve, feel free to open an issue, or even better: Make a PR!\n\n## How do I run it locally ?\n\n### Dev mode\n\n**Terminal 1 :**\n\n```\ncd backend\nyarn\nyarn run start:watch\n```\n\nThen a prompt `pizza-sync$` will appear.\nIt's up to the admin to decide when the app should stop accepting orders.\nAdmin can change the countdown on the fly. To do that simply run the following command into the prompt `countdown --hour X --minute Y` with X = 11 and Y = 20 for example.\nThe app will update the countdown in realtime on the frontend. Even if the countdown has already reached 0, you can run this command multiple times.\n\n**Terminal 2 :**\n\n```\ncd frontend\nyarn\nyarn start\n```\n\nYou'll then be able to open the app at : [http://localhost:4200](http://localhost:4200).\n\n### Docker mode (for production use)\n\nThere are 2 Dockerfiles:\n\n- Dockerfile.api - Run the node server containing the API (HTTP + Socket)\n- Dockerfile.nginx - Run an nginx server which serves static assets directly and let HTTP + Sockets go through\n\nThe simplest way to run them both:\n\n```\ndocker-compose up\n```\n\nIf you do not want to use `docker-compose`, you can build and run them separately:\n\n```bash\n# terminal 1\ndocker build -f Dockerfile.api -t pizza-sync-api .\ndocker run -it --rm --name pizza-sync-api pizza-sync-api\n\n# terminal 2\ndocker build -f Dockerfile.nginx -t pizza-sync-nginx .\ndocker run -it --rm -p 3000:80 --name pizza-sync-nginx --link pizza-sync-api:pizza-sync-api pizza-sync-nginx\n```\n\nThen just go to [http://localhost:3000](http://localhost:3000).\n\nWhen using `docker-compose`, you'll see the logs of the API but also the logs from NGINX.  \nIf you want to run commands on the API (`countdown`, `providers`, `provider`, etc) you need to do the following, into another terminal:\n\n```\ndocker-compose up\ndocker ps\n# look for the ID of the API container, let's call it API-ID\ndocker attach API-ID\n```\n\n### Contribution\n\nAny contribution is very welcome :sparkles: !\n\nThere are plenty of things to do with this small project.\nHere are some ideas :\n\n- [ ] Improve the layout (theme, responsiveness, logo, ...)\n- [ ] Angular universal ? Having a super fast init would be awesome !\n- [ ] Create a PWA with at least a service worker to cache the assets\n- [ ] Add mocks to run the app without the backend\n- [ ] Deploy the app on Github pages (needs mocks first)\n\nYou can also take a look into the [issues](https://github.com/maxime1992/pizza-sync/issues) and pick up one which is not already assigned.\n\n\u003chr\u003e\n\n![Image](https://github.com/happyksu/pizza-sync/blob/master/New_Logo/png/PS_icon_32.png?raw=true) Pizza-Sync logos have been designed by [Happyksu](https://github.com/happyksu)!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxime1992%2Fpizza-sync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxime1992%2Fpizza-sync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxime1992%2Fpizza-sync/lists"}