I founded Selvren and lead its build with a team of AI coding agents: the architecture, the rules, the merge gate and the review are mine. Teams ask domain experts that read their own private documents — and every claim is checked against its sources before it’s shown.
3,182commits in 11 weeks
11,901tests in the merge gate, none skipped
28architecture decision records
0.96recall@6 on private retrieval (from 0.65)
Founder & CEO
Product direction
Architecture decisions
Merge gate & review
AI agents write most of the code
Consultation screen from the landing I designed — illustrative content: two experts plus a private document, a cited answer, and “missing information” when the sources fall short.
Experts
Built from attested sources. Two are live — aquarium keeping and garden centre — more in preparation. One question can call up to three.
Where teams work
Dashboard, private API and MCP are live. Slack and Teams connectors are built and stay switched off until a customer needs them.
Private by design
Originals encrypted, access re-checked after every retrieval, conversations kept 30 days, export and erasure built in.
1Clients
Dashboard (TanStack Start + Clerk), private API keys — hashed, scoped, revocable — and MCP.
2API
Fastify /v1, one modular app: identity, knowledge, licensing, notifications, catalogue.
PostgreSQL 17 + pgvector, 112 tables, row-level security; the app role can only call vetted functions.
5Retrieve
Private documents and the expert catalogue merged by rank fusion; access rights re-checked after retrieval.
6Answer
Mistral drafts, a rule-based verifier checks each claim; it abstains or quotes when sources are thin. Bring your own key.
Measured, not guessed
recall@6
before 0.65 after 0.95
MRR
before 0.44 after 0.71
Adding a context prefix before embedding — synthetic set of 56 questions over 104 passages.
Engineering rigor
A merge gate on a VPS: 9 core steps + 5 security steps (secrets, SBOM, dependency audits).
1,197 TypeScript test files (~9,800 cases) and 82 Python test files (1,138 cases).
GDPR: data export and erasure, 30-day retention for conversation content.
Outbound traffic limited to six allowed hosts.
Decisions I made — and why
Each choice is written down as an architecture decision record before the agents build it. Six of them:
ADR-0005A modular monolith first
Small team, boundaries still moving: one app with 14 strict modules, simple transactions and tests, async work extractable later.
ADR-0016Mistral, directly
Testing showed that asking a router for a Mistral model didn’t mean Mistral ran it — other providers did. Generation now goes straight to Mistral.
ADR-0021Benchmark, then switch
Expert retrieval moved from term matching to vectors after a benchmark on 1,927 attested passages and 60 French questions — about $0.06 of embeddings.
ADR-0023Useful answers, verified claims
Answers may paraphrase and combine sources, but every claim traces to a passage; numbers, dates, conditions and negations are checked, or it abstains.
ADR-0028 · 0029European, self-hosted, observable
Production on a VPS in Germany; Grafana, Loki, Tempo, GlitchTip and the status page on a second one in Lithuania, so alerts survive an outage. Private originals on Backblaze B2, Amsterdam.
ADR-0032Subscriptions on quote
Stripe invoices by card or SEPA with VAT handled. Live payments stay off until I switch them on myself — no agent touches a live key.
The codebase
3apps — API, web, widget
14modules
143database migrations
27API contracts
146delivery records
449docs
Audited before opening
1 AugPre-launch audit: NO-GO, 3.1/10. It became the roadmap.
17 SepEnterprise knowledge and retrieval audit.
23 SepUI/UX audit of the public site.
25 SepLaunch readiness: the site can be shown, 101 pages with no broken link — and five blockers to clear before opening the product.
Expert paging and a persistent Metal pool to run MoE models that don’t fit in GPU memory on Apple Silicon — up to a 58 GiB model on a 48 GB Mac, with output identical to llama.cpp without MoEVM.
I take freelance projects: I design, build and ship AI tools wired into the software your team already uses. Also open to joining a team or a startup that needs someone who builds — remote-first today, regular stays in Seoul, and a move to Korea ahead.
AI executive assistant inside WhatsApp, hosted in France.
Context
SouverainIA’s founder wanted an AI executive assistant for SME leaders that lives where they already work — WhatsApp — with every byte hosted in France.
What I did
Built the product solo: Python backend, WhatsApp (Meta) integration, a “Chef IA” that sets daily priorities and sends nightly summaries.
Brand and the full site: Next.js static export, industry pages, a “Bastide vs public AI” comparison, a security page.
An SEO + AI-search content loop: scheduled drafts, competitor watch and a monthly visibility report — nothing publishes without human review.
Next.js
Static export
SEO / GEO
Scheduled agents
2026 · Redesign concept · client pitch
ESLITECH
Manufacturer site redesign on their live CMS.
Context
ESLITECH (brand Smartfurry), an aquarium and pet-products manufacturer, had a dated site. The brief: same content and pages, a premium look.
What I did
Rebuilt the front end in Vue 3 + Vite on their live CMS API, keeping every URL, call-to-action and popup working.
A motion system, bento product sections and a dedicated About page.
Shipped a public demo on Cloudflare Workers: HTTPS, noindex, forms disabled.
Vue 3
Vite
CMS API
Cloudflare Workers
2026 · Founder & CEO
Selvren
AI experts on private documents, every claim checked against its sources.
Context
Teams want answers from their own documents — with proof. Selvren started as a chatbot for pet shops, became AquaChat for aquarium stores, then a B2B platform of AI domain experts.
What I did
Founded the company and led the build with a team of AI coding agents: I set the architecture, the rules and the merge gate, and reviewed the work.
Hybrid retrieval over private documents and an expert catalogue, then a rule-based verifier that checks every claim against its sources — it abstains or quotes when sources are thin.
Security by design: row-level security in PostgreSQL, encrypted originals, antivirus on uploads, an egress proxy, hashed and revocable API keys.
GDPR tooling: data export, erasure, a written retention doctrine.
Result
3,182 commits in 11 weeks, 11,901 tests in the merge gate, 28 architecture decision records.
Fastify
TypeScript
PostgreSQL 17
pgvector
Mistral
React
TanStack Start
Clerk
2026 · R&D · local-first AI
Atelier
Raw idea → product brief through 8 specialist engines, 100% local.
Context
Every product I build starts as a raw idea. Atelier turns it into a brief an engineering team — human or AI — can execute.
What I did
A local-first chain of 8 specialist engines, from discovery to product, with every step’s data persisted.
Runs entirely on a MacBook (M5 Pro) with Ollama and MLX, under a strict zero-cost rule: no paid API, no rented compute.
Benchmarked local coding models to pick the engine (qwen3-coder 30B: 5× faster than qwen2.5-coder 32B).
Result
Idea → product brief end to end in about five minutes, fully offline.
Python
Ollama
MLX
Local LLMs
2026 · Product, UX & app · partner
Naiad
Connected-aquarium companion app with an AI assistant.
Context
Naiad is a companion app for a hardware partner’s connected aquariums — built as a partner demo.
What I did
Designed the whole flow: account-first onboarding with EU data residency, product recognition by QR code, tank profile.
A living dashboard (water parameters, a confidence score), species compatibility, device control for lights and pumps, a logbook.
An AI assistant that explains trends and prepares safe actions — but never controls a device without the owner’s confirmation.
Mobile-first web app
IoT
AI assistant
EU data residency
2021–2023 · Le Mans Université
GLPI
Set up GLPI for the service desk and IT inventory.
Context
The IT department supports staff across a whole university campus — every request and every piece of equipment has to be tracked.
What I did
Put GLPI in place: a ticketing service desk for user requests and an inventory of the IT equipment.
Used it day to day with the team for support follow-up.
GLPI
Service desk
IT asset inventory
2021–2023 · Le Mans Université
PC deployment
A deployment server to install staff workstations.
Context
New and reinstalled workstations had to reach staff ready to use, the same way every time.
What I did
Set up a deployment server to install work PCs in a repeatable way.
Prepared and installed staff workstations.
Deployment server
Workstations
2021–2023 · Le Mans Université
Support & maintenance
User support, network and server maintenance.
Context
Two years as an apprentice inside the IT team of a university, alongside a Bac+2 in systems and networks.
What I did
Day-to-day support for university staff.
Maintenance of the network and the servers with the team.
Hardware maintenance of workstations.
Networks
Servers
Support
2026 · Minecraft server · modpack
DataRace
A 223-mod “Create Civilisations” server, tuned and hosted.
Context
Still building for Minecraft: a modded survival server built on top of the “All of Create” pack.
What I did
Assembled and shipped seven versions in five days (June 2026): colonies, world generation, trains, far-view rendering, a performance pass, then content and quality-of-life mods.
Wrote down every choice: no land-claim mods, hard mob packs blocked, each mod tested on a staging world before going public.
Tuned and hosted it: server memory 4 → 10 GB with GC settings, view distance 8, simulation distance 6, on a VPS with a game-server panel.
Result
223 server mods on Minecraft 1.21.1 (NeoForge), measured at 20 TPS (5.3 ms per tick).
NeoForge 1.21.1
JVM tuning
VPS
Docker
2026 · Minecraft mod · co-developed
Pokémon League
A competitive league mod in Kotlin: gyms, ELO, tournaments.
Context
A full competitive mode on top of Cobblemon, the Pokémon mod for Minecraft.
What I did
Started the project with another developer and built its economy system.
The mod covers a 7-stage league with 5 gyms, ranked 1v1 and 2v2 with ELO, double-elimination tournaments for up to 32 players and 96 quests.
Kotlin
Fabric
Cobblemon
Minecraft 1.21.1
2025 · Own product · beta
SyncCast
Keeps esports casters on the same frame across Twitch and YouTube.
Context
Esports casters commentate the same match from different places — and each platform delivers it with its own delay.
What I did
Built the product in 8 days (268 commits, December 2025): rooms, a leader caster as reference, and resyncs scheduled on a shared server clock (Ably).
Twitch drift measured every second; a spread over 500 ms triggers a scheduled realignment.
An own HLS relay: streamlink + FFmpeg into 1-second segments on Cloudflare R2, segments uploaded before the playlist.
Teams with Admin / Manager / Caster roles and invites; room chat and live drawing over the video; Row Level Security on every table.
Redesigned the landing page in 2026 to explain the backend — only with what the code actually does.
Result
Beta, with 52 unit and 14 end-to-end tests.
Next.js
Ably
Supabase
hls.js
FFmpeg
Cloudflare R2
This site measures its audience with Google Analytics, only if you accept. Your choice is kept for 6 months.