Recently Released.
Newly Released in the last 30 days


Filtering by a Number or Array of Numbers
In this lesson, we'll implement our number filtering system in which we'll allow our search APIs to accept a single number or an array of numbers to filter the data by. To validate this, we'll use the union rule from VineJS.


Advanced String Filtering
In this lesson, we upgrade our course name filter to support both simple strings and advanced object-based queries using VineJS’ union rule. This allows users to specify not just what to search for, but how to search for it.


Basic Course Search & Filter
In this lesson, we'll add a new search endpoint for our courses and enable some basic filter functionality along with it. We'll be able to search by course name likeness, status, difficulty, and/or access level.


Getting A Module's Lessons
In this lesson, we'll remove our lesson's index method in favor of a module method whose purpose will be to fetch a module's specific lessons in their stored order.


Lesson Operations
In this lesson, we'll implement most of the CRUD functionality for our lessons, including creating, updating, deleting, and patching our lesson's tags. We'll also discuss why we'll treat lessons as a top-level resource.


Fixing Our ESLint Integration
I Ran into a ReferenceError and realized our ESLint wasn't working. In this lesson, we'll take a brief aside to fix the linting within our project so it works with ESLint v9


Getting Just Course Modules & Lessons
In this lesson, we'll remove our GET module route, using the except method on our resource. Then we'll refactor to add a GetModules action


Course Module Nested Resource
In this lesson, we'll work on nested resourceful endpoints for our course modules. We'll add endpoints to create, update, patch, and deleting modules from a specific course.


Updating A Course's Difficulty, Status, or Access Level
In this lesson, we'll add a specific endpoint with the ability to patch a course's difficulty, status, or access level with a new value so our users have a way to update these without needing to send the entire course payload.


Getting A Course's Details, Modules, & Lessons
In this lesson, we wrap up the Courses controller by adding a show method that fetches all the key info for a single course. That includes its modules and lessons, all nicely organized and ready to use in your API response.
Lessons.


Adding Interactivity to our Button
In this lesson, we'll add extendable interactivity to our button using AlpineJS. We'll also walk through a demonstration of how we can utilize event propagation in AlpineJS to our advantage.


Serializing Props as Element Attributes
In this lesson, we'll learn about EdgeJS' serialize only and serialize except utility methods, which allow us to directly serialize key-value pairs from our props as element attributes within our components.


Component Props and Default State
In this lesson, we'll learn how about props and how props and state interact within EdgeJS Components. We'll also take a look at how we can default default state values for our components.


Component State & Passing State from EdgeJS to ApineJS
In this lesson, we'll take a look at how we can define and manage state within EdgeJS Components. We'll also learn how we can pass single properties or full objects from EdgeJS to AlpineJS and our client-side scripts.


A Look At Component Reactivity
In this lesson, we'll take a look at how we'll approach reactivity within our EdgeJS components using AlpineJS. We'll also briefly discuss where the line between EdgeJS and AlpineJS is, in terms of our component state and reactivity.

Getting Started, Installing AlpineJS and TailwindCSS
In this lesson, we'll quickly create a new AdonisJS 5 project to house our components. Then, we'll install the dependencies needed by PinesUI; AlpineJS and TailwindCSS.

Exploring EdgeJS' Component System
In this lesson, we'll walk through a high-level overview of this series' objectives, including the various components we'll build throughout this series.