Portfólio
⚡ SERVER INFRASTRUCTURE MANAGEMENT

AI Supervisor
Controlo total do servidor

Painel técnico de monitorização e gestão de infraestrutura de IA — Docker, GPU, Serviços, Rede, Backups, Câmeras e Alertas num único dashboard em tempo real, construído com FastAPI + React + WebSockets.

FastAPI React 18 WebSockets Docker SDK NVIDIA GPU JWT Auth Ollama LLM psutil OpenCV QNAP NAS
15
Módulos ativos
3s
Intervalo WS live
30+
API endpoints
8
AI Services
JWT
Auth HS256
🏗️ Arquitetura Técnica

Stack full-stack assíncrono

Frontend React 18 + Vite comunica com backend FastAPI (Python) via REST e WebSocket. O backend agrega dados de Docker SDK, psutil, nvidia-smi e systemctl em tempo real.

FRONTEND — React 18 + Vite
├── React Router 6 // 15 rotas
├── Axios // JWT interceptor automático
├── Recharts // time-series charts
├── Tailwind CSS // dark theme vars
└── WS nativo // live metrics a 3s

BACKEND — FastAPI (Python 3)
├── Uvicorn // ASGI server :9100
├── Docker SDK // Unix socket
├── psutil // CPU/RAM/Disk
├── pynvml // GPU VRAM/temp/util
├── OpenCV + face_rec // câmeras
├── bcrypt + PyJWT // auth HS256 24h
├── smtplib + SMS API // alertas
└── CIFS + rsync // backup QNAP

STORAGE — File-based
├── users.json // bcrypt, lockout, flags
├── secret.key // 48-byte hex random
└── *.json configs // alertas, câmeras, VRAM
Login
🔐 Login — JWT + bcrypt + rate limiting
24h
Token expiry
5
Max tentativas / 15min
30min
Lockout após 10 falhas
📊 Dashboard Principal

Visão em tempo real via WebSocket

Ao entrar, o dashboard agrega métricas de CPU, RAM, Disco, GPU, estado dos serviços AI e containers Docker — atualizados automaticamente cada 3 segundos via WebSocket ws://…/ws/live.

Narração técnica: "O dashboard central do AI Supervisor apresenta em tempo real todos os indicadores críticos do servidor: uso de CPU e RAM com historial de 60 amostras, estado da GPU NVIDIA com VRAM/temperatura/utilização, e a grelha de saúde dos serviços que agrega AI Services, Docker Containers, portas abertas e alertas ativos. Os dados chegam via WebSocket broadcast a 3 segundos — sem polling."
Dashboard
📊 Dashboard — live metrics, service health, charts Recharts
3s
WebSocket broadcast interval
60
Ring buffer samples (CPU/RAM/GPU)
4
Top KPI cards (CPU/RAM/Disk/GPU)
6
Service health tiles
WebSocket Live Feed
Endpoint WS /ws/live faz broadcast para todos os clientes conectados a cada 3 segundos com CPU %, RAM %, GPU util e VRAM.
📈
Métricas Ring Buffer
Backend mantém 60 amostras em memória para CPU, RAM, GPU utilization e VRAM %. Visualizadas com Recharts line charts.
🩺
Service Health Grid
Grelha 2×3 com status de AI Services, Docker Containers, System Services, GPU, Network Ports e Alertas — com contadores live.
🖥️
Top KPI Cards
CPU (% + cores + freq), RAM (GB used/total + swap), Disk (GB + %), GPU (VRAM + temp + util) — dados via psutil + pynvml.
🧠 AI Services

Controlo de 8 serviços de IA

Gestão centralizada de todos os serviços de IA a correr no servidor — Ollama, Whisper, Piper TTS, Edge-TTS, XTTS, Emotion Engine, Wakeword e AI Router — com start/stop/restart e logs em tempo real.

