Invoices, purchase orders and forms are still retyped by hand.
- What it's called
- Document data extraction with a validated schema and model fallback
- Proof
- Invoice reader: 21 of 21 test invoices fully correct on the 7 October 2026 benchmark.
AI automation and web platforms for your company
Describe the problem in your own words. Each card shows the AI automation or web platform I build for it, what engineers call it, and the proof you can check on this site.
AI automation services in detail, with answers to common questions
AI projects
Three services are live, with public code you can read. One more is planned. Numbers marked Measured were recorded in dated tests. Numbers marked Target are goals, not results.
Invoice Extraction Service
Turns PDFs, scans and forwarded emails into clean invoice data your accounting system can import. If one AI provider is slow or down, it switches to another on its own, and every total is re-added to the cent before anything comes out.
Accounts-payable teams receive invoices as OCR dumps, forwarded email threads, till receipts, and foreign-language PDFs. A raw LLM call returns prose, fenced code blocks, or a JSON object with the wrong shape, and a single provider outage stops the whole intake queue.
Metrics
21 / 21
fully correct, primary model, dated benchmark
10
provider failure classes covered offline
0
network calls permitted in the test suite
$0.00
marginal cost per request on the default chain
An asynchronous FastAPI microservice that turns messy, unstructured documents into a guaranteed, schema-validated invoice record. Resilience comes from routing across models, not vendors: a free primary model cascades to a second provider on rate limits, timeouts, or schema exceptions, at zero marginal cost.
Requests are validated by Pydantic v2 before any model is called. The dispatcher walks an ordered model chain with strict json_schema constrained decoding at temperature 0. Each attempt runs under a hard timeout and translates SDK exceptions into one error taxonomy. Raw output is stripped of fences and reasoning preambles, parsed, then normalised by validators that recompute line totals to the cent and map currency symbols to ISO-4217. The service also looks after its own chain: when a free model is withdrawn, it re-tests the free catalogue with seven sample documents and fills the gap using a published ordering rule.
Stack
Proof points
Request pipeline
Ingest
ExtractRequest, 10 to 50k chars, 1 MB body ceiling refused before read
Harden
Prompt injection defanging, request-id middleware, call budget with Retry-After
Primary model
Strict json_schema, temperature 0, hard timeout
Fallback
Different provider, triggered only on a failed call
Recover
Strip fences, drop reasoning preamble, decode JSON
Validate
InvoiceData.model_validate, recalc totals, ISO-4217
Context-Aware Hybrid Compliance Retrieval Engine
Staff ask a question about your procedures or regulations and get an answer that quotes the exact passage and the page it came from. When the documents do not say it, the answer says so.
Naive RAG cuts text by character count and ranks by cosine similarity alone. It blurs exact identifiers such as 21 CFR Part 11 or SOP-QA-017, strips a clause of the document it came from, and leaves the model free to misquote a number or cite a page it never saw. In a compliance setting that is not a quality issue, it is a liability.
Metrics
6 / 6
recorded questions answered with verified citations
1 / 1
out-of-corpus question declined, not guessed
441 MB
peak memory with both local models, on a 512 MB instance
$0.00
marginal cost per question on the free stack
A retrieval engine for SOPs and regulatory manuals that answers only by quoting the source. Vector and keyword search run in one PostgreSQL statement and are fused, a cross-encoder keeps the three best passages, and every quote the model returns is checked against the stored document before anyone sees it. When the documents do not say it, the answer says so. The public demo runs at zero cost on free models.
PyMuPDF extracts layout blocks per page, and a structural chunker packs them along headings into 400-token chunks with a 60-token overlap. Following Anthropic's Contextual Retrieval pattern, every chunk is stored with a situational preamble, and both its embedding and a generated tsvector column are built from that text. One SQL statement runs a pgvector cosine search over an HNSW index (m=16, ef_construction=64) and a full-text search over a GIN index, then fuses the two lists with Reciprocal Rank Fusion (k=60) in a CTE. A cross-encoder reads the question with each of up to 50 fused candidates and keeps 3. The model must return strict JSON with an answer, a confidence score, and verbatim quotes, or an explicit insufficient-context verdict. The server re-anchors every quote to the stored chunk text, drops what does not match, fills titles and page numbers from the database, and withholds any answer with no surviving quote. Generation runs on an ordered chain of free OpenRouter models with fallback; Claude, OpenAI embeddings, and Cohere Rerank v3.5 are drop-in settings.
Stack
Proof points
Request pipeline
Ingest
PyMuPDF blocks, heading-aware 400-token chunks, contextual preamble
Index
pgvector HNSW and a generated tsvector GIN index, one table
Retrieve
Dense cosine and full-text search in one SQL statement
Fuse
Reciprocal Rank Fusion CTE, k=60, up to 50 candidates
Rerank
Cross-encoder reads question and passage together, keeps 3
Verify
Strict JSON answer, quotes re-anchored to stored text, pages from the database
Autonomous Multi-Agent Operations and Marketing Pipeline
Writes product copy for each sales channel from your inventory data, checks every claim against the rules, and sends nothing out until a person has approved it. If the copy still breaks a rule after a rewrite, it is handed to a person instead of being sent, and every decision is on record.
Launching a product across channels means pulling SKU facts from a transactional database, drafting a product page, marketplace bullets and a social post, and checking every claim against regulations such as Health Canada's rules for Natural Health Products. A linear chain cannot retry, cannot pause for a reviewer and cannot explain what it did, and a model that grades its own copy misses mechanical errors such as a swapped dosage.
Metrics
3 / 3
dispatches behind a recorded human decision, 15 October 2026
9 / 9
correct answers from the primary free model, dated benchmark
504
hermetic tests: no network, no database, no key
$0.00
marginal cost per run on the free stack
A cyclic LangGraph state machine that turns one inventory SKU into channel marketing copy for a licensed Natural Health Product and refuses to let it leave until a person has signed it off. A supervisor routes the work through a read-only SQL lookup, a synthesis agent and a compliance validator that answer under strict JSON schemas; violations loop back to the writer a bounded number of times, then the graph pauses on a PostgreSQL checkpoint. Approval or an edit resumes it and fires one HMAC-signed webhook, and a rejection ends the thread with nothing sent. The public demo runs at zero cost on free models.
A supervisor node validates the request and routes it over a typed state with explicit reducers. The inventory agent is a deterministic, read-only SQL tool: one parameterized lookup, no model call, and an unknown or out-of-stock SKU ends the run before any model is called. The synthesis agent drafts a product page, five marketplace bullets, a social post and an image prompt under a strict JSON schema, and the validator agent audits the draft against the licence under another. A set of deterministic Python checks (licence number displayed, ingredient amounts, mandatory risk statements, prohibited claim patterns) overrules the model on the mechanical rules: their findings always win, and a wording-only objection to a restated authorized claim is discarded. Violations go back to the writer with structured revision instructions for a bounded number of cycles, and a draft that still fails when the budget is spent is escalated to a person. The graph is compiled with interrupt_before the webhook node, so every run stops on a PostgreSQL checkpoint (langgraph-checkpoint-postgres over one psycopg pool) and can wait for its reviewer across restarts. The review endpoint approves, edits or rejects: approval and edits resume the graph, and a rejection is written to the thread as if the webhook node had run, so it never executes. The webhook node refuses to send without a recorded human decision, signs the payload with HMAC-SHA256, retries on 429, 5xx and timeouts, and writes every attempt to an audit log. Generation runs on an ordered chain of free OpenRouter models that repairs itself when a model is withdrawn.
Stack
Proof points
Request pipeline
Supervise
Request validated, typed state with reducers, routed by what the state already holds
Query
Read-only parameterized SQL lookup, no model call; an unknown or out-of-stock SKU ends the run
Synthesise
Product page, five bullets, social post, image prompt; strict JSON schema
Audit
Validator model plus deterministic checks that always win; violations loop back, bounded, then escalate
Interrupt
interrupt_before the webhook node; approve, edit or reject through the review endpoint
Dispatch
HMAC-SHA256 signed webhook, retries on 429, 5xx and timeouts, every attempt in the audit log
Planned next
Production LLMOps Gateway & Evaluation CI/CD Suite
A checkpoint in front of every AI call: it records what happened and what it cost, reuses answers to repeated questions, and blocks a change that makes answers worse before it reaches customers.
< 15 ms
cache hit response time
0.96
cosine threshold for cache resolution
5%
hallucination ceiling that blocks a PR
~65%
inference cost reduction from caching
Flagship product · Open source
Prompt builders hand you code to host and patch. WordPress hands you plugins to babysit. NextBlock turns typed content blocks in PostgreSQL into a website a whole team can run: a Notion-style editor for writers, React Server Components for the public site, and an MCP server so coding agents can build pages over the protocol they already speak.
Creator, designer, and lead developer
The open-source, full-stack AI-native CMS for Next.js 16, Supabase, and Tailwind CSS.
This is the project that compiles everything else on this page into one codebase: relational schema design and row-level security, an editor that non-technical people actually use, commerce with real money moving through it, model routing with fallbacks, an MCP server with typed tools, a CLI, a release pipeline for eight packages, and a deployment path that asks the user for nothing but an admin account.
It is also where the Applied AI thesis gets tested against users. Cortex AI does not bolt a chatbot onto a CMS. Agents mutate content through strict Zod tool arguments, mutating tools confirm before they execute, drafts are staged non-destructively, and keys are encrypted at rest.
npm create nextblock@latestResets every 15 minutes. Demo login: demo@nextblock.dev / password
Clients
Next.js 16 application
Published libraries
Supabase PostgreSQL
Runs on
Every figure is public and dated. Nothing here is estimated.
200k+
lines of TypeScript
Repository line count, June 2026 snapshot: 115,944 TS and 88,666 TSX code lines
8
npm packages at one version
create-nextblock and @nextblock-cms/{ui, utils, db, editor, sdk, ecom, cortex} at 0.21.3
191
CLI releases since Oct 2025
create-nextblock version history on the npm registry
11.5k
CLI downloads in 30 days
npm download counts, 8 September to 7 October 2026
100 / 100
Lighthouse, all four categories
Production build: 0.3 s FCP, 0.8 s LCP, 0 ms TBT, 0 CLS
146
Vitest test files
Repository tree, October 2026
56
MCP tools exposed to agents
Live MCP server card at cms.nextblock.dev, 9 October 2026
620+
commits
GitHub, master branch, October 2026
Blocks as data, not as code
Every block is a JSONB row in PostgreSQL. Pages publish straight from the database with no rebuild, and editors can define new block types at runtime.
The schema is the source of truth
Supabase Postgres with a consolidated row-level security layer, forward-only migrations, and secrets that are encrypted before they reach a row.
Agents as first-class editors
The CMS is an MCP server. Claude Code, Cursor, Codex, or any client can read the schema and write pages over Streamable HTTP with a scoped bearer token.
Real money, real edge cases
A premium module with two payment providers, multi-currency pricing, scheduled sales, shipping zones, taxes, inventory, and orders, gated by package activation.
Zero environment variables
One click on Vercel, one command locally, or let a coding agent do the install. Updates merge upstream without breaking local edits.
100 / 100, not a plugin
Perfect Lighthouse scores on the production build because the defaults are right: server rendering, AVIF/WebP with a one-year cache, critical CSS inlined, imports tree-shaken.

