Auth, roles, permissions
SSO, magic links, password auth, multi-tenant. Whichever you need. Roles and permissions audited in the data model, not bolted on.
Internal tools, CRMs, dashboards, customer portals, workflow systems. Built on the stack we’ve been refining for over a decade. Click ▶ Run below to dispatch a real-looking job; click the tabs to swap between the model, its test, and the README.
// dispatch a job from the field, audit it on the way outclass Booking extends Model{ use HasAuditLog, SoftDeletes; public function dispatch(User $driver): self { Dispatch::dispatchSync($this, $driver); $this->recordAction('dispatched'); $this->driver()->associate($driver)->save(); Notify::sms($driver, 'new job'); return $this; }}
// every critical path covered, every audit log assertedit('dispatches a booking to a driver and writes an audit row', function () { $booking = Booking::factory()->create(); $driver = User::factory()->driver()->create(); $booking->dispatch($driver); expect($booking->refresh()->driver_id)->toBe($driver->id); expect(AuditLog::latest())->toMatchArray([ 'subject_id' => $booking->id, 'action' => 'dispatched', ]);});
Internal tools, CRMs, customer portals, ops dashboards, workflow systems. Built on Laravel + Livewire, the stack we’ve been refining for over a decade. Boring on purpose, fast where it matters.
A 45-minute call is the only thing we need from you. We come back inside a week with a written scope, a realistic timeline and an honest assessment of whether we’re the right studio for your build.
Every project gets these pieces. They’re table stakes for anything we put into production, and we’ve done them enough times that they don’t cost you the discovery time.
SSO, magic links, password auth, multi-tenant. Whichever you need. Roles and permissions audited in the data model, not bolted on.
Every meaningful change is logged. Sentry on errors, structured logs on actions, dashboards for the things that matter.
Anything slow runs out-of-band. Failed jobs don’t fail silently. They retry, alert, and stay visible.
Feature tests for the critical paths. We don’t test getters and setters, we test the things that actually break in production.
Both environments, both monitored, with one-command deploys. No copying files over FTP at 11pm.
Xero, HubSpot, Stripe, Postmark, your weird vendor API. Wrapped in our own service classes so they’re swappable later.
Filament-based admin so support can look up records, retry jobs, or simulate a user without going through a dev.
Bug fixes and small changes for 12 months. After that, a small monthly retainer if you want us to stay close.
The spreadsheet your team keeps emailing each other. The form that lives in three SaaSes. The report someone runs by hand every Friday. Those are our favourite projects.