The notebook
Blog.
notes from real projects
Practical writing on Laravel, AI engineering, token costs, SaaS architecture, and the technology decisions that make software cheaper to run and easier to grow.
All posts
113 posts
20 Feb 2026
Laravel & PHP
Legally binding e-signatures: Visma Sign in production
Visma Sign gives you legally binding, bank-authenticated e-signatures in Finland — but almost nothing is written about it in English. Here is how the integration actually works.
→
18 Feb 2026
Security & Compliance
GDPR Compliance for SaaS in 2026: A Founder's Practical Checklist
2026 EDPB enforcement targets transparency and third-party transfer disclosure, not cookie banners. A build-order checklist from shipping SaaS for Nordic clients: records of processing, DPAs...
→
16 Feb 2026
Laravel & PHP
Building live video on Twilio for emergency use
When video connects a person in danger to a responder, join time and connection success are safety metrics. How I built emergency-grade live video on Twilio with a Laravel backend.
→
15 Feb 2026
Performance & Scale
Queues Before Autoscaling: Surviving Traffic Spikes on a Budget
Small teams reach for autoscaling when the cheaper fix is moving work off the request path. How I use Laravel queues/Horizon, rate limiting and cache warming to flatten a 10x spike on a sing...
→
12 Feb 2026
Performance & Scale
A Caching Strategy That Works: Layers, TTLs and Invalidation
Most caching advice lists patterns; the real problem is deciding which layer (CDN, HTTP, app, Redis, query) owns each value's freshness. A decision table mapping data types to layer + TTL +...
→
09 Feb 2026
Performance & Scale
N+1 Queries in Laravel: How I Find and Kill Them Before They Ship
The ORM failure mode that turns 1 query into 101 and melts production at 500 concurrent users. Concrete Laravel toolkit: Model::preventLazyLoading() in non-prod, eager loading with constrain...
→
09 Feb 2026
Laravel & PHP
Idempotency is not optional on the payment path
A timeout, an automatic client retry, and two charges on a real customer's card. What that incident taught me about idempotency keys, locks and unique constraints on the payment path.
→
06 Feb 2026
Performance & Scale
Debugging Slow Database Queries: My EXPLAIN-First Workflow
Postmortem-style walkthrough of taking a 4-second endpoint to under 100ms: slow-query log → pg_stat_statements/performance_schema → EXPLAIN ANALYZE → composite index. Anchored in the stat th...
→
03 Feb 2026
Performance & Scale
Fixing INP on Checkout and Forms: Where Slow Interactions Kill Sales
Sites that passed FID at 97% pass INP at only ~65% — and the failures cluster exactly where money changes hands: validated form fields, shipping selectors, payment buttons. Practitioner walk...
→
02 Feb 2026
Laravel & PHP
Payment gateway migration with zero lost transactions
Migrating live subscriptions and stored cards between gateways is open-heart surgery. The dual-running playbook I used to move a production Laravel app without losing a transaction.
→
31 Jan 2026
Performance & Scale
Core Web Vitals in 2026: The New 2.0s LCP Bar and What It Costs You
Google quietly tightened the 'good' LCP threshold from 2.5s to 2.0s in March 2026, and most business sites that passed last year now fail. First-person triage framework: how I audit a client...
→
28 Jan 2026
SaaS & Product
Fixed Price vs Time and Materials: Which Protects You as a Client
A developer explains the incentives behind each model — why fixed price inflates quotes with risk padding and punishes scope learning, when T&M with a capped milestone structure gives client...
→