Latest Updates

Documenting code, one commit at a time.

Enhancements to Cache Handling and Code Robustness

Introduction

Recent commits to our application focused on improving the reliability and efficiency of our caching mechanisms, as well as enhancing the overall robustness of the codebase. These changes aim to prevent race conditions and reduce the risk of errors during refactoring.

Atomic Cache Operations

A key improvement involves replacing Cache::has and Cache::put with the atomic

Read more

Automating Development Tasks with Custom Skills

In software development, repetitive tasks can consume valuable time and introduce inconsistencies. Automating these tasks not only boosts efficiency but also enhances code quality and maintainability. This post explores how custom skills can be leveraged to streamline project workflows, focusing on practical examples and benefits.

Custom Skills for Enhanced Productivity

Custom skills are

Read more
PHP Laravel MySQL

Fixing Type Errors in Subscription Models

When working with custom models that extend core framework functionalities, it's crucial to maintain type compatibility. A recent fix in our application addressed a TypeError that arose from an incorrect extension of the Subscription model.

The Problem: Type Hint Mismatch

The custom Subscription model was initially set up to extend Eloquent's Model directly.

Read more

Enhancing Application Security with Rate Limiting and Fine-Grained Access Control

Securing web applications requires a multi-layered approach. Recent updates to our application focused on bolstering security through rate limiting on authentication routes and implementing granular access control for administrative resources.

Rate Limiting Authentication Routes

To mitigate brute-force attacks and other forms of abuse, we've implemented rate limiting on critical

Read more
PHP Laravel OOP

Extending Models with Method Overrides: A Case Study

Sometimes, the core functionality of a framework needs a little customization to perfectly fit the nuances of a specific application. Recently, we faced a situation where we needed to extend our Tenant model to directly handle subscription checks, which required overriding some core Cashier methods.

The Challenge

Our application uses a multi-tenant architecture. Each tenant needs to manage

Read more

Adding Full-Text Search to Your Portfolio with PostgreSQL

Implementing full-text search can significantly enhance the user experience of your portfolio or blog. This post details how to add PostgreSQL-powered full-text search to a Laravel application, focusing on accent-insensitive prefix searching across multiple fields.

The Problem: Basic Search Limitations

Simple LIKE queries in SQL often fall short when dealing with complex search

Read more

Fixing Silent GitHub Scope Update Failures

When integrating with GitHub, users sometimes encounter issues when updating the granted permissions (scopes). A recent update addresses a scenario where these updates would silently fail, leaving users confused.

The Problem

When a user attempted to update their GitHub scope (e.g., from public-only access to all repositories) via the integrations page, a failure in the Socialite OAuth

Read more
PHP MySQL Laravel

Code Formatting and Database Schema Updates

Overview

Recent development activity focused on code style consistency and updates to the database schema.

Code Formatting

Applied automated formatting fixes using php-cs-fixer. This ensures consistent code style across the project, improving readability and maintainability. The tool automatically adjusts spacing, indentation, and other stylistic elements according to predefined rules.

Read more
PHP MySQL Laravel

Tenant-Based Billing: Fixing Cashier Customer Model

Introduction

After consolidating billing to a tenant-based system (Phase 3), we encountered an issue with the Cashier package. The default customer model was still set to User, causing errors when Stripe webhook events triggered.

The Problem

The stripe_id column, expected by Cashier, was not found because it was looking in the User model instead of the Tenant model.

Read more