Oct 2025
First create-nextblock release on npm
Jan 2026
Public repository under nextblock-cms
Sep 2026
v0.21.3 across all eight packages
Oct 2026
MCP server card live, registry publish workflow in place
Production Web Work
Before foundation models there were storefronts, content systems, and campaign pages that had to work on launch day. A selection, grouped by what it was for. Work done as an employee is attributed to the employer; everything else is independent.

Complete rebuild of a 40-year-old natural health manufacturer's web presence on Laravel 13: a custom PHP CMS and an e-commerce store, both written from scratch to replace legacy third-party dependencies.
Eighteen landing pages for New Roots Herbal product lines and health topics: standalone Next.js microsites on their own subdomains, plus pages served by the Laravel platform. Each one is a tracked funnel built to launch fast and convert.
18 live pages
Personal products, client work, and experiments. Mine, start to finish.

A chaptered travel companion for an eleven-day voyage around Japan and Jeju: the route, dragon lore behind each port, a day-by-day itinerary, etiquette, phrases, and vocabulary. Built as a reading experience first.

A D&D 5e rogue's companion: translate English or French into Thieves' Cant, with a dictionary, guild symbols, and hobo signs. Prototyped with v0, finished by hand.

A real-time check-in and check-out system for construction site workers: a worker portal plus a supervisor dashboard that shows who is on site right now. A technical exercise, kept online for show.

