Laravel From Scratch (2026 Edition)
Welcome to the latest iteration of the longest running Laravel introductory video series in the world. Like clockwork, we refresh this series every two years. This latest 2026 iteration covers Laravel 12 and beyond.
You'll learn not only the basic fundamentals of Laravel, but also how to leverage more advanced features like authentication, authorization, queues, testing, and more. We'll even review the full deployment process from scratch.
Series episodes
The Fundamentals (13)
Welcome Aboard
34sJoin Jeffrey Way for Laravel From Scratch 2026 — a friendly, hands-on intro to modern Laravel fundamentals, tools, and best practices.
Set Up Your Development Environment
7m 27sSet up your Laravel dev environment with Laravel Herd: install PHP, Composer, Node, scaffold a project, and explore routes/web.php and welcome view.
Routing 101
5m 26sLearn Laravel routing: use Route::get and view(), add /about and /contact pages, and link between routes with ease.
Layout Files
16m 10sDRY up views with Blade layouts: extract shared markup, use $slot, pass title props, Route::view, and merge $attributes for flexible components.
Pass Data to Views
5m 36sPass data to Blade views in Laravel: use Route::view's third param or view(...), read query with request(), and rely on Blade escaping.
Blade Directives
7m 39sMaster Blade directives: use @dump/@dd for debugging and clean control flow with @if, @foreach, and @forelse. Quick tips.
Forms
19m 43sBuild a tiny Laravel notebook: handle POST forms with @csrf, use request() to capture input, store ideas in session, and redirect home.
Databases, Migrations, and Eloquent
23m 59sMaster Laravel migrations, Eloquent models, and queries: create an ideas table, run artisan migrate, use Idea::create() and where() to filter ideas.
HTTP Requests and REST
24m 49sBuild a RESTful CRUD flow for ideas: list, show, edit, update, delete, confidently using Laravel route model binding and method spoofing.
Controllers
8m 51sOrganize Laravel routes with an IdeaController: move the form to ideas/create, implement seven resourceful actions, and centralize route logic.
Request Validation
12m 47sAdd request validation in Laravel: use request->validate, display errors with @error, and extract a reusable x-error component for cleaner forms.
Form Request Classes
8m 39sMove validation into a Form Request: scaffold StoreIdeaRequest, use authorize() and rules(), customize messages, and simplify controller validation.
A Brief DaisyUI Detour
12m 48sPolish UI quickly with Tailwind and DaisyUI: build nav, cards, and form controls; extract a nav component and reusable idea-card.
Authentication and Authorization (5)
Authentication Explained
24m 41sLearn Laravel authentication: implement register and login, validate input, hash passwords, add logout, and use @auth/@guest.
Require Authentication With Middleware
13m 36sAssociate ideas with users using foreignIdFor and cascading deletes, apply auth/guest middleware, use Auth::id(), and show each user's ideas.
Eloquent Relationships
7m 40sDefine Eloquent relations: Idea belongsTo creator, User hasMany ideas; use auth()->user()->ideas()->create() and fix view security holes.
Authorization Using Gates
15m 22sSecure your Laravel app with Gates: define them in your provider, use @can for UI, and protect routes with can() or Gate::authorize.
Authorization Using Policies
15m 39sCentralize Laravel authorization with an IdeaPolicy: implement an update rule, use $this->authorize or middleware, and handle Idea::class.
Digging Deeper (4)
Frontend Asset Bundling with Vite
8m 54sBundle Tailwind/DaisyUI locally with Vite: configure @vite, edit resources/css/app.css, and use npm run dev/build for optimized assets.
Notifications
11m 2sNotify idea owners with Laravel Notifications: scaffold IdeaPublished, preview emails with Mailpit, and dispatch from IdeaController@store.
When to Queue it Up
12m 44sMove notifications to the background with ShouldQueue: push jobs, run php artisan queue:work, and inspect the jobs table to keep users fast.
How to Get Started Testing Your Code
18m 44sLearn Pest PHP and browser testing: automate user flows with Playwright, write practical registration and /ideas tests using data-test attributes.
Final Project: Build and Deploy an App (21)
Final Project Setup
14m 29sBuild and deploy a feature-rich Idea app: init repo, push to GitHub, deploy with Forge, and add Pint, Rector, Code Rabbit, and Laravel Boost.
Design Your Model Layer
18m 40sScaffold Idea and Step models with migrations, factories, an IdeaStatus enum, relationships, defaults, and tests for a solid data foundation.
Tailwind Theme Setup And Initial UI
34m 14sSet up a Tailwind theme and reusable UI: create layouts, nav, form/field components, and wire register/login routes for faster page building.
Browser Testing Registration Forms With Pest
9m 55sWrite Pest browser tests for Laravel registration, login, and logout: use user factories, data-test selectors, and debug to verify happy/error paths.
Flash Messaging and Interactivity with AlpineJS
6m 57sMake Laravel flash messages come alive with Alpine.js: add a tiny x-data component using x-show, transition, and a timeout to auto-fade alerts.
Idea Cards
20m 31sBuild polished idea cards for /ideas: create route/controller, extract reusable Blade components (x-card, x-idea-status), and prep for filtering.
Idea Filtering
21m 44sAdd status filtering to ideas via the query string and an Eloquent scope; display filter pills with counts handled in the Idea model.
Show A Single Idea
11m 13sBuild a functional single-idea page: create show.blade.php, wire IdeaController@show, render title, links, nav, and a delete form.
Create A Functional Modal With AlpineJS
16m 12sBuild an accessible AlpineJS modal: open via events, use x-data/x-show with transitions, add escape/click-away handlers, extract reusable x-modal.
Construct The Idea Form
19m 12sBuild an idea form: wire to POST /ideas, make a textarea-aware field, add an Alpine status selector, add client-side validation and persist ideas.
Test The Create Idea Form
6m 30sAutomate testing of your idea form with browser tests: add data-test attributes, simulate clicks/fills as a user, and assert persistence.
Allow For One or Many Links
17m 40sEasily add one-or-many link inputs to ideas: use Alpine x-model and an add button, submit links[] array, and validate server-side.
Actionable Steps
16m 24sAdd actionable steps to ideas: reuse modal, bind Alpine inputs to a steps array, validate and persist them, render and toggle completion.
Upload Featured Images To Storage
9m 33sAdd featured image uploads to ideas: use a file input, store files with Laravel storage, expose via storage:link and show in views.
Action Classes
11m 7sRefactor idea creation into a reusable CreateIdea action: remove logic from controllers, use handle(), constructor injection and CurrentUser.
Authorization Is A Requirement
12m 24sSecure your app with Laravel authorization: implement gates and an IdeaPolicy, use authorize/can middleware, and add tests to lock access.
The Edit Idea Modal
23m 33sEdit ideas with a reusable Alpine modal: extract modal into a component, test the edit flow, and make open-modal dispatch work on show page.
Update Idea Action
16m 24sImplement an UpdateIdea action: handle image uploads, update attributes, sync object-based steps, and secure the flow with browser and unit tests.
Edit Your Profile
18m 17sAdd profile edit flow: build /profile/edit with populated form, validate updates, handle password and email changes, notify and test.
Deploy And Then Implement A Feature Request
11m 27sDeploy to Forge, run tests, format code, then add a formatted_description accessor with Str::markdown and Tailwind typography for polished markdown.
Where To Go From Here
2m 20sImprove your finished Laravel app: add team collaboration and advanced authorization, or explore Livewire or Vue/React with Inertia for richer SPAs.




