Skip to content
NDNicolas Desjardins, back to overview
Nicolas Desjardins

Applied AI Developer

Greater Montreal · English & French

Nicolas Desjardins

I build AI that reads your documents, answers from your own files, and shows you the source.

8+ years running production web systems for New Roots Herbal Inc. Three AI services live, with public code you can read.

  • 8+years running production systems
  • 21/21test invoices read fully correct (7 Oct 2026)
  • 30+websites migrated with zero downtime

Watch it work

A messy invoice goes in. Clean, checked data comes out.

live simulationextraction pipeline · simulated · 0 external calls

In plain words

One page explains what I can build for your company, how it connects to the tools your team already uses, and where your data goes.

AI automation and web platforms for your company

You don't need to know the technical name.

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

AI tools that check their own work.

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.

  • Measured
  • Target
Production Live & Open Source01 / Phase 1 · Shipped

Invoice reader

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.

The problem it solves

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

    measured
  • 10

    provider failure classes covered offline

    measured
  • 0

    network calls permitted in the test suite

    measured
  • $0.00

    marginal cost per request on the default chain

    measured
How it worksfor engineers and technical reviewers

In technical terms

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.

Architecture

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

  • Python 3.12
  • FastAPI
  • Pydantic v2
  • OpenRouter
  • httpx
  • Pytest
  • GitHub Actions
  • Render

Proof points

  • Ten failure classes exercised offline in the cascade tests: 429, 503, 404, timeout, unexpected exception, invalid JSON, schema mismatch, empty response, in-band upstream error, and truncated output.
  • The test suite cannot reach the network by construction. Every outbound path is closed in conftest, and a test that reaches for one fails immediately.
  • Dated benchmark snapshot (7 October 2026): 3 passes of 7 documents per model, every call saved as JSONL so the figures can be re-derived without calling a model.
  • Every figure on the project page is checked against the recordings by a test. A sentence that is not derived from the data fails the build.
  • Logging hygiene: the model and timing are logged, never the vendor name or invoice number above DEBUG.

Request pipeline

  1. 01

    Ingest

    ExtractRequest, 10 to 50k chars, 1 MB body ceiling refused before read

  2. 02

    Harden

    Prompt injection defanging, request-id middleware, call budget with Retry-After

  3. 03

    Primary model

    Strict json_schema, temperature 0, hard timeout

  4. 04branch

    Fallback

    Different provider, triggered only on a failed call

  5. 05

    Recover

    Strip fences, drop reasoning preamble, decode JSON

  6. 06

    Validate

    InvoiceData.model_validate, recalc totals, ISO-4217

Live Demo & Open Source02 / Phase 2 · Shipped

Ask your manuals

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.

The problem it solves

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

    measured
  • 1 / 1

    out-of-corpus question declined, not guessed

    measured
  • 441 MB

    peak memory with both local models, on a 512 MB instance

    measured
  • $0.00

    marginal cost per question on the free stack

    measured
How it worksfor engineers and technical reviewers

In technical terms

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.

Architecture

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

  • Python 3.12
  • FastAPI
  • Pydantic v2
  • PostgreSQL
  • pgvector (HNSW)
  • tsvector (GIN)
  • Reciprocal Rank Fusion
  • fastembed (ONNX)
  • OpenRouter
  • PyMuPDF
  • Render

Proof points

  • Seven real runs recorded on 14 October 2026 and published as the service returned them. They show that the pipeline works, not how often it is right, and a test re-finds every recorded quote verbatim in the sample PDF, on the page it cites.
  • A citation cannot be invented. Quotes are matched against the stored chunk, never the generated preamble, after Unicode and typographic folding, and the model never supplies a page number.
  • The hermetic suite needs no network, database, or API key, and runs with ruff on every push. Opt-in live PostgreSQL tests assert that the SQL fusion matches its Python twin to 1e-9 and that EXPLAIN uses the HNSW index.
  • Fits a 512 MB free instance: three memory changes, including turning off ONNX Runtime's memory arena, took the service from 856 MB to 441 MB at peak with both local models loaded.
  • Closed by design for the open internet: uploads need the operator's key, questions are budgeted per visitor and per day, and the day's free allowance is read from OpenRouter itself, so a restart cannot erase it.
  • Median over the seven runs: 1.4 s retrieval (embed, SQL, re-rank) and 6.8 s end to end on free models. The SQL itself takes about 170 ms; generation is most of the rest.

