All blogs / Software / engineering practice
Paulund
paulund builds and runs independent software products, sharing what they do, the decisions behind them and what he learns along the way.
Software / engineering practicePHPJavaScript / TypeScriptAI / ML
- Posts
- 197 from 2 Mar 2026 to 29 Oct 2026
- Posting
- about daily (195 in the last year)
- Kind
- personal blog
- Feed
- https://paulund.co.uk/feed.xml
2026 195
- Tracking what the US pays in interest on its debt with the Bullion API
- Adding who holds US federal debt to the Bullion API
- Adding portfolio pages, a portfolio API and read-only MCP tools to the Bullion API
- Long Claude Code sessions pay for their whole history on every call
- Sending a prompt to a Claude Code cloud session from my terminal
- AI Notes
- Architecture decision records: a practical guide and template
- Building a status page for the Bullion API that explains its incidents
- Git branching strategies: Gitflow, trunk-based and GitHub Flow
- Harness engineering for coding agents
- Health checks in Laravel
- Logging in Laravel
- Monitoring and alerting in Laravel
- Props, children and component composition in React
- Requiring a verified email address for Bullion API keys
- REST API design rules for URLs, methods and fields
- REST API response shape, pagination and errors
- REST API security, authentication and rate limiting
- Running a REST API: caching, versioning, deprecation and release
- Sharing state in React without Redux
- Software engineering in the age of AI
- useState, useReducer and the mental model of state in React
- What happens to developers who don't adapt to AI
- APIs Notes
- Architecture Notes
- Git Notes
- Laravel Notes
- React Notes
- Adding an inflation-adjusted gold price to the Bullion API
- Adding nine more central banks to the Bullion API's gold data
- Building an MCP server for the Bullion API
- Building a liquidity pool simulator to understand my own DeFi positions
- Adding a data page for every dataset in the Bullion API
- My VPS got throttled to 20% CPU, so I'm buying a mini PC for home
- Why I use the CLI with Herdr instead of desktop apps and orchestrators
- Adding past metal prices to the Bullion API price request
- I moved my coding agents to a VPS so I could close my laptop
- Building one portfolio view for all my crypto wallets
- Infrastructure questions belong before the first line of code
- SEO feedback should become bounded engineering work
- Agent workflows should outlive their models
- A Modern Quality Pipeline and Testing Strategy for Frontend Projects
- Agents Are Cron Jobs and Markdown Files
- Good code Notes
- Measure Your Agent Skills or Delete Them
- What to Do If You're Not Detail Oriented
- Career Notes
- How to Stay Resilient in a Difficult Engineering Job
- AI Code Review: Pre-Existing Bugs as a Side Quest
- Software Factory: Build Factories, Not Features
- Small npm Packages Are Mostly Dead
- The Four Levels of Working with AI
- How AI Agents Made Me CLI-First
- How I Build Software With Agent Loops
- Higher-Order Components and Why Hooks Replaced Them
- Pure Components and Why Purity Matters in React
- React Fragments and When You Actually Need Them
- Refs and when useRef beats useState
- Default Props and Optional Props in React
- Handling Form Submission in React
- Next.js Notes
- TypeScript Notes
- Client-side validation before Server Actions in Next.js
- Type-Safe Adapter Registries with as const and satisfies
- Using Service Interfaces and Null Objects for Resilient TypeScript Scripts
- Validating Multi-Provider Credentials with Zod Discriminated Unions
- Building a URL Shortener with Next.js
- Magic Link Authentication in Next.js
- API Key Management in Next.js
- Transactional Email with Resend and React Email
- Type Annotations vs Type Inference: When to Write the Type
- The Compound Component Pattern in React
- The Render Prop Pattern in React
- Dynamic OG Images in Next.js with opengraph-image.tsx
- Conditional Rendering Patterns in React
- Lists and Keys in React: Why They Actually Matter
- Why Dyslexia Made Me a Better Software Engineer
- Event Handling in React
- Git Commands for Reading New Codebases
- Extracting a Queries Layer from Next.js Server Components
- The Virtual DOM and How React Reconciliation Works
- Avoiding Unnecessary Rerenders in React
- Controlled vs Uncontrolled Forms in React
- Custom Hooks: Naming and Structure
- Deploying Next.js to Cloudflare Pages
- Error and Not-Found Pages in the App Router
- Fetching Data in Server Components
- generateStaticParams and Static Export
- Image Optimisation in Next.js
- Incremental Static Regeneration Explained
- Middleware Patterns in Next.js
- React Error Boundaries in Practice
- React Server Components vs Client Components
- React Suspense: loading fallbacks, boundaries and use()
- Route Handlers vs Server Actions
- Server Actions in Next.js 15
- Streaming and Suspense in Next.js
- Structuring Large React Apps
- Testing React Components with Vitest and Testing Library
- The Metadata API and SEO in Next.js
- The Next.js App Router Mental Model
- useEffect Mistakes I Stopped Making
- When to Use useMemo and useCallback
- Design patterns Notes
- Docker Notes
- Docker Compose Healthchecks
- Template Method Design Pattern
- Testing in Laravel
- LinkedIn Profile
- AI Job Interviews
- Everything Is Markdown Now
- SaaS vs Open Source in the Age of AI Coding
- Deployments Notes
- Project docs Notes
- A Reusable PRD Framework for Standard SaaS Features
- Project Spec
- Website Go Live Checklist
- PHP Notes
- Adapter Design Pattern
- AI Rules
- Contextual Attributes in Laravel
- GitHub Profile
- Laravel Pint: configuration, rules and CI checks
- Rector: Automated PHP Code Refactoring
- Scheduled Tasks in Laravel
- Security Headers in Laravel
- Agent Skills
- Claude Sub-Agents
- PHPStan: Static Analysis for PHP
- Rate Limiting in Laravel
- CLAUDE.md File
- Builder Design Pattern
- Cicd
- Containerisation
- Managing Cognitive Load in Code
- GCP Notes
- GitHub Notes
- Observability Notes
- A/B Testing Deployments
- Actions Pattern in PHP
- Architecture Documentation
- Avoiding N+1 Queries in Laravel
- Blue/Green Deployment
- Bridge Design Pattern
- Cache Invalidation Strategies in Laravel
- Caching in Laravel
- Canary Deployment
- CarbonImmutable in Laravel: prevent date mutation bugs
- Change the Origin of a Git Repository
- Changelog
- Choosing the Right Company Size as a Software Engineer
- Clean Up Docker
- Create a Brag Document
- Creating a Software Developer CV
- Creating Pull Requests
- Custom Collections in Laravel
- Data Transfer Objects (DTO)
- Domain-Driven Design
- Eloquent Builder vs Scopes in Laravel
- End of Contract Checklist
- Environments
- Feature Toggles
- Form Request Validation Patterns in Laravel
- Freelancing
- GCP VM Port Forwarding
- Git Hooks
- GitHub Copilot Instructions Template
- Infrastructure as Code
- Interviewing
- Laravel Coding Standards
- Mass Assignment Guarding in Laravel
- Performance Improvements in Laravel
- Permanent vs Contracting
- PHP Coding Standards
- Pull Request Template
- Queues in Laravel
- Read/Write Database Splitting in Laravel
- Repository Pattern
- Reviewing Pull Requests
- Route Organisation and Naming in Laravel
- Runbook Template
- Secrets and Config Validation in Laravel
- SOLID Principles
- Spec-Driven Development with AI
- Stacked Pull Requests
- State Design Pattern
- Strategy Design Pattern
- Tech Stack Document
- The Twelve-Factor App
- Using .env in Laravel
- Using Multiple SSH Keys
- Value Objects
- Versioning
- Working with Large Datasets in Laravel
- Writing Good Commit Messages