Docs · Own product · Laravel, Android, MCP

Inventory

A multi-tenant inventory product built as three parts: a Laravel backend shipped as a Composer package with a versioned API, a Kotlin Android client, and an MCP server so an AI assistant can answer questions about the stock without touching the database. Live at inventory.scuttle.dev.

What is mounted #

Everything is host-based routed on one domain:

  • Web app: login, register, password reset, join a household by code, the inventory UI.
  • API: /api/v1, headless REST and JSON with Sanctum bearer tokens; the contract lives in docs/specs/api-contract.md.
  • Live updates: a private channel per household over Reverb.
  • App-version feed: the latest published Android release, so the app can prompt for updates.
  • Admin API and an HTTP MCP server with the same operator tools.
  • Health: a JSON liveness, version and database probe.

Install into a host app #

composer require spdotdev/inventory

The service provider is auto-discovered; migrations run with the host's php artisan migrate. All tables carry the inventory_ prefix.

Configuration #

Everything is env-driven and documented in config/inventory.php: the domain the package answers on, the Google OAuth client ids accepted for sign-in, the static admin token that protects the admin API and the MCP server (empty disables both), and per-minute rate limits on authentication, join codes and client error intake.

Quality gates #

Pint, Larastan and PHPUnit on every change, with a SQLite job and a real MySQL job in CI. ROADMAP.md says what is next, BACKLOG.md what shipped.