Develop web and mobile apps from the same codebase.

Develop web and mobile apps from the same codebase.

Maintaining multiple codebases sucks.

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.

Don't just take our word for it...

"This book does a tremendous job of explaining the ins and outs of modern development with an eye on clarity and simplicity. And now, if you'll excuse me, I have a TON of refactoring to do on my app!"

James HullChief Narrative Officer, Narrative First

This isn't just a book.

It's everything you need to start building more with less code.

500+ page eBook

Everything is organized in easy to consume chapters with a ton of code examples.

The book is available in PDF, EPUB, and MOBI formats so you can follow along no matter what device you choose. We give you the perfect amount of knowledge you need to know.

Instant source code repository access

Don't just guess how the code works, see it all in action β€” in realtime. You'll even be able to see how we run things on our production branch.

Private Community Access

Don't learn by yourself. Get instant access to an online community.

Have your questions answered by the community and meet others who are on the same journey as you.

In-depth video tutorials

Sometimes reading just isn't enough. We created over 10 video tutorials that show you how to set up your development environment, configure your routes, and more.

Learn from an app that's actually running in production

This isn't another β€œTo-Do List” app. We created an app called ROAST that has many different user permissions levels. This app has real-world problems, with real-world solutions.

Optimized Sketch & Figma templates for Capacitor

Designing icons for mobile apps should not be difficult.

These templates are specifically optimized for Capacitor and will save you hours from fighting the nitpicky requirements for app icons and splash screens. You'll be able to export your graphics in minutes.

Here's what's inside...

Introduction

Understand what you'll be learning.

Preface

Why build an API?

Pre-Requisites

What We're Building

Why We Chose Laravel 10 and Nuxt 3

Configuring Laravel 10 as an API

Build a solid & flexible foundation for your app.

Configuring your development environment

Installing Laravel 10.x

Configure Laravel as an API Only with Laravel Breeze

Preparing your API for Automated Testing

On to the Frontend

Using Nuxt 3 for Web & Mobile

Learn how we will design our frontend using Nuxt 3

Installing and Configuring Nuxt 3

Understanding Nuxt 3's Structure

Installing Extra Packages (Optional)

Building your first Layout

Working with Pages

Using Laravel Sanctum for API Authentication

Prepare your Laravel API for secure authentication.

Laravel Sanctum Overview

Authentication Routes provided by Laravel Breeze

Set up API Versioning

Configuring our User Route

Laravel Passport vs Laravel Sanctum

Wrapping Up

Set Your Session Domain

Set Up Nuxt to Properly Authenticate with Your API

Securely connect Nuxt to Laravel.

Using Laravel Sanctum with Nuxt

Configuring Nuxt 3 Auth Module + Laravel Sanctum

Building Authentication & Registration Components

Handling Guest Users with Nuxt 3 Middleware

Implementing an Email Validation System for New Registrations

On to "Fun"-ctionality

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

Using our API Endpoints with Nuxt 3

Accessing Resources With Human-Readable API Endpoints

Uploading Files

Handling "Parent - Child" Relationships

Implementing Many-To-Many Relationships

Using API Laravel Resources (Routes & Eloquent)

Permissions, Validations, and Security

Prevent users from accessing other parts of your app.

Permissions Overview

Preventing Unauthorized Access Using Middleware

Securing API Endpoints With Laravel Gates & Policies

Implementing Laravel's Custom Validation Rules

Securing Our Front-End With Nuxt Middleware

Handling Unauthorized Actions on the Front-End

Displaying API Errors to Your Users

Build iOS & Android Apps with CapacitorJS

Create two mobile apps in one command from the same codebase.

Installing and Configuring CapacitorJS

SSR vs SPA

Speeding up Builds with a Single Command

Token-Based Authentication with Laravel Sanctum

Using Native Phone Features In Your App

Deep-Linking: Open Your App From the Web

Implementing Social Logins

Allow users to sign in with their social profiles.

Installing & Configuring Laravel Socialite

Allowing logins from Facebook, Google, and Apple

Securely Exchanging Tokens With an oAuth Provider

Opening Your API to Others

Allow other developers to integrate with your app.

Configuring Laravel Sanctum for 3rd Party Access

Determining What API Endpoints should be available to 3rd Parties

Create Endpoints to Manage Tokens

Rate Limiting Requests

Nuxt Interface and Settings

Using a Personal Access Token

Scoping Access Tokens

Limiting Access

API Tips, Tricks, and Gotchas

Don't learn this the hard way.

RESTful Response Codes: How to Use Them

How Cross-Origin Resource Sharing (CORS) Works

Handling "Imperfect" RESTful Endpoints

Benefits of API Versioning

Tips & Tricks for Testing APIs

Configure Postman REST Client

Configure Insomnia REST Client

Securing Sensitive Data

Single-Page Application Tips, Tricks, and Gotchas

Prevent yourself from getting a headache.

When to Use Pinia

The Truth about SPA Security

Composables vs Mixins

Data Fetching Techniques

Helpful VueUse Methods

When to use EventBus vs $emits

Convert to Form Data composable

Additional Registration Security with ZXCVBN

Appendix

A few features we used along the way

Artisan Commands

Helpful Eloquent Relationships

Installing Laravel Telescope

Adding Gravatar as a Computed Eloquent Property

This is for you if...

😩 You feel overwhelmed trying to support web and mobile apps

πŸ˜• You don't know where to get started with an API-driven application

πŸ˜… You are concerned about SPA + API authentication and security

😎 You want to learn concepts from an app that you can actually use

This isn't for you if...

❌ This is the first app you are trying to build

❌ Your app does not need to run in the web and also on native mobile

❌ You have no interest in learning concepts from Laravel or Vue.js

❌ You're trying to build a 3D game

Get the book and more

Choose the package right for you.

The Essentials

$45
$35USD

BOTH Editions of the 500+ page book (for Nuxt 2 and Nuxt 3)

Sketch & Figma icon templates optimized for Capacitor

Lifetime access & updates

The Complete Package

$295
$145USD

BOTH Editions of the 500+ page book (for Nuxt 2 and Nuxt 3)

Production source code access to an app called ROAST

Private forum access where you can meet & get help from others

In-depth video tutorials

Sketch & Figma icon templates optimized for Capacitor

Lifetime access & updates

❀️ Github Sponsors get an additional 20% off the book! Learn more β†’

Frequently asked questions

How long do I have to wait to get my forum and source code access?

What formats are the files in?

Are physical copies available?

Can I get an invoice?

Can I upgrade from the "Essentials" to the "Complete Package"?

I originally purchased the content with Gumroad. How do I access the new content?

Is the book available in multiple languages?

How can I contact you?