{"id":21377205,"url":"https://github.com/greetclock/parts","last_synced_at":"2025-07-13T10:31:23.583Z","repository":{"id":41275510,"uuid":"508978511","full_name":"greetclock/parts","owner":"greetclock","description":"To-Do list example that follows Clean Architecture. Big ideas in a small project.","archived":false,"fork":false,"pushed_at":"2022-08-22T16:01:34.000Z","size":1420,"stargazers_count":15,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T09:02:15.318Z","etag":null,"topics":["angular","clean-architecture","example","monorepo","typescript"],"latest_commit_sha":null,"homepage":"https://parts.alexeykarpov.com/","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/greetclock.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}},"created_at":"2022-06-30T07:31:56.000Z","updated_at":"2024-02-23T09:23:56.000Z","dependencies_parsed_at":"2022-07-13T15:29:43.588Z","dependency_job_id":null,"html_url":"https://github.com/greetclock/parts","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/greetclock/parts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greetclock%2Fparts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greetclock%2Fparts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greetclock%2Fparts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greetclock%2Fparts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/greetclock","download_url":"https://codeload.github.com/greetclock/parts/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greetclock%2Fparts/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265128233,"owners_count":23715621,"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":["angular","clean-architecture","example","monorepo","typescript"],"created_at":"2024-11-22T09:19:35.325Z","updated_at":"2025-07-13T10:31:23.179Z","avatar_url":"https://github.com/greetclock.png","language":"TypeScript","readme":"# Parts\n\nDemonstration of clean architecture in the frontend. This is a small example project that follows good practices suitable for larger codebases. I wrote an [article](https://blog.alexeykarpov.com/clean-architecture-in-frontend) to explain the main concepts I use here.\n\n![GitHub Workflow Status](https://img.shields.io/github/workflow/status/greetclock/parts/CI?style=flat-square)\n![Netlify](https://img.shields.io/netlify/72dae1a2-06a4-40dc-be5f-5aa2654f0965?style=flat-square)\n\n## Running locally\n\nThis project was generated using [Nx](https://nx.dev). That's a usefull tool for managing large-scale frontend applications. At the same time, it's suitable for smaller projects too. It supports Angular, React, and several backend frameworks too. You can install nx CLI or use it by calling `yarn nx ...`.\n\n- `yarn install` to install dependencies\n- `yarn nx serve parts` to run the main app from `apps/parts`\n\nYou can run tests with `yarn nx run \u003clib or app name\u003e:test`. For example: `yarn nx run todos:test` or `yarn nx run todos-data:test`.\n\n## Project structure\n\nThere are `apps` and `libs`. Apps aren't supposed to contain almost any logic, and their main job is to bring features or libs together. Libs contain all the fun. It can be almost everything:\n\n- Full feature for an application like `todos` library\n- Headless data library that can be re-used by several features: `todos-data`\n- Very small helper library to handle basic initialization logic for a feature: `todos-registry`\n- There even can be code that doesn't go to the build. It still can help with testing: `test-helpers`.\n\nOther typical packages are UI libraries, utility functions, and classic libraries if you build them in-house.\n\n## What's next?\n\nIf you are interested in learning more, I encourage you to read the source code, run it locally and perhaps play with the code. You can also read the [article](https://blog.alexeykarpov.com/clean-architecture-in-frontend) where I explain the approach.\n\nAuthor: [Alexey Karpov](https://alexeykarpov.com).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreetclock%2Fparts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgreetclock%2Fparts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreetclock%2Fparts/lists"}