Writing

All Articles

Vue Vapor: Goodbye, Virtual DOM
Vue·

Vue Vapor: Goodbye, Virtual DOM

Vue Vapor is a new compilation mode that ditches the Virtual DOM entirely. It's faster, lighter, and you can enable it with a single keyword — no refactoring needed.

Real-Time Vue Apps, Part 3: WebRTC and PeerJS
Vue·

Real-Time Vue Apps, Part 3: WebRTC and PeerJS

Direct, peer-to-peer connections with WebRTC: a friendly tour of SDP, ICE, STUN, and TURN, plus how PeerJS makes building chats and video calls actually fun.

Real-Time Vue Apps, Part 2: WebSockets and Real-Time Databases
Vue·

Real-Time Vue Apps, Part 2: WebSockets and Real-Time Databases

Bidirectional real-time with WebSockets, built right into Nuxt thanks to Nitro. Plus a tour of real-time databases like Firebase and Supabase, and how they use WebSockets under the hood.

Real-Time Vue Apps, Part 1: Polling and Server-Sent Events
Vue·

Real-Time Vue Apps, Part 1: Polling and Server-Sent Events

A series on adding real-time features to your Vue and Nuxt apps. We kick things off with the bad old days of polling, and then move on to Server-Sent Events, the simplest way to push from server to client.

Chat with Your Documents: A Practical Guide to RAG Using the New Laravel AI SDK
AI·

Chat with Your Documents: A Practical Guide to RAG Using the New Laravel AI SDK

The new Laravel AI SDK makes it significantly easier to integrate AI into your Laravel applications. In this article I wrote for Tighten, I walk through how to use it to build a RAG system.

Build an AI-Powered Drawing Guessing Game with Laravel, Prism, and HTML Canvas
AI·

Build an AI-Powered Drawing Guessing Game with Laravel, Prism, and HTML Canvas

Prism is a PHP package that allows you to communicate with different AI providers through a unified API. It was created by TJ Miller and is a perfect fit for Laravel applications.

Build Your Own Private, Self-Hosted AI Applications with Ollama & Laravel
AI·

Build Your Own Private, Self-Hosted AI Applications with Ollama & Laravel

Running LLMs on your own server (or even on your own computer) is totally possible. Yes, you need beefy equipment, but the advantages are great:

17 New(ish) Vanilla JavaScript Features You Might Have Missed
JavaScript·

17 New(ish) Vanilla JavaScript Features You Might Have Missed

Ahhh, that feeling when you discover JavaScript native features that let you say goodbye to bloated npm packages!

SQL Generated Columns and Views: How to Use Them in Your Laravel App
Databases·

SQL Generated Columns and Views: How to Use Them in Your Laravel App

Using ORMs is convenient, but nothing beats understanding the actual SQL queries your database is running under the hood.

10 Efficient (and Fun) Ways to Seed Your Database
Laravel·

10 Efficient (and Fun) Ways to Seed Your Database

Have you ever wanted to start a project right away, only to realize you need a lot of test data? Yeah, me too. Creating seeders is a chore, but... can we make it efficient and, dare I say, fun?

Automatically Deploy Your Nuxt Static Site to DigitalOcean with GitHub Actions
DevOps·

Automatically Deploy Your Nuxt Static Site to DigitalOcean with GitHub Actions

Auto-deploy is one of the great features of Netlify and Vercel. Whenever you push to main... done! Your site builds automatically. I love that, but I prefer to manage my own server.

Five Practical Tips to Improve Search in Laravel Apps With Typesense
Laravel·

Five Practical Tips to Improve Search in Laravel Apps With Typesense

At Tighten, I've had the chance to work with Typesense on client projects, and it quickly became my go-to for building fast, powerful search features.

Filament Crash-Course: Create a Customizable Admin Panel in Minutes
Laravel·

Filament Crash-Course: Create a Customizable Admin Panel in Minutes

I think Filament is a fantastic tool for creating admin panels quickly. It's the go-to admin panel that many devs at Tighten recommend to clients, including me! I had the opportunity to write about it on the company's blog.

A Step-by-Step Guide to Setting Up Permissions on Your Linux Web Server
DevOps·

A Step-by-Step Guide to Setting Up Permissions on Your Linux Web Server

Web server permissions: setting them right can be challenging, but setting them wrong can be disastrous. Of course, we don't want to grant a third party access to private files and folders or allow the execution of malicious code.

From MySQL to Typesense: Blazing-Fast Full-Text Search in Laravel
Laravel·

From MySQL to Typesense: Blazing-Fast Full-Text Search in Laravel

There are many ways to build a search feature for your Laravel application, from classic LIKE queries in SQL to MySQL Full-Text Indexes. While those approaches work, they come with limitations.

How To Automatically Generate Dynamic Open Graph Images In PHP
PHP·

How To Automatically Generate Dynamic Open Graph Images In PHP

Today, we’ll explore how to automatically generate dynamic OG images for your pages and articles: a cool background, the page title on top, and... profit! The example uses Jigsaw, but applies to any PHP project.

Use HTMX to Create Laravel Single-Page Apps Without Writing JavaScript
Laravel·

Use HTMX to Create Laravel Single-Page Apps Without Writing JavaScript

A developer from Montana looked at the front-end wild west (full of frameworks, libraries, bundlers, runtimes, and more) and had an idea: "What if we go back to basics? What if we just use HTML... with extra powers?"

Form Validation With Type Inference Made Easy With Zod, The Best Sidekick For Typescript
TypeScript·

Form Validation With Type Inference Made Easy With Zod, The Best Sidekick For Typescript

Zod is amazing! You can use it to define the schema of any object and validate it. Form data? No problem. Nested arrays and objects? We've got you covered. Custom data types? Yeah!

Husky: How To Automatically Format, Lint And Test Before You Commit Or Push
Tools·

Husky: How To Automatically Format, Lint And Test Before You Commit Or Push

I love it when bots make our lives easier. In this case, it’s not a robot but a friendly doggo. Husky listens for Git hooks, such as pre-commit or pre-push, and performs the tasks you define (like linting, formatting, or running tests) before proceeding.

State Management In Vue 3: Why You Should Try Out Pinia
Vue·

State Management In Vue 3: Why You Should Try Out Pinia

How do you share state between multiple components in a Vue app? While Vue 3 reactivity is powerful and composables can get you far, your app might benefit from Pinia, the official state management solution for Vue applications.

Nuxt: Superpowers For Your Vue 3 Application
Nuxt·

Nuxt: Superpowers For Your Vue 3 Application

I love Nuxt! I choose it whenever I need to create a Vue application, from small SPAs to large websites with SSR and SEO optimizations. The Nuxt ecosystem offers so many time-saving, plug-and-play modules that it's hard to pass up.