Taldres/laravel-waitlist

Build waitlist statistics with taldres/laravel-waitlist: signups and confirmations per day for charts, totals and confirmation rates for a period, the confirmed count on any past day, and how many people are on a list right now, for dashboards, admin pages and API endpoints.

O que é laravel-waitlist?

laravel-waitlist is a Claude Code agent skill that build waitlist statistics with taldres/laravel-waitlist: signups and confirmations per day for charts, totals and confirmation rates for a period, the confirmed count on any past day, and how many people are on a list right now, for dashboards, admin pages and API endpoints.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Taldres/laravel-waitlist/tree/HEAD/resources/boost/skills/laravel-waitlist-reporting

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Laravel Waitlist: reporting

Use this skill when an application using taldres/laravel-waitlist needs numbers about its waitlists: a dashboard, a chart, an admin widget, a weekly report.

Primary Goal

  • answer each question from the right source: the activity log for "what happened", snapshot() for "who is on the list now"

Workflow

1. Pick the source

Waitlist::for('beta')->report()->between('2026-08-01', '2026-08-31')->totals();
// "230 confirmed in August": the activity log, a fact about the past

Waitlist::for('beta')->snapshot();
// "197 on the list right now": the addresses, a fact about the present

A later erasure never changes the first number. Counts are steps, not people: someone who leaves and comes back is confirmed twice.

2. Now: snapshot()

$snapshot = Waitlist::for('beta')->snapshot();

$snapshot->pending;       // waiting for confirmation
$snapshot->confirmed;     // on the list
$snapshot->unsubscribed;  // left, still within retention
$snapshot->active();      // pending + confirmed
$snapshot->total();
$snapshot->toArray();     // JSON-ready, with project and list

3. A period: totals

use Taldres\Waitlist\Enums\ActivityType;
use Taldres\Waitlist\Enums\EntryStatus;

$totals = Waitlist::for('beta')->report()->since(30)->totals();   // the last 30 days

$totals->signups();                       // subscribed + resubscribed
$totals->of(ActivityType::Confirmed);
$totals->of(ActivityType::Unsubscribed, from: EntryStatus::Confirmed);  // left after confirming
$totals->confirmationRate();              // ?float, null when nobody signed up
$totals->confirmedChange();               // net change of the confirmed count

4. A chart: daily series

$series = Waitlist::for('beta')->report()->since(30)->daily()->fillGaps();

foreach ($series as $day) {
    $day->date;                       // CarbonImmutable
    $day->signups();
    $day->of(ActivityType::Confirmed);
}

$series->toArray();   // [{date, subscribed, resubscribed, confirmation_requested, confirmation_mailed, confirmed, unsubscribed, expired, erased, consent_granted, consent_withdrawn}]

fillGaps() adds days without activity, which a chart needs.

5. The confirmed count on a past day

Waitlist::for('beta')->report()->confirmedOn('2026-09-30');   // at the end of that day

Exact as far as the log reaches back, to the day. Today's value equals snapshot()->confirmed.

6. Scope

  • Waitlist::report(): every list of the default project; ->forList('beta', 'launch') narrows it.
  • Waitlist::for('beta')->report(): one list.
  • Waitlist::project('acme')->report(): one project; Waitlist::allProjects()->report(): all.
  • ->forPurpose('newsletter'): grants and withdrawals of an optional purpose only; signups, confirmations and departures carry no purpose and drop out.
  • Without since() or between(), everything stored.

Rules, References, and Templates

  • A day always ends in app.timezone: each row stores its day (occurred_on) when written, and reports group on it and resolve their periods in that zone. An erasure clears the exact time, so set app.timezone before the first signup; changing it later does not redate existing rows, only later ones. With UTC, a signup at 23:30 in Berlin in summer belongs to the next UTC day: a defined boundary, not a miscount.
  • Reports are one grouped query; cache them in the application if a dashboard polls often.
  • The remaining log is minimized, not anonymous: keep reports for the people who need them.
  • Guide: https://github.com/Taldres/laravel-waitlist/blob/main/docs/reporting.md

Examples

  • "Show signups per day for the last month in the admin": step 4 as JSON for the chart library.
  • "How many confirmed people did we have at the end of each month?": confirmedOn() per month end.
  • "Conversion rate of the beta list this week": report()->since(7)->totals()->confirmationRate().

Anti-patterns

  • Counting WaitlistEntry rows for past periods; erasures and retention change them.
  • Counting Waitlist::for($list)->count() as "on the list": it includes people who left; use snapshot()->confirmed or active().
  • Computing dates in SQL with engine-specific functions; the log stores the reporting day already.
  • Expecting a purpose-filtered report to contain signups or confirmations.

Individual skills in this repo

This repo contains 13 individual skills — each has its own dedicated page.

Taldres/laravel-waitlist

Use this skill when reviewing Laravel package compatibility across composer constraints, PHP versions, Laravel versions, Testbench versions, dependency stability lanes, Windows CI, or matrix-sensitive code and workflow changes.

Taldres/laravel-waitlist

Use this skill when creating or updating the bundled Laravel Boost skill under resources/boost/skills from the package implementation and package documentation. Trigger after public APIs, commands, config, routes, views, publish tags, README content, or examples change.

Taldres/laravel-waitlist

Use this skill when preparing Laravel package releases: CHANGELOG.md updates, generated release notes, GitHub release workflows, version checks, tags, release validation, or release automation changes. Never publish autonomously.

Taldres/laravel-waitlist

Use this skill when adding Laravel package capabilities or wiring them through the service provider: commands, migrations, routes, config merges, views, translations, assets, middleware, publish tags, workbench files, or console-only behavior.

Taldres/laravel-waitlist

Use this skill when writing, editing, fixing, or reviewing package tests with Pest 4/5 and Orchestra Testbench, including TDD, feature tests, unit tests, type coverage, arch tests, workbench behavior, commands, routes, config, migrations, and publishable resources.

Taldres/laravel-waitlist

Integrate taldres/laravel-waitlist in a Laravel application: define purposes, lists and fields, build the signup form, send the confirmation mail from events, add a preference page, and keep consent, retention and encryption intact.

Taldres/laravel-waitlist

Build the pages of a taldres/laravel-waitlist integration: the signup form with the registered wording, and the confirm, unsubscribe and preference pages, either in Laravel controllers (Blade, Livewire, Inertia) or in an SPA or static site over the package's JSON API, including CORS and bot protection.

Taldres/laravel-waitlist

Turn a taldres/laravel-waitlist waitlist into a launch: invite people in batches in signup order, let invited addresses register, announce the launch to everyone who agreed, and erase the list once its purpose is fulfilled.

Taldres/laravel-waitlist

Send the mails of a taldres/laravel-waitlist integration: the double opt-in confirmation, the preference page link, a welcome mail, launch mails and newsletters to the people who agreed, with the right unsubscribe links, one-click headers and a sender per project.

Taldres/laravel-waitlist

Operate a taldres/laravel-waitlist installation: answer access and erasure requests, withdraw a purpose on request, apply retention, erase a list once its purpose is fulfilled, rotate APP_KEY with waitlist:rekey, export a list, and check the setup before going live.

Taldres/laravel-waitlist

Run the waitlists of several products in one Laravel app with taldres/laravel-waitlist projects: define projects, scope facade calls with project(), resolve the project of HTTP signups, send mail per project, handle requests across all projects, or keep projects in a database for a central waitlist API.

Taldres/laravel-waitlist

Keep a newsletter tool such as Brevo, Mailchimp or Mailcoach in step with a taldres/laravel-waitlist waitlist: add confirmed contacts per purpose, remove them on withdrawal and erasure, and carry unsubscribes made at the provider back into the waitlist via a webhook.

Taldres/laravel-waitlist

Write feature tests for an application's taldres/laravel-waitlist integration: get the plain tokens from events, assert the confirmation and other mails, test the signup, confirm and unsubscribe flows in PHP and over the package's HTTP routes, and bypass rate limits and bot checks in tests.

Habilidades Relacionadas