feat(manascore): add Tier 2 ecosystem metrics

5 new metrics:
- Toast Consistency (100%) — all apps use shared toastStore
- Store Pattern (95%) — 176 Runes stores vs 9 old writable/readable
- Shared Types (62%) — shared-types imports vs local type files
- Dep Freshness (80%) — avg 37 deps per app
- Bundle Config (100%) — all apps have SvelteKit adapter

Ecosystem Health Score: 74/100 (19 metrics total)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-03-31 14:20:20 +02:00
parent 3b7b6c9761
commit 201819280e
3 changed files with 248 additions and 9 deletions

View file

@ -1,6 +1,6 @@
{
"generatedAt": "2026-03-31T12:12:26.680Z",
"overallScore": 72,
"generatedAt": "2026-03-31T12:18:59.699Z",
"overallScore": 74,
"scores": {
"sharedPackages": 90,
"iconConsistency": 89,
@ -15,7 +15,12 @@
"pwaSupport": 2,
"maintainability": 0,
"securityHeaders": 76,
"skeletonLoading": 76
"skeletonLoading": 76,
"toastConsistency": 100,
"storePattern": 95,
"sharedTypes": 62,
"depFreshness": 80,
"bundleConfig": 100
},
"weights": {
"sharedPackages": 20,
@ -31,7 +36,12 @@
"pwaSupport": 4,
"maintainability": 4,
"securityHeaders": 5,
"skeletonLoading": 3
"skeletonLoading": 3,
"toastConsistency": 3,
"storePattern": 4,
"sharedTypes": 3,
"depFreshness": 2,
"bundleConfig": 2
},
"details": {
"icons": {
@ -357,16 +367,16 @@
"file": "lib/components/NewContactModal.svelte",
"lines": 1130
},
{
"app": "calendar",
"file": "lib/components/calendar/WeekView.svelte",
"lines": 959
},
{
"app": "zitare",
"file": "routes/(app)/lists/[id]/+page.svelte",
"lines": 958
},
{
"app": "calendar",
"file": "lib/components/calendar/WeekView.svelte",
"lines": 953
},
{
"app": "calendar",
"file": "routes/(app)/settings/sync/+page.svelte",
@ -398,6 +408,32 @@
"adoption": 76,
"appsWithSkeletons": 22,
"missing": ["citycorners", "manadeck", "manavoxel", "planta", "presi", "times", "zitare"]
},
"toasts": {
"adoption": 100,
"sharedToast": 204,
"customToast": 0
},
"storePattern": {
"adoption": 95,
"totalRunesStores": 176,
"totalOldStores": 9,
"appsWithRunesStores": 24,
"appsWithOldStores": 4
},
"sharedTypes": {
"adoption": 62,
"sharedTypeImports": 8,
"localTypeFiles": 5
},
"depFreshness": {
"adoption": 80,
"totalDeps": 1068,
"avgDepsPerApp": 37
},
"bundleSize": {
"adoption": 100,
"appsWithBundleConfig": 29
}
},
"apps": [

View file

@ -118,6 +118,36 @@ const categories = [
icon: '💀',
description: 'Skeleton-Komponenten für Loading States',
},
{
key: 'toastConsistency',
label: 'Toast Consistency',
icon: '🔔',
description: 'shared-ui toastStore vs window.alert',
},
{
key: 'storePattern',
label: 'Store Pattern',
icon: '⚡',
description: 'Svelte 5 Runes (.svelte.ts) vs alte Stores',
},
{
key: 'sharedTypes',
label: 'Shared Types',
icon: '🔗',
description: 'shared-types Imports vs lokale Type-Definitionen',
},
{
key: 'depFreshness',
label: 'Dep Freshness',
icon: '📦',
description: 'Durchschnittliche Dependencies pro App',
},
{
key: 'bundleConfig',
label: 'Bundle Config',
icon: '⚙️',
description: 'SvelteKit Adapter konfiguriert',
},
];
const packageDetails = details.packages.perPackage;