Bug Fixes
- hide 'needed' tags from admin blog list view
- hide 'needed' tags from public blog post tag strip
- update category filter to check post tags instead of category
- update default sender email to use SMTP_USER environment variable
- add missing wrapEmail import in lead-followup-digest
- use Razorpay key prefix to determine live mode instead of NODE_ENV
- remove unused glitchgrab dependency from package.json
- update glitchgrab dependency to version 1.17.1
- update glitchgrab dependency to version 1.17.1 and remove unused entry
- skip total_value override when no services or packages selected
- use isLoading instead of isFetching to prevent form remount on auto-save
- initialize extInstalled state based on document attribute
- update extension installation check to set state correctly
- use lazy state initializer to avoid synchronous setState in effect
Features
- add created and authenticated fields to subscriptions type
- add GET /api/admin/users/export endpoint for Excel download
- fetch live Razorpay status per subscription to split active vs created counts and fix MRR to exclude non-active subs
- remove email column from users table and add Excel export
- show created/authenticated subscription counts as subtitle on Active Subscriptions tile
- update glitchgrab to version 1.17.1 and add as a dependency
- add content script to flag extension presence on practicestacks pages
- add externally_connectable and practicestacks content script to manifest
- respond to external ping messages for extension detection
- integrate Cal.com API for booking demo and embed calendar UI
- hide Chrome extension install prompt when extension is already installed

