This site, designed, built and operated single-handedly, is a showcase running in production. A LangGraph agent (FastAPI, PostgreSQL/pgvector, persisted conversation memory) answers recruiters about my background, assesses how well a job offer fits and drafts a contact message. Multi-provider LLM chain with automatic fallback (Claude first, then Gemini and Mistral) and prompt caching, for an inference cost under half a euro cent per answer. A prompt-injection classifier (ONNX Runtime, 24 ms) picked from 7 benchmarked models: on a held-out set, recall goes from 10% to 73% without blocking a single real question. RAG evaluation by an LLM judge (grounding, completeness, no invention) on 38 gold cases, 35 passed, rerun on every model change; a private monitor extracts candidate cases from real conversations. A Cloudflare Worker (Hono, D1, KV, Workers AI, scheduled jobs) serves a public MCP server that any compatible client can query, plus a daily AI news digest and a radar of AI-ecosystem signals. Self-hosted Langfuse and OpenTelemetry monitoring, inference cost tracking, 20 documented architecture decisions (ADRs), CI on a self-hosted runner.
4 applications in production · 2 private MCP servers
Four private applications built and operated single-handedly (FastAPI, HTMX, over 3,000 tests): a stock screener, a business application encrypted at rest, a monitor for the site’s agent and an operations dashboard. Two of them embed a tool-using agent written without a framework and expose a private MCP server protected by OAuth, where every write waits for human confirmation.
MCP
OAuth
AI agents
Claude
Human-in-the-loop
FastAPI
HTMX
DuckDB
SQLCipher
n8n
Docker
In production
-
HistText
Large-Scale Text Analysis Platform
Full-stack platform for large-scale analysis of historical Chinese texts (over 15 million documents, 20 billion words). High-performance Rust backend, REST API, React interface with interactive visualizations (network graphs, timelines), Apache Solr full-text search engine, multilingual NER pipeline, and an R client package (histtext) distributed from GitLab. Deployed to over 200 users in the international digital-history research community as part of the ENP-China project (ERC Advanced Grant), then backed by an ERC Proof of Concept grant to bring it to market.
Curated selection of NLP resources dedicated to event extraction: papers, datasets, models and code. A reference widely used by the international NLP research community, with 580 GitHub stars as of 3 September 2026. Maintained from 2019 to 2024.
Command-line tool that installs, inside a repository, the decision and evidence record of a project that ships AI: why this model, which evaluation justifies a threshold, which cost limit, which fallback. An always-installed core (decision records, a claim-to-evidence index separating measured from estimated and unknown, a checksum manifest) plus five optional modules chosen from the project’s risks. Registers are plain CSV reviewed in a pull request, the structural check runs in CI. Python 3.10+, published on PyPI.
Public mirror of the site’s tech watch, published as bilingual Markdown on GitHub. A dependency-free Node script, triggered twice a day by GitHub Actions, calls the public routes of the Cloudflare Worker that computes the watch, renders the day’s news digest, then archives the completed day with numbered source references, day-to-day navigation and a monthly index. On Sundays the weekly recap replaces the daily digest.
Tool suite transforming scanned images of historical newspapers into semantically enriched corpora. Complete pipeline: OCR via Google Cloud Vision, interactive web annotation interface with keyboard shortcuts, export to standard formats (CoNLL, JSON). Designed for complex multilingual documents (Chinese, English, French).
The largest manually annotated NER dataset of historical Chinese newspapers from the transitional period (1872-1949), per the LREC-COLING paper: 196 Shenbao documents, 6,491 entities (persons, places, organizations, dates) over 121,971 characters, with entity linking and coreference. Automated quality-control pipeline, reproducible benchmarks with fine-tuned BERT models, and data freely available to the community.
Fine-tuning of segmentation models for transitional Chinese, in collaboration with Academia Sinica. Reaches an F-score above 83%, +35 points over the Jieba tokenizer, exploring various domain-adaptation strategies for an under-documented linguistic variety.
Data-augmentation framework simulating the OCR artifacts (character substitutions, deletions, insertions) observed in digitized historical documents. Reduces the impact of OCR errors by 50% on NER and classification tasks, with a standardized benchmark to evaluate model robustness.
Transfer Learning & Adaptation to the Historical Domain
ML Development & Optimization
Study of model transfer methods for NER on historical documents (out-of-domain genres, noisy OCR, older variants of the language), depending on the effort invested: describing the target data, annotating a few texts or matching pre-training resources. Experiments with Transformers on the LitBank and HIPE historical datasets: 250 annotated sentences recover 93% of the full-data performance, and OCR errors are handled by simulating noise during pre-training and with character-aware Transformers.