{"id":17551393,"url":"https://github.com/ttypic/note-app","last_synced_at":"2025-03-29T07:42:28.440Z","repository":{"id":180070864,"uuid":"664517111","full_name":"ttypic/note-app","owner":"ttypic","description":"Real-time Collaborative Notes Application","archived":false,"fork":false,"pushed_at":"2023-07-23T19:51:21.000Z","size":458,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-03T21:35:08.373Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/ttypic.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":"2023-07-10T06:48:42.000Z","updated_at":"2023-07-10T06:49:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"ea76297d-7f76-4f48-acd2-ce526726ec6b","html_url":"https://github.com/ttypic/note-app","commit_stats":null,"previous_names":["ttypic/note-app"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttypic%2Fnote-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttypic%2Fnote-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttypic%2Fnote-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ttypic%2Fnote-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ttypic","download_url":"https://codeload.github.com/ttypic/note-app/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246156011,"owners_count":20732357,"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":[],"created_at":"2024-10-21T04:45:45.355Z","updated_at":"2025-03-29T07:42:28.420Z","avatar_url":"https://github.com/ttypic.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Real-time Collaborative Notes Application\n\nThis is real-time collaborative notes proof-of-concept.\n\nThis monorepo has several modules:\n\n1. `server/` - monolithic Node.JS server, that communicate with clients through WebSocket\n   protocol\n2. `web/` - React-based client\n3. `androidApp/` - Android client\n4. `shared/` - shared library that can be used for iOS and Android (contains either pure Kotlin or\n   platform specific realization for each platform)\n5. `iosApp/` - iOS client (not implemented)\n\n## Overall architecture\n\nGlobal architecture based on:\n\n1. Event sourcing\n2. Command and query segregation (CQRS)\n3. Operation Transformation (OT)\n\n## Known limitations\n\n### Monolithic server\n\nRight know server is monolithic, uses in-memory queue and therefore isn't horizontally scalable.\nIt is probably OK if it has low traffic, up to 100 RPS.\n\nFortunately, because of server module structure it can be easily improved:\n\n1. in-memory queues can be easily replaced by persistent queues\n2. events processing can be easily extracted to separate server\n\nafter this improvements it can handle up to tens of thousands RPS.\n\nAt this point we can probably use any Message Broker, our team is familiar with,\nincluding Kafka. Probably Message Brokers, which implements AMQP will have better\nframework support.\n\nIf we want to handle millions RPS, Kafka will be one of the best choices, but we will\nneed to make some additional improvements on server side, because Database will become\na bottleneck.\n\n### Database\n\nRight now server uses in-memory Sqlite database, in order to start application easier.\nBut it can easily use any RDBMS.\n\n### Offline mode\n\nNote is not working offline, all offline changes can be lost.\nIt can be improve with some tweaks with how we store Note data.\nOr we can use CRDT data structures.\n\n### Monitoring and tests\n\nAlso server hasn't got any monitoring and any tests.\n\n## Installation\n\nJDK 11+ required.\n\nTo start the module, please take a look at the corresponding `README.md` file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fttypic%2Fnote-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fttypic%2Fnote-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fttypic%2Fnote-app/lists"}