Narração técnica: "O módulo AI Services descobre automaticamente os 8 serviços de IA configurados, verifica o estado via healthcheck HTTP em cada porta, e permite start/stop/restart via systemctl ou Docker. O administrador vê o uptime de cada serviço, o porto onde está a ouvir, e pode aceder aos logs da última sessão sem sair do painel."
AI Services
🧠 AI Services — healthcheck + start/stop/logs
AI Services registados:
├── Ollama :11434 LLM inference
├── Whisper STT :10300 speech-to-text
├── Piper TTS :10200 offline TTS
├── Edge-TTS :10201 Azure neural
├── XTTS :8020 advanced TTS
├── Emotion :5055 sentiment analysis
├── Wakeword :10400 voice activation
└── AI Router :8090 unified API GW
GET /api/services/ai POST /start|stop|restart GET /logs
🐳 Docker Management

Gestão de containers via Docker SDK

Lista, controla e monitoriza todos os containers Docker em execução — com acesso a logs, stats de CPU/memória por container, e operação bulk para iniciar todos os stacks de uma vez.

Narração técnica: "A integração Docker usa o Docker SDK for Python via Unix socket para comunicação direta com o Docker daemon. O painel lista todos os containers com status, imagem, portas expostas e o diretório docker-compose de origem. Cada container tem ações start/stop/restart e acesso aos logs. O botão 'Start All Stacks' executa o script ~/start_all_docker_stacks.sh para subir toda a infraestrutura de uma vez."
Docker
🐳 Docker Containers — status, logs, start/stop/restart, bulk ops
📋
Container List
Lista completa com status (running/stopped), imagem, portas, labels e diretório compose de origem via Docker SDK.
📝
Logs em Tempo Real
Endpoint GET /api/docker/containers/{name}/logs com número configurável de linhas via journalctl.
📊
Container Stats
CPU % e memória por container via GET /api/docker/containers/{name}/stats — dados diretos do Docker daemon.
🚀
Start All Stacks
Operação bulk que executa o script de inicialização de toda a infraestrutura — útil após reboot do servidor.
🎮 GPU & VRAM Management

NVIDIA GPU monitoring e gestão automática de VRAM

Monitorização completa da GPU NVIDIA via pynvml — utilização, VRAM, temperatura, power draw, fan speed e P-State. O VRAM Manager descarrega automaticamente serviços de IA inactivos para libertar memória.

Narração técnica: "O módulo GPU usa a biblioteca pynvml para leitura direta dos contadores NVIDIA sem depender de nvidia-smi subprocess. O VRAM Manager é um watchdog assíncrono que corre a cada 30 segundos: compara o timestamp de última actividade de cada serviço com o timeout configurado e, se excedido, envia stop ao serviço. O resultado é uma pool de VRAM dinâmica que se rearticula consoante os serviços em uso."
GPU Monitor
🎮 GPU Monitor — util/VRAM/temp/power/pstate
VRAM Manager
⚡ VRAM Manager — auto-unload idle AI services
30s
Watchdog check interval
2min
Idle timeout (Emotion/Whisper/XTTS)
5min
Idle timeout (Wakeword)
pynvml
GPU data source
VRAM Manager — configuração por serviço:

Emotion Engine idle_timeout=120s auto_stop=true // descarrega se inativo
Whisper STT idle_timeout=120s auto_stop=true // liberta VRAM após uso
XTTS idle_timeout=120s auto_stop=true // modelo grande, liberta
Ollama idle_timeout= auto_stop=false // controlo manual
Wakeword idle_timeout=300s auto_stop=false // desativado por defeito
🔧 Infraestrutura

Disco, rede e serviços de sistema

Análise de disco com cleanup automático, gestão de interfaces de rede e portas abertas, controlo completo de serviços systemd com journalctl e visualização de logs agregados do servidor.

