{"id":30648031,"url":"https://github.com/asif-faizal/markmywords","last_synced_at":"2025-08-31T05:05:29.453Z","repository":{"id":309525892,"uuid":"1036594214","full_name":"Asif-Faizal/MarkMyWords","owner":"Asif-Faizal","description":"MarkMyWords is a markdown-powered notes app for both solo creators and real-time collaborators. Create private notes just for yourself, or invite others to edit alongside you with instant updates. Perfect for jotting ideas, drafting docs, or sharing code snippets without waiting for someone to hit “refresh\"","archived":false,"fork":false,"pushed_at":"2025-08-19T11:24:41.000Z","size":421,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-31T05:03:53.403Z","etag":null,"topics":["flutter","golang","sqlite"],"latest_commit_sha":null,"homepage":"","language":"Dart","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/Asif-Faizal.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,"zenodo":null}},"created_at":"2025-08-12T09:56:00.000Z","updated_at":"2025-08-22T13:49:42.000Z","dependencies_parsed_at":"2025-08-12T12:25:56.791Z","dependency_job_id":null,"html_url":"https://github.com/Asif-Faizal/MarkMyWords","commit_stats":null,"previous_names":["asif-faizal/markmywords"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Asif-Faizal/MarkMyWords","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Asif-Faizal%2FMarkMyWords","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Asif-Faizal%2FMarkMyWords/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Asif-Faizal%2FMarkMyWords/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Asif-Faizal%2FMarkMyWords/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Asif-Faizal","download_url":"https://codeload.github.com/Asif-Faizal/MarkMyWords/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Asif-Faizal%2FMarkMyWords/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272940214,"owners_count":25018847,"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","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["flutter","golang","sqlite"],"created_at":"2025-08-31T05:03:55.033Z","updated_at":"2025-08-31T05:05:29.448Z","avatar_url":"https://github.com/Asif-Faizal.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MarkMyWords - Collaborative Note Taking App\n\nA collaborative note-taking application built with Go backend and Flutter frontend using Clean Architecture principles.\n\n## Project Structure\n\n```\nMarkMyWords/\n├── backend/                 # Go backend server\n│   ├── cmd/                # Application entry points\n│   ├── internal/           # Private application code\n│   ├── pkg/                # Public libraries\n│   └── configs/            # Configuration files\n└── frontend/               # Flutter frontend app\n    └── lib/\n        ├── core/           # Core functionality\n        │   ├── constants/  # App constants\n        │   ├── errors/     # Error handling\n        │   ├── network/    # Network services\n        │   ├── utils/      # Utility functions\n        │   └── di/         # Dependency injection\n        └── features/       # Feature modules\n            ├── auth/       # Authentication feature\n            ├── notes/      # Notes management feature\n            └── invites/    # Collaboration invites feature\n```\n\n## Clean Architecture Implementation\n\n### Frontend (Flutter)\n\nThe Flutter app follows Clean Architecture with the following layers:\n\n#### Core Layer\n- **Constants**: App-wide constants and configuration\n- **Errors**: Failure classes for error handling\n- **Network**: HTTP and WebSocket services\n- **Utils**: Utility functions and helpers\n- **DI**: Dependency injection using GetIt\n\n#### Feature Layer\nEach feature follows the same structure:\n\n```\nfeature/\n├── data/                   # Data layer\n│   ├── datasources/        # Remote and local data sources\n│   ├── models/            # Data models (JSON serializable)\n│   └── repositories/      # Repository implementations\n├── domain/                # Domain layer\n│   ├── entities/          # Business entities\n│   ├── repositories/      # Repository interfaces\n│   └── usecases/          # Business logic use cases\n└── presentation/          # Presentation layer\n    ├── bloc/              # BLoC state management\n    ├── pages/             # Screen widgets\n    └── widgets/           # Reusable UI components\n```\n\n#### State Management\n- **BLoC Pattern**: Each feature has its own BLoC for state management\n- **Events**: User actions and system events\n- **States**: UI states and data states\n- **Cubits**: Simple state management for basic features\n\n#### Key Features\n\n1. **Authentication Feature**\n   - Login/Register functionality\n   - JWT token management\n   - User session persistence\n\n2. **Notes Feature**\n   - Create, read, update, delete notes\n   - Private and collaborative notes\n   - Real-time collaboration via WebSocket\n   - Markdown support\n\n3. **Invites Feature**\n   - Send collaboration invites\n   - Accept/decline invitations\n   - User search functionality\n\n## Getting Started\n\n### Prerequisites\n- Go 1.21+\n- Flutter 3.8+\n- SQLite (for development)\n\n### Backend Setup\n```bash\ncd backend\ngo mod tidy\ngo run cmd/server/main.go\n```\n\n### Frontend Setup\n```bash\ncd frontend\nflutter pub get\ndart run build_runner build\nflutter run\n```\n\n## Architecture Benefits\n\n1. **Separation of Concerns**: Clear boundaries between layers\n2. **Testability**: Easy to unit test each layer independently\n3. **Maintainability**: Well-organized code structure\n4. **Scalability**: Easy to add new features\n5. **Dependency Inversion**: High-level modules don't depend on low-level modules\n\n## Dependencies\n\n### Backend\n- Gin (HTTP framework)\n- GORM (ORM)\n- JWT (Authentication)\n- Gorilla WebSocket (Real-time communication)\n\n### Frontend\n- flutter_bloc (State management)\n- dio (HTTP client)\n- web_socket_channel (WebSocket)\n- get_it (Dependency injection)\n- json_annotation (JSON serialization)\n\n## Development Guidelines\n\n1. **Feature Development**: Create new features in the `features/` directory\n2. **State Management**: Use BLoC for complex state, Cubit for simple state\n3. **Error Handling**: Use Failure classes for consistent error handling\n4. **Testing**: Write unit tests for use cases and BLoCs\n5. **Code Generation**: Run `dart run build_runner build` after model changes\n\n## License\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasif-faizal%2Fmarkmywords","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fasif-faizal%2Fmarkmywords","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasif-faizal%2Fmarkmywords/lists"}