PHPackages                             padosoft/laravel-invitations-admin - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Admin Panels](/categories/admin)
4. /
5. padosoft/laravel-invitations-admin

ActiveLibrary[Admin Panels](/categories/admin)

padosoft/laravel-invitations-admin
==================================

React + Tailwind admin SPA for padosoft/laravel-invitations — campaigns, codes, invitations, referrals, reward ledger, waitlist, anti-abuse review and virality analytics.

v1.0.1(1mo ago)1563↓50%MITTypeScriptPHP ^8.3CI passing

Since Jun 23Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/padosoft/laravel-invitations-admin)[ Packagist](https://packagist.org/packages/padosoft/laravel-invitations-admin)[ Docs](https://github.com/padosoft/laravel-invitations-admin)[ RSS](/packages/padosoft-laravel-invitations-admin/feed)WikiDiscussions main Synced 2w ago

READMEChangelog (2)Dependencies (8)Versions (3)Used By (0)

Laravel Invitations — Admin
===========================

[](#laravel-invitations--admin)

**A polished, themeable React admin console for [`padosoft/laravel-invitations`](https://github.com/padosoft/laravel-invitations).**

Campaigns · invite codes · invitations (who accepted vs. who didn't) · referral graph · reward ledger · waitlist · anti-abuse review · virality analytics — over the headless core's HTTP API.

[![Latest Version on Packagist](https://camo.githubusercontent.com/dcd2e92cf6861b213bbb4709f24ed599a77d945bcf237e522d2630442cf9788b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7061646f736f66742f6c61726176656c2d696e7669746174696f6e732d61646d696e2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/padosoft/laravel-invitations-admin)[![Tests](https://camo.githubusercontent.com/a98771a32b1a0f46940239ebdbf89fa712c3f7542f605e1e21e900b769d89fc1/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f7061646f736f66742f6c61726176656c2d696e7669746174696f6e732d61646d696e2f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/padosoft/laravel-invitations-admin/actions)[![PHP](https://camo.githubusercontent.com/81088cc0e783512c3c17c6d72b8ee7299ac7be0ac9b68992d5557dc3c69cd9bb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253545382e332d3737376262343f7374796c653d666c61742d737175617265)](https://www.php.net)[![Laravel](https://camo.githubusercontent.com/cbef5a2edd6eb43b4547ed337ee084403e443037560cbc25099582d9c7530263/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c61726176656c2d313225323025374325323031332d6666326432303f7374796c653d666c61742d737175617265)](https://laravel.com)[![React](https://camo.githubusercontent.com/66724124203fc35c58f0ed0ea18c14fd12e277232fa9bb0978c7051c4fd96267/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72656163742d31392d3134396563613f7374796c653d666c61742d737175617265)](https://react.dev)[![License](https://camo.githubusercontent.com/689787975c8690848fc28a51f4eed6eff7ceb3be35943be66ebbce745f7e027b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f7061646f736f66742f6c61726176656c2d696e7669746174696f6e732d61646d696e2e7376673f7374796c653d666c61742d737175617265)](LICENSE)

> ⚠️ **Active development toward `v1.0.0`.** Eight of the nine screens (Overview, Campaigns, Codes, Invitations, Referrals, Rewards, Waitlist, Anti-abuse) are built, tested, and themeable against the live core API; Settings lands once the core exposes its config read endpoint.

---

🚀 AI vibe-coding pack included
------------------------------

[](#-ai-vibe-coding-pack-included)

This repo ships a complete AI pair-programming kit: [`CLAUDE.md`](CLAUDE.md) (engineering invariants

- quality gates) and [`AGENTS.md`](AGENTS.md). Point Claude Code, Cursor, or Copilot at the repo and they inherit the package's rules (default-OFF mount tested in both states, no backend logic in the SPA, prebuilt-asset discipline, the test-id + a11y contract) automatically.

---

What it is
----------

[](#what-it-is)

A **turnkey, default-OFF admin SPA** that mounts over the core package's HTTP API. It adds **no backend logic of its own** — every data call goes through the core's existing `/api/admin/invitations/*` routes, behind the host app's own auth + RBAC. Enable it, gate it, done.

For apps that already run their own React SPA (e.g. AskMyDocs), the screens can be **adapted natively**instead of cross-mounting this package — the design template that drives both lives in the core repo at [`docs/ADMIN-DESIGN-BRIEF.md`](https://github.com/padosoft/laravel-invitations/blob/main/docs/ADMIN-DESIGN-BRIEF.md).

✨ Highlights
------------

[](#-highlights)

- 🎛️ **Enterprise SaaS console feel** — Linear / Vercel / Stripe-grade layout: dense-but-breathable tables, sticky headers, slide-over drawers, confirm modals, toasts.
- 🌓 **Light + dark theming** via a `[data-theme]` token set — **no raw hex in components**, so a host can re-skin the whole panel by overriding the CSS custom properties.
- 🧩 **Reusable component kit** — `DataTable`, `KpiCard` (with sparkline + delta), `StatBadge`, `SlideOverDrawer`, `ConfirmModal`, `Toast`, `FilterBar`, `GrantEditor`, `ChipsInput`, `MaskedEmail`, `CopyButton`, `SegmentedTabs`, and dependency-free SVG charts (`Sparkline`, `FunnelChart`, `TimeSeriesChart`).
- 🏢 **Multi-tenant grant editor** — the campaign drawer's headline feature: a primary grant **plus**repeatable per-tenant grants, so a single invite code can seed role + project access across several tenants. `super-admin` is never offered.
- ♿ **Accessibility baked in** — real `` on every control, roles/aria on the focusable node, Esc + focus-trap in drawers/modals, status badges that pair color with text, full keyboard reach.
- 🧪 **Test-friendly by contract** — stable `feature-resource-{id}-{action}` test ids and `data-state="idle|loading|ready|error|empty"` on every async surface, so Playwright/Vitest can wait on state instead of timeouts.
- 🔌 **Zero JS toolchain for consumers** — the prebuilt Vite bundle is committed to `resources/dist/` and served straight from the package. `composer require` and flip a flag.
- 🔒 **Default-OFF, host-gated** — `INVITATIONS_ADMIN_ENABLED=false` out of the box; OFF means no routes and a clean 404; ON means a Blade shell behind your middleware stack.

Screens
-------

[](#screens)

A dark-first HUD console (Padosoft Design System — neon-cyan signal, Space Grotesk / Inter / JetBrains Mono), with a derived light theme one click away. All nine screens are live and wired to the core API.

### Overview — virality dashboard

[](#overview--virality-dashboard)

KPI cards (K-factor, acceptance/conversion rate, codes issued, redemptions, distinct referrers, time-to-redeem p50/p90) + acquisition funnel + redemptions time-series, filtered by campaign + date range.

[![Overview (dark)](resources/screenshots/laravel-invitations-admin-dashboard-dark.png)](resources/screenshots/laravel-invitations-admin-dashboard-dark.png)[![Overview (light)](resources/screenshots/laravel-invitations-admin-dashboard.png)](resources/screenshots/laravel-invitations-admin-dashboard.png)

### Campaigns

[](#campaigns)

Sortable table (key, name, type, status, redemptions, window) + a create/edit slide-over with the full **multi-tenant GrantEditor** (primary grant + repeatable per-tenant grants) and inline per-field validation.

[![Campaigns](resources/screenshots/laravel-invitations-admin-campaigns.png)](resources/screenshots/laravel-invitations-admin-campaigns.png)

### Codes

[](#codes)

Code table (copy, kind/state badges, uses progress, expiry) + campaign/state filters + a generate drawer with copy-all / CSV export, and a destructive revoke confirm modal.

[![Codes](resources/screenshots/laravel-invitations-admin-invite-codes.png)](resources/screenshots/laravel-invitations-admin-invite-codes.png)

### Invitations

[](#invitations)

Status tabs + masked recipients + an accepted-vs-pending-vs-expired breakdown bar + a bulk send drawer.

[![Invitations](resources/screenshots/laravel-invitations-admin-invitations.png)](resources/screenshots/laravel-invitations-admin-invitations.png)

### Referrals

[](#referrals)

A legible referrer → referee attribution graph beside a status-filtered table.

[![Referrals](resources/screenshots/laravel-invitations-admin-referral-graph.png)](resources/screenshots/laravel-invitations-admin-referral-graph.png)

### Rewards

[](#rewards)

Double-sided reward ledger (beneficiary, party, type, amount, trigger, state) with state + party filters.

[![Rewards](resources/screenshots/laravel-invitations-admin-reward-ledger.png)](resources/screenshots/laravel-invitations-admin-reward-ledger.png)

### Waitlist

[](#waitlist)

Read-only queue ordered priority desc / position asc, masked emails, referral-count column + status filter.

[![Waitlist](resources/screenshots/laravel-invitations-admin-waitlist.png)](resources/screenshots/laravel-invitations-admin-waitlist.png)

### Anti-abuse

[](#anti-abuse)

A calm signal feed (hashed subject, signal type, severity, score, action taken) with severity + action filters — danger color reserved for real blocks.

[![Anti-abuse](resources/screenshots/laravel-invitations-admin-anti-abuse-review.png)](resources/screenshots/laravel-invitations-admin-anti-abuse-review.png)

### Settings

[](#settings)

Read-only view of the tenant's invite configuration (anti-abuse thresholds, velocity windows, PII retention, defaults).

[![Settings](resources/screenshots/laravel-invitations-admin-settings.png)](resources/screenshots/laravel-invitations-admin-settings.png)

Install
-------

[](#install)

```
composer require padosoft/laravel-invitations-admin
```

The package auto-registers. Publish the config to tune it:

```
php artisan vendor:publish --tag=laravel-invitations-admin-config
```

Enable the mount
----------------

[](#enable-the-mount)

The mount is **OFF by default**. Turn it on and gate it with your admin middleware:

```
INVITATIONS_ADMIN_ENABLED=true
INVITATIONS_ADMIN_ROUTE_PREFIX=admin/invitations
INVITATIONS_ADMIN_API_BASE=/api/admin/invitations
INVITATIONS_ADMIN_TENANT_LABEL=acme
```

```
// config/invitations-admin.php
return [
    'enabled'      => env('INVITATIONS_ADMIN_ENABLED', false),
    'route_prefix' => env('INVITATIONS_ADMIN_ROUTE_PREFIX', 'admin/invitations'),
    // The host supplies auth + RBAC here.
    'middleware'   => ['web', 'auth', 'can:manage-invitations'],
    'api_base'     => env('INVITATIONS_ADMIN_API_BASE', '/api/admin/invitations'),
    'tenant_label' => env('INVITATIONS_ADMIN_TENANT_LABEL', 'default'),
];
```

Visit `/admin/invitations` — the SPA boots and talks to the core API at `api_base` using the session cookie. With `enabled=false` the route is absent and returns a clean 404.

### Cross-mounting into a host app (e.g. AskMyDocs)

[](#cross-mounting-into-a-host-app-eg-askmydocs)

This package is built to **cross-mount** into a host application exactly like the other `padosoft/*-admin`sister packages — `composer require`, flip `INVITATIONS_ADMIN_ENABLED=true`, and gate the route group with the host's admin auth + RBAC via `invitations-admin.middleware`:

```
// config/invitations-admin.php (in the host)
'middleware' => ['web', 'auth', 'tenant.authorize', 'can:manage-invitations'],
```

What makes the cross-mount clean:

- **Self-contained bundle.** The prebuilt SPA (JS + CSS, fonts inlined via the DS `@import`) ships in `resources/dist/` and is served by the package's own asset route — the host needs **no** JS toolchain, no `npm`, no Vite config.
- **No same-origin assumptions beyond `api_base`.** The SPA's only backend dependency is the core API base URL (default `/api/admin/invitations`), injected into `window.InvitationsAdmin` by the Blade shell. Point `api_base` wherever the host mounts the core package's admin routes. All in-app navigation is client-side (no server routes per screen), so the single gated `GET {route_prefix}` serves every screen.
- **Session-cookie auth + CSRF.** The shell injects the CSRF token; the axios client sends it with `withCredentials`, so the host's existing session guard protects every API call.
- **Default-OFF is a clean 404.** With the flag off no routes are registered (verified in both states by the package's `MountTest`), so a fresh install of the host adds nothing until an operator opts in.

The host keeps full control of the auth boundary; this package only renders the console.

Theming
-------

[](#theming)

The whole palette is driven by CSS custom properties on `[data-theme]` (`resources/js/theme.css`). To re-skin, override the token block in your own stylesheet loaded after the SPA bundle:

```
[data-theme='light'] {
  --color-primary: #0d9488;
  --color-primary-soft: #ccfbf1;
}
```

The in-app theme toggle persists the user's choice to `localStorage`.

Develop the SPA
---------------

[](#develop-the-spa)

```
npm install
npm run dev        # Vite dev server
npm test           # Vitest + Testing Library
npm run typecheck  # tsc strict
npm run build      # emits resources/dist/ — commit the refreshed bundle
```

Requires
--------

[](#requires)

[`padosoft/laravel-invitations`](https://github.com/padosoft/laravel-invitations) — the headless core that owns the data, the HTTP API, and the MCP surface.

Testing &amp; quality gates
---------------------------

[](#testing--quality-gates)

```
composer test       # PHPUnit (Testbench) — incl. the R43 default-OFF/ON mount test
vendor/bin/phpstan analyse   # level 5
vendor/bin/pint --test       # code style
npm run typecheck && npm test && npm run build
```

CI runs the PHP matrix (8.3 / 8.4 / 8.5 × Laravel 12 / 13) plus a JS build + test job on every push and PR.

License
-------

[](#license)

MIT © [Padosoft](https://www.padosoft.com)

###  Health Score

45

—

FairBetter than 91% of packages

Maintenance90

Actively maintained with recent releases

Popularity20

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 94.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

45d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/10467699?v=4)[Lorenzo](/maintainers/lopadova)[@lopadova](https://github.com/lopadova)

---

Top Contributors

[![lopadova](https://avatars.githubusercontent.com/u/10467699?v=4)](https://github.com/lopadova "lopadova (16 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (1 commits)")

---

Tags

laraveltailwinddashboardadminreactinvitationsreferralSPA

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/padosoft-laravel-invitations-admin/health.svg)

```
[![Health](https://phpackages.com/badges/padosoft-laravel-invitations-admin/health.svg)](https://phpackages.com/packages/padosoft-laravel-invitations-admin)
```

###  Alternatives

[moonshine/moonshine

Laravel administration panel

1.3k268.2k87](/packages/moonshine-moonshine)[spatie/laravel-health

Monitor the health of a Laravel application

88212.7M182](/packages/spatie-laravel-health)[harris21/laravel-fuse

Circuit breaker for Laravel queue jobs. Protect your workers from cascading failures.

46273.9k](/packages/harris21-laravel-fuse)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.4M354](/packages/psalm-plugin-laravel)[defstudio/telegraph

A laravel facade to interact with Telegram Bots

818336.8k3](/packages/defstudio-telegraph)[nativephp/mobile

NativePHP for Mobile

1.1k102.1k123](/packages/nativephp-mobile)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
