Nastoupil Home Infrastructure — K3s cluster, Atlas AI, services
  • JavaScript 64.4%
  • TypeScript 20.1%
  • CSS 5.6%
  • Python 4.4%
  • Shell 3.1%
  • Other 2.3%
Find a file
bnas82 c323ef2bcf
feat(ci): OSV-Scanner on source deps — complements Trivy on built images (#439)
Closes the "source-level dependency CVEs that Trivy misses" gap identified
in the 2026-04-24 security-tool audit. Trivy scans built container images;
OSV-Scanner walks every package-lock.json / Cargo.lock / go.sum / etc. in
the repo and cross-references the OSV database. Catches:

- CVEs disclosed between container rebuilds (Trivy only sees what's baked
  into the current image)
- Build-time tooling that never ships in a container (tsx, npm audit tools,
  playwright harnesses)
- Transitive dep CVEs before they escalate to CRITICAL and get rebuild-
  triggered by Renovate

## Workflow

- PR: runs `osv-scanner-reusable-pr.yml` — diff-based, only emits findings
  introduced by the PR
- Push to master: `osv-scanner-reusable.yml` — full-repo scan, catches
  newly-disclosed CVEs on already-landed code
- Mon 12:00 UTC schedule: same as push behavior; offset from Mon 14:00
  Trivy-unfixed + Wed 15:00 TruffleHog so the three scans don't stack

Both publish to GitHub's code-scanning UI (Security tab) via SARIF.

## Action pin

google/osv-scanner-action@c518547 # v2.3.5

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 15:31:34 -05:00
.claude Initial commit: Nastoupil Home Infrastructure 2026-03-31 18:55:47 -05:00
.github feat(ci): OSV-Scanner on source deps — complements Trivy on built images (#439) 2026-04-24 15:31:34 -05:00
archive chore(deps): pin dependencies (#73) 2026-04-13 13:09:26 -05:00
audits docs(audits): grounded refresh of the consolidated open-work tracker (#413) 2026-04-24 10:20:16 -05:00
branding docs(branding): mark Phases 1-4 complete, 5 deferred, 6 pending manual 2026-04-18 06:58:00 -05:00
clusters/home chore(forgejo): INSTALL_LOCK=true + correct runbook §5 hardening guide (#438) 2026-04-24 15:20:51 -05:00
db/migrations fix(db): grant SELECT on public.memory_summaries to atlas_agent_role (migration 020) (#416) 2026-04-24 10:31:47 -05:00
docs chore(forgejo): INSTALL_LOCK=true + correct runbook §5 hardening guide (#438) 2026-04-24 15:20:51 -05:00
frigate security: resolve 20+ audit findings from 2026-04-08 security audit 2026-04-08 14:58:49 -05:00
ha fix(ha): rewire Sync Backup button to backup.create_automatic (HA_FIXES Bundle 8) (#426) 2026-04-24 11:58:53 -05:00
kiosk-local feat(atlas-ui): React tablet dashboards for 7 wall-mounted tablets (#218) 2026-04-17 13:33:02 -05:00
packages chore(deps): update dependency tsx to ^4.21.0 (#289) 2026-04-24 09:22:53 -05:00
scripts feat(docs): BookStack KB sync tooling + CI + operator runbook (#392) 2026-04-23 08:27:11 -05:00
services docs(atlas-ops): add README documenting current scope (closes IP-04) (#418) 2026-04-24 10:56:52 -05:00
tests/portal chore(deps): update dependency @playwright/test to ^1.59.1 (#288) 2026-04-24 09:16:44 -05:00
tools/migrator chore(deps): update node-base-images (#290) 2026-04-24 09:17:05 -05:00
vps fix(infra/forgejo): use dynamic nfs-truenas StorageClass + add VPS Caddy vhost (#436) 2026-04-24 13:55:16 -05:00
x.Archive/monitoring-legacy chore(deps): update patch-updates (#84) 2026-04-13 13:15:02 -05:00
.dockerignore Release/atlas v0.4 (#171) 2026-04-16 15:20:55 -05:00
.editorconfig refactor: modernize repo structure — services/, ha-packages/, centralized docs 2026-04-07 11:14:18 -05:00
.gitignore feat(ha): track TrueNAS ERROR-level alerts — closes HA_FIXES Bundle 4 (#422) 2026-04-24 11:23:54 -05:00
.gitleaks.toml feat(ci): Gitleaks secret scanning — W3 supply chain (1 of N) (#427) 2026-04-24 12:05:12 -05:00
.pre-commit-config.yaml feat(ci): Gitleaks secret scanning — W3 supply chain (1 of N) (#427) 2026-04-24 12:05:12 -05:00
.prettierrc refactor: modernize repo structure — services/, ha-packages/, centralized docs 2026-04-07 11:14:18 -05:00
.sops.yaml feat: bring all workloads under Flux GitOps management (#67) 2026-04-07 16:57:56 -05:00
.trivyignore fix(security): suppress CVE-2025-7783 (form-data) with documented justification 2026-04-17 08:04:49 -05:00
CLAUDE.md Health audit 2026-04-24: Synology, vikunja, trivy, PV cleanup (#408) 2026-04-24 07:58:22 -05:00
eslint.config.mjs Release/atlas v0.4 (#171) 2026-04-16 15:20:55 -05:00
package-lock.json chore(deps): update dependency tsx to ^4.21.0 (#289) 2026-04-24 09:22:53 -05:00
package.json chore(deps): update node.js to >=20.20.2 (#291) 2026-04-24 09:16:58 -05:00
README.md docs: reflect architecture-clean state (Charlie->Delta, three-tier storage, DNS hijack) (#353) 2026-04-21 21:09:00 -05:00
renovate.json chore(atlas-ops): bump @kubernetes/client-node 0.22 → 1.4 — closes form-data CVE-2025-7783 (#256) 2026-04-18 14:00:44 -05:00

Nastoupil Home

Homelab infrastructure and smart-home platform for a family of three in Houston, TX. Runs on a 3-node K3s cluster with ~60 services behind *.nastoupil.org. Source of truth is code and YAML; prose docs summarize and link.

What's here

  • K3s cluster — 3 nodes (alpha, bravo, delta) on Proxmox LXCs. Flux GitOps. Charlie remains a Proxmox host for the HAOS and Wazuh indexer VMs only.
  • Home Assistant — HAOS VM; 94 HAOP packages in ha-packages/packages/.
  • Atlas platform — 7 AI services in services/atlas-* (agent, voice, proactive, learning, security, ops, ui).
  • Edge — VPS running Caddy + Vaultwarden + ntfy + Pingvin Share + Gatus.
  • Family apps — Immich, Jellyfin, Mealie, Vikunja, Nextcloud, Paperless, Linkwarden, Navidrome, and the *arr stack.

Getting started

Repository layout

See docs/repo-structure.md. Short version:

Path Contents
ha-packages/packages/ Home Assistant packages (source of truth for HA)
clusters/home/ Flux-managed K8s manifests
services/atlas-*/ Atlas AI service source code
frigate/ Frigate NVR config
vps/ Edge host configuration
docs/ Prose documentation
scripts/ Operational utilities
x.Archive/ Superseded material

Conventions

  • Model string for Claude API calls is always claude-sonnet-4-20250514.
  • All services reach the internet via *.nastoupil.org behind Traefik (at home) or Caddy on the VPS (away).
  • Secrets are SOPS-encrypted with age; private key is in Vaultwarden.
  • No hardcoded values — config via env vars, K8s Secrets, or HA input helpers.

Project status

See docs/architecture/overview.md for current state. Roadmap items live only in the roadmap doc — do not assume they are implemented.

License / contact

Personal repository. Maintained by Brandon Nastoupil.