Request pipeline

  1. 01

    Ingest

    PyMuPDF blocks, heading-aware 400-token chunks, contextual preamble

  2. 02

    Index

    pgvector HNSW and a generated tsvector GIN index, one table

  3. 03

    Retrieve

    Dense cosine and full-text search in one SQL statement

  4. 04

    Fuse

    Reciprocal Rank Fusion CTE, k=60, up to 50 candidates

  5. 05

    Rerank

    Cross-encoder reads question and passage together, keeps 3

  6. 06

    Verify

    Strict JSON answer, quotes re-anchored to stored text, pages from the database

Live Demo & Open Source03 / Phase 3 · Shipped

Supervised operations agents

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.

The problem it solves

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

    measured
  • 9 / 9

    correct answers from the primary free model, dated benchmark

    measured
  • 504

    hermetic tests: no network, no database, no key

    measured
  • $0.00

    marginal cost per run on the free stack

    measured
How it worksfor engineers and technical reviewers

In technical terms

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.

Architecture

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

  • Python 3.12
  • LangGraph
  • FastAPI
  • Pydantic v2
  • PostgreSQL
  • langgraph-checkpoint-postgres (psycopg)
  • OpenRouter
  • HMAC-SHA256 webhooks
  • Render
  • Neon
  • GitHub Pages

Proof points

  • Six scenarios recorded on 15 October 2026 against the live stack and published as the API returned them: happy path, self-correction, escalation, edit, reject and out of stock. The five runs that drafted copy took 19 to 66 seconds on free models, all twelve model calls were answered by the first model of the chain, and each of the three dispatches sat behind a recorded human decision.
  • In the escalation run the validator model called the draft compliant, and the deterministic dosage check caught three swapped probiotic amounts (10, 10 and 20 billion CFU where the licence says 20, 20 and 10). The draft went to a person instead of out the door, and the person rejected it.
  • In the reject run the validator sent the first draft back for an unauthorized claim and passed the rewrite: one self-correction cycle, 66 seconds. The reviewer then rejected it, and the webhook node never ran.
  • Dated model benchmark (15 October 2026): 27 calls across three free models on the pipeline's own cases, every answer saved as JSONL so the figures can be re-derived without calling a model. The Liquid model answered 9 of 9 correctly at a 9.1 s median and the NVIDIA model 8 of 9, which is the order the shipped chain uses.
  • 504 hermetic tests: no network, no PostgreSQL, no API key. Both HTTP transports raise before a request can leave the process, the real SDK clients cannot be constructed inside the suite, and the README and the project page are held to the code by tests. Four more tests run the compiled graph over a real PostgreSQL checkpointer when a database is provided.
  • The webhook is the only mutation. The node refuses to send unless the human review status is approved or edited, a rejection is checkpointed as if the node had run, the receiver verifies the signature in constant time, and every attempt is in the audit log.

Request pipeline

  1. 01

    Supervise

    Request validated, typed state with reducers, routed by what the state already holds

  2. 02

    Query

    Read-only parameterized SQL lookup, no model call; an unknown or out-of-stock SKU ends the run

  3. 03

    Synthesise

    Product page, five bullets, social post, image prompt; strict JSON schema

  4. 04

    Audit

    Validator model plus deterministic checks that always win; violations loop back, bounded, then escalate

  5. 05

    Interrupt

    interrupt_before the webhook node; approve, edit or reject through the review endpoint

  6. 06

    Dispatch

    HMAC-SHA256 signed webhook, retries on 429, 5xx and timeouts, every attempt in the audit log

Planned next

04 / Phase 4 · CapstoneDelivery: Days 91 to 120
In Active Pipeline

