1. Subscription plan tiers (Plus/Pro/Max style upgrades)
You wanted a way to build plan tiers where a higher plan (like "Plus") automatically includes everything from a lower plan (like "Basic") instead of manually re-checking every feature box each time. I added an "Inherit modules from plan" dropdown to the plan editor — pick the base plan, it pre-fills all its features, and you just add whatever's new for the higher tier. This gets saved permanently on the plan record, so it's not just a one-time copy trick.
To go with that, plan cards everywhere (admin panel, landing page, and the in-app subscription page) now show "Everything in Basic Plan, plus: [new stuff]" instead of repeating the entire feature list three times over. Much easier to scan, and it matches how pricing pages usually look (like the Claude pricing page you referenced earlier).
2. Found and fixed a real bug while doing this
While going through the feature list, I discovered Payroll was accidentally tied to the "Menu" feature — meaning any plan that included Menu access also gave away Payroll access for free, which was never intended. I split that out so Payroll (and Help & Guide) are now their own toggleable features, independent from everything else.
3. What happens when someone hits a feature they don't have
Previously, if a staff member tried to access something outside their plan, they'd just get a plain "you don't have permission" message — which reads the same whether it's a permissions issue or a plan issue, and doesn't tell them what to do about it.
Now, if it's specifically a plan limitation, they see a proper upgrade screen: an icon for that feature, "Customer Tickets is a Pro feature," a side-by-side comparison of their current plan vs. the plan that unlocks it, and an "Upgrade" button (only shown to admins — regular staff just see "ask an admin to upgrade").
4. Notification safety fix
There's an automated alert that pings staff when orders sit too long without being updated ("Orders Need Attention"). I found this was only being filtered by whatever the restaurant had configured in their notification settings — meaning if that config was ever loose, the alert could reach roles it shouldn't (like a delivery driver instead of just kitchen/counter staff). I hard-locked it at the backend level so it can only ever go to actual staff and admins, regardless of settings.
5. Backend speed — order creation specifically
Placing an order was triggering way more database calls than it needed to — around 10-12 separate round trips just to check subscription limits and settings before the order logic even started. I consolidated duplicate lookups, ran independent checks in parallel instead of one after another, and made the "you're near your plan limit" warning emails fire in the background instead of holding up the order response. That's the single biggest lever for making order placement feel faster.
6. Frontend — pages calling APIs they didn't need
Went through the busiest pages (Dashboard, Menu, Orders/POS, Users, Settings, Reports, Checkout) looking for unnecessary API calls. Found things like: switching tabs on the Menu page was re-fetching all menu data even for unrelated tabs, the Dashboard was tearing down and rebuilding its real-time listeners every time someone changed the date filter, and a settings call was duplicated when the data was already available elsewhere in the app. Fixed the ones that were genuinely wasteful — a few others I checked turned out to be working as intended, so I left those alone rather than "fixing" something that wasn't broken.
7. Small polish
A couple of visual bugs along the way — a duplicated "$$" showing on a plan price in the tenant editor, and the paywall icon design not matching the intended look — both fixed.
Let me know if you'd like this turned into a written doc or slide-style summary instead.