{"id":27249571,"url":"https://github.com/coslynx/giftify-sweet-reminders","last_synced_at":"2026-04-09T17:07:36.585Z","repository":{"id":287176179,"uuid":"963853169","full_name":"coslynx/giftify-sweet-reminders","owner":"coslynx","description":"Daily reminders ensure you never forget a sweet surprise... Created at https://coslynx.com","archived":false,"fork":false,"pushed_at":"2025-04-10T10:34:08.000Z","size":47,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-11T00:18:05.415Z","etag":null,"topics":["code-generation","coslynx","couples-app","css3","daily-surprise","developer-tools","devops","expressjs","full-stack","gift-ideas","html5","javascript","love-notes","machine-learning","mongodb","mvp","nodejs","personal-reminders","relationship-goals","reminders"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/coslynx.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":"2025-04-10T10:03:55.000Z","updated_at":"2025-04-10T10:34:11.000Z","dependencies_parsed_at":"2025-04-10T11:38:26.625Z","dependency_job_id":"3c60b6b0-b510-4a71-af0e-84edf07ecad3","html_url":"https://github.com/coslynx/giftify-sweet-reminders","commit_stats":null,"previous_names":["coslynx/giftify-sweet-reminders"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coslynx%2Fgiftify-sweet-reminders","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coslynx%2Fgiftify-sweet-reminders/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coslynx%2Fgiftify-sweet-reminders/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coslynx%2Fgiftify-sweet-reminders/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coslynx","download_url":"https://codeload.github.com/coslynx/giftify-sweet-reminders/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248317721,"owners_count":21083530,"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":["code-generation","coslynx","couples-app","css3","daily-surprise","developer-tools","devops","expressjs","full-stack","gift-ideas","html5","javascript","love-notes","machine-learning","mongodb","mvp","nodejs","personal-reminders","relationship-goals","reminders"],"created_at":"2025-04-11T00:18:10.176Z","updated_at":"2025-12-30T20:22:00.685Z","avatar_url":"https://github.com/coslynx.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv class=\"hero-icon\" align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/PKief/vscode-material-icon-theme/ec559a9f6bfd399b82bb44393651661b08aaf7ba/icons/folder-markdown-open.svg\" width=\"100\" /\u003e\n\u003c/div\u003e\n\n\u003ch1 align=\"center\"\u003e\nsweet-surprise-reminders\n\u003c/h1\u003e\n\u003ch4 align=\"center\"\u003eA simple, personal web app to create and manage sweet reminders, helping you make your girlfriend's day special, every day.\u003c/h4\u003e\n\u003ch4 align=\"center\"\u003eDeveloped with the software and tools below.\u003c/h4\u003e\n\u003cdiv class=\"badges\" align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Framework-React%20(Vite)-blue\" alt=\"React via Vite\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/UI%20Library-Chakra%20UI-teal\" alt=\"Chakra UI\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Backend-Firebase%20(BaaS)-orange\" alt=\"Firebase BaaS\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Language-JavaScript-yellow\" alt=\"JavaScript\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"badges\" align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/last-commit/coslynx/giftify-sweet-reminders?style=flat-square\u0026color=5D6D7E\" alt=\"git-last-commit\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/commit-activity/m/coslynx/giftify-sweet-reminders?style=flat-square\u0026color=5D6D7E\" alt=\"GitHub commit activity\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/languages/top/coslynx/giftify-sweet-reminders?style=flat-square\u0026color=5D6D7E\" alt=\"GitHub top language\" /\u003e\n\u003c/div\u003e\n\n## 📑 Table of Contents\n- 📍 Overview\n- 📦 Features\n- 📂 Structure\n- 💻 Installation\n- 🏗️ Usage\n- 🌐 Hosting\n- 📄 License\n- 👏 Authors\n\n## 📍 Overview\n`sweet-surprise-reminders` is a focused Minimum Viable Product (MVP) designed as a personal, private web application. It allows a single user (e.g., a boyfriend) to create, manage, and view reminders intended to help them plan thoughtful gestures for their partner. Built with React, Chakra UI, and Firebase (Authentication \u0026 Firestore), it prioritizes simplicity, privacy, and ease of use for managing relationship-focused prompts.\n\n## 📦 Features\n|    | Feature            | Description                                                                                                        |\n|----|--------------------|--------------------------------------------------------------------------------------------------------------------|\n| 🔑 | **Authentication** | Secure user login via Firebase Authentication (Email/Password). Ensures reminders are private to the registered user. |\n| ⚙️ | **Architecture**   | Frontend-focused Single Page Application (SPA) using React with Vite. Leverages Firebase BaaS (Backend-as-a-Service) for auth and database. Follows component-based structure. |\n| 📄 | **Documentation**  | Includes this README providing an overview, setup guide, usage instructions, and technical details. Code includes JSDoc comments. |\n| 🔗 | **Dependencies**   | Key dependencies include `react`, `react-router-dom`, `@chakra-ui/react`, and `firebase`. Managed via `npm`. |\n| ✨ | **UI/UX**          | Clean, responsive interface built with Chakra UI. Focuses on intuitive reminder management (CRUD operations via modals/forms). Includes loading states and feedback toasts. |\n| 💾 | **Data Persistence**| Reminders (text, date) are securely stored per user in Firebase Firestore. Service layer abstracts Firestore interactions. |\n| 🧩 | **Modularity**     | Code is organized into components, pages, services, and contexts for better maintainability and separation of concerns. |\n| ⚡️  | **Performance**    | Vite provides fast development server and optimized production builds. React's virtual DOM ensures efficient UI updates. Firebase interactions are asynchronous. |\n| 🔐 | **Security**       | Relies on Firebase Authentication for secure login and Firestore Security Rules (required setup) to ensure data privacy per user. Sensitive keys managed via `.env`. |\n| 🔀 | **Version Control**| Utilizes Git for version control, hosted on GitHub. |\n| 🔌 | **Integrations**   | Direct integration with Firebase SDK for Authentication and Firestore database operations. |\n| 🚀 | **Deployment**     | Designed for easy deployment using Firebase Hosting. |\n\n## 📂 Structure\n```text\n{\n  \"package.json\": \"...\",\n  \".env\": \"...\",\n  \"vite.config.js\": \"...\",\n  \"src\": {\n    \"main.jsx\": \"...\",\n    \"config\": {\n      \"firebase.js\": \"...\",\n      \"chakraTheme.js\": \"...\"\n    },\n    \"contexts\": {\n      \"AuthContext.jsx\": \"...\"\n    },\n    \"services\": {\n      \"authService.js\": \"...\",\n      \"reminderService.js\": \"...\"\n    },\n    \"components\": {\n      \"Navbar.jsx\": \"...\",\n      \"LoadingSpinner.jsx\": \"...\",\n      \"ReminderList.jsx\": \"...\",\n      \"ReminderItem.jsx\": \"...\",\n      \"ReminderForm.jsx\": \"...\"\n    },\n    \"pages\": {\n      \"LoginPage.jsx\": \"...\",\n      \"DashboardPage.jsx\": \"...\"\n    },\n    \"utils\": {\n      \"helpers.js\": \"...\"\n    },\n    \"styles\": {\n      \"global.css\": \"...\"\n    },\n    \"App.jsx\": \"...\"\n  },\n  \"startup.sh\": \"...\",\n  \"commands.json\": \"...\",\n  \"public\": {\n    \"index.html\": \"...\",\n    \"favicon.ico\": \"...\"\n  },\n  \"README.md\": \"...\",\n  \".gitignore\": \"...\"\n}\n```\n\u003e [!NOTE]\n\u003e The full file content is omitted here for brevity. Refer to the project files for complete code.\n\n## 💻 Installation\n  \u003e [!WARNING]\n  \u003e ### 🔧 Prerequisites\n  \u003e - **Node.js**: Version 18 or higher recommended.\n  \u003e - **npm**: Version 8 or higher (usually included with Node.js).\n  \u003e - **Firebase Project**: You need a Firebase project set up.\n  \u003e   - Enable **Authentication** (Email/Password provider).\n  \u003e   - Enable **Firestore Database**. Create it in **Production mode** (this sets up stricter default security rules).\n\n  ### 🚀 Setup Instructions\n  1.  **Clone the repository**:\n      ```bash\n      git clone https://github.com/coslynx/giftify-sweet-reminders.git\n      cd giftify-sweet-reminders\n      ```\n  2.  **Install dependencies**:\n      ```bash\n      npm install\n      ```\n  3.  **Configure environment variables**:\n      *   Create a `.env` file in the project root. You can copy the structure from `.env` if an example exists, or create it manually.\n          ```bash\n          # Example: If .env.example exists\n          # cp .env.example .env\n          # Otherwise, create .env manually\n          touch .env\n          ```\n      *   Add your Firebase project configuration details to the `.env` file. Replace the placeholders:\n          ```dotenv\n          # .env\n          VITE_FIREBASE_API_KEY=YOUR_API_KEY_HERE\n          VITE_FIREBASE_AUTH_DOMAIN=YOUR_AUTH_DOMAIN_HERE\n          VITE_FIREBASE_PROJECT_ID=YOUR_PROJECT_ID_HERE\n          VITE_FIREBASE_STORAGE_BUCKET=YOUR_STORAGE_BUCKET_HERE\n          VITE_FIREBASE_MESSAGING_SENDER_ID=YOUR_MESSAGING_SENDER_ID_HERE\n          VITE_FIREBASE_APP_ID=YOUR_APP_ID_HERE\n          ```\n          \u003e [!TIP]\n          \u003e You can find these values in your Firebase project settings: Project settings \u003e General \u003e Your apps \u003e Web app \u003e SDK setup and configuration \u003e Config.\n\n  4.  **Set up Firestore Security Rules**:\n      *   Navigate to your Firebase project console -\u003e Firestore Database -\u003e Rules.\n      *   Paste the following **basic** rules to allow authenticated users to read/write their own reminders. **Review and adapt these rules based on your security needs.**\n          ```firestore-rules\n          rules_version = '2';\n          service cloud.firestore {\n            match /databases/{database}/documents {\n              // Allow reads and writes only by the authenticated user who owns the data\n              match /users/{userId}/reminders/{reminderId} {\n                allow read, write: if request.auth != null \u0026\u0026 request.auth.uid == userId;\n              }\n              // Deny reads/writes to the 'users' collection itself\n              match /users/{userId} {\n                allow read, write: if false;\n              }\n            }\n          }\n          ```\n      *   Click **Publish**.\n\n## 🏗️ Usage\n### 🏃‍♂️ Running the MVP\n1.  **Start the development server**:\n    ```bash\n    npm run dev\n    ```\n    This command starts the Vite development server, typically accessible at `http://localhost:5173` (the port might vary).\n\n2.  **Access the application**:\n    *   Open your web browser and navigate to the URL provided by Vite (e.g., `http://localhost:5173`).\n    *   You will be redirected to the Login page.\n    \u003e [!NOTE]\n    \u003e Since Firebase Authentication doesn't have a default user creation UI, you'll need to either:\n    \u003e a) Manually create a test user in the Firebase Console (Authentication -\u003e Users -\u003e Add user).\n    \u003e b) Temporarily modify the app to include a registration feature (outside the current MVP scope).\n\n3.  **Use the App**:\n    *   Log in with the credentials of the user you created in Firebase.\n    *   You'll be taken to the Dashboard.\n    *   Use the \"Add Reminder\" button to create new reminders (text and date).\n    *   Click the edit or delete icons on existing reminders to manage them.\n\n\u003e [!TIP]\n\u003e ### ⚙️ Configuration\n\u003e - All Firebase connectivity settings are configured via the `.env` file in the project root. Ensure the `VITE_FIREBASE_*` variables are correct.\n\u003e - UI theme customizations (colors, fonts) can be adjusted in `src/config/chakraTheme.js`.\n\u003e - Firestore Security Rules in the Firebase Console control data access permissions.\n\n### 📚 Examples\nThe primary usage involves interacting with the UI:\n\n1.  **Login**: Enter your Firebase user credentials on the Login page.\n2.  **View Dashboard**: See a list of upcoming reminders sorted by date.\n3.  **Add Reminder**: Click \"Add Reminder\", fill in the text and select a date in the modal form, then click \"Save Reminder\".\n4.  **Edit Reminder**: Click the edit icon on a reminder, modify the text or date in the modal, and click \"Save Reminder\".\n5.  **Delete Reminder**: Click the delete icon on a reminder.\n6.  **Logout**: Click the \"Logout\" button in the navigation bar.\n\n## 🌐 Hosting\n### 🚀 Deployment Instructions\nThis application is well-suited for deployment using **Firebase Hosting**.\n\n#### Deploying to Firebase Hosting\n1.  **Install Firebase CLI**: If you haven't already, install the Firebase CLI globally:\n    ```bash\n    npm install -g firebase-tools\n    ```\n2.  **Login to Firebase**:\n    ```bash\n    firebase login\n    ```\n3.  **Initialize Firebase in your project**: (If you haven't already)\n    ```bash\n    firebase init\n    ```\n    *   Select **Hosting: Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys**.\n    *   Choose **Use an existing project** and select your Firebase project.\n    *   For the public directory, enter **`dist`**. (Vite builds the production assets into the `dist` folder by default).\n    *   Configure as a **single-page app (rewrite all urls to /index.html)**: Answer **Yes**.\n    *   Set up automatic builds and deploys with GitHub?: Choose **No** for manual deployment (or Yes if you want to configure CI/CD).\n\n4.  **Build the application for production**:\n    ```bash\n    npm run build\n    ```\n    This command creates the optimized production build in the `dist` folder.\n\n5.  **Deploy to Firebase Hosting**:\n    ```bash\n    firebase deploy --only hosting\n    ```\n    After deployment, the Firebase CLI will provide you with the URL where your app is live.\n\n### 🔑 Environment Variables\nFirebase Hosting automatically handles serving the static files built by Vite. The `VITE_FIREBASE_*` environment variables defined in your `.env` file are **embedded into the JavaScript bundle during the `npm run build` process**.\n\nEnsure your `.env` file contains the correct production Firebase project credentials **before** running `npm run build` for deployment.\n\n**Required Variables for Build:**\n*   `VITE_FIREBASE_API_KEY`\n*   `VITE_FIREBASE_AUTH_DOMAIN`\n*   `VITE_FIREBASE_PROJECT_ID`\n*   `VITE_FIREBASE_STORAGE_BUCKET`\n*   `VITE_FIREBASE_MESSAGING_SENDER_ID`\n*   `VITE_FIREBASE_APP_ID`\n\n## 📜 API Documentation\nThis MVP is primarily a frontend application that interacts directly with Firebase services (Authentication and Firestore) using the Firebase JavaScript SDK. There are **no custom backend API endpoints** exposed by this application itself.\n\n### 🔍 Endpoints\nN/A - All data operations are performed via the Firebase SDK within the frontend code (`src/services/reminderService.js`) targeting Firestore.\n\n### 🔒 Authentication\nAuthentication is handled by Firebase Authentication:\n1.  Users log in via the UI using Email and Password.\n2.  The `AuthContext` manages the user's authentication state using `onAuthStateChanged`.\n3.  The `currentUser.uid` is used by the `reminderService.js` to scope Firestore database operations (create, read, update, delete) to the logged-in user's data.\n4.  Access control is enforced by **Firestore Security Rules** configured in the Firebase Console.\n\n### 📝 Examples\nN/A - No direct API calls. See the `src/services/reminderService.js` file for examples of how the application interacts with Firestore using the Firebase SDK.\n\n\u003e [!NOTE]\n\u003e ## 📜 License \u0026 Attribution\n\u003e\n\u003e ### 📄 License\n\u003e This Minimum Viable Product (MVP) is licensed under the [GNU AGPLv3](https://choosealicense.com/licenses/agpl-3.0/) license.\n\u003e\n\u003e ### 🤖 AI-Generated MVP\n\u003e This MVP was entirely generated using artificial intelligence through [CosLynx.com](https://coslynx.com).\n\u003e\n\u003e No human was directly involved in the coding process of the repository: giftify-sweet-reminders\n\u003e\n\u003e ### 📞 Contact\n\u003e For any questions or concerns regarding this AI-generated MVP, please contact CosLynx at:\n\u003e - Website: [CosLynx.com](https://coslynx.com)\n\u003e - Twitter: [@CosLynxAI](https://x.com/CosLynxAI)\n\n\u003cp align=\"center\"\u003e\n  \u003ch1 align=\"center\"\u003e🌐 CosLynx.com\u003c/h1\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eCreate Your Custom MVP in Minutes With CosLynxAI!\u003c/em\u003e\n\u003c/p\u003e\n\u003cdiv class=\"badges\" align=\"center\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Developers-Drix10,_Kais_Radwan-red\" alt=\"\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Website-CosLynx.com-blue\" alt=\"\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Backed_by-Google,_Microsoft_\u0026_Amazon_for_Startups-red\" alt=\"\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Finalist-Backdrop_Build_v4,_v6-black\" alt=\"\"\u003e\n\u003c/div\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoslynx%2Fgiftify-sweet-reminders","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoslynx%2Fgiftify-sweet-reminders","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoslynx%2Fgiftify-sweet-reminders/lists"}