Who can use this: Anyone (the public plans page is open); editing is Admin or Super Admin only URL / Route: Public plans listing at
/plans(client.plans.index); admin editing at/admin/plans/*,/admin/projects/{project}/plans/*,/admin/features(read-only) Plan / feature gate: Always on
Purpose
This page explains what plans and features are, where the prices live, and how to change them. Plans decide what your subscription costs and what the limits are. Features are the per-flag toggles that decide which buttons and pages are visible inside Solabooks.
What plans look like
Each app (project) has its own ladder of plan tiers. The current Solabooks ladder is:
| Tier | Slug | Price | Max users / org |
|---|---|---|---|
| Free | standard |
$0.00 | 2 |
| Professional | professional |
$25.00 | 5 |
| Premium | premium |
$35.00 | 8 |
| Enterprise | enterprise |
$100.00 | unlimited |
HR has a single Free tier (free). Solavel Projects has Free, Pro, Premium. Inventory (when seeded) has Standard, Professional, Premium, Enterprise to mirror Solabooks. The exact prices are seeded by database/seeders/ProjectPlanSeeder.php and can be edited from the admin shell.
In addition there are three bundles that combine apps at a fixed tier:
| Bundle | Slug | Includes |
|---|---|---|
| Starter | starter |
Solabooks + Inventory at Standard |
| Business | business |
Solabooks + Inventory at Premium |
| Enterprise | enterprise |
Solabooks + Inventory at Enterprise |
Bundles are seeded by database/seeders/BundleSeeder.php. Their price equals the sum of the included project plans' prices.
Public plans page
- URL:
/plans(routeclient.plans.index). - Who: Public. Anyone can browse.
- What you do: Read each tier, then click Subscribe (
POST /plans/{projectPlan}/subscribe,client.plans.subscribe). Subscribe sends signed-out users to/registerand signed-in users into the new-organization wizard.
There is also a comparison page at /comparison (plans.compare) that shows tiers side by side, and per-app landing pages at /finance/plans (finance.plans) and /hr/plans (hr.plans).
What features are
A feature is a single named flag — for example, multi_currency_enabled, pdf_templates_enabled, tracker.bank_reconciliation. Features come in two shapes:
- Boolean — on or off (
vat_enabled = true). - Limit — a numeric cap (
workflow_rules = 3,scheduled_reports = 5).
The full catalog (108 entries) lives in config/features.catalog.php and is loaded by app/Support/FeatureRegistry.php. Each entry has a key, label, description, category, type, default value, and whether it applies globally or to a single project. The catalog is the source of truth.
When database/seeders/PlanFeatureSeeder.php runs, it copies every entry into the plan_features table. Anything missing from the registry is marked inactive — the catalog is authoritative.
Each plan tier has a feature_overrides map that overlays the defaults. For example, the Solabooks Free tier turns off multi_currency_enabled, sets workflow_rules to 3, and disables enable_purchase_orders.
How features are enforced
- Inside Solabooks, the route layer reads each tier's resolved features. A request to
/finance/ar/invoices/*only succeeds if the active organization's plan hastracker.invoices = true. The check is performed by thefeature:rule attached to the route. - Some features also have a permission counterpart — for example,
bank_reconciliation_enabled(feature) versusbanking.reconciliation.start(permission). Both must allow the action for it to go through.
Step by step (admin)
Browse the feature catalog
- Open
/admin/features(admin.features.index). - The page lists every entry with its category, type, and default. It is read-only — to change a default you edit
config/features.catalog.phpand re-run the seeder.
Edit a plan tier
- Open
/admin/plans(admin.plans.index). - Click a plan to view (
admin.plans.show) or edit (admin.plans.edit). You can adjust price, max users, and the per-feature overrides. - Save (
PUT admin.plans.update). The new values apply on the next page load for any subscriber on that tier.
Edit project-level plans
- Open
/admin/projects(Super Admin only —admin.projects.index). - Pick a project to see its plans at
/admin/projects/{project}/plans(admin.projects.plans.index). - Add a new tier (
admin.projects.plans.create/.store), edit one (admin.projects.plans.edit/.update), or remove one (admin.projects.plans.destroy).
Permissions / restrictions
/plansand/comparison: public.POST /plans/{projectPlan}/subscribe: signed-in user. The subscription is created against the current selected organization (or a new one if you have none)./admin/plans/*: Admin or Super Admin./admin/projects/*and child plans: Super Admin only./admin/features: Admin or Super Admin (read-only viewer).
Common problems
- "This feature is not available on your plan." — The active organization's tier has the feature flag off. Upgrade from Subscriptions and billing.
- A feature exists in Solabooks but is not in the central catalog. The audit found 116 finance feature keys that are not in
config/features.catalog.php. Some of these are tracked elsewhere; if a customer asks about a feature that has no entitlement record, fall back to the global default infinance_features.phpuntil the catalog is reconciled. - Bundles missing Inventory.
BundleSeederonly adds Inventory if theinventoryproject was seeded. Ifservices.inventory.base_urlwas unset at seed time, bundles will silently include only Solabooks.