Disk Manager
💾 Disk Manager — análise + cleanup + migração
Network
🌐 Network — interfaces + portas abertas
System Services
⚙️ System Services — systemctl + journalctl
Metrics
📈 Metrics — time-series CPU/RAM/GPU charts
Logs
📄 Logs — agregação de logs do sistema
💾
Disk Manager
Análise de partições, tamanhos de imagens/volumes Docker, cleanup de imagens dangling, scanner de ficheiros grandes e migração de volumes.
🌐
Network & Ports
Lista interfaces de rede com estatísticas, portas abertas com PIDs e nomes de serviço, e verificador de disponibilidade por porta.
⚙️
System Services
Controlo de serviços systemd (start/stop/restart/enable/disable) com logs via journalctl em tempo real.
📈
Metrics History
60 amostras de CPU, RAM e GPU em ring buffers visualizados como time-series charts com Recharts. Dados via GET /api/metrics.
🗄️ Backup & Restore

Backup automático para QNAP NAS via CIFS

Backups completos de serviços, bases de dados MariaDB, volumes Docker e pastas de dados para NAS QNAP via CIFS/rsync — com restore seletivo por serviço ou base de dados.

Narração técnica: "O módulo de Backup monta shares CIFS do QNAP NAS e executa rsync para copiar dados de serviços configurados, executa mysqldump para cada base de dados MariaDB, e arquiva os YAMLs docker-compose. Os backups são catalogados em JSON com metadados de tamanho e data. O restore é seletivo — podes restaurar uma única base de dados ou apenas os dados de um serviço específico sem afetar os restantes."
Backup
🗄️ Backup & Restore — QNAP NAS + rsync + mysqldump
Serviços com backup configurado:
nextcloud · vaultwarden · bookstack
n8n · taiga · wordpress
nginx-proxy · mariadb
wireguard · portfolio · mmia

Targets de backup:
Manual: /mnt/qnap_backup_manual
Auto: /mnt/qnap_backup_auto

O que é incluído:
Docker compose YAMLs
Data folders (/srv/dev-disk-*/data)
MariaDB dumps (mysqldump)
Docker root configuration
📹 Vigilância & Câmeras

Vigilância IP com face recognition e motion detection

Sistema de videovigilância com suporte a câmeras RTSP/HTTP, detecção de movimento via OpenCV, reconhecimento facial com face_recognition + dlib, e notificações automáticas por email.

Narração técnica: "O módulo de câmeras usa OpenCV para capturar frames de streams RTSP ou HTTP. A detecção de movimento compara frames consecutivos por limiar de pixels configurável. O reconhecimento facial usa a biblioteca face_recognition para comparar encodings com a base de dados de rostos conhecidos. Quando deteta um rosto desconhecido ou movimento, dispara notificação por email com snapshot. Câmeras Android podem auto-registar-se via API."
Cameras
📹 Camera Surveillance — RTSP/HTTP, motion, face recognition, events
🎥
MJPEG Live Stream
Proxy MJPEG via GET /api/cameras/{id}/stream para qualquer câmera RTSP/HTTP — sem plugins no browser.
🏃
Motion Detection
OpenCV frame diff com limiar configurável de pixels. Regista evento com timestamp e thumbnail. Notifica por email se ativo.
👤
Face Recognition
Base de dados de rostos conhecidos com encodings dlib. Distingue "rosto conhecido", "rosto desconhecido" e "nenhum rosto". Alerta separado por tipo.
🤖
AI Activity Analysis
Análise de actividade via Ollama vision models — descreve o que está a acontecer na câmera em linguagem natural.
📱
Android Camera
Telemóveis Android registam-se como fontes de câmera via POST /api/android/register.
🔍
Auto-Discovery
Scan automático da rede local para descobrir câmeras IP com deteção de marca e sugestão de credenciais por defeito.
🔔 Sistema de Alertas

Alertas por thresholds com recomendações de IA

Thresholds configuráveis por métrica (CPU, RAM, GPU, VRAM, Disco, Temperatura) com dois níveis (Warning/Critical), notificação por email SMTP e SMS Gateway, cooldown anti-spam e análise por LLM local.

Settings
🔔 Settings & Alerts — SMTP, SMS, thresholds, IA recs
Thresholds configuráveis:
cpu_percent warn=75% crit=90%
ram_percent warn=80% crit=95%
gpu_util warn=85% crit=95%
gpu_temp warn=75°C crit=85°C
vram_percent warn=80% crit=90%
disk_percent warn=75% crit=90%

