Skip to main content

Notebook

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

Topics

Recent entries

IDTitleTopicDateRead
#195Default Props and Optional Props in ReactReact01 May4m#194Handling Form Submission in ReactReact30 Apr3m#193Client-side validation before Server Actions in Next.jsNext.js29 Apr3m#192Type-Safe Adapter Registries with as const and satisfiesTypescript29 Apr4m#191Using Service Interfaces and Null Objects for Resilient TypeScript ScriptsTypescript29 Apr5m#190Validating Multi-Provider Credentials with Zod Discriminated UnionsTypescript27 Apr4m#189Building a URL Shortener with Next.jsNext.js22 Apr5m#188Magic Link Authentication in Next.jsAPIS22 Apr4m#187API Key Management in Next.jsAPIS21 Apr5m#186Transactional Email with Resend and React EmailNext.js21 Apr4m#185Type Annotations vs Type Inference: When to Write the TypeTypescript21 Apr4m#184The Compound Component Pattern in ReactReact20 Apr3m#183The Render Prop Pattern in ReactReact20 Apr5m#182useReducer for Complex StateReact19 Apr3m#181The React Context API: Shared State Without a LibraryReact18 Apr4m#180Dynamic OG Images in Next.js with opengraph-image.tsxNext.js17 Apr4m#179Lifting State Up in ReactReact17 Apr4m#178Conditional Rendering Patterns in ReactReact16 Apr4m#177Lists and Keys in React: Why They Actually MatterReact15 Apr5m#176Why Dyslexia Made Me a Better Software EngineerCareer15 Apr6m#175Event Handling in ReactReact14 Apr4m#174Git Commands for Reading New CodebasesGit14 Apr7m#173Props, Children, and Component Composition in ReactReact13 Apr4m#172Extracting a Queries Layer from Next.js Server ComponentsNext.js12 Apr3m#171The Virtual DOM and How React Reconciliation WorksReact12 Apr5m#170useState and the Mental Model of StateReact11 Apr4m#169Avoiding Unnecessary Rerenders in ReactReact08 Apr3m#168Composition Over Prop Drilling in ReactReact08 Apr3m#167Controlled vs Uncontrolled Forms in ReactReact08 Apr5m#166Custom Hooks: Naming and StructureReact08 Apr4m#165Deploying Next.js to Cloudflare PagesNext.js08 Apr4m#164Error and Not-Found Pages in the App RouterNext.js08 Apr4m#163Fetching Data in Server ComponentsNext.js08 Apr4m#162generateStaticParams and Static ExportNext.js08 Apr4m#161Image Optimisation in Next.jsNext.js08 Apr5m#160Incremental Static Regeneration ExplainedNext.js08 Apr4m#159Middleware Patterns in Next.jsNext.js08 Apr4m#158React Error Boundaries in PracticeReact08 Apr4m#157React Server Components vs Client ComponentsReact08 Apr3m#156Route Handlers vs Server ActionsNext.js08 Apr3m#155Server Actions in Next.js 15Next.js08 Apr4m#154State Management Without ReduxReact08 Apr4m#153Streaming and Suspense in Next.jsNext.js08 Apr4m#152Structuring Large React AppsReact08 Apr4m#151Testing React Components with Vitest and Testing LibraryReact08 Apr4m#150The Metadata API and SEO in Next.jsNext.js08 Apr3m#149The Next.js App Router Mental ModelNext.js08 Apr4m#148The React Suspense Mental ModelReact08 Apr4m#147useEffect Mistakes I Stopped MakingReact08 Apr4m#146When to Use useMemo and useCallbackReact08 Apr4m#145Docker Compose HealthchecksDocker31 Mar4m#144Template Method Design PatternDesign Patterns31 Mar5m#143Testing in LaravelLaravel27 Mar3m#142LinkedIn ProfileCareer20 Mar3m#141AI Job InterviewsAI19 Mar6m#140Everything Is Markdown NowAI19 Mar6m#139SaaS vs Open Source in the Age of AI CodingCareer19 Mar8m#138Software Engineering in the Age of AIAI19 Mar7m#137A Reusable PRD Framework for Standard SaaS FeaturesProject Docs17 Mar13m#136Project SpecProject Docs17 Mar3m#135Website Go Live ChecklistDeployments17 Mar2m#134Adapter Design PatternDesign Patterns16 Mar5m#133AI RulesAI16 Mar2m#132Contextual Attributes in LaravelLaravel16 Mar2m#131GitHub ProfileCareer16 Mar2m#130Laravel Pint: Code Style FormattingLaravel16 Mar4m#129Rector: Automated PHP Code RefactoringPHP16 Mar5m#128Scheduled Tasks in LaravelLaravel16 Mar2m#127Security Headers in LaravelLaravel16 Mar3m#126VSCode SettingsVscode16 Mar1m#125Claude SkillsAI13 Mar16m#124Claude Sub-AgentsAI13 Mar10m#123PHPStan: Static Analysis for PHPPHP08 Mar5m#122Rate Limiting in LaravelLaravel08 Mar2m#121CLAUDE.md FileAI07 Mar3m#120Builder Design PatternDesign Patterns05 Mar2m#119CI/CDDeployments05 Mar2m#118ContainerisationDeployments05 Mar4m#117Git Branching StrategiesGit05 Mar2m#116Managing Cognitive Load in CodeGood Code05 Mar5m#115Architecture DiagramsArchitecture04 Mar2m#114A/B Testing DeploymentsDeployments02 Mar3m#113Actions Pattern in PHPGood Code02 Mar1m#112AlertingObservability02 Mar2m#111API CachingAPIS02 Mar2m#110API Consistency RulesAPIS02 Mar2m#109API Deprecation ProcessAPIS02 Mar2m#108API Error HandlingAPIS02 Mar2m#107API Field Naming ConsistencyAPIS02 Mar2m#106API IdempotencyAPIS02 Mar2m#105API Rate Limiting and ThrottlingAPIS02 Mar2m#104Architecture Decision Record TemplateProject Docs02 Mar2m#103Architecture Decision Records: A Practical GuideArchitecture02 Mar5m#102Architecture DocumentationProject Docs02 Mar2m#101Authentication and TokensAPIS02 Mar2m#100Avoiding N+1 Queries in LaravelLaravel02 Mar3m#099AWS Cloud Practitioner Essentials: Module 4 - Going GlobalCareer02 Mar2m#098AWS Cloud Practitioner Essentials: Module 5 - NetworkingCareer02 Mar4m#097AWS Cloud Practitioner Essentials: Module 6 - StorageCareer02 Mar6m#096AWS Cloud Practitioner Essentials: Module 7 - DatabasesCareer02 Mar3m#095AWS Cloud Practitioner: Module 1 - Introduction to the CloudCareer02 Mar3m#094AWS Cloud Practitioner: Module 2 - Compute in the CloudCareer02 Mar4m#093AWS Cloud Practitioner: Module 3 - Exploring Compute ServicesCareer02 Mar3m#092AWS Cloud Practitioner: Module 8 - AI/ML and Data AnalyticsCareer02 Mar4m#091Blue/Green DeploymentDeployments02 Mar2m#090Bridge Design PatternDesign Patterns02 Mar3m#089Business ToolsTools02 Mar4m#088Cache Invalidation Strategies in LaravelLaravel02 Mar3m#087Caching in LaravelLaravel02 Mar3m#086Canary DeploymentDeployments02 Mar3m#085Change the Origin of a Git RepositoryGit02 Mar2m#084ChangelogProject Docs02 Mar2m#083Choosing the Right Company Size as a Software EngineerCareer02 Mar4m#082Claude CommandsAI02 Mar1m#081Claude ModelsAI02 Mar3m#080Claude Workflow: Add a New PageAI02 Mar1m#079Claude Workflow: Researching a FeatureAI02 Mar1m#078Claude Workflow: Reviewing a Pull RequestAI02 Mar1m#077Clean Up DockerDocker02 Mar2m#076Composer ScriptsPHP02 Mar1m#075Core HTTP MethodsAPIS02 Mar2m#074Create a Brag DocumentCareer02 Mar2m#073Creating a Software Developer CVCareer02 Mar6m#072Creating Pull RequestsGit02 Mar4m#071Custom Collections in LaravelLaravel02 Mar2m#070Data Transfer Objects (DTO)Good Code02 Mar2m#069Datetime Handling in REST APIsAPIS02 Mar2m#068Domain-Driven DesignGood Code02 Mar6m#067Eloquent Builder vs Scopes in LaravelLaravel02 Mar2m#066End of Contract ChecklistCareer02 Mar3m#065EnvironmentsProject Docs02 Mar3m#064Feature TogglesDeployments02 Mar2m#063Filtering, Sorting, and PaginationAPIS02 Mar2m#062Form Request Validation Patterns in LaravelLaravel02 Mar2m#061FreelancingCareer02 Mar3m#060GCP VM Port ForwardingGCP02 Mar2m#059Git HooksGit02 Mar3m#058Git ToolsTools02 Mar3m#057Gitflow Branching ModelGit02 Mar3m#056GitHub Copilot Instructions TemplateAI02 Mar5m#055Health ChecksObservability02 Mar4m#054Health Checks in LaravelLaravel02 Mar2m#053Immutable Dates in LaravelLaravel02 Mar2m#052Including Related Data in API ResponsesAPIS02 Mar2m#051Infrastructure as CodeDeployments02 Mar3m#050InterviewingCareer02 Mar2m#049Job BoardsCareer02 Mar2m#048Laravel Coding StandardsLaravel02 Mar4m#047Logging in LaravelLaravel02 Mar2m#046Logging in Your ApplicationObservability02 Mar4m#045Mass Assignment Guarding in LaravelLaravel02 Mar2m#044MonitoringObservability02 Mar5m#043Monitoring and Alerting in LaravelLaravel02 Mar3m#042Performance Improvements in LaravelLaravel02 Mar2m#041Permanent vs ContractingCareer02 Mar32m#040PHP Coding StandardsPHP02 Mar3m#039Pruning Data in LaravelLaravel02 Mar1m#038Pull Request TemplateGithub02 Mar2m#037Queues in LaravelLaravel02 Mar2m#036Read/Write Database Splitting in LaravelLaravel02 Mar2m#035Remote-Friendly CompaniesCareer02 Mar24m#034Repository PatternGood Code02 Mar3m#033REST API DocumentationAPIS02 Mar2m#032REST API HTTP Status CodesAPIS02 Mar3m#031REST API Pre-Release ChecklistAPIS02 Mar2m#030REST API Resource NamingAPIS02 Mar1m#029REST API Response ShapeAPIS02 Mar1m#028REST API Security BasicsAPIS02 Mar2m#027REST API Validation ErrorsAPIS02 Mar2m#026REST API VersioningAPIS02 Mar2m#025Reviewing Pull RequestsGit02 Mar7m#024Route Organisation and Naming in LaravelLaravel02 Mar2m#023Runbook TemplateObservability02 Mar4m#022Salary ResearchCareer02 Mar1m#021Secrets and Config Validation in LaravelLaravel02 Mar2m#020Simple Factory Design PatternDesign Patterns02 Mar1m#019Singleton Design PatternDesign Patterns02 Mar1m#018SOLID PrinciplesGood Code02 Mar4m#017Spec-Driven Development with AIAI02 Mar3m#016Stacked Pull RequestsGit02 Mar3m#015State Design PatternDesign Patterns02 Mar4m#014Strategy Design PatternDesign Patterns02 Mar5m#013Task TemplateAI02 Mar1m#012Tasks DirectoryAI02 Mar1m#011Tech Stack DocumentProject Docs02 Mar3m#010The Twelve-Factor AppGood Code02 Mar4m#009Trunk-Based DevelopmentGit02 Mar3m#008Using .env in LaravelLaravel02 Mar2m#007Using Multiple SSH KeysGit02 Mar3m#006Value ObjectsGood Code02 Mar2m#005VersioningGit02 Mar2m#004Working with Large Datasets in LaravelLaravel02 Mar3m#003Working With Third PartiesGood Code02 Mar1m#002Writing Good Commit MessagesGit02 Mar3m#001YAGNIGood Code02 Mar1m