{"id":15059703,"url":"https://github.com/cod1ng-earth/event-web-store","last_synced_at":"2026-01-03T01:03:24.720Z","repository":{"id":57491141,"uuid":"203355075","full_name":"cod1ng-earth/event-web-store","owner":"cod1ng-earth","description":null,"archived":false,"fork":false,"pushed_at":"2019-10-10T16:23:13.000Z","size":722,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-01-21T19:48:36.985Z","etag":null,"topics":["elm","elm-lang","event-sourcing","event-store","eventstore","go","golang","kafka"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cod1ng-earth.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}},"created_at":"2019-08-20T10:38:23.000Z","updated_at":"2020-05-31T14:51:05.000Z","dependencies_parsed_at":"2022-08-30T03:51:50.617Z","dependency_job_id":null,"html_url":"https://github.com/cod1ng-earth/event-web-store","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cod1ng-earth%2Fevent-web-store","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cod1ng-earth%2Fevent-web-store/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cod1ng-earth%2Fevent-web-store/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cod1ng-earth%2Fevent-web-store/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cod1ng-earth","download_url":"https://codeload.github.com/cod1ng-earth/event-web-store/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243681083,"owners_count":20330155,"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":["elm","elm-lang","event-sourcing","event-store","eventstore","go","golang","kafka"],"created_at":"2024-09-24T22:46:52.466Z","updated_at":"2026-01-03T01:03:24.677Z","avatar_url":"https://github.com/cod1ng-earth.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# event driven web shop\n\naka Event Thingy Store\n\n## setup in docker\n\n``` bash\nmake setup\n```\n\n## setup on host\n\nTerminal 1\n\n``` bash\ncd shared\nmake run\n```\n\nTerminal 2\n\n``` bash\ncd backend\nmake import\nmake run\n```\n\nTerminal 3\n\n``` bash\ncd frontend\nmake run\n```\n\n## Required tools for development\n\n- golang\n- air https://github.com/cosmtrek/air\n- elm\n- elm-live\n- protoc\n- protoc-gen-elm https://www.npmjs.com/package/protoc-gen-elm\n- docker\n\n## Features\n\n- automatic rebuild backend\n- automatic rebuild frontend\n- wait free reads\n- removed rw lock\n- load all data before starting to serve requests\n\n## Rules\n\n- keep read short\n- all state exists as persisted event / kafka is the only source of truth\n- avoid (syncronous) network calls\n- minimize overhead in data flow, data access, code structure\n\n## Roadmap\n\nsync frontend\n\n- websocket\n- localstorage\n- tab open\n\nbackend\n\n- extract simba\n  - [DONE] lock: exclusive, sharedread, waitfree\n  - [SKIP] serialize: json, protobuf\n  - [DONE] configure: massage wrapper\n  - [DONE] processing: batch \u0026 finalize vs single-step\n  - batch only during start vs dynamic selection\n  - [DONE] sync to other contexts before processing commands\n- extend simba to create bridges\n  - share events between contexts\n- CORS\n  - configurable api domain in frontend\n  - configurable spa domain in backend\n  - http handler wrapper for CORS setup\n- production docker image\n- limit cpu and memory use locally\n- remove .uuid\n- [DONE] use context specific data structs\n- [DONE] generalize context\n- tests for handlers * cqrs \u0026 context\n- [DONE] context with swapable model \u0026 read-write lock\n- liveness probe / readiness probe\n  - check kafka\n  - remember last connection and let that be the test\n  - the processor needs to signal, that it is stuck (msg unknown)\n- /metrics endpoint for prometheus\n  - add model size, writes, writetime, readtime, reads, handler calls to metrics\n  - hook into sarama metrics to expose\n- add timeouts \u0026 retries \u0026 exponential backoff \u0026 shedding \u0026 circuitbreaking \u0026 avoid thundering heard\n- ensure ordered cart is exactly the cart shown in the browser\n- better startup\n  - snapshots\n  - add a confirmation email\n  - when triggering an sideeffect, then ensure to do this only once\n  - after dirty shutdown wait for ip ttl\n- use https://godoc.org/github.com/golang-collections/go-datastructures/slice/skip#SkipList.ByPosition\n- debug\n  - tracing via jaeger\n  - debugger local\n  - debug prod system\n  - cpu \u0026 memory profiler\n  - browser events in kafka\n  - copy prod events to local\n\nfrontend\n\n- production image\n- remove .uuid\n- use int32 everywhere https://package.elm-lang.org/packages/eriktim/elm-protocol-buffers/latest/#known-limitations\n- use less \u0026 cleanup css classes from html elm\n- [DONE] use protobuf / remove json\n- [DONE] use modules\n- use urls \u0026 links\n- only process results matching the current model\n- configure backend url\n- tests\n- add timeouts \u0026 retries \u0026 exponential backoff \u0026 shedding \u0026 circuitbreaking \u0026 avoid thundering heard\n\ngeneral\n\n- create an uneasy environment https://github.com/Netflix/SimianArmy/tree/master/src/main/resources/scripts\n- e2e tests\n- add pim\n- add fulfilment\n- add cms\n- add search\n\n## Maybe later (stick to basics and prove of concept first)\n\n- tilt\n\n## Failed ideas\n\n- use arc cache to skip marshal from struct to json\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcod1ng-earth%2Fevent-web-store","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcod1ng-earth%2Fevent-web-store","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcod1ng-earth%2Fevent-web-store/lists"}