{"adoption": {"forks": 181, "observed_at": "2026-08-28T04:04:54.482610+00:00", "stars": 1502}, "canonical_url": "https://ross.abutalabs.com/products/typescript-clean-architecture", "card": {"archived": false, "artifact_type": "learning-resource", "description": "It is my attempt to create Clean Architecture based application in TypeScript.", "domain": ["web-development", "backend", "developer-tools", "tutorials"], "enriched": true, "function": ["web-framework", "orm", "testing", "e2e-testing", "api-framework"], "health_score": 20, "homepage": null, "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["pvarentsov/typescript-clean-architecture"], "name": "pvarentsov/typescript-clean-architecture", "platform": [], "pushed_at": "2023-09-17T19:30:04+00:00", "repo": "pvarentsov/typescript-clean-architecture", "stars": 1502, "tags": ["clean-architecture", "nestjs", "typeorm", "boilerplate", "example-app", "domain-driven-design", "sample-project", "nodejs", "typescript", "docker"], "topics": ["clean-architecture", "typescript", "nestjs", "nodejs", "back-end", "typeorm", "clean-code", "unit-testing", "e2e-testing"], "urls": [], "use_cases": ["learn clean architecture in typescript", "example nestjs project structure", "typescript backend boilerplate with typeorm", "how to structure domain layer in nodejs", "reference app for unit and e2e testing in nestjs", "starting point for a clean architecture rest api"], "what_it_is": "A reference implementation of Clean Architecture in TypeScript, built as a fictional blogging application (IPoster) using NestJS and TypeORM. It serves as an educational template demonstrating layered architecture, unit testing, and e2e testing practices.", "when_to_avoid": ["you need a production-ready framework or library rather than an educational example", "your stack is not Node.js/TypeScript", "you need a minimal scaffold without opinionated architectural patterns"], "when_to_choose": ["you want a well-structured NestJS + TypeORM example following Clean Architecture principles", "you are learning how to separate domain, application, and infrastructure layers in TypeScript", "you need a tested reference backend to model your own project on"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/typescript-clean-architecture", "repo": "pvarentsov/typescript-clean-architecture", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.482610+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.507053+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09b8ae445fb27ae966b3330738e89874a8b1a07497f172df690ce3d8fc48dab7", "fetched_at": "2026-08-28T04:04:54.482610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pvarentsov/typescript-clean-architecture"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.482610+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.507053+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09b8ae445fb27ae966b3330738e89874a8b1a07497f172df690ce3d8fc48dab7", "fetched_at": "2026-08-28T04:04:54.482610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pvarentsov/typescript-clean-architecture"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.507053+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09b8ae445fb27ae966b3330738e89874a8b1a07497f172df690ce3d8fc48dab7", "fetched_at": "2026-08-28T04:04:54.482610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pvarentsov/typescript-clean-architecture"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.482610+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.482610+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.482610+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.507053+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09b8ae445fb27ae966b3330738e89874a8b1a07497f172df690ce3d8fc48dab7", "fetched_at": "2026-08-28T04:04:54.482610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pvarentsov/typescript-clean-architecture"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.482610+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.482610+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.507053+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09b8ae445fb27ae966b3330738e89874a8b1a07497f172df690ce3d8fc48dab7", "fetched_at": "2026-08-28T04:04:54.482610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pvarentsov/typescript-clean-architecture"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.482610+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.482610+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.482610+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.507053+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09b8ae445fb27ae966b3330738e89874a8b1a07497f172df690ce3d8fc48dab7", "fetched_at": "2026-08-28T04:04:54.482610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pvarentsov/typescript-clean-architecture"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.482610+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.482610+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.507053+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09b8ae445fb27ae966b3330738e89874a8b1a07497f172df690ce3d8fc48dab7", "fetched_at": "2026-08-28T04:04:54.482610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pvarentsov/typescript-clean-architecture"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.507053+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09b8ae445fb27ae966b3330738e89874a8b1a07497f172df690ce3d8fc48dab7", "fetched_at": "2026-08-28T04:04:54.482610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pvarentsov/typescript-clean-architecture"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.507053+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09b8ae445fb27ae966b3330738e89874a8b1a07497f172df690ce3d8fc48dab7", "fetched_at": "2026-08-28T04:04:54.482610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pvarentsov/typescript-clean-architecture"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:32:54.507053+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "09b8ae445fb27ae966b3330738e89874a8b1a07497f172df690ce3d8fc48dab7", "fetched_at": "2026-08-28T04:04:54.482610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pvarentsov/typescript-clean-architecture"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2248, "days_push": 1081, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}