Browse all series
FrameworksIntermediate44 episodes

Build A Laravel App With TDD

It's time to take the techniques we learned in Laravel From Scratch, and put them to good use building your first real-world application. Together, we'll leverage TDD to create Birdboard: a minimal Basecamp-like project management app.

This series will give us a wide range of opportunities to pull up our sleeves and test our Laravel chops. As always, we start from scratch.

Series episodes

Meet Birdboard

2m 31s

Let's begin by reviewing the application that we plan to build. We'll then finish up by installing...

Let's Begin With a Test

12m 48s

My hope is to demonstrate, as much as possible, my actual workflow when writing my own applications....

Testing Request Validation

5m 32s

We haven't yet written any request validation logic. As before, let's use a TDD approach for specifying...

Model Tests

7m 33s

We must next ensure that a user can visit any project page. Though we should start with...

A Project Requires An Owner

11m 17s

It's true that we can now create and persist projects to the database, but they aren't currently...

Scoping Projects

11m 39s

In this episode, we'll continue tweaking which projects are displayed to the user. We'll also begin implementing...

The Create Project View

6m 38s

We already have the necessary logic to persist new projects, however, we haven't yet created the "create...

Prepping the Frontend

8m 19s

Before I begin writing CSS, we first need to set the stage. We'll begin by pulling in...

Go Go Gadget Tailwind

16m 39s

In this episode, we'll leverage Tailwind to begin constructing the Birdboard UI.

Grid Spacing and Card Tweaks

16m 56s

Let's continue working on the CSS for the projects dashboard. This will give us an opportunity to...

Styling the Project Page

12m 20s

Before we jump back to PHP, let's write one more lesson's worth of CSS. Specifically, we'll get...

A Project Can Have Tasks

15m 24s

We've added a section to our project page for tasks, but that functionality doesn't yet exist. It...

Task UI Updates

9m 11s

The next step is to update your project page UI to allow for displaying and adding new...

Task UI Updates: Part 2

18m 31s

In this episode, we'll wrap every task within a form so that we may easily update its...

Touch It

5m 5s

I'd like to sort all projects in our dashboard according to those that have been most recently...

Notes and Policies

18m 4s

Next up, we need to make the "General Notes" section of the project page dynamic. As always,...

Improve Test Arrangements With Factory Classes

16m 35s

Let's take a moment to improve the structure of our tests. Have you noticed that, time and...

Reduce Form Duplication

14m 6s

In this lesson, we'll add a form to update an existing project. But in the process, we'll...

Sometimes Validation With Form Requests

12m 40s

We'll begin this episode by addressing a small regression that was introduced in the previous episode: we...

Project Activity Feeds

13m 39s

Let's move on to our next feature: every project generates an activity feed. View the source code...

Project Activity Feeds: Part 2

13m 53s

Let's continue working on the project activity feature. We should additionally record activity when a task is...

Project Activity Feeds: Part 3

5m 57s

Before moving on to the larger activity feed refactor, let's first make a few small tweaks to...

Project Activity Feeds: Cleanup

12m 8s

We have just a few loose ends to wrap up, before finally viewing the project's activity feed...

Rendering Activity With Polymorphism

10m 35s

It's time to render a project's activity feed on the page. This will give us an opportunity...

The Subject of the Activity

12m

Now that we're successfully displaying a project's activity feed on the page, I'd like to provide more...

Recording Model Changes

15m 49s

Our next job is to track which attributes have changed when a model is updated. This will...

Get Into The Refactor Flow

21m 47s

In this episode, we'll refactor all "activity" functionality to a reusable trait. As you'll see, we'll quickly...

Tweaking the Activity Card

13m 51s

Let's work on tweaking the output of the activity card in this lesson. I'd like it to...

Authorized Users Can Delete Projects

7m 57s

We have an easy one this episode: users who have the proper permissions may delete or archive...

Layered Tests and Invitations

12m 43s

As we move on to inviting users to projects, this will give us a nice opportunity to...

Beware False Positives

14m 8s

In this episode, as we work to allow users to see all projects they've been invited to...

Gravatars and Helper Functions

7m 26s

Our project page doesn't yet display all members who have access to it. Let's use Gravatar to...

Inviting Users as a Feature Test

15m 11s

In this episode, we'll write a few new feature tests to confirm the conditions under which a...

Validation Errors For Multiple Forms

13m 57s

Once you add multiple forms to a page, you'll quickly find that you can no longer depend...

Invited Users May Not Delete Projects

6m 3s

It looks like we have a small hiccup. At the moment, any invited user has permission to...

Easy Tailwind Themes Using CSS Variables

14m 6s

We have a relatively nice light theme at the moment. But what if we wanted to offer...

Completed Themes Review

2m 15s

Behind the scenes, I've finished up our two themes. Before moving on to building the theme switcher,...

Build a Theme Switcher

15m 7s

Now that we have multiple UI themes available to us, the next step is to construct a...

The New Project Modal

12m 20s

Because we're approaching the end of this series, let's dedicate a few episodes to reviewing some JavaScript-specific...

The New Project Modal: Behavior

17m 51s

Now that the basic styling for the "New Project" modal is complete, we can move on to...

The New Project Modal: Tasks

4m 45s

There's one final step to complete: our controller doesn't yet allow tasks to be created alongside the...

Object-Oriented JavaScript

20m 44s

If we take another look at our NewProjectModal file, you'll notice that most of the JavaScript deals...

Make a Dropdown Vue Component

23m 27s

Let's wrap things up by creating a reusable dropdown Vue component from scratch. View the source code...

Wrap it Up

1m 37s

A series like this could go on for hundreds of hours, but, at some point, we have...

Continue learning

Thumbnail for Build Mobile Apps With React Native and Expo
Build Mobile Apps With React Native and Expo

With Andre Madarang

  • 24 episodes
  • Intermediate
  • Frameworks
Thumbnail for Build a Forum With Laravel
Build a Forum With Laravel

With Luke Downing

  • 51 episodes
  • Advanced
  • Techniques
Thumbnail for What's New in Laravel 6
What's New in Laravel 6

With Jeffrey Way

  • 5 episodes
  • Intermediate
  • Frameworks
Thumbnail for Laravel Security Through Examples
Laravel Security Through Examples

With Stephen Rees-Carter

  • 12 episodes
  • Intermediate
  • Techniques
Thumbnail for 30 Days to Learn Laravel
30 Days to Learn Laravel

With Jeffrey Way

  • 30 episodes
  • Beginner
  • Frameworks

Would you like to hear from Laracasts by email occasionally?