{"id":26720875,"url":"https://github.com/oxcened/my-order","last_synced_at":"2025-04-14T05:51:49.746Z","repository":{"id":153948855,"uuid":"527315858","full_name":"oxcened/my-order","owner":"oxcened","description":"A React application designed for group food order tracking, enabling users to export daily summaries to Google Sheets.","archived":false,"fork":false,"pushed_at":"2024-04-03T19:06:31.000Z","size":1364,"stargazers_count":32,"open_issues_count":1,"forks_count":9,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-27T19:42:57.748Z","etag":null,"topics":["css","firebase","react","tailwindcss","typescript","vitejs"],"latest_commit_sha":null,"homepage":"https://medium.com/@alen.ajam/how-i-took-control-of-my-companys-lunchtime-with-an-app-f6d70c31cb89","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/oxcened.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}},"created_at":"2022-08-21T20:11:15.000Z","updated_at":"2023-12-03T12:25:51.000Z","dependencies_parsed_at":"2025-03-27T19:47:23.603Z","dependency_job_id":null,"html_url":"https://github.com/oxcened/my-order","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxcened%2Fmy-order","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxcened%2Fmy-order/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxcened%2Fmy-order/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxcened%2Fmy-order/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oxcened","download_url":"https://codeload.github.com/oxcened/my-order/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248830388,"owners_count":21168272,"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":["css","firebase","react","tailwindcss","typescript","vitejs"],"created_at":"2025-03-27T19:34:43.702Z","updated_at":"2025-04-14T05:51:49.720Z","avatar_url":"https://github.com/oxcened.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MyOrder 🍝🍛🍲\n\n[![medium story](https://img.shields.io/badge/Medium-Story-%23000?logo=medium)](https://medium.com/@alen.ajam/how-i-took-control-of-my-companys-lunchtime-with-an-app-f6d70c31cb89)\n[![repository license](https://img.shields.io/github/license/oxcened/my-order)](https://github.com/oxcened/my-order/blob/master/LICENSE.md)\n[![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen)](https://github.com/oxcened/my-order#contribute)\n[![latest release](https://img.shields.io/github/v/release/oxcened/my-order)](https://github.com/oxcened/my-order/releases)\n[![website status](https://img.shields.io/website?url=https%3A%2F%2Fmyorderdemo-80b12.web.app%2F)](https://myorderdemo-80b12.web.app/)\n[![tests status](https://github.com/oxcened/my-order/actions/workflows/test.yml/badge.svg)](https://github.com/oxcened/my-order/actions/workflows/test.yml)\n\nMyOrder allows groups to track food orders and export daily summaries to Google Sheets.\n\nRead the story behind it\non [Medium](https://medium.com/@alen.ajam/how-i-took-control-of-my-companys-lunchtime-with-an-app-f6d70c31cb89).\n\n![screenshot 1](https://miro.medium.com/max/300/1*Vk0dtrl4eHHAKmUhKkryMw.png)\n![screenshot 2](https://miro.medium.com/max/300/1*XsmPd_zjpHLbfnaIt0oROw.png)\n\n## Table of contents\n\n1. [Demo](#demo)\n2. [How to use](#how-to-use)\n3. [Tech stack](#tech-stack)\n4. [Modularization](#modularization)\n5. [Contribute](#contribute)\n6. [Roadmap](#roadmap)\n7. [Maintainers](#maintainers)\n8. [License](#license)\n\n## Demo\n\nYou can find a demo [here](https://myorderdemo-80b12.web.app/).\n\nYou may try out everything except for the `Submit to Google Sheets` feature located at `/summary`\nbecause [it costs money](https://media.tenor.com/5Z-o3OKSPFIAAAAC/adult-swim-monkey.gif).\n\n## How to use\n\n### Preliminary\n\n1. Clone on your machine using SSH or HTTPS.\n\n   Using SSH (suggested):\n\n   ```\n    git@github.com:oxcened/my-order.git\n    ```\n\n   Using HTTPS:\n\n    ```\n    git clone https://github.com/oxcened/my-order\n    ```\n\n1. Enter folder:\n\n    ```\n    cd my-order\n    ```\n\n1. Use the correct node version (`18.x`). I suggest using [nvm](https://github.com/nvm-sh/nvm). If you have that you can just run:\n\n    ```\n    nvm use\n    ```\n\n1. Install dependencies:\n\n    ```\n    npm i\n    ```\n\n### Run on your machine\n\n1. Use the correct node version (`18.x`). I suggest using [nvm](https://github.com/nvm-sh/nvm). If you have that you can just run:\n\n    ```\n    nvm use\n    ```\n\n1. Setup firebase:\n\n    1. This app is meant to work on top of a [Firebase](https://firebase.google.com/) project, so you should create your\n       own.\n    1. Initialize [Firestore](https://firebase.google.com/docs/firestore/quickstart).\n    1. [Obtain the project config object](https://firebase.google.com/docs/web/learn-more#config-object).\n    1. Create an `.env.development` file in the root of the project.\n    1. Place inside of it the config object like in `.env.example`.\n    1. Create a `.firebaserc` file in the root of the project like `.firebaserc.example`.\n\n1. Run the app:\n   \n    ```\n    npm run dev\n    ```\n\n### Build for production\n\n1. Use the correct node version (`18.x`). I suggest using [nvm](https://github.com/nvm-sh/nvm). If you have that you can just run:\n\n    ```\n    nvm use\n    ```\n\n1. Setup environment:\n\n   The same as the third step of [Run on your machine](#run-on-your-machine) applies, except the app will\n   use `.env.production` this time. Learn\n   more [here](https://vitejs.dev/guide/env-and-mode.html).\n\n1. Build the app:\n   \n    ```\n    npm run build\n    ```\n\n1. Run the app:\n   \n    ```\n    npm run preview\n    ```\n\n### Run tests\n\n1. Use the correct node version (`18.x`). I suggest using [nvm](https://github.com/nvm-sh/nvm). If you have that you can just run:\n\n    ```\n    nvm use\n    ```\n    \n1. Run tests:\n   \n    ```\n    npm run test\n    ```\n\n## Tech stack\n\n1. TypeScript v4.9\n2. Vite.js v4\n3. React v18\n4. React Router v6\n5. TailwindCSS\n6. Redux.js \u0026 Toolkit \u0026 RTK Query\n7. Jest \u0026 Testing Library\n\n## Modularization\n\nThe app is fully modularized.\n\nA module is a folder contained in [src/modules](src/modules) that takes responsibility for a single domain.\n\nEach module is a self-contained unit that takes care of every aspect of its domain.\n\nFrom UI to business logic: components, full page components, models, apis, slices, styles, and so on.\n\nA module must follow a set of rules:\n\n- Based on [Single responsibility principle](https://en.wikipedia.org/wiki/Single_responsibility_principle), a module should be responsible for at most one domain.\n- If only one module requires a resource, that resource should be contained in the module.\n- A module must contain an `index.ts` file in its root. This file represents the public interface of the module.\n- If another part of the codebase needs a module's resource, that resource may be exported from the `index.ts`.\n- A module should only expose what's strictly necessary, in order to abstract away the internal functioning of the module.\n- A module can import another module's resource, but only through its `index.ts`. For instance: `import { User } from '@/modules/auth'`.\n- Imports from outside of a module must always be done through its `index.ts`. This allows the internal functioning of a module to be changed without impacting usages from outside.\n- Imports from inside of the module must never use the `index.ts`. This is because the index is specifically meant for usage from outside.\n\nAny other file that doesn't belong to a specific module and is generally common to the project, is placed in [/src/common](/src/common).\n\n## Contribute\n\nContributions are most welcome!\n\n### Bug fixing\n\n1. Should you find a bug, please open an issue describing thoroughly what you encountered.\n2. If you'd like to fix an already existing issue, please leave a comment asking to work on it, so nobody else does.\n3. Once you get assigned an issue, you may work on it and then open a pull request\n   titled `fix: #[number of issue] [description of issue]`.\n\n### Feature requests\n\n1. If you have an idea to discuss with the community, feel free to open a discussion.\n1. For feature requests, you are free to open a new issue.\n1. All feature requests may not fit this project and will be subject to discussion!\n\n### Testing\n\nI suggest making sure all tests run successfully before submitting a PR (even though they are run anyway on GitHub).\n\nTo do so, run:\n\n```\nnpm run test\n```\n\n## Roadmap\n\n- [x] Migrate from Gatsby to React + Vite.\n- [ ] Improve the desktop UI/UX.\n- [ ] Version control the cloud function that exports reports to Google Sheets.\n- [ ] Improve the navigation UX.\n- [ ] Lazy load all routes.\n- [ ] Write unit tests on all components.\n- [ ] Add a page to consult orders of past days.\n- [ ] Add an admin panel:\n  - [ ] Add a page to manage restaurants and their menu.\n  - [ ] Allow to switch authentication method to one which is more secure\n\n## Maintainers\n\n- [oxcened](https://github.com/oxcened)\n\n## License\n\nMyOrder is [MIT licensed](https://github.com/oxcened/my-order/blob/master/LICENSE.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foxcened%2Fmy-order","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foxcened%2Fmy-order","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foxcened%2Fmy-order/lists"}