letmesplain
hero

Your app can explain itself.

Splain adds guided, code-anchored walkthroughs to your Laravel/Filament app — in-app help that can't silently go out of date. It's a self-hosted plugin for Laravel (the PHP web framework) and its Filament admin panels (the popular PHP admin-panel framework), and it spotlights your real UI — through modals, dropdowns, and across pages. Every step is anchored to your code, a command simulates every guide in your test suite before anything ships, and a model you configure drafts the first pass. The guidance your users see runs entirely inside your app.

Free & open (Apache-2.0): the walkthrough player, the guards that keep guides from silently rotting, and uncapped AI generation — everything a solo developer needs. Pro (for teams): the visual editor and the team tools (review, assignment, and completion reports). The specifics are named — and defined — further down.

Try a live demo app ↗ Read the docs

That tour launches from the small floating dot already live in the corner of this very page — Splain is running on the page you're reading. On a phone? The tour and docs work great here — the live demo is a desktop admin panel, so bookmark it for the big screen.

wears-your-clothes

Same guide. Your clothes.

Splain's launcher and popovers inherit your app's own colors, fonts, and spacing (its CSS variables) — so the walkthrough looks native in every product it lands in; same guide, your clothes. Flip the theme, then play the walkthrough: what re-skins below is the real Splain player that ships in the product, not a mockup, reading the page's CSS variables exactly as it does inside a Filament panel.

Dress it as:
Northwind.

Customers

NamePlanStatus
Sable & Co.GrowthActive
Marigold LabsStarterActive
Fernwood GroupEnterpriseTrial

No mock popovers, no video: this page loads Splain's shipped free-tier bundle, and the demo app is just HTML wearing three sets of design tokens. The dot in the corner is real too — it tours this very page. Want a real app? Lamplight Supply Co. runs on Laravel Cloud with its onboarding built in — spotlight tours, a branching walkthrough, an onboarding checklist, and Privacy Mode (which masks real records on screen while you record a tutorial — a presentation aid, not a security guarantee).

receipts

Every capability below is shipped and demo-able.

Spotlights the real UI

Guides advance when users actually complete the step — not when they click "next" on faith. A failed validation doesn't fool it; a decision branches it.

Follows across pages

Finish a page's steps, click the highlighted nav link, and the guide resumes on arrival. Hand-offs expire quietly instead of ambushing anyone later.

Can't silently rot

splain:check simulates playback on every page before anything ships — unreachable steps, dead ends, and broken hand-offs fail loudly. Drift is when your code changes so a guide no longer matches the real UI; the drift gate fails your CI — the automated checks that run before you merge code — when code deletes an anchor (how a step points at a specific on-page element) that a guide depends on.

Drafted by your model

splain:generate reads your code and drafts guides through an endpoint you configure: you point Splain at your own AI provider — your API key, your servers, your call — so nothing phones home. Splain ships no key and no default endpoint. Drafts land unpublished, flagged for review.

Humans sign off before publishing

The Studio — Splain's built-in visual, point-and-click editor for creating and editing guides inside your app — flags every step the generator wasn't sure about; you resolve them by clicking the real element on the real page. Publishing requires zero errors, zero open flags, and a named sign-off that the guide reflects how the work is really done. The Studio and this attested-publish step ship in splain/pro (a separate, proprietary package); even on the free tier, only guides you mark as published are shown to your users.

Onboarding you can see

Tracks — ordered learning paths you assign to users — give new users a checklist with a clear next step; server-side progress (off by default) stores a pointer to your user — never a copy of personal data — and powers an honest completion report.

the-receipt

Watch it catch the rot — guides that quietly stopped matching your UI.

A guide anchors to data-splain="product-name". Someone renames that field in a refactor and doesn't notice the walkthrough now points at nothing. In a SaaS overlay, users find out. Here, the build does — this is the real, unedited output of splain:check --drift after exactly that change:

$ php artisan splain:check --drift

 ERROR  add-a-product v1 (published): anchor [data-splain="product-name"]
        no longer exists in the code (rotted).
 INFO   help-a-customer v1 (published): OK.
 INFO   meet-your-customers v1 (published): OK.
 INFO   welcome-to-lamplight v1 (published): OK.

$ echo $?
1   # non-zero — the CI job fails, the PR goes red, the guide never ships broken

Captured live from the Lamplight demo's own source. The --drift gate is free-tier — wire it into any CI in a few lines (recipe).

honest-scope

Splain says its own limits out loud.

In the product, in the docs, and here. Honesty is the differentiator, so it gets a component:

Runs entirely inside your app — nothing calls out to us. It's in-perimeter and precisely scoped: the guidance your users see runs entirely on your own servers — no third-party script, no external calls at runtime. Generation is the one deliberate crossing: your code goes to the endpoint you configure. You own that crossing.
Privacy Mode is a presentation aid, not a security control. One toggle blurs flagged fields and covers document scans so you can record tutorials with zero post-production — but the data remains in the page. Never rely on it for security.
Release pending. Splain is in the proving stage: it runs in production-shaped hosts and a public release is being prepared — but it is not on Packagist yet and the license is still being finalized. What this site claims is what the code does today.
quickstart

The whole install, honestly.

composer require splain/splain        # release pending — see the note below
php artisan migrate                   # migrations load automatically — nothing to publish
php artisan filament:assets

# then, on any Filament panel:
#   ->plugin(SplainPlugin::make())

php artisan splain:doctor             # verifies the install end to end

The Packagist release is pending license finalization — today Splain installs via a private repository for early-access hosts. Ask about early access — it's one GitHub issue: tell us about your app and stack.

the-studio-seen

The Studio, seen.

The pro tier isn't a roadmap slide. Here's the real publish loop — a flagged guide, an edit on the live page, and the check that won't let it ship until a human signs off — recorded from our own automated test environment:

The Studio publish loop, narrated by a real voice. ~40 seconds, sound on.
Splain Studio design mode: a dark editing panel over a live admin page, with fields for the step's title, instruction, bubble position, and a Pick-on-page button for choosing what gets highlighted.
Design mode — edit a step on the live page. "Pick on page" turns a click on the real element into a stable selector; you never read the machine code.
The Studio hub: a guides table showing genre, status, version, pages, a green 'clean' check badge, a needs-review count, and View / Design mode / Publish actions.
The hub — Splain's guide-management screen: every guide with its live check result and review debt. Publishing is blocked until zero errors, zero open flags, and a named sign-off.
The onboarding report page showing its default empty state: 'Progress recording is off' with instructions for opting in, and a note pointing at the docs for exactly what gets stored.
The onboarding report — shown here in its honest default state: progress recording is off until you opt in, and the empty state tells you exactly what would be stored.
pricing-posture

Planned pricing.

The boundary is real (it's enforced in the package's architecture); the prices are being decided. The posture: everything an individual developer needs is free — teams pay for the organizational layer.

Free

for every host, forever

  • The playback engine & launcher
  • splain:check + the CI drift gate
  • Privacy Mode
  • Guides-as-code (export / import)
  • Tracks & the learner checklist
  • Server-side progress recording
  • AI generation — splain:generate, bring-your-own model, uncapped
  • splain:make — deterministic scaffold
  • splain:suggest — coverage discovery
  • splain:doctor + introspection

Pro

for teams — planned

  • The Studio: visual design mode on the live page
  • Review inbox & attested publishing sign-off
  • Visual track builder & assignment
  • Onboarding completion report
proving-ground

Proven where guidance is hardest.

Splain has been a standalone package from day one — and it earns its claims against the makers' own production staffing app: real workflows, real privacy stakes, real users who need the walkthrough to be right. Every feature on this page shipped only after playing end-to-end there. The longer story →

Guidance that keeps the app honest.

We installed Splain on our own production Filament admin and wrote guides for its core workflows. One guide documented that new records should show a “Prospect” status badge. On review, the live screen showed it blank — and the guide was right: a framework null-state quirk had been silently hiding that status on thousands of records. The guide didn’t just describe the app; it caught the app drifting from what it was built to do. Fixed the same afternoon.

— from using Splain on our own product