Infra Management Portal

URL: infra.zintegrowana.online (Vercel, auto-deploy from main)

What it is

Password-protected single-page dashboard for infrastructure ops:

  • Service status — live health checks against WAHA, n8n, Grafana, Traccar (polls every 30s)
  • Quick links — one-click access to each service’s UI
  • SSH info — VPS connection details
  • Docs — MkDocs Material static site served at /docs/

Auth

Supabase Auth (project mwkqmgadqnkkihjdeqsi). Email/password only.

Add authorized users: Supabase dashboard → Authentication → Users → Invite user.

First-time setup

1. Create Vercel project

cd portal
npx vercel --yes
# Follow prompts — link to Vercel account
# Note: VERCEL_PROJECT_ID shown after first link

2. Add Vercel environment variables

NEXT_PUBLIC_SUPABASE_URL = https://mwkqmgadqnkkihjdeqsi.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY = <anon key from Supabase dashboard>

3. Add GitHub Secrets for CI

SecretValue
VERCEL_TOKENVercel API token
VERCEL_ORG_IDVercel team/org ID
VERCEL_PORTAL_PROJECT_IDProject ID from step 1

4. Set custom domain in Vercel

Vercel dashboard → Project → Domains → Add infra.zintegrowana.online

Vercel gives you a CNAME target (e.g. cname.vercel-dns.com).

5. Add DNS record

python3 /opt/p24-infra/scripts/dns-manager.py upsert "infra.zintegrowana.online" <vercel-cname-target>

(Or add manually in Cloudflare: CNAME infra → Vercel target, proxied OFF)

Local development

cd portal
cp .env.example .env.local
# Fill in NEXT_PUBLIC_SUPABASE_ANON_KEY
npm install
npm run dev
# → http://localhost:3000

MkDocs build

pip install mkdocs-material
cd portal
mkdocs build
# Output: portal/public/docs/
# Served by Next.js at /docs/ (excluded from auth middleware)

Files

portal/
├── lib/services.ts         # Service definitions — edit to add/remove monitored services
├── pages/dashboard.tsx     # Main dashboard
├── pages/api/health/       # Health check proxy (server-side HTTP pings)
├── components/             # ServiceStatusCard, QuickLinkCard, SshBlock
└── mkdocs.yml              # Points at ../docs/ as source

Adding a new monitored service

Edit services.ts — add entry to SERVICES array. No other changes needed.