An interactive reference for every React hook, from useState to useImperativeHandle, with live examples and a theme switcher. A teaching sandbox, kept online for show.

Bilingual marketing site for a Montreal recording studio that also does DJ and event animation, equipment rental, and online music lessons, with a quote-request flow and gallery.

My first business: a regional computer repair and website shop I founded and ran as owner and CEO from 2012 to 2018, serving homes and small businesses around Les Coteaux. The site is still up, bilingual, and exactly as it was.
Skills and tools
Nearly two hundred tools, and every one of them has a job in a real system, from the 2012 consultancy years to the current Applied AI work. Hover or tap a tile to see where it is used and how deep the experience runs.
All categories, grouped by domain.
195 toolsExperience & Career Evolution
The hard part of enterprise AI is not the model call. It is the data pipeline that feeds it, the schema that constrains it, the fallback that catches it, and the telemetry that proves it worked. That is the work I have been doing since 2018, now pointed at foundation models.
NextBlock CMS (open source)
Designed and built an open-source, AI-native CMS for Next.js 16 and Supabase as an Nx monorepo: database schema and row-level security, block editor, commerce, MCP server, CLI, and the release pipeline for eight npm packages.
New Roots Herbal Inc.
Own production reliability, data architecture, and infrastructure across the company's digital estate, and lead the integration of generative AI into day-to-day operations.
PcSquad
Founded and operated a regional IT solutions and web infrastructure consultancy.
Royal Canadian Electrical and Mechanical Engineers (RCEME)
Military discipline, electro-mechanical diagnostics, precision systems maintenance, and calm execution under mission-critical conditions.
Witty, candid, grounded