Canais de notificação:
Email SMTP (HTML formatado)
SMS Gateway API
Ollama AI recommendations

Anti-spam:
cooldown configurável (min) + histórico 200 alertas
🔐 Segurança & Autenticação

JWT + bcrypt + rate limiting + audit log

Sistema de autenticação production-ready com JWT HS256, bcrypt 12 rounds, rate limiting por IP, lockout automático por falhas repetidas, e audit log completo de logins.

Narração técnica: "A segurança foi desenhada para resistir a ataques de força bruta: o IP que exceder 5 tentativas falhadas em 15 minutos recebe HTTP 429; depois de 10 falhas consecutivas a conta é bloqueada por 30 minutos. O JWT usa uma chave de 48 bytes gerada aleatoriamente no primeiro arranque, armazenada com permissões 0o600. O audit log guarda os últimos 200 eventos de login com IP, timestamp e resultado — acessível apenas a superusers."
🔑
JWT HS256 — 24h
Token gerado com chave de 48 bytes aleatória (secret.key, mode 0o600). Expira em 24h. Axios injeta automaticamente em todos os headers.
🔒
bcrypt 12 rounds
Passwords armazenadas com bcrypt (12 rounds) no users.json com permissões 0o600. Nunca guardadas em plain text.
🛡️
Rate Limiting por IP
Máximo 5 tentativas falhadas por IP em janela de 15 minutos. Excedido → HTTP 429. Implementado sem middleware externo.
🔓
Account Lockout
10 falhas consecutivas bloqueiam a conta por 30 minutos. Estado guardado em users.json com timestamp de desbloqueio.
📋
Audit Log
Últimos 200 eventos de login em memória (IP, timestamp, resultado, user-agent). Acessível via GET /api/auth/login-audit — só superusers.
🔄
Force Password Change
Flag must_change_password no user JSON. Modal bloqueia o app até o utilizador definir nova password via POST /api/auth/change-password.
🚀 Launcher & Apresentação

Lançamento de aplicações e demo integrada

Painel de lançamento rápido de aplicações e scripts configurados, mais uma página de apresentação interna com informação do sistema e versão da plataforma.

Launcher
🚀 Launcher — lançamento rápido de apps e scripts

Sidebar — 15 Módulos

Dashboard · Lançamentos · AI Services
Containers · Gestor de Disco · Backup
GPU Monitor · Network · System Services
VRAM Manager · Metrics · Logs
Settings · Cameras · Info

Footer: MagWeb · v{version}
React Router 6 PrivateRoute wrapper Collapsible mobile GET /api/version
⚡ AI SUPERVISOR — STACK COMPLETO

Infraestrutura de IA
sob controlo total

FastAPI + React + Docker SDK + NVIDIA pynvml + OpenCV + Ollama + QNAP CIFS — um painel único para gerir toda a infraestrutura de IA do servidor em tempo real.

WebSocket Live
Push de métricas a 3s para todos os clientes conectados via WS /ws/live.
🧠
8 AI Services
Ollama, Whisper, Piper, Edge-TTS, XTTS, Emotion, Wakeword, AI Router.
🎮
VRAM Manager
Watchdog async descarrega serviços idle — pool VRAM dinâmica.
🐳
Docker SDK
Comunicação direta via Unix socket — sem invocação de CLI.
🗄️
QNAP Backup
CIFS + rsync + mysqldump para NAS com restore seletivo por serviço.
📹
Face Recognition
OpenCV + dlib para detecção de movimento e reconhecimento facial.
🔐
JWT + bcrypt
HS256 24h, 12 rounds, rate limiting por IP, lockout 30min.
🔔
Alertas IA
Thresholds + SMTP + SMS + Ollama LLM recommendations.
FastAPI 0.110 React 18.3 TypeScript 5.4 Python 3 psutil 5.9 pynvml 11.5 Docker SDK 7.0 bcrypt + PyJWT OpenCV 4.9 Vite 5.3 Recharts 2.12 Tailwind 3.4 Uvicorn 0.29