Full-Stack Web3 Engineer · Next.js, TypeScript & Solidity
I've worked in Canada 🇨🇦, France 🇫🇷 and Switzerland 🇨🇭: fifteen years in molecular-biology research and environmental engineering, then software from 2022, starting at Renuo AG in Zurich. Since 2024 I've been a full-stack engineer at Prismo.io, a B2B SaaS built with Next.js, TypeScript and Supabase.
On my own time I build Web3 projects end to end on testnets: Solidity contracts tested with Foundry, contract events projected into Postgres, AI-agent workflows that settle on-chain, and the dApps on top. Two of them, LabsTrail and BioVerify, are decentralized-science (DeSci) apps.
📍 Based in France (CET) · Open to relocation worldwide, Asia-Pacific preferred, or full-time remote
Portfolio · LinkedIn · Book a call · Email
Open ratings for life-science papers, on the OriginTrail DKG testnet and Base Sepolia. Under construction.
- A submitter signs the paper's IPFS CID with EIP-712; an Inngest run reads its metadata with GROBID, has Gemini check it is a life-science or health paper, and publishes it to the OriginTrail DKG as a Knowledge Asset.
- Anyone with a wallet requests a rating on a Base Sepolia contract (Solidity, OpenZeppelin). Gemini answers short checklists drawn from CONSORT, ARRIVE, PRISMA and others, quoting the paper for each item it finds reported; code checks every quote against the text, computes the 0 to 100 score, and LabsTrail's oracle account records it on chain.
- Every write is safe to retry: each step reads what is already done before acting, and Inngest event ids derive from the request. HMAC-checked Alchemy webhooks start ratings, a reconciler cron restarts stuck ones, and one oracle lane resends a stuck transaction at the same nonce with higher fees.
- Tested with Vitest and Foundry (unit, fuzz and invariant tests); design decisions are written down as architecture decision records.
- Next phase: human-in-the-loop review. Reviewers drawn at random with Chainlink VRF, whose proof is checked on chain, score the paper; LabsTrail's node writes their score into the same rating asset on the DKG, and the oracle records it. Reviewer staking and pay are planned, not decided yet.
A custody backend slice on Sepolia: Node.js, TypeScript, viem, Hono, SQLite.
- HD wallets (BIP-39, BIP-44) and an append-only ETH ledger; every amount is a bigint in wei, never a float.
- A withdrawal is signed only if the balance covers value + gasLimit × maxFeePerGas, and is booked from its receipt (value plus the gas actually paid) rather than from a balance change; that holds within one running process.
- Signing sits behind one module, and no derived private key is stored, logged or returned; the mnemonic itself sits in
.env, which is acceptable on a testnet. The service refuses to start on any chain but Sepolia. - Vitest tests that run offline and without secrets; CI runs typecheck, lint and tests on every pull request.
Project · Article · Code · Live
Peer review as a coordination game, on Base Sepolia and Ethereum Sepolia.
- Authors stake ETH and submit a manifest pinned to IPFS; a LangGraph agent checks the abstract for plagiarism (Exa AI + Gemini), and on a plagiarism verdict the agent's key slashes the stake on chain.
- Chainlink VRF draws reviewers from the staked pool. Reviewers sign their reviews with EIP-712 (checked off chain), Gemini decides or escalates to a senior reviewer, and the agent settles rewards and slashes on chain.
- LangGraph checkpointers (Postgres) let a review pause for days at a human-in-the-loop step. Inngest starts the agent runs and retries them; the later review steps and the settlement run in a server action, with no retry yet.
- Contract events reach a Neon Postgres read model (Drizzle) through HMAC-checked Alchemy webhooks, with optimistic concurrency.
- Foundry tests, including VRF edge cases;
forge coveragereports full line, branch and function coverage of the contract.
Prediction games on crypto prices, on Ethereum Sepolia.
- Chainlink Automation calls
performUpkeepfor due rounds (anyone can also call it), and settlement reads the latest Chainlink price at that moment. - Time-weighted payouts in 1e18 fixed point: an earlier bet weighs more than a late one.
- When a round creator wins, a Tenderly action holding my minter key requests a mint, and Chainlink VRF v2.5 picks the ERC-1155 reward. CEI and OpenZeppelin's
nonReentrantonclaimReward. - Foundry tests, including the time-weight edge case of a last-second bet in a year-long round.
A crafting game on Ethereum Sepolia: the rules contract owns the token ledger.
- Forge holds the recipes and per-address cooldowns and is the immutable owner and only minter of FToken (ERC-1155).
- Basic mints (IDs 0 to 2) have a 15-second cooldown, written before the external mint so re-entry cannot skip it; composite items (IDs 3 to 6) burn their inputs and mint in one call (
burnBatch+mint). - Event-driven Next.js UI: Alchemy WebSockets refresh the balances a mint, burn or trade touched.
- Foundry tests that run the real deploy script and check exact custom errors and events; a local
forge coveragerun reports full line, statement, branch and function coverage.
Bidding with real-time notifications, scheduled closing and Stripe payments in test mode.
- Postgres triggers keep the highest bid on the auction, a unique index rejects tied bids, and RLS stops owners editing or deleting an auction once it has bids.
- Notifications for new bids, wins and payments over private Supabase Realtime channels; pg_cron calls the closing Edge Function every 5 minutes.
- Stripe Checkout with a signature-verified webhook.
- French, English and German (Lingui), URL-driven filters (nuqs), services behind repository interfaces (ports and adapters).
- Jest unit tests on services and mappers, run in CI.
| Core | Next.js, TypeScript, Node.js, Solidity, Foundry |
| Web3 | Chainlink (VRF, Automation, Price Feeds), OriginTrail DKG, OpenZeppelin, viem, wagmi, IPFS, Alchemy, Tenderly |
| AI agents | LangGraph, Inngest, Gemini, Exa AI |
| Backend and data | Supabase, Postgres (Neon, Drizzle), SQLite, Hono, Stripe |
| Frontend | React, TanStack Query and Table, React Hook Form, Zod, Tailwind CSS, shadcn/ui |
| Testing | Foundry, Vitest, Jest, Cypress |
Molecular-biology research at the University of British Columbia (Vancouver) and INSERM (Montpellier), 2001 to 2009: genomics of neural stem cells and epigenetics, three peer-reviewed papers. Then land-remediation engineering and project management at SITA Remediation (SUEZ) and SERPOL in France and KIBAG in Zurich, 2012 to 2020.
Full-stack Web3 · Smart-contract engineering · DeSci · AI-agent backends · Full-stack Web2
╰┈➤ Reach out by email or on LinkedIn to talk about Web3, AI agents or a role.