AI quality gate

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.

  • FastAPI Reverse Proxy
  • Redis Vector Similarity Cache
  • Langfuse Tracing
  • DeepEval
  • Ragas
  • +1 more: GitHub Actions CI/CD
  • < 15 ms

    cache hit response time

    target
  • 0.96

    cosine threshold for cache resolution

    target
  • 5%

    hallucination ceiling that blocks a PR

    target
  • ~65%

    inference cost reduction from caching

    target

Flagship product · Open source

NextBlock CMS: a full-stack, AI-native CMS, built end to end.

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.

version
v0.21.3
license
AGPL-3.0-or-later core, source-available premium modules
since
First npm release October 2025. Public repository January 2026.
npm create nextblock@latest

Resets every 15 minutes. Demo login: demo@nextblock.dev / password

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

    Content engine

    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.

    • Notion-style Tiptap editor with slash commands, drag and drop, and inline AI in every text block, published as @nextblock-cms/editor.
    • 13 built-in block types including nested multi-column sections, forms, product grids, cart and checkout.
  • The schema is the source of truth

    Data and security model

    Supabase Postgres with a consolidated row-level security layer, forward-only migrations, and secrets that are encrypted before they reach a row.

    • Three roles (ADMIN, WRITER, USER) enforced by a database trigger that promotes the first sign-up to admin, so every install has exactly one guaranteed administrator.
    • RLS kept Supabase Advisor clean: one permissive policy per role and command, auth calls wrapped in (select ...) so they evaluate once per statement, SECURITY DEFINER triggers revoked from anon and authenticated.
  • Agents as first-class editors

    Cortex AI and the MCP server

    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.

    • 56 tools on the live server card, from create_page_layout and publish_content_draft to describe_database_schema and translate_content_bulk. Listed in the official MCP Registry as dev.nextblock/nextblock; every site serves /llms.txt and /.well-known/mcp/server-card.json.
    • Mutating tools return a confirmation phrase first and execute only after the user confirms. Tool annotations declare destructive, idempotent, and read-only hints.
  • Real money, real edge cases

    Commerce Pro

    A premium module with two payment providers, multi-currency pricing, scheduled sales, shipping zones, taxes, inventory, and orders, gated by package activation.

    • Physical products check out through Stripe, digital products through Freemius; mixed-provider carts are rejected at the API.
    • Multi-currency with per-currency prices, exchange-rate refresh, and five rounding modes including charm pricing.
  • Zero environment variables

    Distribution and developer experience

    One click on Vercel, one command locally, or let a coding agent do the install. Updates merge upstream without breaking local edits.

    • One-click Vercel deploy: the Supabase Marketplace integration provisions the database and injects keys before the first build. The user fills in nothing but an admin account.
    • Self-hosted Docker mode boots Postgres, GoTrue, PostgREST, Kong, MinIO, and the app with one command, no cloud accounts.
  • 100 / 100, not a plugin

    Performance by default

    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.

    Lighthouse report for NextBlock CMS showing 100 for Performance, Accessibility, Best Practices and SEO
    Production build. 0.3 s First Contentful Paint, 0.8 s Largest Contentful Paint, 0 ms Total Blocking Time, 0 Cumulative Layout Shift.
    • Public page, article, and product routes are React Server Components; client components are reserved for cart, checkout, forms, and the CMS dashboard.
    • 0.3 s First Contentful Paint, 0.8 s Largest Contentful Paint, 0 ms Total Blocking Time, 0 Cumulative Layout Shift.

Stack

  • Next.js 16
  • React 19 Server Components
  • TypeScript
  • Supabase (Postgres, GoTrue, Storage)
  • Tailwind CSS v4
  • Tiptap 3
  • Nx 23
  • Vitest
  • Zod 4
  • Vercel AI SDK
  • OpenRouter
  • Model Context Protocol
  • Stripe
  • Freemius
  • Cloudflare R2 / MinIO
  • Docker
  • Vercel
  • GitHub Actions

