Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-23 06:20 UTC

Turbootzz / Nimbus

Open-source customizable homelab dashboard

Go · TypeScriptLicencia propia★ 119 estrellas⑂ 4 forksdesde oct 2025Ver en GitHub ↗

Turbootzz/Nimbus tiene un índice de salud de 63 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (90/100) y la más baja, Community & Adoption (41/100). Se actualizó por última vez hace 3 días. Una sola persona concentra la mayor parte del trabajo reciente.

63
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

63
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

Thijs HermanCuenta personal
5 seguidores40 repositorios públicosdesde may 2020

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

89Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 3 días
17.3/36Cadencia de commits — 25/52 semanas con commits
18/18Volumen de commits — 128 commits en el último año
10/10OpenSSF Scorecard: Maintained — 17 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year128
human_commit_share0,67
days_since_last_push3
active_weeks_last_year25
Cómo se puntúa
27/27Publica versiones — 8 versiones publicadas
36/36Recencia de las versiones — última versión hace 24 días
27/27Cadencia de publicación — una versión cada ~31,2 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count8
latest_release_tagv1.2.3
releases_from_tagsno
days_since_latest_release24
mean_days_between_releases31,2
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

41En riesgo · 18% del índice global
Cómo se puntúa
33.6/60Estrellas — 119 estrellas
4/25Forks — 4 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks4
stars119
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
16.9/22.5Licencia — archivo de licencia presente, no es una licencia reconocida
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

44En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.2/22.5Distribución de commits — el principal contribuyente firma el 99% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,989
Cómo se puntúa
46.8/46.8Resolución de issues — 100% de issues cerradas
27.5/38.3Aceptación de PR — 87/121 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 1/14 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs87
open_issues0
closed_issues53
issue_closed_ratio1
closed_unmerged_prs34
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
5.6/25Alcance del propietario — 5 seguidores de Turbootzz
23.7/25Trayectoria — 40 repos públicos, cuenta de ~6 años
Datos de entrada utilizados
followers5
owner_typeUser
is_verified
owner_loginTurbootzz
public_repos40
account_age_days2273
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

90Excelente · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — eslint.config.mjs
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 29 out of 29 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno

Documentación

100Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://nimbus.turboot.com
10/10Descripción del repositorio
10/10Topics — 4 topics
10/10Wiki
Datos de entrada utilizados
topicsaccount-management, dashboard, services, homepage
has_wiki
homepagehttps://nimbus.turboot.com
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

47En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 29 out of 29 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 1/14 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.2/2.5Licencia — license file detected
7.5/7.5Maintained — 17 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 33 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,7
Excluidos de la puntuación (sin datos o no aplicable): signed_releases. Los pesos restantes se han renormalizado.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

68Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
32.6/40Historial de commits legible — 41 de 67 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,612
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
18/18Arranque con un solo comando — Makefile, backend/Makefile
22/22Pruebas automatizadas
11/11Configuración de lint / formato — eslint.config.mjs
11/11Verificación estática de tipos — frontend/tsconfig.json
10/10Entorno reproducible — Dockerfile, lockfile
2/10Práctica demostrada con agentes — 1 de los últimos 100 commits con autoría o crédito de agente
8/8Mantenimiento automatizado — 33 de los últimos 100 commits son actualizaciones automáticas de dependencias
1/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum, package-lock.json
has_dockerfile
typed_language
bootstrap_filesMakefile, backend/Makefile
has_devcontainerno
has_linter_config
typecheck_configsfrontend/tsconfig.json
agent_commit_share0,01
toolchain_manifestsbackend/go.mod
dependency_bot_commit_share0,33
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/201 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes35.349
source_files_sampled201
oversized_source_files0

Datos clave

119estrellas de GitHub
2contribuidores
128commits en los últimos 12 meses
3días desde el último push
8versiones publicadas
1factor bus
0issues abiertas
Go, npmecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch go package 'github.com/nimbus/backend' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

Historial de estrellas y forks 0 ★ / 4 ⇿
0Estrellas
4Forks
4Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

