{"id":15547728,"url":"https://github.com/ryu1kn/whatsdone","last_synced_at":"2026-02-23T12:54:26.270Z","repository":{"id":29447037,"uuid":"32983258","full_name":"ryu1kn/whatsdone","owner":"ryu1kn","description":"Take memos of what I (or we) have done today. Experimentation ground","archived":false,"fork":false,"pushed_at":"2025-03-28T22:14:53.000Z","size":4055,"stargazers_count":2,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-15T22:41:58.523Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/ryu1kn.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":"2015-03-27T11:49:29.000Z","updated_at":"2024-12-28T23:56:37.000Z","dependencies_parsed_at":"2023-02-16T03:45:58.296Z","dependency_job_id":"8129b983-cbef-409b-8af7-22fb1df55b37","html_url":"https://github.com/ryu1kn/whatsdone","commit_stats":{"total_commits":1060,"total_committers":2,"mean_commits":530.0,"dds":0.07735849056603772,"last_synced_commit":"a19a9c8059c4b7f8fb415496a118795d2e02f8c3"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryu1kn%2Fwhatsdone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryu1kn%2Fwhatsdone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryu1kn%2Fwhatsdone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryu1kn%2Fwhatsdone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryu1kn","download_url":"https://codeload.github.com/ryu1kn/whatsdone/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250488587,"owners_count":21438811,"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-02T13:10:12.583Z","updated_at":"2026-02-23T12:54:26.220Z","avatar_url":"https://github.com/ryu1kn.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![ryu1kn/whatsdone](https://github.com/ryu1kn/whatsdone/actions/workflows/whatsdone.yml/badge.svg)](https://github.com/ryu1kn/whatsdone/actions/workflows/whatsdone.yml)\n\n# What's Done\n\nPersonal activity tracker. Take memos of what I (or we) have done today.\n\nThis is my toy project that I experiment different technologies/tools I want to try.\n\n## Architecture\n\n```mermaid\nflowchart LR\n    %% ------------- Actor -----------------\n    user([User])\n\n    %% ------------- System boundary -------\n    subgraph whats_done[\"What's Done\"]\n        direction LR\n\n        subgraph auth[\"Authentication\"]\n            cognito[\"User auth\u003cbr/\u003e(Cognito)\"]\n        end\n\n        %% ----- Front‑end (static site) ----\n        subgraph frontend[\"Frontend\"]\n            route53_web[\"Routing\u003cbr/\u003e(Route 53)\"]\n            cloudfront_web[\"Content delivery\u003cbr/\u003e(CloudFront)\"]\n            s3_web[\"App\u003cbr/\u003e(S3. HTML/CSS/JS)\"]\n\n            route53_web --\u003e cloudfront_web --\u003e s3_web\n        end\n\n        %% ----- Back‑end (API) -------------\n        subgraph backend[\"Backend\"]\n            route53_api[\"Routing\u003cbr/\u003e(Route 53)\"]\n            cloudfront_api[\"Content delivery\u003cbr/\u003e(CloudFront)\"]\n            apigw[\"API\u003cbr/\u003e(API Gateway. Auth)\"]\n            lambda_fn[\"App\u003cbr/\u003e(Lambda)\"]\n            done_db[(Dones)]\n            user_db[(Users)]\n            xray[\"Tracing\u003cbr/\u003e(X-ray)\"]\n            cloudwatch_log[\"Logging\u003cbr/\u003e(CloudWatch)\"]\n\n            route53_api --\u003e cloudfront_api --\u003e apigw --\u003e lambda_fn\n            lambda_fn -- read/write --\u003e done_db\n            lambda_fn -- read/write --\u003e user_db\n        end\n    end\n\n    user --\u003e cognito\n    user --\u003e route53_web\n    user --\u003e route53_api\n```\n\n## Technology Stack\n\n- infrastructure\n  - ~~heroku + MongoDB~~\n  - ~~heroku + DynamoDB~~\n  - ~~AWS Elastic Beanstalk (deployed with `kumo`) + DynamoDB~~\n  - AWS API Gateway + Lambda + DynamoDB (all deployed with `kumo`) ⬅️ Now here\n    - with other components including: CloudFormation, CloudFront, Route53, X-Ray, Cognito, S3\n- backend\n  - ~~JavaScript~~ (deployed on AWS Lambda)\n  - TypeScript (deployed on AWS Lambda) ⬅️ Now here\n- frontend\n  - ~~JavaScript + React + flux~~\n  - ~~JavaScript + React + Redux~~\n  - TypeScript + React + Redux ⬅️ Now here\n\n## Continuous Integration / Continuous Delivery\n\nCommits to the `main` branch automatically goes to the production after the successful build/test execution.\nThis includes the changes to the infrastructure.\n\nFor CI/CD, What's Done uses [GitHub Actions](https://github.com/ryu1kn/whatsdone/actions).\nFor more information about CI setup, see its [README](./ci/README.md).\n\n### Partial build\n\nTo reduce the build time, What's Done CI leverages [Build Mate](https://www.npmjs.com/package/buildmate)\nto trigger commands that are relevant to files changed.\n\nCurrently, What's Done CI checks git commit range of the current build to find changed files.\nHowever, this is sometimes not what you want. To force the build to get the file list of\ndesired commit range, you can include `[COMMIT_RANGE:sha1...sha2]` in your commit message.\n\nNote that the actual commit used in the build is still `HEAD`. It is just to make the build\nto work on different file list.\n\n### Deploying entire system\n\nIf you want to deploy `prod` environment, you need to have `prod` config in modules then execute:\n\n```sh\n$ AWS_PROFILE=your-profile AWS_REGION=ap-southeast-2 ENV_NAME=prod ./deploy-system.sh\n```\n\n## Installing dev dependencies\n\nThis project uses [mise](https://github.com/jdx/mise) to install necessary dependencies.\n\n```sh\nmise trust\nmise install\n```\n\n## Test\n\n* Unit test: Backend/frontend modules have their own unit test.\n* Performance test: Written in Scala using Gatling. see its [README](./test/performance/README.md).\n* End-to-end test: Written in JavaScript. see its [README](./test/e2e/README.md).\n\n## Tools\n\n* Migrate done data from mongodb to dynamodb (written in Go). See its [README](./tools/copy-done-table/README.md).\n* What's Done API Client (written in Haskell). See its [README](./tools/api-client/README.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryu1kn%2Fwhatsdone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryu1kn%2Fwhatsdone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryu1kn%2Fwhatsdone/lists"}