Skip to content
Federico MeiniReal-time systems, AI agents & more
  • Services
  • Work
  • Blog
  • About
IT
  • Services
  • Work
  • Blog
  • About
  • Contact
Work with me→(opens in a new tab)

Writing

Notes from production

Long-form, practical posts on the systems I build: real-time messaging, WhatsApp, Postgres and Elasticsearch at scale, AI agents and how to evaluate them.

  • #elixir 6
  • #ai-agents 5
  • #llm-evals 3
  • #whatsapp 3
  • #oban 2
  • #partitioning 2
  • #performance 2
  • #postgresql 2
  • #python 2
  • #authentication 1
  • #backpressure 1
  • #broadway 1
  • #computer-architecture 1
  • #education 1
  • #freelance 1
  • #guardrails 1
  • #llm 1
  • #llm-as-judge 1
  • #lua 1
  • #medgemma 1
  • #multi-agent 1
  • #oauth 1
  • #phoenix 1
  • #sandboxing 1
  • #self-hosting 1
  • #testing 1
  • #typescript 1
  • #ueberauth 1
  • #vllm 1
  • #webhooks 1
  • RSS feed
  • 16 Sept 2026

    Testing a medical triage agent with LangWatch Scenario and pytest

    How I test a medical triage AI agent with LangWatch Scenario: a simulated user, judge criteria, scripted and free-running conversations, in pytest and CI.

    8 min read#ai-agents#llm-evals#python

    →
  • 3 Sept 2026

    Building a reliable WhatsApp Cloud API webhook receiver at scale

    How to build a WhatsApp Cloud API webhook receiver that holds up: signature checks on the raw body, fast 200s, dedup, per-contact ordering and media handling.

    7 min read#whatsapp#webhooks#elixir

    →
  • 27 Aug 2026

    Backpressure in Elixir: sending millions of WhatsApp messages without falling over

    Designing a bulk WhatsApp send engine in Elixir: demand-driven Broadway pipelines, per-number token buckets, retries with jitter and batched status tracking.

    8 min read#elixir#whatsapp#backpressure

    →
  • 18 Aug 2026

    How to partition a 1 TB PostgreSQL table without downtime: the default-partition method

    Partition a live 1 TB Postgres table without downtime: attach it as the DEFAULT partition, copy history out with Oban jobs, then swap in one short transaction.

    9 min read#postgresql#partitioning#performance

    →
  • 12 Aug 2026

    PostgreSQL partitioning in practice: partition keys, pruning, indexes and retention

    How PostgreSQL partitioning behaves in practice: choosing the key and size, checking pruning with EXPLAIN, indexes, keys, retention and the Ecto gotchas.

    8 min read#postgresql#partitioning#performance

    →
  • 4 Aug 2026

    Letting AI agents run code safely in Elixir with tv-labs/lua

    How tv-labs/lua gives AI agents a sandboxed Lua runtime inside Elixir: exposing safe functions, setting limits and wiring code execution into the agent loop.

    7 min read#elixir#ai-agents#lua

    →
  • 22 Jul 2026

    Serving MedGemma 27B on Modal: FP8, vLLM sleep mode and 21-second cold starts

    How I self-host MedGemma 27B as a scale-to-zero, OpenAI-compatible API on Modal: FP8 quantisation, GPU snapshots, two vLLM bugs and Gemma 3 tool calling.

    10 min read#llm#vllm#self-hosting

    →
  • 14 Jul 2026

    Designing AI agents that know when to hand over: to other agents, to rules, to humans

    A practical architecture for AI agents that hand over safely: multi-agent transfers, a deterministic rules engine for high-risk calls, sandboxed tools, evals.

    8 min read#ai-agents#multi-agent#guardrails

    →
  • 30 Jun 2026

    Simulation evals: letting an LLM play the user to test your chatbot before real users do

    How to build simulation evals for LLM chatbots: persona-driven simulated users, LLM-as-judge rubrics, error rates for high-stakes flows and a feedback loop.

    8 min read#ai-agents#llm-evals#llm-as-judge

    →
  • 17 Jun 2026

    CPUSim: the CPU simulator I built for Zanichelli

    I was reminded today of CPUSim, a browser CPU simulator I built for Zanichelli in 2020 to show students how machine code runs, one glowing register at a time.

    5 min read#freelance#education#computer-architecture

    →
  • 12 Aug 2021

    Keeping custom state across the Überauth OAuth flow in Elixir

    Überauth now uses the OAuth state parameter for CSRF protection, so custom state gets overwritten. Keep it in the session between request and callback instead.

    1 min read#elixir#ueberauth#oauth

    →

Available for freelance work

Have a system that needs to scale, or an agent that needs to be trusted?

Start a conversation →(opens in a new tab)How engagements work

Services

  • WhatsApp Business Platform
  • Real-time systems
  • PostgreSQL & Elasticsearch
  • AI agents & evals
  • Agentic coding

Site

  • Selected work
  • Blog
  • About
  • Contact

Elsewhere

  • GitHub
  • LinkedIn
  • Email
  • RSS

For machines

  • llms.txt
  • llms-full.txt
  • Sitemap
© 2026 Federico Meini · VAT IT01966540492No cookies. Static HTML, cookieless analytics.