From 252e535f231c9d51522523f9e953bd7fc61001c2 Mon Sep 17 00:00:00 2001 From: Janpeter Visser <30029041+madhura68@users.noreply.github.com> Date: Wed, 13 May 2026 21:42:24 +0200 Subject: [PATCH 1/2] fix(deploy): install dev deps voor TypeScript-build, prune erna MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `npm ci --omit=dev` voor `npx tsc` faalde omdat TypeScript in devDependencies zit. npx probeerde de typo-squatter `tsc@2.0.4` te installeren. Nu: volledige install → tsc → prune --omit=dev voor slanke runtime. Co-Authored-By: Claude Opus 4.7 (1M context) --- deploy/ops-agent/setup.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/deploy/ops-agent/setup.sh b/deploy/ops-agent/setup.sh index b27c4fe..e674be2 100644 --- a/deploy/ops-agent/setup.sh +++ b/deploy/ops-agent/setup.sh @@ -20,13 +20,16 @@ rsync -a --delete \ --exclude=.git \ "${REPO_DIR}/ops-agent/" "${INSTALL_DIR}/" -echo "==> Installing Node dependencies" +echo "==> Installing Node dependencies (incl. dev for tsc)" cd "${INSTALL_DIR}" -npm ci --omit=dev 2>/dev/null || npm install --omit=dev +npm ci 2>/dev/null || npm install echo "==> Building TypeScript" npx tsc +echo "==> Pruning dev dependencies" +npm prune --omit=dev + chown -R ops-agent:ops-agent "${INSTALL_DIR}" echo "==> Installing config dir" From 656aa27a7fb62285b6fde6d7b2662c984db58026 Mon Sep 17 00:00:00 2001 From: Janpeter Visser <30029041+madhura68@users.noreply.github.com> Date: Wed, 13 May 2026 21:42:24 +0200 Subject: [PATCH 2/2] feat(routes): index pages voor /flows en /settings Beide routes hadden alleen sub-pages; /flows en /settings zelf gaven 404. Minimale index met kaartjes naar de bestaande sub-routes, consistent met het home-dashboard. Onderdeel van IDEA-060 voor een rijkere indexering later. Co-Authored-By: Claude Opus 4.7 (1M context) --- app/flows/page.tsx | 46 +++++++++++++++++++++++++++++++++++++++++++ app/settings/page.tsx | 41 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 app/flows/page.tsx create mode 100644 app/settings/page.tsx diff --git a/app/flows/page.tsx b/app/flows/page.tsx new file mode 100644 index 0000000..05848fe --- /dev/null +++ b/app/flows/page.tsx @@ -0,0 +1,46 @@ +import Link from 'next/link' +import { redirect } from 'next/navigation' +import { getCurrentUser } from '@/lib/session' + +export const dynamic = 'force-dynamic' + +const FLOWS = [ + { + href: '/flows/update-scrum4me-web', + title: 'Update Scrum4Me website', + desc: 'Pull main, build, restart container, run smoke tests', + }, + { + href: '/flows/update-caddy-config', + title: 'Update Caddy config', + desc: 'Reload Caddy met nieuwe Caddyfile + cert renewal check', + }, +] + +export default async function FlowsIndex() { + const user = await getCurrentUser() + if (!user) redirect('/login') + + return ( +
+
+
+

Flows

+

Multi-step deployments met dry-run en audit-log

+
+
+ {FLOWS.map((f) => ( + +

{f.title}

+

{f.desc}

+ + ))} +
+
+
+ ) +} diff --git a/app/settings/page.tsx b/app/settings/page.tsx new file mode 100644 index 0000000..5c57740 --- /dev/null +++ b/app/settings/page.tsx @@ -0,0 +1,41 @@ +import Link from 'next/link' +import { redirect } from 'next/navigation' +import { getCurrentUser } from '@/lib/session' + +export const dynamic = 'force-dynamic' + +const SETTINGS = [ + { + href: '/settings/backups', + title: 'Backups', + desc: 'Postgres dumps en restore-runbook', + }, +] + +export default async function SettingsIndex() { + const user = await getCurrentUser() + if (!user) redirect('/login') + + return ( +
+
+
+

Settings

+

Configuratie en onderhoud

+
+
+ {SETTINGS.map((s) => ( + +

{s.title}

+

{s.desc}

+ + ))} +
+
+
+ ) +}