I've been building for the web since 2004. In tech years, that means I have survived table layouts, Flash intros, the PHP renaissance, the JavaScript framework wars, and now the AI gold rush.
I take systems architecture, schema validation, and database reliability extremely seriously. Myself? Not so much.
These numbers are presented without context so that I look good. Data transparency matters, so here is the methodology for each one.
20
Years of Studies
Calculated from kindergarten to university, because data transparency matters.
Â
Hours of Support
Counted as 24/7 since opening PcSquad in 2012. The counter is live. So was I, mostly.
0.00%
Tolerance for Hallucinations in Production
Measured at merge time. The CI pipeline enforces it so I do not have to.
68.6%
of statistics on the web are made up
Including this one. Everything above it has a source.
Real-world testing
If an AI model can't parse an invoice or hallucinates tax calculations, it doesn't get merged. Period.
Tabletop strategist
D&D and Magic: The Gathering, Commander format. I build decks the way I build systems: redundancy first.
BBQ brisket smoker
Fourteen hours at 107 °C. Low, slow, and logged in a spreadsheet.
Chess tactician
Prefers positional grinds over tactical fireworks. Same as in production.
Dual-boot hardware enthusiast
Debian for work, Windows for games, and a drawer full of SATA cables I will definitely need one day.
Contact
A full-time role, a contract, or a placement through your agency: all welcome. If invoices, documents or customer emails are piling up, describe the problem in your own words and I will tell you what it would take.
Open to full-time, contract and agency work · Montreal, hybrid or remote worldwide
Roles I'm open to: Applied AI Engineer, Forward Deployed Engineer, AI Solutions, and Senior Full-Stack Developer with an AI focus.
For technical teams: I treat schema validation, latency budgets, and failure modes as requirements, not afterthoughts.