{"id":24062150,"url":"https://github.com/faqihxdev/where-app","last_synced_at":"2026-04-12T13:04:32.721Z","repository":{"id":270537023,"uuid":"864080896","full_name":"faqihxdev/where-app","owner":"faqihxdev","description":"A PWA that streamlines lost and found, letting users post missing items, track found items, and reunite owners via list/map views.","archived":false,"fork":false,"pushed_at":"2025-01-01T04:22:34.000Z","size":5057,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-09T08:21:46.329Z","etag":null,"topics":["firebase","playwright","pwa","reactjs","tailwindcss","typescript","vite"],"latest_commit_sha":null,"homepage":"https://whereapp-io.web.app","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/faqihxdev.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":"2024-09-27T13:06:40.000Z","updated_at":"2025-01-01T04:22:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"6a761b29-5a0f-427d-b12a-1702d2fb1e99","html_url":"https://github.com/faqihxdev/where-app","commit_stats":null,"previous_names":["faqihxdev/where-app"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faqihxdev%2Fwhere-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faqihxdev%2Fwhere-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faqihxdev%2Fwhere-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faqihxdev%2Fwhere-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/faqihxdev","download_url":"https://codeload.github.com/faqihxdev/where-app/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240884418,"owners_count":19873336,"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":["firebase","playwright","pwa","reactjs","tailwindcss","typescript","vite"],"created_at":"2025-01-09T08:20:27.246Z","updated_at":"2026-04-12T13:04:32.643Z","avatar_url":"https://github.com/faqihxdev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📱 WhereApp - Lost and Found Application\n\n[![React](https://img.shields.io/badge/React-18.3-61DAFB?style=for-the-badge\u0026logo=react\u0026logoColor=black)](https://reactjs.org/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.5-3178C6?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n[![Vite](https://img.shields.io/badge/Vite-5.4-646CFF?style=for-the-badge\u0026logo=vite\u0026logoColor=white)](https://vitejs.dev/)\n[![Firebase](https://img.shields.io/badge/Firebase-10.13-FFCA28?style=for-the-badge\u0026logo=firebase\u0026logoColor=black)](https://firebase.google.com/)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind-3.4-38B2AC?style=for-the-badge\u0026logo=tailwind-css\u0026logoColor=white)](https://tailwindcss.com/)\n[![Chakra UI](https://img.shields.io/badge/Chakra_UI-2.8-319795?style=for-the-badge\u0026logo=chakra-ui\u0026logoColor=white)](https://chakra-ui.com/)\n[![Jotai](https://img.shields.io/badge/Jotai-2.10-black?style=for-the-badge)](https://jotai.org/)\n[![PWA](https://img.shields.io/badge/PWA-Ready-5A0FC8?style=for-the-badge\u0026logo=pwa\u0026logoColor=white)](https://web.dev/progressive-web-apps/)\n[![Playwright](https://img.shields.io/badge/Playwright-1.48-45ba4b?style=for-the-badge\u0026logo=playwright\u0026logoColor=white)](https://playwright.dev/)\n\n## 🤔 What is WhereApp?\n\nWhereApp is a Progressive Web Application (PWA) designed to streamline the lost and found process. It serves as a comprehensive platform for managing and tracking lost or found items, enabling users to efficiently report missing items, post found items, and facilitate the reunion of lost belongings with their rightful owners. The application combines both list and map views to create an intuitive and effective lost and found management system.\n\n\u003e This project is developed for the NTU Software Engineering Module Smart Nation Project.\n\n## 📸 Screenshots\n\n\u003cimg src=\".github/screenshot/demo.png\" alt=\"WhereApp Screenshots\" width=\"100%\"\u003e\n\n## 🌟 Features\n\n- **Lost Item Reporting**: Easily report lost items with detailed descriptions\n- **Found Item Posting**: Help others by posting items you've found\n- **Interactive Map View**: Visual representation of lost and found items\n- **Real-time Updates**: Instant notifications for potential matches\n- **Progressive Web App**: Install and use like a native app\n- **Responsive Design**: Works seamlessly on all devices\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Node.js (v14 or later)\n- npm or yarn\n- Git\n\n### Installation\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/faqihxdev/where-app.git\n   cd whereapp\n   ```\n\n2. Install dependencies:\n   ```bash\n   npm install\n   ```\n\n3. Set up Firebase:\n   - Create a Firebase project at https://console.firebase.google.com/\n   - Add a web app to your Firebase project\n   - Copy the Firebase configuration\n   - Create a `.env` file:\n     ```env\n     VITE_FIREBASE_API_KEY=your_api_key\n     VITE_FIREBASE_AUTH_DOMAIN=your_auth_domain\n     VITE_FIREBASE_PROJECT_ID=your_project_id\n     VITE_FIREBASE_STORAGE_BUCKET=your_storage_bucket\n     VITE_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id\n     VITE_FIREBASE_APP_ID=your_app_id\n     ```\n\n4. Start the development server:\n   ```bash\n   npm run dev\n   ```\n\n## 🛠️ Tech Stack\n\n### Frontend\n- React with TypeScript\n- Jotai for state management\n- Tailwind CSS \u0026 Chakra UI for styling\n- Heroicons for icons\n\n### Backend\n- Firebase (Firestore)\n\n### Development \u0026 Build\n- Vite\n- Firebase Hosting\n- Progressive Web App features\n  - Service Workers\n  - Manifest file\n\n## 📁 Project Structure\n\n```\n/src\n├── /components               # Reusable components\n│   └── ListingForm.tsx\n│   └── ...\n├── /stores                   # Jotai atoms and state management\n│   ├── imageStore.ts\n│   ├── listingStore.ts\n│   └── userStore.ts\n│   └── ...\n├── /utils                    # Utility functions\n│   └── ...\n├── /pages                    # Application pages\n│   ├── EditListingPage.tsx\n│   ├── PostPage.tsx\n│   ├── ViewListingPage.tsx\n│   └── ...\n├── /styles                   # Global styles and Tailwind config\n│   └── ...\n├── /types                    # TypeScript type definitions\n│   └── types.ts\n│   └── ...\n├── App.tsx                   # Main application component\n└── main.tsx                  # Entry point\n```\n\n## 👨‍💻 Development Guide\n\n### Development Workflow\n\n1. Create a feature branch:\n   ```bash\n   git checkout -b feature/your-feature-name\n   ```\n\n2. Make your changes following the project standards\n\n3. Test locally:\n   - Run development server\n   - Check for console errors\n   - Verify feature functionality\n   - Watch for the 🔥 (terminate if seen)\n\n4. Format and lint:\n   ```bash\n   npm run lint\n   npm run format\n   ```\n\n5. Commit and push:\n   ```bash\n   git commit -m \"type: description\"\n   git push origin feature/your-feature-name\n   ```\n\n### Important Development Notes\n\n- Use TypeScript for all new files and components.\n- Utilize Jotai for state management. Add new atoms and selectors in the appropriate files under the `/stores` directory.\n- Style components using Tailwind CSS classes. Use Chakra UI components for \"bigger components\".\n- Keep components small and focused. Extract reusable logic into custom hooks or utility functions.\n- Update `types.ts` when adding or modifying data structures.\n- Follow the existing patterns in `ListingForm.tsx`, `EditListingPage.tsx`, and `PostPage.tsx` when creating new forms or pages.\n- Use the `imageStore.ts` for handling image-related operations.\n- Refer to `listingStore.ts` and `userStore.ts` for examples of how to structure Firestore interactions.\n\n## 📝 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n\u003cdiv align=\"center\"\u003e\nMade with ❤️ by the WhereApp Team\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaqihxdev%2Fwhere-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffaqihxdev%2Fwhere-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaqihxdev%2Fwhere-app/lists"}