Skip to content
Scalpels home

Sign up now for $10 in credit on a new Laravel Cloud account.

Documentation

Sesame

Requirements

Updated

Resources

Sesame is a Laravel 13 application on PHP 8.5. An install provisions:

  • Postgres for accounts, runs, messages, events and delivery timings. Raw data is pruned after seven days by sesame:prune; per-run summaries are kept.
  • A managed queue for delayed wakeup jobs, which hand events to delivery when they fall due, and for delivery jobs, which sign and post SNS notifications to your webhook. The queue runs on its own compute and wakes for delayed jobs by itself.

There is no scheduler, so the environment hibernates after 10 minutes without a request and costs little between test runs. Scalpels enables that hibernation, generates APP_KEY, runs migrate --force after each deploy and turns push-to-deploy off. Laravel Cloud injects the connection settings for the resources it attaches; do not set DB_* or QUEUE_CONNECTION yourself.

How Sesame keeps data

Sesame has no persistent disk. It acknowledges each send from an SQLite buffer in the instance's temporary directory and moves it to Postgres right after the response. That drain takes every buffered send it can, in bounded batches, so a later request also picks up anything an earlier drain missed. A send acknowledged but not yet moved is lost if the instance goes away, which happens on every deploy and on any unexpected instance or process loss. Deploy only between test runs. Each lost send is identifiable afterwards and is reported apart from findings about your application.

Hibernation does not delay late events. Complaints and delayed deliveries due minutes later are delivered by the managed queue while the web app sleeps; when your webhook fetches Sesame's signing certificate, that request wakes the app.

What a consumer changes

Only staging changes. A Laravel consumer using the stock ses-v2 mailer sets an SES endpoint and an SNS certificate host pattern. It resolves the SNS message validator from the container so the pattern applies, and it keeps a boot guard that refuses to start production when either value is present. Synthetic load contacts belong on a reserved domain. Sesame's own repository includes a working example of that consumer side.

Still open

  • The install path has not been tested on Laravel Cloud.
  • Whether ingest stays on Laravel or moves to Rust is undecided; the benchmark has to be rerun on Cloud.
  • Not built yet from the original brief: ramp steps and a measured ceiling, baselines and regression gates, daily rollups, pull-request reports, suppression memory, reputation-driven sending pauses, injected send latency, custom retry policies, unsubscribe confirmation, a dashboard and MCP access.