Laravel 11.27, SaaSykit reaches $50k in revenue, and more!

Those have been 2 awesome weeks! 😍 Laravel pushed v11.27, SaaSykit reached a huge milestone, and the Makers Make Newsletter is growing every day and adding more subscribers!

Laravel 11.27 is released 🚀

Here are the highlights of new features added:

  • Configurable Default Currency in Number Helper

    • Ryan Holton contributed the ability to set a default currency for the Number helper.

    • USD remains the default, but other currencies can be set using Number::useCurrency().

    • Example: You can switch between EUR and USD without repeatedly specifying the currency in function arguments.

use Illuminate\Support\Number;

// Set the default currency to EUR
Number::useCurrency('EUR');

echo Number::currency(500);  // Outputs: €500.00
echo Number::currency(500, 'USD');  // Outputs: $500.00

// Temporarily switch to USD
Number::withCurrency('USD', function () {
    // Code here will use USD as the default
});
  • String doesntContain() Method (missing the apostrophe 😄)

    • Ryan Holton added a doesntContain() method to the Str helper.

    • It checks if a string does not contain a specific value or array of values, which is the inverse of the contains() method.

use Illuminate\Support\Str;

$str = 'The quick brown fox';

Str::doesntContain($str, 'dog');  // true
Str::doesntContain($str, 'fox');  // false
Str::doesntContain($str, ['cat', 'elephant']);  // true
  • Performance Improvements to Schema::hasTable()

    • Hafez Divandari contributed a performance optimization for Schema::hasTable().

    • Now uses lightweight queries, avoiding more expensive queries that were previously required.

  • Markdown Extension Support in Str::inlineMarkdown()

    • Ryan Chandler extended markdown support for the Str::inlineMarkdown() method to allow for custom markdown extensions, building on previous updates in Laravel 11.14.

  • HTTP Kernel Middleware Priority Management

    • Ollie Read added methods to manage middleware priority relative to other middleware.

    • addToMiddlewarePriorityAfter() and addToMiddlewarePriorityBefore() allow middleware to be placed before or after specified middleware.

$kernel->addToMiddlewarePriorityAfter(
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    [\App\Http\Middleware\CustomMiddleware::class]
);

$kernel->addToMiddlewarePriorityBefore(
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    [\App\Http\Middleware\AnotherMiddleware::class]
);


SaaSykit Reaches $50k in total revenue! 😍

SaaSykit has officially crossed $50k in total revenue! 🚀💥

I’m really glad to share that SaaSykit has officially reached $50k in total revenue! This milestone wouldn't have been possible without the incredible customers who chose SaaSykit!

Whether you're using SaaSykit to power your next big project or still considering your options, I want to sincerely thank each and every one of you for being part of this journey.

Here’s to building even more together! 💪

New at SaaSykit

Laravel often gets a bad rap when it comes to scalability, with critics claiming that it's not suitable for large-scale SaaS applications. Some argue that frameworks like Node.js or Go are better suited for handling high traffic due to their event-driven architectures and low-level optimizations.

However, dismissing Laravel as “not scalable” overlooks its true potential. With the right optimization techniques, Laravel can powerfully handle high-traffic SaaS platforms while maintaining its developer-friendly syntax and ecosystem.

In this article, we’ll debunk the myth that Laravel "isn’t scalable"` and explore proven strategies to ensure your Laravel SaaS app performs efficiently, even under heavy load…

From the Community

Prism is a powerful Laravel package for integrating Large Language Models (LLMs) into your applications. Using Prism, you can easily use different AI providers using the package's driver pattern, which gives you a unified interface to work with popular AI providers out of the box. Prism has three built-in providers available at the time of writing—Anthropic, Open AI, and Ollama—with the ability to create custom drivers…

Inertia 2.0 includes a "foundational rewrite of the whole request/routing layer of Inertia" to support asynchronous requests and unlock other new features.

The language construct empty() appears rather versatile. It's like a Swiss army knife with a thousand blades, ready to hurt you if you grab it by the wrong end. Or a jack of all trades, master of none. Most of all, empty() is a poor communicator.

I spot empty() in poorly-aged closed-source projects. I discover empty() in brand-new closed-source projects from last week. And I meet empty() again in open-source projects with millions of downloads.

So what is the problem with empty() when so many people use it?

Unchain yourself from Laravel’s ecosystem and enjoy pipelines anywhere!

Do you remember the first time you saw a chain of pipes in Mario? Those mysterious and often amusing connections that could transport you between different worlds or even secret rooms? Today, we’re going to talk about something similar, but in the fascinating world of PHP!

Programmers aiming for simple, concise code often work to remove conditionals. But when we’re programming complex business logic and edge cases, especially when that logic interacts with varied database models and relationships, it’s often tough to remove them without introducing some new pattern.

Polymorphic relationships are such a pattern—a powerful tool that can help us avoid complicated code paths when we’re dealing with similar related items.

Service classes are a popular way to extract application logic and keep your code DRY. The best way to learn is to look at practical examples. In this post, we'll examine ten examples from Laravel open-source projects and how they use Services differently.

Three years ago in Security Tip #5: The Cookie ‘Secure’ Flag, I talked about the Secure attribute for cookies. Since you should always have Secure set on your cookies (when you use HTTPS, which we all do... right?) to keep your cookies safe, it was my recommendation back then to update your config/session.php to enable Secure by default, and override it in local dev when you're not using HTTPS. This prevents you from forgetting to set it in production.

When you install a new Laravel app, it creates two directories for tests: Feature and Unit. I've seen teams struggle with where to put their tests, and how to organize them consistently. I thought it would be useful to share how we approach this.

And to prevent this from getting too long, let's focus on feature tests today.

The Laravel testing docs introduction explains that feature tests are the preferred type of test to write, and that they exercise a larger portion of your code.

Someone was bumping into weird issues with migrations when running tests, and part of the problem is that they were using a single database for local development and for their tests.

In the past, I've shared how we set up our tests to use a separate database, but that post is more about the "how". Today, I want to talk about the "why".

All about SaaS

I’ve posited multiple times before that interest rates are inversely related to software multiples (chart below). This relationship is especially pronounced for high-growth software companies that derive a greater portion of their value from longer-term future earnings, since the present value of their future cash flows tends to be considerably discounted in a rising interest rate environment. 

In 2013, Paul Graham, co-founder of the startup accelerator Y Combinator, wrote one of his most famous essays called “Do things that don’t scale”.

The basic idea is that while software companies are valuable because they are scaleable, you sometimes counterintuitively need to do things that explicitly don’t scale to make your company take off. One of the examples he gives is of Airbnb going door-to-door to recruit hosts for the platform.

Today we’re speaking to Romain Doutriaux about B2B software marketing. Romain was previously Head of Marketing at Pigment and VP EMEA Marketing at Dataiku - he has built and scaled marketing across data infrastructure and application software. This interview is full of actionable advice for founders and operators setting the foundations of their marketing strategy - thank you Romain!

Laravel Videos

Let's Learn Laravel With Inertia // Laravel Inertia Bootcamp Tutorial Walkthrough

New Job Middleware Artisan Command, Stop Process Pools & More Enum Support

Build Your Own Custom Auth System with Fortify

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.