Notes
Technical notes
Short notes on the subjects I work on. Embedded signal, technical direction, AI in production.
Technical direction
4May 2026
Fractional CTO: when a leader should bring one in
A fractional CTO is not a part-time developer. The value lies in the architecture decisions made early, where a mistake costs a rewrite.
Read →
May 2026
System architecture: designing a platform that holds under load
A platform is judged at its limits, not at its facade. Load, failure, security, debt: naming them at design time avoids a rewrite at scale.
Read →
April 2026
AI engineering: why the POC is not enough
An AI POC proves an idea is possible. Putting it in production proves it is reliable, operable and maintainable. The whole gap is there.
Read →
April 2026
Technical due diligence: what an investor must check
Before investing or acquiring, the pitch is not enough. Technical due diligence measures the real strength of a product and the hidden cost of its debt.
Read →
SaaS and payments
5May 2026
Stripe in production: idempotent webhooks
The payment succeeds on Stripe, but your database does not always know it. Reliability comes from idempotent webhooks, not the happy path.
Read →
April 2026
Securing a multi-role product with Supabase RLS
Client, provider, admin: on one database, isolation must not rely on application code. Row-Level Security makes it structural.
Read →
March 2026
Secure uploads: presigned URLs, R2 and optimisation
Routing every file through your server does not scale. Presigned URLs offload the upload while keeping you in control.
Read →
March 2026
GDPR: a clean account export and deletion
The right to export and erasure is not a checkbox. It is a feature to design, especially when data is linked.
Read →
February 2026
Integrating electronic signature into a product
Signing a document online is easy in a demo, tricky in production. The subject is states and webhooks, not the sign button.
Read →
Embedded signal and acquisition
12June 2026
The accelerometer disabled in 16-channel mode
Switching to 16 channels, the onboard accelerometer is multiplexed in firmware and clocked intermittently. How to recover it on the library side.
Read →
May 2026
Getting a microcontroller out of a bootloop
Force the ROM bootloader, fully erase flash, reflash a minimal firmware with no radio or exotic PSRAM to isolate hardware from software. The PSRAM mode trap.
Read →
May 2026
Powering a microcontroller without USB
Choosing the supply pin according to the regulated source, anticipating radio current spikes, and avoiding conflicts when USB stays plugged in parallel.
Read →
May 2026
Recording a full night without the GUI giving out
Long-format streaming breaks acquisition GUIs. LabRecorder, XDF and a custom loop against automatic staging and the drift of a wet montage.
Read →
May 2026
When radio range kills the live stream
A proprietary 2.4 GHz link tops out at 2 to 3 m, the body attenuates, 16-channel throughput is fragile. Choosing between WiFi, ESP-NOW and onboard logging.
Read →
May 2026
Gel is not an accessory, it is the contact mechanism
Dry, wet or semi-dry electrodes: gel establishes the electrochemical interface. Without it, you need an active buffer stage to handle the impedance.
Read →
May 2026
Reference and active ground under an EEG cap: the frontal tradeoff
Placing REF and BIAS frontally simplifies the montage but degrades common mode on posterior channels. Why BIAS is a driven-right-leg, not a ground.
Read →
May 2026
Routing electrode cables on a stretch textile
How to secure electrode cables on an elastic textile cap without piercing or gluing, while keeping the slack needed to suppress traction artifacts.
Read →
April 2026
Remote displays over MQTT
Local broker, one topic per screen, JSON publishing at about 10 Hz. Why MQTT beats WebSocket and polling for decoupled multi-screen setups.
Read →
April 2026
The USB timestamp lies
A timestamp stamped on USB arrival reflects host reception, not the instant of acquisition. Consequences for sub-millisecond multimodal sync.
Read →
March 2026
Rejecting EEG artifacts outside the lab
In the field, the useful signal drowns under movement, blinks and mains. ASR, ICA templates and online ORICA, and the risk of over-cleaning.
Read →
February 2026
Minimal tooling to start an embedded prototype
A soldering iron and a multimeter cover 95% of an embedded prototype. Why the oscilloscope and logic analyzer can usually wait.
Read →
Radio and sensors
7June 2026
Adding an external UART GPS to an ESP32-S3
TX/RX crossover, active antenna, MOSFET power-gating: wiring a UART GPS comes down to a few rules. And a slow GPS is not enough as telemetry.
Read →
May 2026
What an ISM module will never receive
A sub-GHz LoRa module will never receive 1090 MHz ADS-B. The front-end is filtered and the modem is locked. To listen on another band, you need an SDR.
Read →
May 2026
Choosing an ISM band by jurisdiction
EU_868 or local conventions: the ISM band depends on the country. A 915 antenna underperforms at 868, and the hardware must be the right variant.
Read →
May 2026
Configuring a mesh node: what saturates the link
An enabled downlink plus an MQTT proxy is enough to drown a mesh node. The BLE queue overflows and transmission stalls. The right setting is two switches.
Read →
April 2026
Eye-tracking for a headset: the depth sensor
A consumer depth sensor is calibrated for a room, not for the eye in near field. Eye-tracking needs infrared cameras and IR LEDs.
Read →
April 2026
Tapping into a vehicle’s telemetry
OBD-II or direct CAN: two very different access levels. The real work is reversing the DBC. The right adapter depends on the vehicle, stock or competition.
Read →
March 2026
Passive multi-sensor reception: the real limits
An SDR on a balcony really does pick up ADS-B at 200 km. But the radio horizon and urban noise set hard bounds. Fusion mostly serves to cut false positives.
Read →
AI in production
9May 2026
Having an LLM debrief telemetry data
An LLM does not read a chart, it reads structured text. Turning telemetry into a useful debrief is about framing, not the model.
Read →
May 2026
Briefing an autonomous agent
A good agent brief enforces zero questions before delivery, forces a multi-agent confrontation on architecture before code, and stays minimal to preserve design freedom.
Read →
May 2026
Validating in a controlled environment before the field
The simulator is not a fallback for lack of field access, it is the right sequencing. It isolates variables and frames the narrative between product proof and materials R&D.
Read →
May 2026
Graceful degradation as an architecture requirement
A system that relies on optional sensors must run without them. Graceful degradation is not an option, it is a design constraint set from the very first diagram.
Read →
April 2026
Generating labels without manual annotation
Manual annotation does not scale. By correlating two streams, the degradation read on one provides the ground-truth for the other. Mid-level fusion for a multimodal context.
Read →
March 2026
Diagnosing an API error on an image
An image rejected by a multimodal API almost always has a mundane cause. Format, path versus base64, size or a misdeclared media_type. An ordered diagnosis method.
Read →
March 2026
Reconstructing a 90 % missing signal with a foundation model
When 90 % of a signal is absent, reconstruction becomes a problem of structural inference. Short tokenization, 4D positional encoding and edge inference make the approach viable.
Read →
February 2026
Edge inference on state-space architectures (SSM)
On a constrained device, inference hits memory, energy and latency. State-space models process continuous signals at constant memory cost, where Transformers break down.
Read →
January 2026
Broadcasting real-time data at scale
For a live leaderboard watched by thousands, polling kills the server. Push delivery and rooms change the scale entirely.
Read →
Infrastructure and operations
12June 2026
Prerendering a Vue SPA for SEO
A client-rendered SPA serves an empty page to crawlers and social previews. Static prerendering fixes SEO without changing framework.
Read →
May 2026
Debugging a boot crash on a corrupted settings file
A service that refuses to start on a malformed settings file. Read the real stack trace instead of guessing, isolate the bad JSON, regenerate it.
Read →
May 2026
Returning a server to a vanilla state
After months of tinkering, a server accumulates manual packages and third-party repos. Audit, purge and upgrade to get back to a clean, reproducible base.
Read →
May 2026
What an image rollback does not save
Rolling back to the previous image does not restore writes made after deployment. They live in the container or the volume, never in the image.
Read →
May 2026
Protecting object-storage media from hotlinking
CORS does not block hotlinking, it only filters cross-origin JS. A Worker with a Referer check for public content, presigned URLs for private content.
Read →
May 2026
The redirect loop behind a tunnel
The reverse proxy force-HTTPS conflicts with upstream TLS termination and loops. A config flag resolves it without touching the routing.
Read →
May 2026
Excluding your LAN from VPN routing without dropping the tunnel
A VPN set to 0.0.0.0/0 swallows all traffic, including access to the local network. The right AllowedIPs keeps the tunnel up and hands the LAN back.
Read →
April 2026
A Turbo monorepo for a real-time platform
When front, back, connectors and a data pipeline share types and logic, a well-tooled monorepo avoids drift between packages.
Read →
March 2026
Unblocking a task runner that times out
A task times out since a separate runner executes the code. The variable must go on the right container, and a manual run differs from the worker.
Read →
March 2026
Auditing exposed ports and finding the next free ones
Choosing the next port for a service means telling host ports from internal ports. A host binding skews the calculation of the next available one.
Read →
March 2026
Extending an LVM partition
Growing an LVM disk takes a few steps. The recurring trap is forgetting the filesystem resize after the logical volume one.
Read →
January 2026
Everything in one container: SPA, API and database
For a human-sized project, a single container serving the front, the API and talking to Postgres simplifies deployment without sacrificing much.
Read →
Authentication and product privacy
2May 2026
A social graph without a social graph
Mutual connections, liker identities and comment content kept siloed, public counters only. A centralized visibility middleware as a structural guarantee.
Read →
May 2026
Authentication without email or password
WebAuthn passkey as primary, BIP39 seed for recovery, no reset possible. Why the absence of a recovery net is a deliberate design choice.
Read →