1223344412026-012026-042026-06
Mayor 0Menor 2Parche 2
OpenSSF Scorecard 4.7 / 10
4.7agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-23 06:20 UTC

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests29 out of 29 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/14 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
9Licenselicense file detected
10Maintained17 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
1Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 1
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities33 existing vulnerabilities detected
Dependencias directas 21
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/go-playground/validator/v10v10.30.3backend/go.mod
Gogithub.com/gofiber/fiber/v2v2.52.13backend/go.mod
Gogithub.com/golang-jwt/jwt/v5v5.3.1backend/go.mod
Gogithub.com/google/uuidv1.6.0backend/go.mod
Gogithub.com/joho/godotenvv1.5.1backend/go.mod
Gogithub.com/lib/pqv1.12.3backend/go.mod
Gogithub.com/mattn/go-sqlite3v1.14.45backend/go.mod
Gogithub.com/stretchr/testifyv1.11.1backend/go.mod
Gogolang.org/x/cryptov0.52.0backend/go.mod
Gogolang.org/x/netv0.55.0backend/go.mod
Gogolang.org/x/oauth2v0.36.0backend/go.mod
npm@dnd-kit/core^6.3.1frontend/package.json
npm@dnd-kit/sortable^10.0.0frontend/package.json
npm@dnd-kit/utilities^3.2.2frontend/package.json
npm@heroicons/react^2.2.0frontend/package.json
npmdate-fns^4.4.0frontend/package.json
npmjose^6.2.3frontend/package.json
npmnext16.2.9frontend/package.json
npmreact19.2.7frontend/package.json
npmreact-dom19.2.7frontend/package.json
npmrecharts^3.8.1frontend/package.json
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "account-management",
        "dashboard",
        "services",
        "homepage"
      ],
      "is_fork": false,
      "size_kb": 3798,
      "has_wiki": true,
      "homepage": "https://nimbus.turboot.com",
      "languages": {
        "Go": 935867,
        "CSS": 4463,
        "HTML": 2785,
        "Shell": 18472,
        "Makefile": 6905,
        "Dockerfile": 5907,
        "JavaScript": 1002,
        "TypeScript": 557583
      },
      "pushed_at": "2026-07-20T05:18:20Z",
      "created_at": "2025-10-10T14:42:07Z",
      "owner_type": "User",
      "updated_at": "2026-07-21T01:55:44Z",
      "description": "Open-source customizable homelab dashboard",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "Go",
      "significant_languages": [
        "Go",
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://turboot.com",
      "name": "Thijs Herman",
      "type": "User",
      "login": "Turbootzz",
      "company": null,
      "location": "Netherlands",
      "followers": 5,
      "avatar_url": "https://avatars.githubusercontent.com/u/64640608?v=4",
      "created_at": "2020-05-01T11:16:47Z",
      "is_verified": null,
      "public_repos": 40,
      "account_age_days": 2273
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.2.3",
          "kind": "patch",
          "published_at": "2026-06-28T11:25:56Z"
        },
        {
          "tag": "v1.2.2",
          "kind": "patch",
          "published_at": "2026-03-24T09:05:08Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2026-02-13T09:56:42Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-02-03T12:11:38Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-01-22T20:32:27Z"
        },
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2025-12-28T15:24:45Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2025-12-27T20:52:10Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2025-11-21T19:11:18Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "89ed4d30626816a84c7127d6d7a96a8965de0ca0",
          "body": "Bumps the actions-dependencies group with 2 updates: [actions/checkout](https://github.com/actions/checkout) and [codecov/codecov-action](https://github.com/codecov/codecov-action).\n\n\nUpdates `actions/checkout` from 6 to 7\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog]\n[…]\npdate:semver-major\n  dependency-group: actions-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(ci): Bump the actions-dependencies group with 2 updates (#172)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-14T08:17:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f9eae39ec597316b4eeaa717fd584c891efbf0cc",
          "body": null,
          "is_bot": false,
          "headline": "chore: add GitHub Sponsors funding button (#169)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-06-28T11:19:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcd2fd337a9abd234285a75312dba9b486e2b4a5",
          "body": "* oauth refactor and extraction\n\n* small improvements\n\n* extra error handling",
          "is_bot": false,
          "headline": "Oauth refactor for security and extraction (#168)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-06-28T10:46:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6e4410fc419f179ce3f93441b0568d35946c9af",
          "body": "…ith 13 updates (#164)\n\nBumps the npm-dependencies group with 12 updates in the /frontend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [date-fns](https://github.com/date-fns/date-fns) | `4.1.0` | `4.4.0` |\n| [next](https://github.com/vercel/next.js) | `16.2.6` | `16.2.9` |\n| [react](htt\n[…]\non-update:semver-patch\n  dependency-group: npm-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(frontend): Bump the npm-dependencies group across 1 directory w…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-27T21:57:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "52fb7f9511f39dc20811097efe0ca59cc232e53d",
          "body": "…h 4 updates (#162)\n\nBumps the go-dependencies group with 3 updates in the /backend directory: [github.com/go-playground/validator/v10](https://github.com/go-playground/validator), [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) and [golang.org/x/net](https://github.com/golang/net\n[…]\nion-update:semver-minor\n  dependency-group: go-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(backend): Bump the go-dependencies group across 1 directory wit…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-27T21:21:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1ffb2a1dacb5534eec9b327912c539cc40e2a5c1",
          "body": "* feat: add generic OIDC provider support\n\nAdds a fourth OAuth provider backed by OIDC discovery. At startup, if\nOIDC_ISSUER_URL + OIDC_CLIENT_ID are set, the backend fetches\n{issuer}/.well-known/openid-configuration to discover auth, token, and\nuserinfo endpoints — no hardcoded URLs, no new depende\n[…]\n.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01VWjrwKctHPo6HfSbnM1n8J\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add generic OIDC provider (Keycloak, Authentik, Dex, etc.) (#166)",
          "author_name": "Aaron Carson",
          "author_login": "caraar12345",
          "committed_at": "2026-06-27T18:16:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0ec462a93e512e82b3746dc318268153894c00c2",
          "body": "* Button change\n\n* logo fix\n\n* DRY",
          "is_bot": false,
          "headline": "Feat/hero Nimbus cloud cta (#161)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-06-06T16:00:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "715a2b9fb8f05f9c800125fdf8865d1cc9e0e669",
          "body": "…ith 14 updates (#145)\n\n* chore(frontend): Bump the npm-dependencies group across 1 directory with 14 updates\n\nBumps the npm-dependencies group with 13 updates in the /frontend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [jose](https://github.com/panva/jose) | `6.2.2` | `6.2.3` |\n| [ne\n[…]\n--------\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Turbootzz <thijs.herman@student.hu.nl>",
          "is_bot": true,
          "headline": "chore(frontend): Bump the npm-dependencies group across 1 directory w…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-23T09:47:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "af299043827f75b7c6f0a89f5564c7c9b5ea1197",
          "body": "…h 4 updates (#150)\n\nBumps the go-dependencies group with 4 updates in the /backend directory: [github.com/go-playground/validator/v10](https://github.com/go-playground/validator), [github.com/gofiber/fiber/v2](https://github.com/gofiber/fiber), [github.com/lib/pq](https://github.com/lib/pq) and [gi\n[…]\nion-update:semver-patch\n  dependency-group: go-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(backend): Bump the go-dependencies group across 1 directory wit…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-14T14:59:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b43e95cfdf3600a173d181212085136d0d655b74",
          "body": "Bumps the actions-dependencies group with 5 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [codecov/codecov-action](https://github.com/codecov/codecov-action) | `5` | `6` |\n| [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) | `3` | `4` |\n| [docker/login-action](ht\n[…]\npdate:semver-major\n  dependency-group: actions-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(ci): Bump the actions-dependencies group with 5 updates (#135)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-13T13:48:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5e776640b5c597ea4f32a9b56297f38aafa4abf4",
          "body": "* fix(auth): remove local avatar file on account delete (#144)\n\nAccount deletion previously left the user's locally-uploaded avatar\norphaned under backend/uploads/avatars/. Now we unlink the file\nright after the DB row is deleted.\n\nThe same prefix-and-unlink pattern was already present in UploadAvat\n[…]\nrontend:\n- Collapse RETURN_PATHS + returnLabel into RETURN_TARGETS, where\n  each entry pairs href and label. Prevents future drift if a new\n  return target is added without updating the label ternary.",
          "is_bot": false,
          "headline": "Fix/144 156 orphan avatars and create redirect (#157)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-05-13T13:47:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1e9a943605e02c17a6e69c8380ce5246e886b45a",
          "body": "…date (#155)\n\n* fix(services): preserve group_id on partial PUT updates\n\nUpdateService blindly assigned existingService.GroupID = req.GroupID,\nso any PUT that omitted group_id (notably the dashboard card-resize\nhandler) wiped the service's group assignment and pushed it back to\nthe ungrouped/default\n[…]\nlex flex-col h-full and give\nthe action row mt-auto so it always sits at the bottom regardless of\nhow much content rendered above it.\n\n* fix(services-page): isolate groups failure from services render",
          "is_bot": false,
          "headline": "154 bug fix services lose their group assignment after a card size up…",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-05-12T10:39:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2510ca33731c7b04cf261d689798e77a80630742",
          "body": "Closes #152.\n\nAfter PR #151 merged, production logged a flood of:\n  ERROR: invalid input syntax for type uuid: \"favicon\"\n  STATEMENT: SELECT ... FROM services WHERE id = $1\n\nLikely trigger was the deployment window when the new frontend (calling\n/services/favicon?name=...&url=...) briefly served aga\n[…]\nolders\nwere replaced with valid-UUID-format strings so the sql.ErrNoRows code\npath remains covered. TestRouteGuidConstraintCoversAllResourceGroups\nguards the <guid> constraint on every resource group.",
          "is_bot": false,
          "headline": "fix(api): reject non-UUID :id path params at router and handler (#153)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-05-12T08:20:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "61a07a6efa583d98d921817ada0a7d6f0d14696f",
          "body": "* favicon fetcher implementation\n\n* fix fetch bug and added tests\n\n* prefer higher resulution icons\n\n* auto fetch from homarr-labs icons as primary method\n\n* deliver icon optionality\n\n* security improvements and svg hardening",
          "is_bot": false,
          "headline": "Fetch favicon from Name or URL when creating a service (#151)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-05-11T13:32:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6ce712d875a0cd324f0dff7676e4d17dd1dc972",
          "body": "* fix(avatar): skip Next.js image optimization for remote URLs\n\nProd was logging an upstream 404 on every render for users whose cached\nDiscord avatar URL had gone stale — the in-memory failed-URL state\nprevents the broken <img> from being shown to the user, but the\noptimizer still proxied the URL o\n[…]\nhrough it also passed\nstartsWith('http') and was incorrectly marked unoptimized. Inspect the\noriginal avatarUrl prop instead so OAuth full URLs are skipped while\nlocal uploads keep image optimization.",
          "is_bot": false,
          "headline": "fix(avatar): skip Next.js image optimization for remote URLs (#148)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-05-10T18:42:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "79809e42285c129d042f424f42fdccdbe38a41a6",
          "body": "* fix: refresh OAuth avatar on login and fall back gracefully on load failure\n\nRefs #146\n\nDiscord (and other providers) rotate the avatar URL when the user\nchanges their picture, so the URL we cached at signup goes stale and\n404s. Refresh avatar_url from the provider on every successful OAuth\nlogin \n[…]\nuthProvider so a\nlocal user with a custom avatar who later links a Discord/Google/GitHub\naccount doesn't lose their picture. Adds a test that mirrors the\nexisting avatar-refresh local-upload coverage.",
          "is_bot": false,
          "headline": "Fix/146 profile pictures broken (#147)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-05-10T13:01:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d22a4b39a21cdd9db9160d7d54c95037f29d64f4",
          "body": "* Account deletion implementation\n\n* prevent only admin deletion\n\n* safeguards\n\n* Nitpicks",
          "is_bot": false,
          "headline": "Account deletion functionality (#143)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-05-02T17:49:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52b5393e7dede1107f87fc2f215c412221d50f8a",
          "body": "Bumps the npm-dependencies group in /frontend with 6 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [jose](https://github.com/panva/jose) | `6.2.1` | `6.2.2` |\n| [next](https://github.com/vercel/next.js) | `16.1.6` | `16.2.1` |\n| [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwi\n[…]\np: npm-dependencies\n- dependency-name: tailwindcss\n  dependency-version: 4.2.2\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: npm-dependencies\n...",
          "is_bot": true,
          "headline": "chore(frontend): Bump the npm-dependencies group (#132)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-24T07:53:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f86087fa770d96d2557944f97c321239a8002077",
          "body": "Bumps the go-dependencies group in /backend with 2 updates: [github.com/lib/pq](https://github.com/lib/pq) and [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3).\n\n\nUpdates `github.com/lib/pq` from 1.11.2 to 1.12.0\n- [Release notes](https://github.com/lib/pq/releases)\n- [Changelog](h\n[…]\nies\n- dependency-name: github.com/mattn/go-sqlite3\n  dependency-version: 1.14.37\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: go-dependencies\n...",
          "is_bot": true,
          "headline": "chore(backend): Bump the go-dependencies group (#131)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-23T14:57:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2c13722cca50caebbda33943ef2e9f494a40aa86",
          "body": "Bumps the npm-dependencies group in /frontend with 6 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [jose](https://github.com/panva/jose) | `6.2.0` | `6.2.1` |\n| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `25.3.5` | `25.5.0` |\n| [@vitejs/plugin-\n[…]\n-group: npm-dependencies\n- dependency-name: vitest\n  dependency-version: 4.1.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: npm-dependencies\n...",
          "is_bot": true,
          "headline": "chore(frontend): Bump the npm-dependencies group (#130)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-17T10:56:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bd0a66354111f317476813569722b8e370282fb1",
          "body": "Bumps the go-dependencies group in /backend with 1 update: [golang.org/x/crypto](https://github.com/golang/crypto).\n\n\nUpdates `golang.org/x/crypto` from 0.48.0 to 0.49.0\n- [Commits](https://github.com/golang/crypto/compare/v0.48.0...v0.49.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/crypto\n  dependency-version: 0.49.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-dependencies\n...",
          "is_bot": true,
          "headline": "chore(backend): Bump golang.org/x/crypto (#129)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-17T08:41:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6639b53a061220b860bb7edf6f997e124fe6767f",
          "body": "Bumps the npm-dependencies group in /frontend with 6 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [jose](https://github.com/panva/jose) | `6.1.3` | `6.2.0` |\n| [recharts](https://github.com/recharts/recharts) | `3.7.0` | `3.8.0` |\n| [@eslint/eslintrc](https://github.com/eslint/eslintrc) |\n[…]\nup: npm-dependencies\n- dependency-name: happy-dom\n  dependency-version: 20.8.3\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: npm-dependencies\n...",
          "is_bot": true,
          "headline": "chore(frontend): Bump the npm-dependencies group (#128)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-10T10:44:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cb0779a89d22646da9afaab925ffeade68b04503",
          "body": "Bumps the go-dependencies group in /backend with 1 update: [golang.org/x/oauth2](https://github.com/golang/oauth2).\n\n\nUpdates `golang.org/x/oauth2` from 0.35.0 to 0.36.0\n- [Commits](https://github.com/golang/oauth2/compare/v0.35.0...v0.36.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/oauth2\n  dependency-version: 0.36.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-dependencies\n...",
          "is_bot": true,
          "headline": "chore(backend): Bump golang.org/x/oauth2 (#127)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-10T09:29:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "412397869ac3773c41bf4c25126feb2b3aa74fe8",
          "body": "…ith 7 updates (#126)\n\nBumps the npm-dependencies group with 6 updates in the /frontend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [@eslint/eslintrc](https://github.com/eslint/eslintrc) | `3.3.3` | `3.3.4` |\n| [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEA\n[…]\np: npm-dependencies\n- dependency-name: tailwindcss\n  dependency-version: 4.2.1\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: npm-dependencies\n...",
          "is_bot": true,
          "headline": "chore(frontend): Bump the npm-dependencies group across 1 directory w…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-03T14:32:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "322e298540a390463a783b13a2bdb633b7d14a45",
          "body": "Bumps the go-dependencies group in /backend with 1 update: [github.com/gofiber/fiber/v2](https://github.com/gofiber/fiber).\n\n\nUpdates `github.com/gofiber/fiber/v2` from 2.52.11 to 2.52.12\n- [Release notes](https://github.com/gofiber/fiber/releases)\n- [Commits](https://github.com/gofiber/fiber/compar\n[…]\nes:\n- dependency-name: github.com/gofiber/fiber/v2\n  dependency-version: 2.52.12\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: go-dependencies\n...",
          "is_bot": true,
          "headline": "chore(backend): Bump github.com/gofiber/fiber/v2 (#125)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-03T14:31:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "67c8d10b920108f000ecfeeb75abf996b2368319",
          "body": "Bumps the npm-dependencies group in /frontend with 4 updates: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react), [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin\n[…]\nup: npm-dependencies\n- dependency-name: happy-dom\n  dependency-version: 20.6.1\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: npm-dependencies\n...",
          "is_bot": true,
          "headline": "chore(frontend): Bump the npm-dependencies group (#121)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-02-18T20:09:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "925b4f57c0baa95c019d8fdb7a497aa3470c2756",
          "body": "Bumps the go-dependencies group in /backend with 3 updates: [github.com/lib/pq](https://github.com/lib/pq), [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) and [golang.org/x/crypto](https://github.com/golang/crypto).\n\n\nUpdates `github.com/lib/pq` from 1.11.1 to 1.11.2\n- [Release n\n[…]\ndependencies\n- dependency-name: golang.org/x/crypto\n  dependency-version: 0.48.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-dependencies\n...",
          "is_bot": true,
          "headline": "chore(backend): Bump the go-dependencies group (#120)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-02-18T20:09:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "50489ef993d6678fede129d2338857f8824a9a6b",
          "body": "* Refactor URL validation for icons to allow private/local IPs and update related tests",
          "is_bot": false,
          "headline": "[BUG] Icons permission not working due to local CORS (#123)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-02-18T14:45:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f8eecf75e704a84c371bfda58d7596e13584cf2",
          "body": "* Bugfix: collapse sidebar hydration",
          "is_bot": false,
          "headline": "[Bugfix] Sidebar properly saves state in localStorage (#118)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-02-14T19:15:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b2500aadd4920e4d3ba7e44b09407639b730399",
          "body": null,
          "is_bot": false,
          "headline": "Changed validation text",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2026-02-13T11:08:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "825f382af3c18657d1bcd1eec76f9d66f1a5dfaa",
          "body": null,
          "is_bot": false,
          "headline": "Updated images for landing page",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2026-02-13T09:42:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a177464dc7a6e4f79f07bacc074c315adb4ad429",
          "body": "* SMTP implementation\n\n* Nimbus Cloud connection addition\n\n* Security and cleanup improvements\n\n* Better logs and added timeouts\n\n* Password cannot be same as old and pre submit connection test and more tests\n\n* Improved email template\n\n* added validation and fixed tests\n\n* fixed image in email\n\n* added fail safes",
          "is_bot": false,
          "headline": "Password reset + SMTP implementation (#116)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-02-13T09:09:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6aa37557f025a3cca73a6352454e98b0a7387b55",
          "body": "…115)\n\n* feat(healthcheck): add retries and delay for health checks; update sidebar functionality\n\n* hydration fix\n\n* Refactored healthcheck retries to webhook only\n\n* reduced sidebar width and added small animation to credits\n\n* retry bypasses rate limit and fixed bug when recovered still get a not\n[…]\n\n* refactor: improve sidebar state management and cleanup in tests\n\n* refactor: enhance retry logic in webhook notifier and add tests for recovery scenarios\n\n* added fade animation to texts in sidebar",
          "is_bot": false,
          "headline": "Retries and delay for webhook health checks before marking offline (#…",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-02-10T19:43:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "87f50dc199f226ebf883970f7f496b2960e690a5",
          "body": "Bumps the npm-dependencies group in /frontend with 4 updates: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react), [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin\n[…]\nup: npm-dependencies\n- dependency-name: happy-dom\n  dependency-version: 20.5.3\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: npm-dependencies\n...",
          "is_bot": true,
          "headline": "chore(frontend): Bump the npm-dependencies group (#113)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-02-10T09:03:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8337eb8528c3ef2420d1578f0375893db4eb228d",
          "body": "Bumps the go-dependencies group in /backend with 1 update: [golang.org/x/oauth2](https://github.com/golang/oauth2).\n\n\nUpdates `golang.org/x/oauth2` from 0.34.0 to 0.35.0\n- [Commits](https://github.com/golang/oauth2/compare/v0.34.0...v0.35.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/oauth2\n  dependency-version: 0.35.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-dependencies\n...",
          "is_bot": true,
          "headline": "chore(backend): Bump golang.org/x/oauth2 (#112)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-02-10T09:03:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df21e967e53e8b138b933bd0a9cd27642a60c241",
          "body": "* nimbus cloud implementation\n\n* fixed pipeline and added badge to mobile\n\n* validate INITIAL_ADMIN_EMAIL format and set EmailVerified to true\n\n* added tests for nimbus cloud\n\n* improved styling for badge\n\n* fixed ci label and added css fallback\n\n* add error handling for settings repository updates in GetAll test\n\n* improved badge location and added url\n\n* Changed Launch Nimbus to Launch demo",
          "is_bot": false,
          "headline": "Nimbus Cloud implementation (#111)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-02-07T22:20:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "019f32ba77e8a5afd97a1df66cf9c3188449f88f",
          "body": null,
          "is_bot": false,
          "headline": "Set default cardScale from large to medium",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2026-02-03T13:18:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff4098b70beb6de9324ad9d3c69ff74e2eb01296",
          "body": "* fix special character bug",
          "is_bot": false,
          "headline": "Database special character bug (#107)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-02-03T10:28:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4cea501353ac9d6a541273f60362ddd31c507d2",
          "body": null,
          "is_bot": false,
          "headline": "Migration documentation (#105)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-02-03T09:23:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7dfcadd9394d81a4cc1a01ab96219bde4f38fc9f",
          "body": "* implemented setup wizard\n\n* corrected admin settings to correct location and styling\n\n* validation for signup when public registration is disabled\n\n* added tests\n\n* fix race condition and added admin role check in frontend\n\n* enhance setup page with error handling and retry mechanism\n\n* fixed incorrect query\n\n* email validation in backend\n\n* changed class to v4",
          "is_bot": false,
          "headline": "Nimbus setup wizard (#104)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-02-03T08:21:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8143f3c0638e6b9c135421aaf6145b4cdd404544",
          "body": "…n different device (#103)\n\n* fixed bug where new service are not placed in right group and removed email from header\n\n* add group ownership validation for service creation and updates\n\n* add tests for service creation and update with group validation, including nil groupRepo handling",
          "is_bot": false,
          "headline": "Newly created services are not always grouped in the targeted group o…",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-02-02T11:05:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "430ccf576bc5cd6a3ca5f2c2f96dedd3c69f9d8c",
          "body": "Bumps the npm-dependencies group in /frontend with 8 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [next](https://github.com/vercel/next.js) | `16.1.4` | `16.1.6` |\n| [react](https://github.com/facebook/react/tree/HEAD/packages/react) | `19.2.3` | `19.2.4` |\n| [@types/react](https://github\n[…]\nup: npm-dependencies\n- dependency-name: happy-dom\n  dependency-version: 20.4.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: npm-dependencies\n...",
          "is_bot": true,
          "headline": "chore(frontend): Bump the npm-dependencies group (#102)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-02-02T09:29:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "88c74c6a9d78d6f4c4219a5e70e6886269248879",
          "body": "Bumps the go-dependencies group in /backend with 3 updates: [github.com/gofiber/fiber/v2](https://github.com/gofiber/fiber), [github.com/golang-jwt/jwt/v5](https://github.com/golang-jwt/jwt) and [github.com/lib/pq](https://github.com/lib/pq).\n\n\nUpdates `github.com/gofiber/fiber/v2` from 2.52.10 to 2\n[…]\no-dependencies\n- dependency-name: github.com/lib/pq\n  dependency-version: 1.11.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-dependencies\n...",
          "is_bot": true,
          "headline": "chore(backend): Bump the go-dependencies group (#101)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-02-02T09:29:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "27a9c0b8da414727ad95a5efba86167104f093d8",
          "body": null,
          "is_bot": false,
          "headline": "check for legacy data",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-31T20:06:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c2e35e14657bd8cc80112f7acd5a329cc4c550e",
          "body": null,
          "is_bot": false,
          "headline": "add warning for backend image",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-31T19:51:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9c65fdd8ed40ea4b2ccf7f210a5b743a6c3857e",
          "body": null,
          "is_bot": false,
          "headline": "postgres data warning",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-31T19:35:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dfe570cdd36d47a52e2147b1027a53894da61f17",
          "body": null,
          "is_bot": false,
          "headline": "safeguard for PGDATA migration",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-31T18:43:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9cc4bbbcd6649f0b39d28d2e19dbd831f44b34ad",
          "body": "* fix for postgres problem\n\n* added ci\n\n* validation\n\n* added stop warning to prevent data loss\n\n* small fix\n\n* enhance migration verification in entrypoint script",
          "is_bot": false,
          "headline": "fix for postgres problem (#97)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-31T17:53:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d34b31a829c9fffa125006ae15a26439535f201",
          "body": "* possibility to exclude monitoring\n\n* added for groups too\n\n* implement monitoring toggle component and update metrics filtering logic\n\n* ensure monitoring_enabled defaults to true if not provided\nand improve accessibility with aria attributes",
          "is_bot": false,
          "headline": "[Enhancement] Exclude monitoring for service (#95)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-31T16:17:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b333af9c07c754cf07b51a67011ab2aa1c19d58",
          "body": "Bumps the npm-dependencies group in /frontend with 5 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `25.0.6` | `25.0.10` |\n| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/t\n[…]\ngroup: npm-dependencies\n- dependency-name: vitest\n  dependency-version: 4.0.18\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: npm-dependencies\n...",
          "is_bot": true,
          "headline": "chore(frontend): Bump the npm-dependencies group (#93)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-01-29T20:31:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9d989045f0d053caa64b1b19e8691897ec9afd53",
          "body": null,
          "is_bot": false,
          "headline": "fix health check for docker",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-22T19:21:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4240193631fbaa4c82cb348ae6151dee631dfd53",
          "body": null,
          "is_bot": false,
          "headline": "Updated Roadmap",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-22T16:36:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "023300a3a4ee314abd1e50dbc95d7b9a3232f3be",
          "body": "* implemented webhook\n\n* better formatting for platforms\n\n* fix for unhealthy status for unified image on prod\n\n* live dashboard updates\n\n* service needs to be online to show ping\n\n* added tests\n\n* Add rate limit cache cleanup worker and enhance webhook URL handling\n\n* Enhance metrics cleanup worker to include webhook log cleanup and optimize rate limiting checks\n\n* updates packages\n\n* Added polling utillity\n\n* fixed unclear log message\n\n* fix webhook deletion",
          "is_bot": false,
          "headline": "Uptime webhook notification support (#90)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-22T16:16:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b53369ec6afa09591c77844901bc4a74866e2d64",
          "body": "* added scaling\n\n* added listed view\n\n* card list view animation\n\n* responsive scaling fix\n\n* added tests and small fixes\n\n* corrected ci name and improved test\n\n* responsiveness theme settings\n\n* enhance theme color buttons with accessibility attributes",
          "is_bot": false,
          "headline": "Dashboard Scaling and listed view (#89)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-21T22:49:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4480098e5fc0635387d3b2c958cdef4f2c1afd47",
          "body": null,
          "is_bot": false,
          "headline": "docker-script to CI/CD",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-21T20:33:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fdb2fed4d280695b0fc7216eda475ed04610c319",
          "body": null,
          "is_bot": false,
          "headline": "zero-config deployment",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-21T20:30:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15be72050131ecf845d6e19b7a741b66023d1eec",
          "body": null,
          "is_bot": false,
          "headline": "bug fix: image 404",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-21T16:59:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc3c60c47813068ace4628e27367970340cc8824",
          "body": "* new default: single docker image\n\n* small improvements\n\n* small fixes and updated documentation\n\n* update README and docker-compose.deprecated.yml for clearer setup instructions",
          "is_bot": false,
          "headline": "Improved Nimbus Setup: Unified Docker image. (#88)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-21T15:47:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa3b998bd055d3ac5edd3409072ba30c321538fb",
          "body": "Bumps the go-dependencies group in /backend with 1 update: [golang.org/x/crypto](https://github.com/golang/crypto).\n\n\nUpdates `golang.org/x/crypto` from 0.46.0 to 0.47.0\n- [Commits](https://github.com/golang/crypto/compare/v0.46.0...v0.47.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/crypto\n  dependency-version: 0.47.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: go-dependencies\n...",
          "is_bot": true,
          "headline": "chore(backend): Bump golang.org/x/crypto (#84)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-01-21T13:49:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9fb09e2758dbd535d871dfca208b9b578c8cd624",
          "body": "* added optimalisations\n\n* refactor: clean up error handling in RequireUserID and improve ThemedInput focus/blur handling\n\n* fix tests and implemented small tweaks\n\n* refactor: implement reusable hover styles and optimize group count retrieval\n\n* DNS cleanup and small improvements\n\n* added tests for\n[…]\nDME and enhance logging in health check service; refactor sidebar navigation and title handling\n\n* split up dashboard page into components\n\n* fix: improve route title matching logic in DashboardLayout",
          "is_bot": false,
          "headline": "Code Cleanup (#87)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-21T13:47:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fe8cc2364d7fe5b7730d85b77bd12603d6c7bf6b",
          "body": "* added groups and feature setting\n\n* fix for drag and drop services\n\n* removed add service card\n\n* responsiveness\n\n* option to delete all services in that group\n\n* max 35 char to groups\n\n* custom scrollbar\n\n* Add service grouping support to new service creation\n\n* fix default group name and toggle \n[…]\nolor, improve reorder validation, and implement sortable tabs for better user experience\n\n* small fixes\n\n* Implement GroupSelector component for improved service grouping in edit and new service pages",
          "is_bot": false,
          "headline": "Service groups (#79)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-18T18:22:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "932c48367f9ea05fbd48da09f70019886d13bd52",
          "body": "Bumps the go-dependencies group in /backend with 1 update: [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3).\n\n\nUpdates `github.com/mattn/go-sqlite3` from 1.14.32 to 1.14.33\n- [Release notes](https://github.com/mattn/go-sqlite3/releases)\n- [Commits](https://github.com/mattn/go-sqlit\n[…]\nes:\n- dependency-name: github.com/mattn/go-sqlite3\n  dependency-version: 1.14.33\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: go-dependencies\n...",
          "is_bot": true,
          "headline": "chore(backend): Bump github.com/mattn/go-sqlite3 (#75)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-01-15T15:33:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "88933ff5ea73f6f789b766290544558d1faf75ec",
          "body": "Bumps the npm-dependencies group in /frontend with 4 updates: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react), [baseline-browser-mapping](https://github.com/web-platform-d\n[…]\nup: npm-dependencies\n- dependency-name: happy-dom\n  dependency-version: 20.1.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: npm-dependencies\n...",
          "is_bot": true,
          "headline": "chore(frontend): Bump the npm-dependencies group (#77)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-01-15T15:32:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bcdd8c7b2cde76614482aaff323e8ce90065f684",
          "body": null,
          "is_bot": false,
          "headline": "Improve error handling for API responses and update documentation (#76)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-08T12:32:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d53b673125c33354065ddac85dc8d6cfbf1b5dd3",
          "body": "* sizing\n\n* edit mode\n\n* added tests\n\n* truncation for description to keep card size\n\n* removed vertical cards (1x2)\n\n* fixed review comments and fixed responsiveness\n\n* made dragging more basic\n\n* visual improvement dragging\n\n* DRY\n\n* fixes\n\n* touchscreen fix\n\n* toggle resize functionality\n\n* removed card size from edit and creation flow\n\n* fixed review",
          "is_bot": false,
          "headline": "Card resizing (#73)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-08T12:10:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ed44549ac6d2d316cace3780df8cc6d56a06c44",
          "body": "Bumps the go-dependencies group in /backend with 2 updates: [github.com/go-playground/validator/v10](https://github.com/go-playground/validator) and [golang.org/x/crypto](https://github.com/golang/crypto).\n\n\nUpdates `github.com/go-playground/validator/v10` from 10.29.0 to 10.30.1\n- [Release notes](h\n[…]\nion-update:semver-minor\n  dependency-group: go-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(backend): Bump the go-dependencies group (#68)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-01-02T15:15:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "130accbd39f0da793262ecb5f9478f16eb73665f",
          "body": null,
          "is_bot": false,
          "headline": "Uncommented CORS",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-02T15:09:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "136ae55ef5ff4de5cd45eec95bcf2c67b327e503",
          "body": null,
          "is_bot": false,
          "headline": "Added docker persistency for uploaded images (#71)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2026-01-02T14:53:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5c73f1340c0d59368a9257a741c78e2f18b0553",
          "body": null,
          "is_bot": false,
          "headline": "permissions to workflow",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2025-12-28T14:55:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "615c8ffb571e0c91468868b9bb2332f41977b249",
          "body": null,
          "is_bot": false,
          "headline": "lowercase fix",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2025-12-28T14:44:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8d5bb94d87e7a9fd65bfb4067d6c5c7a920d2ff",
          "body": "…t variables",
          "is_bot": false,
          "headline": "Add Docker production build step and update Dockerfile for environmen…",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2025-12-28T14:40:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d756c8f3c3f323d2f1547c3c259478b590c4b58a",
          "body": null,
          "is_bot": false,
          "headline": "Google metadata",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2025-12-28T11:41:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "213c69eeb5ba7cc338b2d153ed526e303d08916b",
          "body": "* Added Landing page\n\n* fixed type-check\n\n* small tailwind v4 convention fix\n\n* fix for expired token landing page",
          "is_bot": false,
          "headline": "Optional landing page (#67)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2025-12-28T11:15:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "612d55979d82c6250728904ac64273db1031decc",
          "body": null,
          "is_bot": false,
          "headline": "Simplified selfhosting and development process (#65)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2025-12-28T10:28:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e032c432af8f80cffc875055c160b51d3b89995c",
          "body": null,
          "is_bot": false,
          "headline": "small changes to README",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2025-12-27T18:05:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b325e0cf351b1e4964000608fe70bfd08c19ce73",
          "body": null,
          "is_bot": false,
          "headline": "updated README",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2025-12-27T18:04:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bca9a7a6b6eae2d3f80a197f9fbc223c3520cfef",
          "body": null,
          "is_bot": false,
          "headline": "migrated from next 15 to 16 and updated README",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2025-12-27T17:59:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8d43754f751822d26c8b6bc791fbd921987a94f",
          "body": null,
          "is_bot": false,
          "headline": "fix for bug and added tests (#63)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2025-12-27T17:34:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "066f5b3e3f1ab035553335efed9321c457701aef",
          "body": "…ith 17 updates (#61)\n\nBumps the npm-dependencies group with 16 updates in the /frontend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [jose](https://github.com/panva/jose) | `6.1.2` | `6.1.3` |\n| [next](https://github.com/vercel/next.js) | `15.5.6` | `15.5.9` |\n| [react](https://github.\n[…]\non-update:semver-patch\n  dependency-group: npm-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(frontend): Bump the npm-dependencies group across 1 directory w…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-12-23T08:11:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0c1f60bc09ab512f21b4bb184d64b8665d883e05",
          "body": "…h 4 updates (#59)\n\nBumps the go-dependencies group with 3 updates in the /backend directory: [github.com/go-playground/validator/v10](https://github.com/go-playground/validator), [github.com/gofiber/fiber/v2](https://github.com/gofiber/fiber) and [golang.org/x/oauth2](https://github.com/golang/oaut\n[…]\nion-update:semver-minor\n  dependency-group: go-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(backend): Bump the go-dependencies group across 1 directory wit…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-12-23T08:09:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c5127326069bff6b35aa3b3b92f9ff40d946427",
          "body": "Bumps the actions-dependencies group with 1 update: [actions/checkout](https://github.com/actions/checkout).\n\n\nUpdates `actions/checkout` from 5 to 6\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](\n[…]\npdate:semver-major\n  dependency-group: actions-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(ci): Bump actions/checkout in the actions-dependencies group (#56)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-12-23T08:08:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3462ae96390b90d08fd6ce364fcdb26e577ad9eb",
          "body": "Bumps the npm-dependencies group in /frontend with 6 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [jose](https://github.com/panva/jose) | `6.1.1` | `6.1.2` |\n| [recharts](https://github.com/recharts/recharts) | `3.3.0` | `3.4.1` |\n| [@types/node](https://github.com/DefinitelyTyped/Definit\n[…]\non-update:semver-patch\n  dependency-group: npm-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(frontend): Updated npm-dependencies (#51)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-11-19T21:21:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "94911f8b1540e816dd21399772449b51f7f8c323",
          "body": "…ore (#53)\n\n* fixed bug and added auto theme mode\n\n* fixed theme flashing and added test",
          "is_bot": false,
          "headline": "Bug: When os is on light mode switching theme mode does not work anym…",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2025-11-19T21:20:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc8ba7ef7aee19fc565eac3a79135709a98b86ac",
          "body": null,
          "is_bot": false,
          "headline": "corrected discord logo colour",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2025-11-16T10:04:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "984897272b73364b7ddea7178e845aaddbb7f249",
          "body": "* oauth implementation\n\n* working oauth\n\n* added profile picture feature\n\n* fixed bug where tall images will overlap service names\n\n* fix for .local domains\n\n* added tests\n\n* removed debug prints",
          "is_bot": false,
          "headline": "OAuth and higher test coverage (#50)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2025-11-15T23:23:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34aa1f27f421cb771f513ca30cc715bbca946c41",
          "body": "Bumps the npm-dependencies group in /frontend with 4 updates: [jose](https://github.com/panva/jose), [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss), [eslint](https://github.com/eslint/eslint) and [tailwindcss](https://github.com/tailwindla\n[…]\non-update:semver-patch\n  dependency-group: npm-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(frontend): Updated npm-dependencies (#47)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-11-13T15:43:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "19cd2927c1212696cf130fdcd867500b524ffd26",
          "body": "* added implementation for image url and upload for services\n\n* fixed bug where you cant switch back to emoji\n\n* added emoji picker\n\n* fixed emoji picker bugs and .local domain bug\n\n* added tests and fixed metrics service icon bug\n\n* fixed alignment and missing service icons\n\n* fixed linting and added smaller service icon size\n\n* updated dependencies\n\n* added security layer for image uploading",
          "is_bot": false,
          "headline": "Possibility to add Images as icons to services (#49)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2025-11-13T15:40:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "517e422517efac4b6231bef4aaaa8cc5e85b27b5",
          "body": "* smart TLS verification\n\n* fixed mobile responsiveness\n\n* code cleanup",
          "is_bot": false,
          "headline": "Bug: Self-signed SSL services cannot get health checks (#46)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2025-11-06T21:49:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ad093774dc2b8197bf0bae92b5d8efac795119b",
          "body": "* graphs for services and prometheus integration\n\n* added combined graphs and metrics page\n\n* added security measures for prometheus metric API",
          "is_bot": false,
          "headline": "Graph uptime monitoring & Prometheus integration (#44)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2025-11-06T15:52:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "373d4b550d096a5dfb8f98ff2e6aa0d1f99bf5ca",
          "body": "* fixed bug where theme wont sync across devices",
          "is_bot": false,
          "headline": "Bug where theme wont sync across devices (#43)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2025-11-05T22:37:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16355a71cc6a82c38860125972fe467744568112",
          "body": "Bumps the npm-dependencies group in /frontend with 1 update: [eslint](https://github.com/eslint/eslint).\n\n\nUpdates `eslint` from 9.38.0 to 9.39.0\n- [Release notes](https://github.com/eslint/eslint/releases)\n- [Commits](https://github.com/eslint/eslint/compare/v9.38.0...v9.39.0)\n\n---\nupdated-dependen\n[…]\non-update:semver-minor\n  dependency-group: npm-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(frontend): eslint from 9.38.0 to 9.39.0 (#41)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-11-03T09:25:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "87fe76e7b05dfb34b350a5e8e0c784ca75050469",
          "body": null,
          "is_bot": false,
          "headline": "JWT expiration to 30 days with remember me (#40)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2025-11-02T10:29:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c202365a9fa0b44fae31e3cb625932eca360d189",
          "body": "Bumps the actions-dependencies group with 3 updates: [actions/checkout](https://github.com/actions/checkout), [actions/setup-node](https://github.com/actions/setup-node) and [docker/build-push-action](https://github.com/docker/build-push-action).\n\n\nUpdates `actions/checkout` from 4 to 5\n- [Release n\n[…]\npdate:semver-major\n  dependency-group: actions-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "dependencies updates (#38)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-11-01T10:25:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "808969582bf2490ac4c907845f8fa3348682049e",
          "body": null,
          "is_bot": false,
          "headline": "fix for production",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2025-10-30T20:50:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd1eb4451c1910a698ef225993a1c1419f98d80c",
          "body": null,
          "is_bot": false,
          "headline": "fix for prod",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2025-10-30T20:17:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3013068c9633429381c2fc1d3983038c9ae6db07",
          "body": null,
          "is_bot": false,
          "headline": "removed claude from pipeline",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2025-10-30T17:03:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2eb06dbbf838986d54818fbb405bca5e2eeafed2",
          "body": "Bumps the npm-dependencies group with 9 updates in the /frontend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [next](https://github.com/vercel/next.js) | `15.5.4` | `15.5.6` |\n| [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss) |\n[…]\non-update:semver-patch\n  dependency-group: npm-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Updated frontend dependecies (#31)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-10-30T17:01:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0faf95f1ccf84e8e58477f72e6bd00e083c2cfb4",
          "body": "* Reorder implementation and setting for Open in new tab\n\n* added tests for reordering\n\n* db performance gains\n\n* dev env replaced by root env",
          "is_bot": false,
          "headline": "Reorder implementation and setting for Open in new tab (#35)",
          "author_name": "Thijs Herman",
          "author_login": "Turbootzz",
          "committed_at": "2025-10-30T16:53:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b60d48540aa21867302e7b362438ede9f81d1979",
          "body": null,
          "is_bot": false,
          "headline": "updated pipeline",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2025-10-17T14:38:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "651af96c39476074f7bc95ccddfb11ecfb4f9142",
          "body": null,
          "is_bot": false,
          "headline": "pipeline trigger",
          "author_name": "Turbootzz",
          "author_login": "Turbootzz",
          "committed_at": "2025-10-17T14:24:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 8,
      "commits_last_year": 128,
      "latest_release_at": "2026-06-28T11:25:56Z",
      "latest_release_tag": "v1.2.3",
      "releases_from_tags": false,
      "days_since_last_push": 3,
      "active_weeks_last_year": 25,
      "days_since_latest_release": 24,
      "mean_days_between_releases": 31.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 4,
      "stars": 119,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-01-11",
            "count": 1
          },
          {
            "date": "2026-02-09",
            "count": 1
          },
          {
            "date": "2026-06-26",
            "count": 1
          },
          {
            "date": "2026-06-27",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 4,
        "total_forks": 4
      },
      "star_history": null,
      "open_issues_and_prs": 2
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "backend/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "frontend/tsconfig.json"
      ],
      "toolchain_manifests": [
        "backend/go.mod"
      ],
      "largest_source_bytes": 35349,
      "source_files_sampled": 201,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "backend/go.mod",
        "frontend/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go",
        "npm"
      ],
      "dependencies": [
        {
          "name": "github.com/go-playground/validator/v10",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v10.30.3"
        },
        {
          "name": "github.com/gofiber/fiber/v2",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.52.13"
        },
        {
          "name": "github.com/golang-jwt/jwt/v5",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v5.3.1"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/joho/godotenv",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.1"
        },
        {
          "name": "github.com/lib/pq",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.12.3"
        },
        {
          "name": "github.com/mattn/go-sqlite3",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.14.45"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.52.0"
        },
        {
          "name": "golang.org/x/net",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.55.0"
        },
        {
          "name": "golang.org/x/oauth2",
          "manifest": "backend/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.36.0"
        },
        {
          "name": "@dnd-kit/core",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.3.1"
        },
        {
          "name": "@dnd-kit/sortable",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.0.0"
        },
        {
          "name": "@dnd-kit/utilities",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.2.2"
        },
        {
          "name": "@heroicons/react",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.2.0"
        },
        {
          "name": "date-fns",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.4.0"
        },
        {
          "name": "jose",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.2.3"
        },
        {
          "name": "next",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "16.2.9"
        },
        {
          "name": "react",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.2.7"
        },
        {
          "name": "react-dom",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.2.7"
        },
        {
          "name": "recharts",
          "manifest": "frontend/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.8.1"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 2,
        "merged_prs": 87,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 53,
        "closed_unmerged_prs": 34
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "Turbootzz",
          "commits": 91,
          "avatar_url": "https://avatars.githubusercontent.com/u/64640608?v=4"
        },
        {
          "type": "User",
          "login": "caraar12345",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/6129428?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.989
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "claude.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "eslint.config.mjs"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum",
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "29 out of 29 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 1/14 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 9,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "17 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 1,
            "reason": "dependency not pinned by hash detected -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "33 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "89ed4d30626816a84c7127d6d7a96a8965de0ca0",
        "ran_at": "2026-07-23T06:20:39Z",
        "aggregate_score": 4.7,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-20T05:17:47Z",
      "oldest_open_prs": [
        {
          "number": 174,
          "created_at": "2026-07-13T05:16:22Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 176,
          "created_at": "2026-07-20T05:18:21Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-14T08:17:31Z",
      "ci_last_conclusion": "SKIPPED",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/Turbootzz/Nimbus",
    "host": "github.com",
    "name": "Nimbus",
    "owner": "Turbootzz"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 63,
      "inputs": {
        "security": 47,
        "vitality": 89,
        "community": 41,
        "governance": 44,
        "engineering": 90
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 89,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "commits_last_year": 128,
              "human_commit_share": 0.67,
              "days_since_last_push": 3,
              "active_weeks_last_year": 25
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 3 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "25/52 weeks with commits",
                "points": 17.3,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 25
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "128 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 128
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "17 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 8,
              "latest_release_tag": "v1.2.3",
              "releases_from_tags": false,
              "days_since_latest_release": 24,
              "mean_days_between_releases": 31.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "8 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 24 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 24
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~31.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 31.2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 24,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 24 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 24
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 41,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 38,
            "inputs": {
              "forks": 4,
              "stars": 119,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "119 stars",
                "points": 33.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 119
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "4 forks",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "at_risk",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 44,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file present, not a recognized license",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "license_custom",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 44,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 15,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.989
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 99% of commits",
                "points": 0.2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "merged_prs": 87,
              "open_issues": 0,
              "closed_issues": 53,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 34
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "87/121 decided PRs merged",
                "points": 27.5,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 87,
                      "decided": 121
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/14 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 49,
            "inputs": {
              "followers": 5,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "Turbootzz",
              "public_repos": 40,
              "account_age_days": 2273
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "5 followers of Turbootzz",
                "points": 5.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 5,
                      "login": "Turbootzz"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "40 public repos, account ~6 yr old",
                "points": 23.7,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 40
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 6
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 90,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "eslint.config.mjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "29 out of 29 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "account-management",
                "dashboard",
                "services",
                "homepage"
              ],
              "has_wiki": true,
              "homepage": "https://nimbus.turboot.com",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://nimbus.turboot.com",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "4 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 47,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 47,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.7
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "29 out of 29 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 1/14 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "17 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 0.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "33 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 3
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 68,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 33,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.612,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "41 of 67 human commits state their intent (structured subject or explanatory body)",
                "points": 32.6,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 41,
                      "sampled": 67
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum",
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "backend/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "frontend/tsconfig.json"
              ],
              "agent_commit_share": 0.01,
              "toolchain_manifests": [
                "backend/go.mod"
              ],
              "dependency_bot_commit_share": 0.33
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, backend/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, backend/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "eslint.config.mjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "frontend/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "frontend/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "1 of the last 100 commits agent-authored or agent-credited",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 1,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "33 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 33,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 35349,
              "source_files_sampled": 201,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/201 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 201,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch go package 'github.com/nimbus/backend' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T06:20:56.535617Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/t/Turbootzz/Nimbus.svg",
  "full_name": "Turbootzz/Nimbus",
  "license_state": "custom",
  "license_spdx": null
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadas.