LaravelCloud The 500ms wake

A migration story

The servers worked.
The team had other work.

Eight teams moved Laravel applications to Cloud from Forge, Heroku, AWS and servers of their own. None of them was escaping a broken host. Each decided which parts of running an application it no longer wanted to do itself.

Read the ledger

The idea in one line Moving to Cloud is a choice to stop operating, not an escape.

The operating ledgerEight teams · one list of duties

Sizing a server for the launch spikeFilament
Patching the OS, PHP and MySQLCMS Max
Baking a machine image per deployDropInBlog
Working round a ten-minute schedulerRoomies
The weekend check-in with the hostSportmonks
The schema, the queries, the jobsEvery team

Every duty above is named in that team's own published story.

Your code · your call

What the teams stopped operating

Same duties.
A different name beside them.

Read across a row. On the left, the work a team did to keep a Laravel application running. On the right, who does it now. The application code on each side is the same.

Before: the team's list

Work that sat with a small engineering team, or with one contractor, on top of building the product.

CapacityServer stepped up $25, $50, $100 a month, and could not step back down (Filament)
DeploysA machine image built by hand on large releases, dropping the primary for seconds (DropInBlog)
PatchingOS, PHP and MySQL updates, WAF rules, bot filtering (CMS Max)
SchedulerA workaround for a ten-minute limit (Roomies)
On callA check-in with the hosting contractor most weekends (Sportmonks)
Who operates it

On Cloud: the platform's list

The same duties, now fulfilled by the platform. The team still owns the decisions about them.

CapacityOne or two replicas on a normal day, up to ten at a spike, then back down
DeploysZero-downtime deploys; nobody bakes images by hand
PatchingThe platform's runtime, DDoS protection and TLS
SchedulerRuns every minute, as Laravel intends
On callNo infrastructure failures since going live, in Sportmonks' account
Forge is still the right home for a team that wants its servers.

Forge and Laravel VPS are Laravel's own, and a team that wants root, a fixed topology or its own cloud account is well served there. Pinkary's maintainer put it plainly: Forge was not the problem.

Sources: Monitor 997 (Filament), 1186 (DropInBlog), 1003 (CMS Max), 994 (Roomies), 993 (Sportmonks), 5 (Pinkary). Each row is the customer's own account, from its published story.

Where they came from

Three starting points.
One reason.

Each starting point has real strengths, and the teams said so. What they had in common was a short list of duties they no longer wanted on their own plate.

From Forge

Forge gave these teams control of their own servers, and Dan Harrin notes that Forge now has one-click Octane too. They moved because they wanted the platform, not themselves, to answer for scaling and configuration.

Who
Filament, DropInBlog, Pinkary, Freek Van der Herten's sites
What they ran
A server per app, database alongside; DropInBlog had Forge provisioning autoscaling EC2 on AWS
What they stopped
Sizing for spikes, image builds, the autoscaling layer Forge did not handle at the time
What stayed
The application, and for DropInBlog its 105 GB PlanetScale database, left where it was

Monitor 997, 1186, 5, 730.

Heroku's enterprise contract announcement is reported in both customer stories (Monitor 998, 994). DropInBlog's remark that Forge did not handle autoscaling refers to its setup at the time.

The honest part

The new home shows you
what the old one let slide.

Run the destination engine

SQLite had quietly stored UUID strings in integer columns made by foreignId() for over a year. MySQL refused them. Run migrations and real queries against the database you are moving to.

Schema

Say which row you mean

A feed query grouped by IFNULL(root_id, id) failed under ONLY_FULL_GROUP_BY. The rewrite ranks rows with ROW_NUMBER() and breaks ties by id.

Queries

Make ordering explicit

Second-level timestamps tied, and tests that assumed they would not began to fail. A secondary order by id fixed production; clock helpers fixed the tests.

Tests

Use the default disk

Hardcoded Storage::disk('public') calls ignored the new default. On object storage, every exists() check became a network request.

Storage

Copy data with a small command

A dump-and-convert path mangled UUID-like values. One-off Artisan commands that checked columns and counted rows did the job.

Data
“The environment exposes every shortcut the old one let you get away with.”Pinkary core maintainer, Laravel blog, 30 September 2026 · Monitor 5

Source: Monitor 5 (Laravel blog, "Migrating Pinkary from Laravel Forge to Laravel Cloud") and 724 (Laravel on X). The team says Pinkary felt faster afterwards but ran no controlled benchmark, so no speed figure is claimed here.

Their results, in their figures

Eight teams.
Eight ledgers.

One move first, step by step, then each team's own figures. They are not averages and not a promise. Where a team said the cost went up, that is here too.

01 · Freeze writesAdmin panel only, in maintenanceThe public site stayed up throughout.
02 · ExportA 25 MB database, a 2 GB bucketFrom the Forge server and S3.
03 · ImportInto Serverless Postgres and CloudCredentials injected as env.
04 · CheckOn the preview URLBefore any traffic moved.
05 · Cut overSwap the DNSAbout an hour of admin downtime in all.
06 · Switch onOctane, one toggle2x faster became 3x.
Open source · from Forge

Filament

3xfaster requests, with Octane on
  • About three hours, two apps, first time on Cloud
  • Raw cost is higher: $150 for two weeks, against about $155 a month before. They count it as buying autoscaling and a separate database
Monitor 997 · customer story
B2B blog platform · from Forge and AWS

DropInBlog

50%lower infrastructure cost
  • Three weeks from decision to running
  • API 200 to 300 ms faster with Octane
  • Three million jobs a month on managed queues
Monitor 1186 · customer story
Open source · from Forge

Pinkary

2attempts, rehearsed live on stream, cut over at 1 a.m.
  • SQLite to managed MySQL; local disk to object storage
  • Faster by feel, not by benchmark, in the team's words
Monitor 5, 724 · Laravel blog
Developer · from Forge

Freek Van der Herten

~20sites, plus two named ones, in a single day
  • One site first to learn the process, then the rest in parallel, with AI tools
  • His caveat: they share one architecture
Monitor 730 · post on X
Insurance · from Heroku · Private Cloud

Superscript

30%lower infrastructure cost in the first month
  • Five apps; four in a couple of hours each, the 80 GB one in about six
  • They expect 50% as more environments move
Monitor 998 · customer story
Consumer · from Heroku

Roomies

$1,000 → $200compute a month
  • Eight sites, about 135 million requests a month
  • Two N+1 queries found within 30 minutes of Nightwatch
Monitor 994 · customer story
Website platform · from AWS

CMS Max

500+sites live on Cloud, more onboarding
  • Thousands of dollars a month saved, by the CEO's account; no exact figure given
  • No dedicated engineer watching the server
Monitor 1003 · customer story
Sports data API · from own servers · Private Cloud

Sportmonks

600MAPI requests a week
  • 1,000+ jobs a second on match weekends
  • No infrastructure failures since going live, in their account
Monitor 993, 267 · customer story

Filament's flow from Monitor 997. Every figure is the customer's own, from its published story or post. Dates are when each story was first seen, on or before 4 October 2026, except DropInBlog (8 October 2026), Pinkary (30 September 2026) and Freek (2 October 2026).

Choose what to operate.
Hand over the rest.

Three questions for a team on its own servers: which line of the ledger would you most like to stop doing; which shortcut is your current environment letting you keep, a local disk or a forgiving database; and which one site would you move first to learn the process.