What's New in POSVelo v2.1
Billing, a platform control plane, loyalty redemption, and the workspace polish — all on top of v2
Everything from v1 (POS) and v2 (HRM, ESS, Payroll, notifications) is unchanged. v2.1 adds the pieces that make POSVelo sellable and operable as a multi-tenant SaaS — billing and a platform console — plus a loyalty redemption engine and a round of workspace and screen polish. None of it is required: Stripe and the HR module each stay dormant until you switch them on.
The Headline Changes
| Area | What landed in v2.1 | Read |
|---|---|---|
| Subscriptions & Billing | Real Stripe billing — checkout, customer portal, invoices, and per-plan resource limits (stores / users / products) enforced before a record is created. | Subscriptions & Billing |
| Platform Administration | A SUPER_ADMIN console: create/suspend tenants, view usage vs. limits, impersonate a tenant safely, a plan catalog editor, platform-wide audit, maintenance mode, and a cross-tenant broadcast. | Platform Administration |
| Loyalty Points & Rewards | Customers now redeem points for a discount at checkout, earning respects tier multipliers and rounding rules, refunds prorate points correctly, and points can expire — all configurable per tenant. | Loyalty Points & Rewards |
| Multi-day leave & holidays | Holidays can span a date range (e.g. a multi-day Eid), the apply forms have an explicit single-day / date-range toggle, and a shared “who’s out” team leave calendar was added. | HRM — Leave & Holidays |
| Workspace & Appearance | Per-account preferences that follow the user across devices: sidebar side, POS cart side, theme, fullscreen, and rebindable keyboard shortcuts. | Workspace & Appearance |
Billing Lives on /api/v1, Not /api/v2
A natural assumption is that everything new is under /api/v2. It is not. The
v2.1 billing and platform-admin features are platform concerns that sit
alongside the original POS, so they extend the /api/v1 surface. The HR
leave/holiday changes stay on /api/v2/hr and /api/v2/me where the rest of
HRM lives.
| Capability | Representative endpoint | Who |
|---|---|---|
| Tenant billing (checkout, portal, invoices) | /api/v1/billing/* | ADMIN (tenant:manage) |
| Stripe webhook (subscription/invoice sync) | POST /api/v1/webhooks/stripe | Stripe (signature-verified) |
| Plan-limit usage | GET /api/v1/tenants/:id/usage | SUPER_ADMIN |
| Platform console | /api/v1/super-admin/* | SUPER_ADMIN |
| Loyalty program settings | PATCH /api/v1/customers/loyalty/program | ADMIN (loyalty:manage) |
| Team leave calendar | GET /api/v2/hr/leave/calendar | HR / managers / ESS |
Everything Off-By-Default Stays Off
v2.1 adds features that an existing install can ignore until it opts in. This is deliberate — upgrading to v2.1 changes nothing about a running shop unless you act.
| Feature | Default | How to turn it on |
|---|---|---|
| Stripe billing | Inactive | Unset STRIPE_SECRET_KEY means a $0 / FREE-style catalog works with no Stripe calls. Set the Stripe keys to enable paid checkout. |
| Plan limits | Generous defaults | A static PLAN_LIMITS map applies until you seed a real SubscriptionPlan catalog; null means unlimited. |
Pull both repositories, reinstall dependencies, and apply the new database migrations on the backend (multi-day holidays, loyalty redemption fields, and the billing/subscription tables). The full step-by-step is in Updating the Project. No data is rewritten — every new column is additive and nullable.
Where to Go Next
| If you want to… | Read |
|---|---|
| Charge tenants and enforce plan limits | Subscriptions & Billing |
| Operate the platform as the provider | Platform Administration |
| Let customers redeem points at the till | Loyalty Points & Rewards |
| Set up multi-day leave and holidays | HRM — Leave & Holidays |
| Customize the workspace per user | Workspace & Appearance |