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}
+
+ ))}
+
+
+
+ )
+}
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"