All Projects → maxime1992 → Pizza Sync

maxime1992 / Pizza Sync

Licence: agpl-3.0
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

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to Pizza Sync

Phantom
A mimic website of Pinterest where one can share ideas , socialize and find inspirational ideas
Stars: ✭ 18 (-88.61%)
Mutual labels:  socket-io, nestjs
connect4
Connect 4️⃣Game
Stars: ✭ 1 (-99.37%)
Mutual labels:  socket-io, nestjs
angular-chat
Angular v.9, Node.js, Nest.js v.6, Mongoose, Socket.io, Passport, Angular Universal SSR (in progress...)
Stars: ✭ 35 (-77.85%)
Mutual labels:  socket-io, nestjs
streamkit
My streaming overlay platform for YouTube https://bit.ly/3AvaoFz and Twitch https://bit.ly/37xUPAM
Stars: ✭ 15 (-90.51%)
Mutual labels:  ngrx, nestjs
Angular Contacts App Example
Full Stack Angular PWA example app with NgRx & NestJS
Stars: ✭ 570 (+260.76%)
Mutual labels:  socket-io, ngrx
kanban-project-management
Web Application to manage software development projects.
Stars: ✭ 39 (-75.32%)
Mutual labels:  ngrx, nestjs
meditation-plus-angular
DEVELOPMENT MOVED TO
Stars: ✭ 15 (-90.51%)
Mutual labels:  ngrx, socket-io
Genal Chat
🐱‍🏍阿童木聊天室 nestjs+vue全栈聊天室 前后端分离 typescript一把梭
Stars: ✭ 1,105 (+599.37%)
Mutual labels:  nestjs, socket-io
sudoku
Multiplayer concurrent sudoku. The winner is the player who fills the last cell correctly.
Stars: ✭ 15 (-90.51%)
Mutual labels:  socket-io, nestjs
mom
Proof of concept for Message-Oriented-Middleware based architecture.
Stars: ✭ 39 (-75.32%)
Mutual labels:  socket-io, nestjs
Tyloo Chat
vue + nestjs IM即时通讯聊天室(仿wechat)
Stars: ✭ 54 (-65.82%)
Mutual labels:  nestjs, socket-io
Nestjs Example
NestJS example with GraphQL, Schema-Stitching, Dataloader, GraphQL Upload, RabbitMQ, Redis, Scalable Websocket and JWT authentication
Stars: ✭ 111 (-29.75%)
Mutual labels:  nestjs, socket-io
Rosie Pattern Language
Rosie Pattern Language (RPL) and the Rosie Pattern Engine have MOVED!
Stars: ✭ 146 (-7.59%)
Mutual labels:  parsing
Chat
Stars: ✭ 155 (-1.9%)
Mutual labels:  socket-io
Parjs
JavaScript parser-combinator library
Stars: ✭ 145 (-8.23%)
Mutual labels:  parsing
Nest User Auth
A starter build for a back end which implements managing users with MongoDB, Mongoose, NestJS, Passport-JWT, and GraphQL.
Stars: ✭ 145 (-8.23%)
Mutual labels:  nestjs
Cyberchef
The Cyber Swiss Army Knife - a web app for encryption, encoding, compression and data analysis
Stars: ✭ 13,674 (+8554.43%)
Mutual labels:  parsing
Serverless Core
Serverless Core module for Nest framework (node.js) 🦊
Stars: ✭ 154 (-2.53%)
Mutual labels:  nestjs
Throttler
A rate limiting module for NestJS to work with Fastify, Express, GQL, Websockets, and RPC 🧭
Stars: ✭ 145 (-8.23%)
Mutual labels:  nestjs
Perber
隐藏自己 做好清理
Stars: ✭ 144 (-8.86%)
Mutual labels:  socket-io

Image


Features

  • 🍕 Display pizzas from a given "pizza provider" (Ormeau, Ormeau with mocked data, Tutti Pizza, ...)
  • 📷 Add your own pizzas pictures for a given pizza provider
  • "Connect" with your github username (no need for auth) and display your profile picture
  • ➕ Select 1 pizza or more, remove if needed
  • 🔌 Realtime update with other people connected
  • 💸 Choose pizzas by size/price
  • 🔎 Choose pizzas by ingredients, even if the pizza provider website doesn't provide this feature!
  • 🔤 Search pizza(s) by name
  • 💫 Display an "easy order view" with pizzas grouped by their names
  • 📓 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)
  • ⏳ Set a countdown to limit the time of the order (from command line, realtime update on clients)
  • 🎮 Possibility to implement your own pizza provider (with an helper class to keep things easy)
  • 🔧 Possibility to implement new commands (with an helper class too)
Image Image
Enter your name or Github nickname.. ..and sign in.
Image Image
See connected people and their order(s).. ..or how a pizza looks like.
Image Image
Find your favourite pizza by name.. ...or by ingredients.
Image Image
Discover which ingredients are still available during a search. Access the easy order view before making a phone call.
Image Image
Admin can set the countdown.. ..but also the list of providers and choose one

Why ?

This project has been built to easily order pizzas with my former colleagues.

We usually ordered at l'Ormeau and thus, the backend part of the project is parsing this website.
(note: at the time I built the app, L'Ormeau website was like that)

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.

Is it just about Pizza ?

It could 🍕 ❤️ ... But not totally.

It's also a demo to show how to use Angular with the following stack :

  • @angular/cli
  • @angular/material
  • @angular/flex-layout
  • @ngrx/store
  • @ngrx/effects
  • @ngrx/entity
  • socket.io

And NestJs on the backend.

This 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!

How do I run it locally ?

Dev mode

Terminal 1 :

cd backend
yarn
yarn run start:watch

Then a prompt pizza-sync$ will appear. It's up to the admin to decide when the app should stop accepting orders. Admin 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. The 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.

Terminal 2 :

cd frontend
yarn
yarn start

You'll then be able to open the app at : http://localhost:4200.

Docker mode (for production use)

There are 2 Dockerfiles:

  • Dockerfile.api - Run the node server containing the API (HTTP + Socket)
  • Dockerfile.nginx - Run an nginx server which serves static assets directly and let HTTP + Sockets go through

The simplest way to run them both:

docker-compose up

If you do not want to use docker-compose, you can build and run them separately:

# terminal 1
docker build -f Dockerfile.api -t pizza-sync-api .
docker run -it --rm --name pizza-sync-api pizza-sync-api

# terminal 2
docker build -f Dockerfile.nginx -t pizza-sync-nginx .
docker run -it --rm -p 3000:80 --name pizza-sync-nginx --link pizza-sync-api:pizza-sync-api pizza-sync-nginx

Then just go to http://localhost:3000.

When using docker-compose, you'll see the logs of the API but also the logs from NGINX.
If you want to run commands on the API (countdown, providers, provider, etc) you need to do the following, into another terminal:

docker-compose up
docker ps
# look for the ID of the API container, let's call it API-ID
docker attach API-ID

Contribution

Any contribution is very welcome ✨ !

There are plenty of things to do with this small project. Here are some ideas :

  • [ ] Improve the layout (theme, responsiveness, logo, ...)
  • [ ] Angular universal ? Having a super fast init would be awesome !
  • [ ] Create a PWA with at least a service worker to cache the assets
  • [ ] Add mocks to run the app without the backend
  • [ ] Deploy the app on Github pages (needs mocks first)

You can also take a look into the issues and pick up one which is not already assigned.


Image Pizza-Sync logos have been designed by Happyksu!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].