Hi, I am Dan Pastori, a certified Laravel developer who was frustrated with writing a beautiful web app only to realize I had to rewrite the app again if I wanted it on my mobile phone.
I’ve been making web and mobile applications with my friend Jay Rogers for the last 10 years. Jay helps with the design, but I am the only developer.
Working on a two-person team can be challenging when you cannot throw another person at the problem.
Supporting three separate codebases for web, iOS and Android is overwhelming.
Instead of hiring someone, we discovered a handful of tools that allow us to create web and mobile applications from the same codebase. Best of all, everything communicates back to a single API.
We’re now able to deliver and maintain apps faster than ever before.
It's everything you need to start building more with less code.
Understand what you'll be learning.
Hello & Welcome
What We're Building
Why We Chose Laravel and NuxtJS
Configuring Laravel as an API
Build a solid & flexible foundation for your app.
Configuring Your Development Environment
Installing Laravel 9.x
Setting Up Laravel to be an API
Preparing Your API for Automated Testing
Using NuxtJS for Web & Mobile
Learn how everything will begin in NuxtJS.
Installing and Configuring NuxtJS
Understanding NuxtJS' Structure
Abstracting Your API Calls Into Reusable Modules
Managing Events With the Event Bus
Saving Time With Mixins
Building Your First Layout
Using Laravel Sanctum for API Authentication
Prepare your Laravel API for secure authentication.
Building Secure Authentication API Endpoints
Implementing Cross-Origin Resource Sharing (CORS)
Laravel Sanctum vs. Laravel Passport
Installing and Configuring Laravel Sanctum
Implementing Authentication and Registration With Laravel Sanctum
Writing Authentication Tests
Set Up NuxtJS to Properly Authenticate With Your API
Securely connect NuxtJS to Laravel.
Configuring NuxtJS Auth Module + Laravel Sanctum
Building Authentication & Registration Components
Handling Guest Users With NuxtJS Middleware
Implementing an Email Validation System for New Registrations
The Full-Stack Feature Approach
Learn how to create a feature from start to finish.
Using the Proper Methods for API Requests
Building a Feature From Start to Finish
Managing App Resources Through an API
Learn how to design RESTful resources.
Efficiently Building API Endpoints for Data Queries
Using Our API Endpoints With NuxtJS
Accessing Resources With Human-Readable API Endpoints
Implementing Many-To-Many Relationships
Handling "Parent-Child" Relationships
Permissions, Validations, and Security
Prevent users from accessing other parts of your app.
Preventing Unauthorized Access Using Middleware
Securing API Endpoints With Laravel Gates & Policies
Implementing Laravel's Custom Validation Rules
Securing Our Front-End With NuxtJS Middleware
Handling Unauthorized Actions on the Front-End
Displaying API Errors to Your Users
Build iOS & Android Apps for Capacitor
Create two mobile apps in one command from the same codebase.
Installing and Configuring Capacitor
Speeding Up Builds With A Single Command
Server-Side Rendering vs. Single-Page Application
Using Native Phone Features In Your App
Deep-Linking: Open Your App From The Web
Token-Based Authentication with Laravel Sanctum
Implementing Social Logins
Allow users to sign in with their social profiles.
Installing and Configuring Laravel Socialite
Allowing logins from Facebook, Google, and Twitter
Securely Exchanging Tokens Between an OAuth Provider and Your API
Opening Your API to Others
Allow other developers to integrate with your app.
Install and configure Laravel Passport for 3rd party access
Getting Laravel Passport and Laravel Sanctum to Work Together
Determining What API Endpoints Should Be Available to 3rd Parties
API Tips, Tricks, and Gotchas
Don't learn this the hard way.
Securing Sensitive Data
Configure Insomnia REST Client
Configure Postman REST Client
Tips & Tricks for Testing APIs
Handling "Imperfect" RESTful Routes
Benefits of API Versioning
RESTful Response Codes: How To Use Them
How Cross-Origin Resource Sharing (CORS) Works
Single-Page Application Tips, Tricks, and Gotchas
Prevent yourself from getting a headache.
The Truth About Spa Security
When to Use Vuex
Sometimes words just aren't enough.
Why Build an API + Spa?
Adding a Feature From Start to Finish
Using Postman With Laravel Sanctum
Testing your API with Postman
Using Insomnia as a REST client With Laravel Sanctum
Testing your API with Insomnia
Setting up Laravel Sanctum with NuxtJS for Web
Creating an iOS & Android App From The Same Codebase with Capacitor
Structuring a GET Request
Creating API Modules in NuxtJS
Customizing Mailables With Laravel
Validating Emails for New Registrations with a SPA + API
Isolating Features Based On The App (Web vs. Mobile App)