Skip to main content

Notebook

203 entries across 20 topics. A running log of what I'm building, learning, and breaking.

Topics

Recent entries

IDTitleTopicDateRead
#203What to Do If You're Not Detail OrientedCareerCareer08 Jun3m#202How to Stay Resilient in a Difficult Engineering JobCareerCareer06 Jun9m#201Agentic Engineering PatternsAIAI05 Jun8m#200AI Ate the Translation LayerAIAI03 Jun7m#199Why Smaller Teams Will Win With AIAIAI02 Jun17m#198AI Code Review: Pre-Existing Bugs as a Side QuestAIAI01 Jun6m#197Software Factory: Build Factories, Not FeaturesAIAI01 Jun8m#196Small npm Packages Are Mostly DeadAIAI30 May7m#195The Four Levels of Working with AIAIAI30 May5m#194What Happens to Developers Who Don't Adapt to AIAIAI30 May7m#193Software Ecology and the 10x MomentAIAI29 May10m#192How AI Agents Made Me CLI-FirstAIAI27 May9m#191How I Build Software With Agent LoopsAIAI27 May10m#190Higher-Order Components and Why Hooks Replaced ThemReactReact25 May4m#189Pure Components and Why Purity Matters in ReactReactReact18 May4m#188React Fragments and When You Actually Need ThemReactReact11 May4m#187Refs and when useRef beats useStateReactReact07 May4m#186Default Props and Optional Props in ReactReactReact01 May4m#185Handling Form Submission in ReactReactReact30 Apr3m#184Client-side validation before Server Actions in Next.jsNext.jsNext.js29 Apr3m#183Type-Safe Adapter Registries with as const and satisfiesTypeScriptTypeScript29 Apr4m#182Using Service Interfaces and Null Objects for Resilient TypeScript ScriptsTypeScriptTypeScript29 Apr5m#181Validating Multi-Provider Credentials with Zod Discriminated UnionsTypeScriptTypeScript27 Apr4m#180Building a URL Shortener with Next.jsNext.jsNext.js22 Apr5m#179Magic Link Authentication in Next.jsAPISAPIS22 Apr4m#178API Key Management in Next.jsAPISAPIS21 Apr5m#177Transactional Email with Resend and React EmailNext.jsNext.js21 Apr4m#176Type Annotations vs Type Inference: When to Write the TypeTypeScriptTypeScript21 Apr4m#175The Compound Component Pattern in ReactReactReact20 Apr3m#174The Render Prop Pattern in ReactReactReact20 Apr5m#173useReducer for Complex StateReactReact19 Apr3m#172The React Context API: Shared State Without a LibraryReactReact18 Apr4m#171Dynamic OG Images in Next.js with opengraph-image.tsxNext.jsNext.js17 Apr4m#170Lifting State Up in ReactReactReact17 Apr4m#169Conditional Rendering Patterns in ReactReactReact16 Apr4m#168Lists and Keys in React: Why They Actually MatterReactReact15 Apr5m#167Why Dyslexia Made Me a Better Software EngineerCareerCareer15 Apr6m#166Event Handling in ReactReactReact14 Apr4m#165Git Commands for Reading New CodebasesGitGit14 Apr7m#164Props, Children, and Component Composition in ReactReactReact13 Apr4m#163Extracting a Queries Layer from Next.js Server ComponentsNext.jsNext.js12 Apr3m#162The Virtual DOM and How React Reconciliation WorksReactReact12 Apr5m#161useState and the Mental Model of StateReactReact11 Apr4m#160Avoiding Unnecessary Rerenders in ReactReactReact08 Apr3m#159Composition Over Prop Drilling in ReactReactReact08 Apr3m#158Controlled vs Uncontrolled Forms in ReactReactReact08 Apr5m#157Custom Hooks: Naming and StructureReactReact08 Apr4m#156Deploying Next.js to Cloudflare PagesNext.jsNext.js08 Apr4m#155Error and Not-Found Pages in the App RouterNext.jsNext.js08 Apr4m#154Fetching Data in Server ComponentsNext.jsNext.js08 Apr4m#153generateStaticParams and Static ExportNext.jsNext.js08 Apr4m#152Image Optimisation in Next.jsNext.jsNext.js08 Apr5m#151Incremental Static Regeneration ExplainedNext.jsNext.js08 Apr4m#150Middleware Patterns in Next.jsNext.jsNext.js08 Apr4m#149React Error Boundaries in PracticeReactReact08 Apr4m#148React Server Components vs Client ComponentsReactReact08 Apr3m#147Route Handlers vs Server ActionsNext.jsNext.js08 Apr3m#146Server Actions in Next.js 15Next.jsNext.js08 Apr4m#145State Management Without ReduxReactReact08 Apr4m#144Streaming and Suspense in Next.jsNext.jsNext.js08 Apr4m#143Structuring Large React AppsReactReact08 Apr4m#142Testing React Components with Vitest and Testing LibraryReactReact08 Apr4m#141The Metadata API and SEO in Next.jsNext.jsNext.js08 Apr3m#140The Next.js App Router Mental ModelNext.jsNext.js08 Apr4m#139The React Suspense Mental ModelReactReact08 Apr4m#138useEffect Mistakes I Stopped MakingReactReact08 Apr4m#137When to Use useMemo and useCallbackReactReact08 Apr4m#136Docker Compose HealthchecksDockerDocker31 Mar4m#135Template Method Design PatternDesign PatternsDesign Patterns31 Mar5m#134Testing in LaravelLaravelLaravel27 Mar3m#133LinkedIn ProfileCareerCareer20 Mar3m#132AI Job InterviewsAIAI19 Mar6m#131Everything Is Markdown NowAIAI19 Mar6m#130SaaS vs Open Source in the Age of AI CodingCareerCareer19 Mar8m#129Software Engineering in the Age of AIAIAI19 Mar7m#128A Reusable PRD Framework for Standard SaaS FeaturesProject DocsProject Docs17 Mar13m#127Project SpecProject DocsProject Docs17 Mar3m#126Website Go Live ChecklistDeploymentsDeployments17 Mar2m#125Adapter Design PatternDesign PatternsDesign Patterns16 Mar5m#124AI RulesAIAI16 Mar2m#123Contextual Attributes in LaravelLaravelLaravel16 Mar2m#122GitHub ProfileCareerCareer16 Mar2m#121Laravel Pint: Code Style FormattingLaravelLaravel16 Mar4m#120Rector: Automated PHP Code RefactoringPHPPHP16 Mar5m#119Scheduled Tasks in LaravelLaravelLaravel16 Mar2m#118Security Headers in LaravelLaravelLaravel16 Mar3m#117VSCode SettingsVscodeVscode16 Mar1m#116Agent SkillsAIAI13 Mar23m#115Claude Sub-AgentsAIAI13 Mar10m#114PHPStan: Static Analysis for PHPPHPPHP08 Mar5m#113Rate Limiting in LaravelLaravelLaravel08 Mar2m#112CLAUDE.md FileAIAI07 Mar3m#111Builder Design PatternDesign PatternsDesign Patterns05 Mar2m#110CI/CDDeploymentsDeployments05 Mar2m#109ContainerisationDeploymentsDeployments05 Mar4m#108Git Branching StrategiesGitGit05 Mar2m#107Managing Cognitive Load in CodeGood CodeGood Code05 Mar5m#106A/B Testing DeploymentsDeploymentsDeployments02 Mar3m#105Actions Pattern in PHPGood CodeGood Code02 Mar1m#104AlertingObservabilityObservability02 Mar2m#103API CachingAPISAPIS02 Mar2m#102API Consistency RulesAPISAPIS02 Mar2m#101API Deprecation ProcessAPISAPIS02 Mar2m#100API Error HandlingAPISAPIS02 Mar2m#099API Field Naming ConsistencyAPISAPIS02 Mar2m#098API IdempotencyAPISAPIS02 Mar2m#097API Rate Limiting and ThrottlingAPISAPIS02 Mar2m#096Architecture Decision Record TemplateProject DocsProject Docs02 Mar2m#095Architecture Decision Records: A Practical GuideArchitectureArchitecture02 Mar5m#094Architecture DocumentationProject DocsProject Docs02 Mar2m#093Authentication and TokensAPISAPIS02 Mar2m#092Avoiding N+1 Queries in LaravelLaravelLaravel02 Mar3m#091AWS Cloud Practitioner Essentials: Module 4 - Going GlobalCareerCareer02 Mar2m#090AWS Cloud Practitioner Essentials: Module 5 - NetworkingCareerCareer02 Mar4m#089AWS Cloud Practitioner Essentials: Module 6 - StorageCareerCareer02 Mar6m#088AWS Cloud Practitioner Essentials: Module 7 - DatabasesCareerCareer02 Mar3m#087AWS Cloud Practitioner: Module 1 - Introduction to the CloudCareerCareer02 Mar3m#086AWS Cloud Practitioner: Module 2 - Compute in the CloudCareerCareer02 Mar4m#085AWS Cloud Practitioner: Module 3 - Exploring Compute ServicesCareerCareer02 Mar3m#084AWS Cloud Practitioner: Module 8 - AI/ML and Data AnalyticsCareerCareer02 Mar4m#083Blue/Green DeploymentDeploymentsDeployments02 Mar2m#082Bridge Design PatternDesign PatternsDesign Patterns02 Mar3m#081Business ToolsToolsTools02 Mar4m#080Cache Invalidation Strategies in LaravelLaravelLaravel02 Mar3m#079Caching in LaravelLaravelLaravel02 Mar3m#078Canary DeploymentDeploymentsDeployments02 Mar3m#077Change the Origin of a Git RepositoryGitGit02 Mar2m#076ChangelogProject DocsProject Docs02 Mar2m#075Choosing the Right Company Size as a Software EngineerCareerCareer02 Mar4m#074Claude ModelsAIAI02 Mar3m#073Clean Up DockerDockerDocker02 Mar2m#072Core HTTP MethodsAPISAPIS02 Mar2m#071Create a Brag DocumentCareerCareer02 Mar2m#070Creating a Software Developer CVCareerCareer02 Mar6m#069Creating Pull RequestsGitGit02 Mar4m#068Custom Collections in LaravelLaravelLaravel02 Mar2m#067Data Transfer Objects (DTO)Good CodeGood Code02 Mar2m#066Datetime Handling in REST APIsAPISAPIS02 Mar2m#065Domain-Driven DesignGood CodeGood Code02 Mar6m#064Eloquent Builder vs Scopes in LaravelLaravelLaravel02 Mar2m#063End of Contract ChecklistCareerCareer02 Mar3m#062EnvironmentsProject DocsProject Docs02 Mar3m#061Feature TogglesDeploymentsDeployments02 Mar2m#060Filtering, Sorting, and PaginationAPISAPIS02 Mar2m#059Form Request Validation Patterns in LaravelLaravelLaravel02 Mar2m#058FreelancingCareerCareer02 Mar3m#057GCP VM Port ForwardingGCPGCP02 Mar2m#056Git HooksGitGit02 Mar3m#055Git ToolsToolsTools02 Mar3m#054Gitflow Branching ModelGitGit02 Mar3m#053GitHub Copilot Instructions TemplateAIAI02 Mar5m#052Health ChecksObservabilityObservability02 Mar4m#051Health Checks in LaravelLaravelLaravel02 Mar2m#050Immutable Dates in LaravelLaravelLaravel02 Mar2m#049Including Related Data in API ResponsesAPISAPIS02 Mar2m#048Infrastructure as CodeDeploymentsDeployments02 Mar3m#047InterviewingCareerCareer02 Mar2m#046Job BoardsCareerCareer02 Mar2m#045Laravel Coding StandardsLaravelLaravel02 Mar4m#044Logging in LaravelLaravelLaravel02 Mar2m#043Logging in Your ApplicationObservabilityObservability02 Mar4m#042Mass Assignment Guarding in LaravelLaravelLaravel02 Mar2m#041MonitoringObservabilityObservability02 Mar5m#040Monitoring and Alerting in LaravelLaravelLaravel02 Mar3m#039Performance Improvements in LaravelLaravelLaravel02 Mar2m#038Permanent vs ContractingCareerCareer02 Mar32m#037PHP Coding StandardsPHPPHP02 Mar3m#036Pull Request TemplateGithubGithub02 Mar2m#035Queues in LaravelLaravelLaravel02 Mar2m#034Read/Write Database Splitting in LaravelLaravelLaravel02 Mar2m#033Remote-Friendly CompaniesCareerCareer02 Mar24m#032Repository PatternGood CodeGood Code02 Mar3m#031REST API DocumentationAPISAPIS02 Mar2m#030REST API HTTP Status CodesAPISAPIS02 Mar3m#029REST API Pre-Release ChecklistAPISAPIS02 Mar2m#028REST API Resource NamingAPISAPIS02 Mar1m#027REST API Response ShapeAPISAPIS02 Mar1m#026REST API Security BasicsAPISAPIS02 Mar2m#025REST API Validation ErrorsAPISAPIS02 Mar2m#024REST API VersioningAPISAPIS02 Mar2m#023Reviewing Pull RequestsGitGit02 Mar7m#022Route Organisation and Naming in LaravelLaravelLaravel02 Mar2m#021Runbook TemplateObservabilityObservability02 Mar4m#020Salary ResearchCareerCareer02 Mar1m#019Secrets and Config Validation in LaravelLaravelLaravel02 Mar2m#018Simple Factory Design PatternDesign PatternsDesign Patterns02 Mar1m#017Singleton Design PatternDesign PatternsDesign Patterns02 Mar1m#016SOLID PrinciplesGood CodeGood Code02 Mar4m#015Spec-Driven Development with AIAIAI02 Mar3m#014Stacked Pull RequestsGitGit02 Mar3m#013State Design PatternDesign PatternsDesign Patterns02 Mar4m#012Strategy Design PatternDesign PatternsDesign Patterns02 Mar5m#011Tech Stack DocumentProject DocsProject Docs02 Mar3m#010The Twelve-Factor AppGood CodeGood Code02 Mar4m#009Trunk-Based DevelopmentGitGit02 Mar3m#008Using .env in LaravelLaravelLaravel02 Mar2m#007Using Multiple SSH KeysGitGit02 Mar3m#006Value ObjectsGood CodeGood Code02 Mar2m#005VersioningGitGit02 Mar2m#004Working with Large Datasets in LaravelLaravelLaravel02 Mar3m#003Working With Third PartiesGood CodeGood Code02 Mar1m#002Writing Good Commit MessagesGitGit02 Mar3m#001YAGNIGood CodeGood Code02 Mar1m