Timeline

  1. Oct 2025

    First create-nextblock release on npm

  2. Jan 2026

    Public repository under nextblock-cms

  3. Sep 2026

    v0.21.3 across all eight packages

  4. Oct 2026

    MCP server card live, registry publish workflow in place

What this project proves

Database architecture
Forward-only migrations, a squashed baseline, RLS with advisor-clean policies, revision and draft tables, and JSONB block storage with CHECK constraints.
Applied AI engineering
An MCP server with confirmation-gated mutating tools, typed tool calling, SSE streaming, model routing with free-model fallback, and encrypted key storage.
Product and developer experience
A deployment path with no environment variables, a CLI with 191 releases, a three-way-merge update command, and a sandbox that resets itself every 15 minutes.
Payments and compliance surfaces
Stripe and Freemius checkout, webhooks, multi-currency rounding, scheduled sales, taxes, and shipping zones.
Performance engineering
100 / 100 Lighthouse on the production build with server rendering, image optimization, and critical CSS as defaults.
Open-source stewardship
AGPL core, CONTRIBUTING, SECURITY and Code of Conduct files, agent playbooks in .agent/skills, and eight packages released in lockstep.

Production Web Work

Building websites and online stores since 2004.

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.

Employer work
Built as Lead Web Developer at New Roots Herbal Inc. The company owns these properties.
Independent
Personal products, client work, and experiments. Mine, start to finish.
Screenshot of newrootsherbal.com: full platform revamp
PlatformEmployer workLanguages EN / FR

newrootsherbal.com: full platform revamp

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.

  • Custom content management system for products, pages, and campaigns, built for the marketing team that uses it every day.
  • E-commerce store with catalog, cart, and checkout, plus the back-office tooling behind it.
  • Store locator built on the Google Maps API and a real-time inventory system with zero-failure database synchronization.
  • Zero-downtime migration to right-sized infrastructure, lowering hosting costs by over 40%.
  • Laravel 13
  • PHP
  • MySQL
  • Blade
  • JavaScript
  • Google Maps API
  • Linux VPS
Visit newrootsherbal.com (opens in a new tab)

Campaign and education microsites

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

Independent work

Personal products, client work, and experiments. Mine, start to finish.

  • Screenshot of RyÅ«gÅ«: Ten Nights to the Dragon Palace
    PersonalIndependent

    Ryūgū: Ten Nights to the Dragon Palace

    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.

    • Next.js
    • React
  • Screenshot of Thieves' Cant Translator
    PersonalIndependentLanguages EN / FR

    Thieves' Cant Translator

    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.

    • Next.js
    • React
    • v0
  • Screenshot of Civalgo Punch
    ExperimentIndependent

    Civalgo Punch

    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.

    • Next.js
    • React
    • Vercel
  • Screenshot of React Hooks Guide
    ExperimentIndependent

    React Hooks Guide

    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.

    • Next.js
    • React
    • Vercel
  • Screenshot of MusiqueSD
    Client siteIndependentLanguages FR / EN

    MusiqueSD

    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.

    • Next.js
    • React
  • Screenshot of PcSquad
    Own businessIndependentLanguages EN / FREst. 2012

    PcSquad

    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.

    • HTML
    • CSS
    • JavaScript
    • PHP

Skills and tools

What I work with, and how deep it goes.

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 tools

Applied AI & LLM Orchestration

13

Frontier & Open Models

9

Retrieval, Vectors & Data

11

Languages & Markup

21

Frameworks & Modern Web

23

Infrastructure & Systems

31

LLMOps & Evaluation

5

Developer Tools & AI Coding

21

Design & Media

19

Marketing, Analytics & Payments

11

Productivity & Collaboration

15

IT Support & Security

16

Experience & Career Evolution

