{"adoption": {"forks": 405, "observed_at": "2026-08-28T04:05:36.182193+00:00", "stars": 1786}, "canonical_url": "https://ross.abutalabs.com/products/contosouniversitydotnetcore-pages", "card": {"archived": false, "artifact_type": "learning-resource", "description": "With Razor Pages", "domain": ["web-development", "backend", "education", "developer-tools"], "enriched": true, "function": ["web-framework", "orm", "middleware", "form-handling"], "health_score": 68, "homepage": null, "language": "C#", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["jbogard/ContosoUniversityDotNetCore-Pages"], "name": "jbogard/ContosoUniversityDotNetCore-Pages", "platform": ["dotnet", "cross-platform"], "pushed_at": "2026-04-30T18:39:34+00:00", "repo": "jbogard/ContosoUniversityDotNetCore-Pages", "stars": 1786, "tags": ["razor-pages", "cqrs", "vertical-slice-architecture", "mediatr", "automapper", "entity-framework-core", "sample-application", "aspnet-core", "fluent-validation", "web-server"], "topics": [], "urls": [], "use_cases": ["learn vertical slice architecture in ASP.NET Core", "see how to structure CQRS with MediatR in a real app", "example of Razor Pages application with EF Core", "reference for organizing ASP.NET Core code by feature instead of layers", "study how to wire AutoMapper and Fluent Validation together", "starting point for a new .NET web application architecture"], "what_it_is": "A reference implementation of the Contoso University sample application built with ASP.NET Core Razor Pages on .NET 10. It demonstrates Jimmy Bogard's preferred architecture patterns including CQRS with MediatR, vertical slice architecture, AutoMapper, Fluent Validation, and Entity Framework Core.", "when_to_avoid": ["you need a production-ready starter template with auth, deployment, and multi-tenancy out of the box", "you prefer traditional layered/clean architecture conventions", "you are not working in the .NET ecosystem"], "when_to_choose": ["you want an opinionated, working example of vertical slice architecture in .NET", "you are learning CQRS/MediatR patterns from the library author himself", "you need a realistic Razor Pages codebase to study or base a project on"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/contosouniversitydotnetcore-pages", "repo": "jbogard/ContosoUniversityDotNetCore-Pages", "role": "main", "score": 68}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:36.182193+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:24:10.125521+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fceca4ee3eaa5ac75c36f9f135d0a7da57b765e8511e6cd4e4d8212d9e2c38e5", "fetched_at": "2026-08-28T04:05:36.182193+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jbogard/ContosoUniversityDotNetCore-Pages"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:36.182193+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:24:10.125521+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fceca4ee3eaa5ac75c36f9f135d0a7da57b765e8511e6cd4e4d8212d9e2c38e5", "fetched_at": "2026-08-28T04:05:36.182193+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jbogard/ContosoUniversityDotNetCore-Pages"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:24:10.125521+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fceca4ee3eaa5ac75c36f9f135d0a7da57b765e8511e6cd4e4d8212d9e2c38e5", "fetched_at": "2026-08-28T04:05:36.182193+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jbogard/ContosoUniversityDotNetCore-Pages"}], "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:05:36.182193+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:36.182193+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:36.182193+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:24:10.125521+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fceca4ee3eaa5ac75c36f9f135d0a7da57b765e8511e6cd4e4d8212d9e2c38e5", "fetched_at": "2026-08-28T04:05:36.182193+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jbogard/ContosoUniversityDotNetCore-Pages"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:36.182193+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:36.182193+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:24:10.125521+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fceca4ee3eaa5ac75c36f9f135d0a7da57b765e8511e6cd4e4d8212d9e2c38e5", "fetched_at": "2026-08-28T04:05:36.182193+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jbogard/ContosoUniversityDotNetCore-Pages"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:36.182193+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:36.182193+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:36.182193+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:24:10.125521+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fceca4ee3eaa5ac75c36f9f135d0a7da57b765e8511e6cd4e4d8212d9e2c38e5", "fetched_at": "2026-08-28T04:05:36.182193+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jbogard/ContosoUniversityDotNetCore-Pages"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:36.182193+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:36.182193+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:24:10.125521+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fceca4ee3eaa5ac75c36f9f135d0a7da57b765e8511e6cd4e4d8212d9e2c38e5", "fetched_at": "2026-08-28T04:05:36.182193+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jbogard/ContosoUniversityDotNetCore-Pages"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:24:10.125521+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fceca4ee3eaa5ac75c36f9f135d0a7da57b765e8511e6cd4e4d8212d9e2c38e5", "fetched_at": "2026-08-28T04:05:36.182193+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jbogard/ContosoUniversityDotNetCore-Pages"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:24:10.125521+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fceca4ee3eaa5ac75c36f9f135d0a7da57b765e8511e6cd4e4d8212d9e2c38e5", "fetched_at": "2026-08-28T04:05:36.182193+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jbogard/ContosoUniversityDotNetCore-Pages"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:24:10.125521+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fceca4ee3eaa5ac75c36f9f135d0a7da57b765e8511e6cd4e4d8212d9e2c38e5", "fetched_at": "2026-08-28T04:05:36.182193+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jbogard/ContosoUniversityDotNetCore-Pages"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 80, "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": 3116, "days_push": 125, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 68, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}