What we're building

Each project starts with a real problem and a dataset. We build the pipeline, train the models, deploy the infrastructure, and ship the interface.

01
Live

Tutela Ignis

Wildfire Prediction System

Domain: Environmental ML / Climate Science

Tutela Ignis is a deployed environmental-ML system, live at tutela.land. A multi-source pipeline ingests ERA5-Land reanalysis, IPMA weather, NASA FIRMS active detections, ICNF historical fires, Copernicus imagery, DEM terrain, land cover, and vegetation moisture into a 63-feature engineering pipeline. A seasonal XGBoost + LightGBM ensemble, with post-hoc probability calibration and a Bayesian prior shift at serving, predicts daily fire risk across continental Portugal at 1 km resolution, benchmarked honestly against a stratified skill ceiling. The public map serves real per-cell gridded weather and FWI from a nightly ERA5 cron. It runs on an NVIDIA GB10 Grace Blackwell node with nightly Azure disaster-recovery backups and hourly external health alerting.

  • Live public risk map at tutela.land
  • Seasonal XGBoost + LightGBM ensemble with calibrated probabilities
  • Full-fidelity per-cell gridded weather + FWI, refreshed nightly
  • GB10 Grace Blackwell serving with Azure DR + health alerting
PythonXGBoostLightGBMFastAPIPostGISPolarsCeleryAzure
63features
1kmgrid resolution
617tests passing
Visit tutela.land
02
Live

CIAITEX

Archival Document Management AI

Domain: Document AI / NLP / Computer Vision

CIAITEX processes municipal archival records through a 5-DAG Airflow pipeline. It ingests descriptive records and digital objects from the Archeevo API, then runs PP-OCRv5 for typed text, TrOCR-Large for handwriting, and DocLayout-YOLO for page layout analysis. Qwen3-VL 30B produces visual descriptions and Qwen3 32B enriches ISAD(G) archival metadata. Embeddings from E5-Large (text), SigLIP 2 (visual), and ColQwen2.5 (multi-vector) power semantic retrieval over Qdrant, and a Streamlit portal exposes 8 interactive pages including a LangGraph RAG chatbot for conversational search across the archive. Eleven models are orchestrated VRAM-aware on a single 32GB GPU.

  • 11 AI models across OCR, VLM, LLM, NER, and embeddings
  • VRAM-aware orchestration on a single 32GB GPU
  • Multi-vector retrieval: text + visual + ColBERT-style
  • LangGraph RAG chatbot over archival documents
PythonAirflowPyTorchQwen3PaddleOCRQdrantFastAPIStreamlitLangGraph
11ML models
5pipeline DAGs
114tests passing
03
Production

Government AI Infrastructure

Municipal MLOps & GPU Cluster

Domain: MLOps / Infrastructure

A k3s Kubernetes cluster on RTX 5090 GPU hardware, managed entirely through Flux CD GitOps and Ansible playbooks. It serves LLM inference via native Ollama and hosts the document-AI and conversational services for the municipality, exposed securely through Cloudflare Tunnel with browser-authenticated access. CI/CD runs on GitLab with an in-cluster runner, node provisioning is Ansible-automated, and the infrastructure is documented via MkDocs. Production-grade MLOps for local government: reproducible, version-controlled, and GPU-aware.

  • GitOps-managed Kubernetes with Flux CD
  • Native Ollama LLM inference serving
  • Ansible-automated GPU node provisioning
  • In-cluster GitLab CI/CD behind Cloudflare Tunnel
k3sFlux CDAnsibleOllamaDockerGitLab CICloudflareMkDocs
RTX 5090GPU
3+services
99%availability
04
Live

Municipal AI Avatar

Real-time Conversational Avatar

Domain: Conversational AI / Speech

A real-time 3D conversational avatar for citizen-facing public service at a Portuguese municipality. The browser frontend renders a TalkingHead + Three.js GLB avatar behind a login gate, captures microphone audio, and streams it to a FastAPI WebSocket backend on an RTX 5090 server. Speech is transcribed with faster-whisper (large-v3-turbo), reasoned over by a custom Ollama model (vfx-assistant, Qwen3 30B-A3B) grounded in municipal knowledge, and spoken back with multilingual neural TTS. The system auto-detects and answers in Portuguese, English, Spanish, or French. The static frontend ships on Cloudflare Pages and inference is reached through a Cloudflare Tunnel.

  • Real-time speech-to-speech in the browser
  • Custom municipal LLM persona (vfx-assistant, Qwen3 30B)
  • faster-whisper ASR + multilingual neural TTS
  • Auto language detection: PT / EN / ES / FR
Three.jsTalkingHeadFastAPIWebSocketOllamaQwen3faster-whisperEdge TTS
4languages
Qwen3 30BLLM
RTX 5090GPU