Staff Roles:
- Remove Support Staff default role (now Manager and Staff only)
- Add position field for custom role ordering
- Update StaffRolesSettings with improved permission UI
- Add RolePermissions component for visual permission display
Documentation Updates:
- HelpStaff: Explain two-tier permission system (User Roles + Staff Roles)
- HelpSettingsStaffRoles: Update default roles, add settings access permissions
- HelpComprehensive: Update staff roles section with correct role structure
- HelpCustomers: Add customer creation and onboarding sections
- HelpContracts: Add lifecycle, snapshotting, and signing experience docs
- HelpSettingsAppearance: Update with 20 color palettes and navigation text
Tenant API:
- Add new isolated API at /tenant-api/v1/ for third-party integrations
- Token-based authentication with scope permissions
- Endpoints: business, services, resources, availability, bookings, customers, webhooks
Tests:
- Add test coverage for Celery tasks across modules
- Reorganize schedule view tests for better maintainability
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix missing StaffPermissions import in Staff.tsx
- Make Invite Staff modal wider (max-w-2xl) and scrollable
- Reorganize help page content to match sidebar menu order:
- Move Staff section before Customers
- Move Contracts section before Time Blocks
- Update TOC to match new navigation structure
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add new Analytics section at top with Dashboard and Payments
- Reorder Manage section: Scheduler, Resources, Staff, Customers,
Media Gallery, Contracts, Time Blocks
- Remove Money section (Payments moved to Analytics)
- Keep staff-only items (My Schedule, My Availability) in separate section
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move rarely-used setup items from main sidebar to Settings to keep
daily-use features prominent:
- Services → Settings > Business section
- Locations → Settings > Business section
- Site Builder → Settings > Branding section
Settings sidebar changes:
- Convert static sections to accordion (one open at a time)
- Auto-expand section based on current URL
- Preserve all permission checks for moved items
Add redirects from old URLs to new locations for backwards compatibility.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The demo functionality is now embedded directly in the help documentation
(HelpScheduler and HelpServices pages).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Service Addons:
- Add ServiceAddon model with optional resource assignment
- Create AddonSelection component for booking flow
- Add ServiceAddonManager for service configuration
- Include addon API endpoints and serializers
Manual Scheduling:
- Add requires_manual_scheduling and capture_preferred_time to Service model
- Add preferred_datetime and preferred_time_notes to Event model
- Create ManualSchedulingRequest component for booking callback flow
- Auto-open pending sidebar when requests exist or arrive via websocket
- Show preferred times on pending items with detail modal popup
- Add interactive UnscheduledBookingDemo component for help docs
Scheduler Improvements:
- Consolidate Create/EditAppointmentModal into single AppointmentModal
- Update pending sidebar to show preferred schedule info
- Add modal for pending request details with Schedule Now action
Documentation:
- Add Manual Scheduling section to HelpScheduler with interactive demo
- Add Manual Scheduling section to HelpServices with interactive demo
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add ImagePickerField to all site builder components with image URLs:
- Marketing: Hero, SplitContent, LogoCloud, GalleryGrid, Testimonials,
ContentBlocks, Header, Footer
- Email: EmailImage, EmailHeader
- Fix media gallery issues:
- Change API endpoint from /media/ to /media-files/ to avoid URL conflict
- Fix album file_count annotation conflict with model property
- Fix image URLs to use absolute paths for cross-domain access
- Add clipboard fallback for non-HTTPS copy URL
- Show permission slugs in plan feature editor
- Fix branding settings access for tenants with custom_branding feature
- Fix EntitlementService method call in StorageQuotaService
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Stripe Notifications:
- Add periodic task to check Stripe Connect accounts for requirements
- Create in-app notifications for business owners when action needed
- Add management command to setup Stripe periodic tasks
- Display Stripe notifications with credit card icon in notification bell
- Navigate to payments page when Stripe notification clicked
Messaging Improvements:
- Add "Everyone" option to broadcast message recipients
- Allow sending messages to yourself (remove self-exclusion)
- Fix broadcast message ID not returned after creation
- Add real-time websocket support for broadcast notifications
- Show toast when broadcast message received via websocket
UI Fixes:
- Remove "View all" button from notifications (no page exists)
- Add StripeNotificationBanner component for Connect alerts
- Connect useUserNotifications hook in TopBar for app-wide websocket
Code Cleanup:
- Remove legacy automations app and plugin system
- Remove safe_scripting module (moved to Activepieces)
- Add migration to remove plugin-related models
- Various test improvements and coverage additions
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add track-run action to ActivePieces smoothschedule piece
- Add webhook endpoint to receive run tracking from automations
- Update quota service to increment automation_runs_used count
- Add Celery task for async run tracking
- Update default flows to include track-run step
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add max_automation_runs to QUOTA_CONFIG in QuotaService
- Add runs_this_month and runs_month_started fields to TenantDefaultFlow
- Add increment_run_count() method for tracking flow executions
- Add Bot icon for automation quotas in frontend QuotaSettings
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Compare both id AND type when determining if an item is selected,
since plans and add-ons can have the same ID from different tables.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Consolidates dedicated support into priority_support as they
serve the same purpose. Also ran billing_seed_catalog to clean
up orphaned features in both environments.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Rewrite HelpAutomations.tsx and HelpAutomationDocs.tsx for Activepieces
- Update automations section in HelpComprehensive.tsx
- Add Automations link to HelpGuide.tsx
- Fix default flow publishing: remove immediate enable call that caused 409 conflict
- LOCK_AND_PUBLISH triggers async enable, no need for separate status update
- Add 2.5s delay before iframe refresh after restore to allow async processing
- Show loading spinner during delay for better UX
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When masquerading as a platform staff member, the orange banner now
appears at the top allowing the user to stop masquerading.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Changed platform.masquerade to platform.masquerade.label since the
translation key is now a nested object with multiple properties.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implements a complete email client for platform staff members:
Backend:
- Add routing_mode field to PlatformEmailAddress (PLATFORM/STAFF)
- Create staff_email app with models for folders, emails, attachments, labels
- IMAP service for fetching emails with folder mapping
- SMTP service for sending emails with attachment support
- Celery tasks for periodic sync and full sync operations
- WebSocket consumer for real-time notifications
- Comprehensive API viewsets with filtering and actions
Frontend:
- Thunderbird-style three-pane email interface
- Multi-account support with drag-and-drop ordering
- Email composer with rich text editor
- Email viewer with thread support
- Real-time WebSocket updates for new emails and sync status
- 94 unit tests covering models, serializers, views, services, and consumers
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add "Restore Defaults" dropdown to Automations page with confirmation
- Create flows in "Defaults" folder for organization
- Pre-populate trigger sample data when creating/restoring flows
- Auto-publish flows (lock and enable) after creation
- Fix email template context variables to match template tags
- Fix dark mode logo switching in Activepieces iframe
- Add iframe refresh on flow restore
- Auto-populate business context (name, email, phone, address) in emails
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Features:
- Auto-provision 5 default email flows for each new tenant:
- Appointment Confirmation (on event created)
- Appointment Reminder (X hours before, per service settings)
- Thank You Email (on final payment)
- Deposit Payment Confirmation
- Final Payment Confirmation
- New SmoothSchedule piece triggers:
- payment_received: Polls for new payments (deposit/final)
- upcoming_events: Polls for events starting within X hours
- New SmoothSchedule piece action:
- list_customers: List customers with search, pagination
- Backend APIs:
- GET /api/v1/payments/ for payment trigger polling
- GET /api/v1/events/upcoming/ for reminder trigger
- Restore functionality:
- GET /api/activepieces/default-flows/ to list default flows
- POST /api/activepieces/default-flows/{type}/restore/ to restore one
- POST /api/activepieces/default-flows/restore-all/ to restore all
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use COMPOSE_PARALLEL_LIMIT env var instead of --parallel flag
- Fix SKIP_AP_BUILD variable passing in heredoc
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Skip activepieces rebuild when using --deploy-ap (already pre-built)
- Use --parallel 1 for builds to reduce memory usage
- Pass SKIP_AP_BUILD flag to remote deployment script
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- SmoothSchedule: Use DigitalOcean Spaces URL for logo
- Python: Use icon-only version from SVGRepo
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update Python piece logo URL to use official python.org logo
- Update Ruby piece logo URL to use official ruby-lang.org logo
- Fix Verdaccio config to allow authenticated publish ($all instead of $anonymous)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove piece_metadata inserts from SQL script (pieces are auto-discovered
from filesystem as OFFICIAL, no need for duplicate CUSTOM entries)
- SQL now only sets pinnedPieces and cleans up any existing duplicates
- Fix SmoothSchedule logo URL to use production URL instead of lvh.me
- Fix deploy.sh to read correct POSTGRES_USER from env file
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Deployment improvements:
- Add template env files (.envs.example/) for documentation
- Create init-production.sh for one-time server setup
- Create build-activepieces.sh for building/deploying AP image
- Update deploy.sh with --deploy-ap flag
- Make custom-pieces-metadata.sql idempotent
- Update DEPLOYMENT.md with comprehensive instructions
Frontend:
- Redirect logged-in business owners from root domain to tenant dashboard
- Redirect logged-in users from /login to /dashboard on their tenant
- Log out customers on wrong subdomain instead of redirecting
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The lockfile can have minor changes between environments, so using
--frozen-lockfile was causing build failures.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The packages folder was causing Activepieces to auto-detect pieces and try
to build them with NX, which fails in production since the NX workspace
files are not present. The pre-built pieces in dist/packages/pieces/ are
sufficient for production.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Instead of redirecting business users to their business subdomain when
they access the platform subdomain, clear their session and show the
platform login page. This is cleaner when masquerading changes tokens
to a tenant user - they can simply log back in as a platform user.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When a business user (owner, staff, resource) ended up on the platform
subdomain (e.g., via stale tokens or direct URL access), they would fall
through to business routes and see the PublicPage ("Schedule Your Appointment")
instead of being redirected to their proper business subdomain.
Added redirect rule for business users on platform subdomain to redirect
them to their business subdomain, matching the existing behavior for
customers on platform subdomain.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Activepieces service to docker-compose.production.yml
- Add traefik route for automations.smoothschedule.com
- Configure activepieces service with custom fork build
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add event-status-changed trigger for SmoothSchedule Activepieces piece
- Add comprehensive test coverage for payments, tickets, messaging, mobile
- Add test coverage for core services, signals, consumers, and views
- Improve Activepieces UI: templates, billing hooks, project hooks
- Update marketing automation showcase and workflow visual components
- Add public API endpoints for availability
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Python code execution piece with subprocess-based runner
- Add Ruby code execution piece with subprocess-based runner
- Fix template loading: fetch individual templates from cloud for community edition
- Add piece name aliasing for renamed pieces (piece-text-ai → piece-ai, etc.)
- Add dev pieces caching to avoid disk reads on every request (60s TTL)
- Add Python and Ruby logos to Django static files
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Activepieces fork with SmoothSchedule custom piece
- Create integrations app with Activepieces service layer
- Add embed token endpoint for iframe integration
- Create Automations page with embedded workflow builder
- Add sidebar visibility fix for embed mode
- Add list inactive customers endpoint to Public API
- Include SmoothSchedule triggers: event created/updated/cancelled
- Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Renamed "Full Access Staff" to "Manager"
- Renamed "Front Desk" to "Support Staff"
- Renamed "Limited Staff" to "Staff"
- Updated permissions: Support Staff now has access to messages and payments
- Updated all references in code, tests, help docs, and translations
- Added migration 0016 to rename existing roles in database
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use settings.DEBUG to detect production vs local environment
- Production: demo.smoothschedule.com (https)
- Local: demo.lvh.me:5173 (http)
- Update existing domain if it doesn't match expected environment
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove WIP badge from staff sidebar navigation
- Make action buttons consistent between Customers and Staff pages
- Edit button: icon + text with gray border
- Masquerade button: icon + text with indigo border
- Verify email button: icon-only with colored border (green/amber)
- Add sortable columns to Staff list (name and role)
- Include migrations for tenant manager role removal
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add translations for all dashboard widgets (de, es, fr)
- Add navigation menu translations for all languages
- Create useDateFnsLocale hook for localized date formatting
- Add translate="no" to prevent browser auto-translation
- Update dashboard components to use translation keys
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds comprehensive translations for tenant API documentation in English,
German, Spanish, and French. Includes ~312 translation keys per language
covering API Overview, Appointments, Services, Resources, Customers,
and Webhooks API documentation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create 6 new tenant API documentation pages:
- HelpApiOverview: Authentication, scopes, rate limits, errors
- HelpApiAppointments: CRUD operations for appointments
- HelpApiServices: Read-only service catalog access
- HelpApiResources: Staff, rooms, equipment endpoints
- HelpApiCustomers: Customer management endpoints
- HelpApiWebhooks: Real-time event subscriptions
- Create 6 new settings help pages for granular documentation
- Update HelpComprehensive with API section linking to new docs
- Update platform HelpApiDocs with comprehensive endpoint coverage
- Fix non-clickable /api/v1/docs/ links (now opens in new tab)
- Add routes for all new help pages in App.tsx
- Update FloatingHelpButton with new help page mappings
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add HelpSiteBuilder.tsx with comprehensive documentation for the
drag-and-drop page editor (components, publishing, settings)
- Fix FloatingHelpButton to use /dashboard/help/* paths on tenant sites
- Update HelpComprehensive and HelpAutomations to rename plugins to automations
- Add site-crawler utility with cross-subdomain redirect detection
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add sidebar text color picker to Branding Settings page
- Implement auto-calculated complementary text colors based on brand color luminance
- Dark themes get light tinted text, light themes get dark tinted text
- Add navigation preview showing text on gradient background
- Support 10 new lighter color palettes (Soft Mint, Lavender, Peach, etc.)
- Add CSS utility classes for brand-text with opacity support
- Update sidebar and navigation components to use dynamic text colors
- Add sidebar_text_color field to Tenant model with migration
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Rename white_label feature to remove_branding across frontend/backend
- Update billing catalog, plan features, and permission checks
- Add dark mode support to Recharts tooltips with useDarkMode hook
- Create embeddable booking widget with EmbedBooking page
- Add EmbedWidgetSettings for generating embed code
- Fix Appearance settings page permission check
- Update test files for new feature naming
- Add notes field to User model
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update billing catalog feature codes: can_use_plugins → can_use_automations, can_create_plugins → can_create_automations
- Update all backend permission checks to use new feature codes
- Update API views to return automations permissions to frontend
- Update frontend types and hooks to use automations terminology
- Move Tasks to Extend section in Sidebar alongside Automations
- Update all related tests
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>