{"id":20298207,"url":"https://github.com/eyaadh/cafemenu","last_synced_at":"2025-04-11T12:51:43.084Z","repository":{"id":259522200,"uuid":"872943981","full_name":"eyaadh/cafeMenu","owner":"eyaadh","description":"Cafè Menu is a custom-built project for a close friend who runs a small cafè. The goal was to create a simple yet powerful application for managing an online menu, accepting customer orders, and streamlining internal workflows.","archived":false,"fork":false,"pushed_at":"2024-10-25T09:56:32.000Z","size":1056,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-25T09:11:22.938Z","etag":null,"topics":["cafe","headlessui","heroicons","javascript","menu","point-of-sale","tailwind","tyepscript","vuejs","vuejs3","vuelidate"],"latest_commit_sha":null,"homepage":"https://cafemenu.pages.dev/","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eyaadh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-10-15T10:47:03.000Z","updated_at":"2024-10-25T11:37:00.000Z","dependencies_parsed_at":"2024-10-26T06:56:08.409Z","dependency_job_id":"eca6ba6c-292f-48db-836e-1b22685eff7f","html_url":"https://github.com/eyaadh/cafeMenu","commit_stats":null,"previous_names":["eyaadh/cafemenu"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eyaadh%2FcafeMenu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eyaadh%2FcafeMenu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eyaadh%2FcafeMenu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eyaadh%2FcafeMenu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eyaadh","download_url":"https://codeload.github.com/eyaadh/cafeMenu/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248402741,"owners_count":21097347,"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":["cafe","headlessui","heroicons","javascript","menu","point-of-sale","tailwind","tyepscript","vuejs","vuejs3","vuelidate"],"created_at":"2024-11-14T16:07:26.784Z","updated_at":"2025-04-11T12:51:43.054Z","avatar_url":"https://github.com/eyaadh.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cafè Menu\n\nCafè Menu is a custom-built project for a close friend who runs a small cafè. The goal was to create a simple yet powerful application for managing an online menu, accepting customer orders, and streamlining internal workflows. Key features include:\n\n- **Menu Management**: Easily manage the cafè's menu, allowing customers to view items online.\n- **QR Code Integration**: Generate a QR code within the app that redirects users to the menu. This can be used on flyers or other promotional materials.\n- **Online Ordering**: Customers can place orders directly from the application.\n- **Order Management \u0026 Notifications**: The cafè staff can update the status of orders, with real-time notifications sent to a designated Telegram group.\n\nThe app is built with **Vue.js** and styled using **Tailwind CSS**, leveraging **Firebase** for authentication and Firestore for storing data. Environment variables store sensitive data such as API keys.\n\nHere's an example of the `.env` file configuration:\n\n```bash\nVITE_LOCAL_API_KEY=YOUR_FIREBASE_API_KEY\nVITE_LOCAL_AUTH_DOMAIN=your-app.firebaseapp.com  \nVITE_LOCAL_PROJECT_ID=your-app-id  \nVITE_LOCAL_STORAGE_BUCKET=your-app.appspot.com  \nVITE_LOCAL_MESSAGE_SENDER_ID=your-sender-id  \nVITE_LOCAL_APP_ID=your-app-id  \nVITE_LOCAL_BOT_TOKEN=your-telegram-bot-token  \nVITE_TELEGRAM_GROUP_ID=your-telegram-group-id\n```\n\n### Firestore Security Rules\n\nThe following security rules for Firestore are in place for this project, ensuring the appropriate permissions for reading, writing, and updating data in Firestore:\n\n```javascript\nrules_version = '2';\n\nservice cloud.firestore {\n  match /databases/{database}/documents {\n    match /products/{docId} {\n      // Allow anyone to read product documents\n      allow read: if true;\n\n      // Only authenticated users can create, update, or delete products\n      allow create, update, delete: if request.auth != null;\n    }\n    match /categories/{docId} {\n      // Allow anyone to read category documents\n      allow read: if true;\n\n      // Only authenticated users can create, update, or delete categories\n      allow create, update, delete: if request.auth != null;\n    }\n    match /reviews/{docId} {\n      // Allow anyone to read and create reviews\n      allow read, create: if true;\n\n      // Allow updates if \"restricted\" is false or if the user is authenticated\n      allow update: if resource.data.restricted != true || request.auth != null;\n\n      // Only authenticated users can delete reviews\n      allow delete: if request.auth != null;\n    }\n    match /orders/{docId} {\n      // Only authenticated users can read orders\n      allow read: if request.auth != null;\n\n      // Anyone can create an order\n      allow create: if true;\n\n      // Allow updates if 'restricted' is false, or only authenticated users can update when 'restricted' is true\n      allow update: if resource.data.restricted == false || (request.auth != null \u0026\u0026 resource.data.restricted == true);\n\n      // Only authenticated users can delete orders\n      allow delete: if request.auth != null;\n    }\n    match /systemSettings/{docId} {\n      // Only authenticated users can access system settings\n      allow read, create, update, delete: if request.auth != null;\n    }\n  }\n}\n```\n\nThe application is hosted on **Cloudflare Pages**: [Live Demo](https://cafemenu.pages.dev/)\n\n## Key Dependencies\n\nSome standout libraries and tools used in this project:\n\n- **Vue.js**: The progressive JavaScript framework.\n- **Tailwind CSS**: Utility-first CSS framework for rapid UI development.\n- **Pinia**: A lightweight store management solution for Vue.js.\n- **Firebase**: Used for authentication and Firestore to store orders.\n- **Headless UI \u0026 Heroicons**: Modern, accessible components and icons.\n- **Vuelidate**: Powerful form validation built specifically for Vue.\n- **VueUse**: Essential Vue Composition Utilities.\n- **QR Code**: Generates scannable QR codes for promotional use.\n- **HTML2Canvas**: Captures screenshots of web elements.\n- **Day.js**: A lightweight date manipulation library.\n\n## Project Setup\n\nTo get started locally:\n\n```sh\nnpm install\n```\n\n### Compile and Hot-Reload for Development\n\n```sh\nnpm run dev\n```\n\n### Type-Check, Compile, and Minify for Production\n\n```sh\nnpm run build\n```\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feyaadh%2Fcafemenu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feyaadh%2Fcafemenu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feyaadh%2Fcafemenu/lists"}