Eight years of production reliability, upgraded with Applied AI engineering.

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.

  1. Founder
    Oct 2025 to PresentGreater Montreal Area, QC
    Current

    Creator & Lead Developer

    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.

    • Architected the content model: every block is a JSONB row in PostgreSQL, custom block types are data (typed fields and layout schema guarded by CHECK constraints), and pages publish with no rebuild.
    • Shipped Cortex AI: an MCP server over Streamable HTTP with scoped bearer tokens and 56 tools, confirmation-gated mutations, typed Zod tool calling with SSE streaming, OpenRouter routing with free-model fallback, and AES-256-GCM encrypted bring-your-own-key storage.
    • Built the zero-environment-variable deployment path: Vercel's Supabase integration provisions the database and forward-only migrations apply during the first build, with a runtime fallback in the setup wizard.
    • Maintain 8 published npm packages at one version (0.21.3), 146 Vitest test files, and a daily upstream-sync GitHub Action. The CLI has 191 releases and 11.5k downloads in the 30 days to 7 October 2026.
    • Delivered 100/100 Lighthouse across all four categories on the production build: 0.8 s LCP, 0 ms Total Blocking Time, 0 Cumulative Layout Shift.
    • Next.js 16
    • React Server Components
    • TypeScript
    • Supabase
    • PostgreSQL
    • Tailwind CSS v4
    • Tiptap
    • Nx
    • Vitest
    • Vercel AI SDK
    • MCP
    • Stripe
    • Docker
  2. Employment
    Nov 2018 to PresentVaudreuil-Dorion, QC
    Current

    Lead Web Developer & Applied AI Integration

    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.

    • Architected and deployed an internal multi-model generative AI asset pipeline (Claude, OpenAI Codex, and Gemini), reducing product catalog asset turnaround from multiple weeks to 40 minutes per SKU: a 10x gain in production throughput.
    • Engineered high-availability data ingestion architectures, consolidating relational databases and deploying hybrid retrieval (sparse lexical plus dense vector indexing) with strict Pydantic validation, eliminating legacy third-party vendor dependencies and saving $90,000+ in software licensing.
    • Directed infrastructure modernization across 30+ production digital properties, executing zero-downtime server migrations and lowering cloud infrastructure costs by over 40%.
    • Designed telemetry, attribution tracking, and rapid automated deployment funnels, capturing over $300,000 in incremental revenue in a single 30-day campaign.
    • Built custom business microservices including an internal Store Locator and a real-time inventory management system with zero-failure database synchronization.
    • Laravel
    • PHP
    • MySQL
    • PostgreSQL
    • Node.js
    • Angular
    • React
    • Linux VPS
    • cPanel/WHM
    • Claude
    • Codex
    • Gemini
    • Pydantic
  3. Founder
    2012 to 2018Les Coteaux, QC

    Technical Founder

    PcSquad

    Founded and operated a regional IT solutions and web infrastructure consultancy.

    • Managed full-lifecycle client deliverables: scoping, custom software development, deployment, and ongoing support.
    • Ran systems administration, network setup, and hardware diagnostics for small and mid-sized businesses.
    • Owned the financial, legal, and marketing side of the business, including SEO and paid acquisition.
    • PHP
    • JavaScript
    • WordPress
    • Windows Server
    • Linux
    • Networking
    • Hardware Diagnostics
  4. Military service
    2013 to 2016CFB Valcartier, QC

    Armed Forces Veteran

    Royal Canadian Electrical and Mechanical Engineers (RCEME)

    Military discipline, electro-mechanical diagnostics, precision systems maintenance, and calm execution under mission-critical conditions.

    • Diagnosed and repaired weapons systems, artillery, and electro-mechanical equipment to exacting tolerances.
    • Trained in soldering, electrical systems, hydraulics, and first aid. Learned to work a checklist when it matters most.

Witty, candid, grounded

About Me: the real human layer

Nicolas Desjardins
Actual photo. Not generated. Slightly compressed.

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.

  • Building for the web since 2004
  • Running a business since 2012
  • In production at New Roots Herbal since 2018

The Unvarnished Truth

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.

  • Live

     

    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.

Outside of terminal windows

  • 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

Hiring, or is work piling up? Let's talk.

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.

Direct channels

Send a message

All fields except company are required.

Minimum 20 characters0 / 4,000

Replies within one business day.