BusinessPress
Back to homepage FOR DEVELOPERS · TECHNICAL DEPTH

The platform, with the back panel off.

BusinessPress is a Laravel application with dual GraphQL APIs, an MCP server, a real-time reactive cache, and a model-alias extension system. Self-host or hosted. Apache 2.0 core. PRs welcome.

# Get a local instance running
$ git clone businesspress/core
$ composer install
$ php artisan bp:install
$ composer dev
# → http://localhost

Built on

Laravel 12 Laravel AI PHP 8.3 PostgreSQL Redis GraphQL Stripe Connect Anthropic OpenAI Google Gemini Reverb · WebSockets ReadySet Livewire Alpine.js MCP Protocol Sanctum Octane-ready Laravel 12 Laravel AI PHP 8.3 PostgreSQL Redis GraphQL Stripe Connect Anthropic OpenAI Google Gemini Reverb · WebSockets ReadySet Livewire Alpine.js MCP Protocol Sanctum Octane-ready
Product surface

The APIs land in a real operator dashboard.

BusinessPress is not a headless toolkit with a thin admin bolted on. The MCP server, AI providers, page builder, image studio, commerce, and notification logs all surface in the same dashboard your team uses every day.

BusinessPress dashboard showing page builder, AI studio, recent AI activity, and executive summary panels.
BusinessPress product dashboard with CMS, commerce, AI activity, and executive summary views.
One operator surface CMS, commerce, AI, and reporting in the same workspace.
Real dashboard proof Show buyers the product instead of abstract diagrams.
BusinessPress MCP integration dashboard with endpoint, tool cards, and safety access flow.
MCP control plane showing available tools, server endpoint, token authentication, and permission checks.
Safe AI access Token scopes, user context, permission checks, and audit logs.
9 MCP tools Search, read, update, upload, and execute GraphQL.
BusinessPress AI Assistant dashboard with provider health, operator chat, image studio, and approval gate.
AI workspace showing provider readiness, approval-gated assistant work, generated image assets, and audit review.
Approval-gated AI Agents stage work, operators approve writes.
Provider-ready OpenAI, Gemini, DeepSeek, Anthropic, and more in one view.
01 · APIs

Dual GraphQL.
One model layer.

Two endpoints. Same Eloquent models. Storefront fields are explicitly opted in via storefront: true on the #[NativeRelationship] attribute.

Public · cached · no auth

POST /graphql/storefront

For your storefront, mobile app, or any public surface. Field-level opt-in. Cached at the edge via RSC.

query HotProducts {
  products(first: 5, orderBy: "sales_desc") {
    id name price { format }
  }
}

Auth · Sanctum · scoped to user

POST /graphql/dashboard

Full read/write surface for your dashboard. Every query and mutation runs through canAccess().

mutation UpdateLead($id: ID!) {
  updateLead(id: $id, stage: "PROPOSAL") {
    id stage updated_at
  }
}
02 · MCP Server

9 tools.
One protocol.

Model Context Protocol server at POST /mcp, protected by auth:sanctum. Every tool call routes through the same canAccess() scope your dashboard uses. Mutations require a confirmation step by default.

introspect_schema Discover entity types, fields, mutation inputs
list_entities Paginated listing with filters
get_entity Fetch single entity by UUID
search_entities Full-text search
create_entity Create with confirmation step
update_entity Update with diff preview
delete_entity Delete with confirmation
upload_file From URL or base64 → upload_id
execute_graphql Raw GraphQL escape hatch

Plus the Page Builder Code Agent ships 17 additional VFS tools (write, view, find-replace, apply-diff, query, undo, save-state, refresh-preview, …) for autonomous template editing loops.

03 · Real-time

Postgres writes.
Browsers update. Sub-second.

The RSC pipeline streams Postgres writes through a ReadySet WAL listener, into Redis, out via Reverb, straight to a Laravel Echo client. Optional — bring your own broadcaster or turn it off entirely.

Postgres write
ReadySet WAL listener
Rust bridge transform
Redis XADD stream
PHP consumer broadcast
Reverb WebSocket
Echo browser
LIVE p50 latency: ~180ms p99 latency: ~720ms Optional · BYO broadcaster · disable entirely
04 · Extension model

Override anything.
Touch nothing in core.

Every model has a stable $modelAlias. Polymorphic columns store aliases ("order") — never class paths. Drop a class with the same alias in app/Models and it wins.

Same goes for CPTs (definitions/cpts/*.php), WEF schemas (wef-json/*.json), and dashboard pages (Livewire components in app/Livewire/Dashboard/Pages/).

// app/Models/Order.php — your override
namespace App\Models;

use BusinessPress\Core\Models\Order as BaseOrder;

class Order extends BaseOrder
{
  protected static $modelAlias = 'order'; // same alias wins

  public function customSummary(): string
  {
    return "#" . $this->id . " · " . $this->customer->name;
  }
}

115 of 122 core models register an alias. Polymorphic relations resolve at runtime through the ModelRegistry. Your override is plug-and-play.

05 · Self-hosting

Same image. Your infra.

BusinessPress is the same Docker image whether we host it for you or you host it yourself. No premium-feature gating, no different SKU.

  • Bring your own Postgres ≥ 14 + Redis ≥ 6
  • Octane-ready · works with FrankenPHP, Swoole, or php-fpm
  • Optional ReadySet for the RSC reactive layer
  • Optional Reverb (or Pusher / Soketi) for WebSockets
  • Optional Node.js sidecar for the AI assistant
# docker-compose.yml — minimal stack
services:
  app:
    image: businesspress/core:latest
    env_file: .env
    depends_on: [postgres, redis]
  postgres:
    image: postgres:16
    volumes: [pgdata:/var/lib/postgresql/data]
  redis:
    image: redis:7-alpine
  reverb:
    image: businesspress/reverb:latest

volumes:
  pgdata:

Honest numbers

115

models with stable aliases

9

MCP tools out of the box

17

Code Agent VFS tools

3

AI providers, swappable

Want to dig deeper?

Full API reference, deployment guides, and architecture deep-dives.

Cart