• Makers Make by SaaSykit
  • Posts
  • Offline Payments in SaaSykit, Nightwatch is LIVE, Filament v4.0 Preview, Laravel 11.18-19 Released, Different Kinds of Smart & more

Offline Payments in SaaSykit, Nightwatch is LIVE, Filament v4.0 Preview, Laravel 11.18-19 Released, Different Kinds of Smart & more

Hey Makers 👋

Hope your week’s been full of momentum, whether you're onboarding new users, playing with pricing strategies, or shipping that next big feature. 💪

This week, we introduced Offline Payments in SaaSykit! You can now accept manual payments from your customers, no payment provider required. Perfect for cash collections or bank transfers or customers who prefer invoices over credit cards.

Meanwhile, Laravel just rolled out a few beautiful updates worth checking out.

Here’s what’s new 👇

  • Fluent String Encryption & Decryption
    You can now encrypt or decrypt strings directly using fluent str() helpers—making chainable transformations cleaner.

$token = str('my-api-key')
    ->encrypt()
    ->prepend('secure:')
    ->append(':done');
  • Create Batchable Jobs Instantly
    Use the --batched flag when generating a job to mark it as part of a batchable queue.

php artisan make:job CleanUpMedia --batched

The generated job will include the Batchable trait and batch-cancellation awareness.

  • Explicit Model Policies with Attributes
    Use the #[UsePolicy(...)] attribute to bind a specific policy to your model explicitly, skipping auto-discovery if needed.

#[UsePolicy(CommentPolicy::class)]
class Comment extends Model {}
  • Custom Truncation per HTTP Request
    You can now define how much of an HTTP exception message should be shown on a per-request basis.

Http::truncateExceptionsAt(150)->get('https://api.example.com/data');
  • Cast to Fluent Object
    Cast model attributes to a Fluent object using AsFluent, enabling dot-notation access and structured nested data.

protected function casts(): array
{
    return ['settings' => AsFluent::class];
}

// Usage
$model->settings->get('notifications.email');
  • Fail Jobs on Specific Exceptions
    Use the FailOnException middleware to prevent retries for specific exception types or custom failure logic.

public function middleware(): array
{
    return [
        new FailOnException([InvalidArgumentException::class])
    ];
}
  • New Test Assertions for Redirects with Errors
    Test that a redirect contains validation errors—or none—with two new assertion methods:

$response->assertRedirectBackWithErrors(['email']);

$response->assertRedirectBackWithoutErrors();
  • Attach Uploaded Files to Emails Easily
    Use the fromUploadedFile() method to turn an uploaded file into a mail attachment.

$mail->attach(Attachment::fromUploadedFile($request->file('invoice')));

From SaaSykit

Refactoring isn’t the kind of thing that gets applause. No one throws a party when you clean up a messy controller or split a bloated class into smaller pieces. But over the years, I’ve learned that it’s one of the most important habits you can build as a Laravel developer.

From the Community

Laravel Nightwatch is a new product from the Laravel team that will give you awesome insights into your application's performance and it's now officially released! It delivers the intelligence only a system obsessively optimized for Laravel can deliver.

The Filament v4 Beta is here with a range of powerful, helpful updates. It's faster, easier to use, and gives you more control when building applications. In this article, we highlight what's new and how these changes can improve your workflow!

Laravel introduces new test helpers to control deferred operation execution, allowing developers to test deferred functions without waiting for the request lifecycle to complete.

Laravel introduces new methods to streamline negative relation queries, making it easier to find records that lack specific relationships while maintaining clean, readable code.

The new whereDoesntHaveRelation methods provide a concise way to query records without specific relations

I believe the definition is on point, and I'm confident most developers reading this article have encountered attributes at least once. If you haven't, they are essentially metadata added to a class.

Abstract classes cannot be instantiated directly, posing a challenge when testing functionality implemented within the abstract class itself. In this article, I will share my approach to addressing this issue.

To illustrate the technique, let's consider an abstract class Vehicle with a move() method, also mandating a speed() method implementation in its child classes.

Navigate Laravel's API versioning seamlessly with URI Versioning, ensuring consistent, reliable integration even as your application evolves.

Ensuring your API remains consistent and reliable is akin to keeping a ship steady during a storm. As your application grows and changes, so too does the need to manage different versions of your API. Laravel, a popular PHP framework, offers a plethora of tools to help you navigate these choppy waters. But with so many routes to take, how do you ensure you're on the right path? Enter API versioning.

Exception handling is a critical aspect of web application development, ensuring that your application can gracefully handle unexpected errors and provide meaningful responses to users. Laravel comes with a robust exception handling system that allow you to manage errors effectively. In this article, we will explore the fundamentals of exception handling in Laravel, covering key concepts.

I know you've probably encountered this at least once. You copy-pasted the exception, did a little Googling, and found out that adding a directive like @csrf or including the header X-CSRF-TOKEN in your request is the fix. We've all been down that road. But have you ever wondered why Laravel throws this exception in the first place? Do you truly need to send a token with every single request? Well, yes, YEEES you have to. Otherwise, they'll start making jokes about PHP not being secure 😒. To get this, let's step back and talk about an old yet still existing vulnerability called CSRF.

One of my favourite Laravel features, the humble HtmlString, is now available as an Eloquent Cast - which should make it much more accessible! 🎉 But there is a catch... 😟

In Laravel, you often need to check things before users reach the Controller. For that, you would use Middleware. Let me explain how it works with examples.

All about SaaS

The Fear-Avoidance Model is rooted in pain psychology. Researchers wanted to know:

Why do some people bounce back from an injury while others end up in chronic pain?

They proposed the fear of pain—rather than pain itself—is to blame.

“The older I get the more I realize how many kinds of smart there are. There are a lot of kinds of smart. There are a lot of kinds of stupid, too.”

– Jeff Bezos

The smartest investors of all time went bankrupt 20 years ago this week. They did it during the greatest bull market of all time.

Have you heard that old corporate chestnut “People don’t quit their jobs, they quit their managers”? Most of us have had the experience of hearing a friend or colleague vent about their manager’s lack of support, micromanagement, missing product sense, unfair feedback, or some other relationship problem that is as common as the day is long.

When your topline is moving up and to the right, it can feel like you’ve cracked the code. But then…churn hits, and suddenly you are moving mountains to focus on upsell and retention. It’s especially common in the SMB segment, where volume is high, buying cycles are short, and customer attention is scarce.

Continue the article

It was 2012, and my 6-year-old, Noah, was completely swept up in the London Olympics. We were watching the track and field events, and when Usain Bolt won the gold in both the 100m and 200m, Noah turned to me with wide eyes and asked, “Mama, are you as fast as Usain Bolt?”


Videos

Keep building, keep rocking! 🤘

Psst, are you building a SaaS?

SaaSykit is a multi-tenancy Laravel-based boilerplate with everything you need to build an awesome SaaS.