This is a demonstration application built to showcase Appmixer integration capabilities and workflow automation features.
- Not Production-Ready: This application is intended for demonstration and learning purposes only
- Security Considerations: Before deploying to production, implement proper security hardening including:
- Secure authentication and authorization mechanisms
- Rate limiting and API protection
- Input validation and sanitization
- Environment-specific security configurations
- Demo Credentials: The
.env.examplefile contains placeholder values - replace with your own credentials - Sample Data: Includes demo seed data for testing purposes
- API Authentication: Demo API uses simple key-based auth - implement OAuth 2.0 or JWT for production
This project is licensed under the MIT License - see the LICENSE file for details.
This is a modern customer support ticket management system built to demonstrate a complete support workflow. The application provides a comprehensive dashboard for support agents to manage customer tickets, track conversations, and integrate with external services through Appmixer workflows.
- Frontend: React 18 with TypeScript
- Routing: React Router 6 (SPA mode)
- Styling: TailwindCSS 3 with Radix UI components
- Database: Supabase (PostgreSQL)
- Authentication: Supabase Auth
- Build Tool: Vite
- Testing: Vitest
- Integration Platform: Appmixer for workflow automation
customers (
id UUID PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL,
avatar TEXT,
created_at TIMESTAMP,
updated_at TIMESTAMP
)tickets (
id TEXT PRIMARY KEY, -- Custom format: TICK-001, TICK-002, etc.
title TEXT NOT NULL,
description TEXT NOT NULL,
priority TEXT CHECK (priority IN ('low', 'medium', 'high', 'urgent')),
status TEXT CHECK (status IN ('new', 'in-progress', 'waiting-customer', 'resolved')),
customer_id UUID REFERENCES customers(id),
assignee TEXT, -- Support agent name
created_at TIMESTAMP,
updated_at TIMESTAMP,
tags TEXT[] -- Array of tags for categorization
)ticket_comments (
id UUID PRIMARY KEY,
ticket_id TEXT REFERENCES tickets(id),
author_id TEXT NOT NULL, -- User ID from authentication
author_name TEXT NOT NULL, -- Display name for the comment
content TEXT NOT NULL,
is_internal BOOLEAN DEFAULT FALSE, -- Internal notes vs public replies
created_at TIMESTAMP,
updated_at TIMESTAMP
)- Kanban Board: Visual ticket management with drag-and-drop between status columns (New, In Progress, Waiting for Customer, Resolved)
- Dashboard Statistics: Real-time metrics showing ticket counts, response times, and customer satisfaction
- Search & Filtering: Quick search and filter tickets by status, priority, assignee, and tags
- Ticket Creation: Form-based ticket creation with customer lookup/creation
- Ticket Details Modal: Comprehensive view with:
- Inline editing of title and description
- Status, priority, and assignee management
- Tag system for categorization
- Customer information panel
- Quick actions (set reminder, escalate, close)
- Real-time Comments: Full conversation thread for each ticket
- Internal Notes: Private notes visible only to support agents (orange styling)
- Public Replies: Customer-facing responses (blue styling)
- User Highlighting: Current user's comments highlighted with special background
- Smart Timestamps: Relative time display ("2 hours ago", "Just now")
- Reply Toggle: Switch between public reply and internal note modes
- Supabase Authentication: Email/password and Google OAuth support
- User Context: Comments attributed to authenticated users
- Role-based Access: Different UI elements based on user permissions
- Automation Hub: Single unified interface for all automation needs, replacing separate Integration Templates and Workflow Automation sections:
- Workflows Tab: Manage all automation flows with three sections:
- Active: Running integrations created from pre-built templates
- Pre-built: Ready-to-use integration templates with configuration wizards
- Custom: User-created workflows with the visual designer
- Logs Tab: View execution logs with flow-specific filtering and real-time insights
- Accounts Tab: Manage connected service accounts and OAuth authorizations
- Workflows Tab: Manage all automation flows with three sections:
- Visual Flow Designer: Embedded Appmixer designer for creating and editing custom workflows
- Flow Management: Start, stop, clone, edit, and delete workflows with dropdown actions
- Tag System: Organize workflows with custom tags and category filtering
- Real-time Logs: Click "See logs" on any workflow to instantly view filtered execution logs
- Search & Filtering: Full-text search, category filters, active-only filter, and grid/list view modes
- External Service Connections: Connect with popular tools like Slack, Gmail, webhooks, and more
- Responsive Design: Works on desktop, tablet, and mobile devices
- Dark/Light Mode Support: Theme switching capability
- Loading States: Proper loading indicators throughout the app
- Error Handling: Graceful error handling with user-friendly messages
- Optimistic Updates: Immediate UI updates for better perceived performance
The codebase follows DRY (Don't Repeat Yourself) principles with:
- Reusable Hooks: Custom hooks for async operations, form management, and editable fields
- Factory Patterns: Appmixer component factories eliminate 230+ lines of duplicated code
- Centralized Constants: Single source of truth for ticket statuses, priorities, and configurations
- Component Composition: Reusable UI components (badges, modals, loading states, empty states)
- Type Safety: Full TypeScript coverage with comprehensive type definitions
- Code Reduction: ~550+ lines eliminated through refactoring while maintaining functionality
src/
βββ components/
β βββ dashboard/ # Kanban board and stats components
β β βββ KanbanBoard.tsx # Drag-and-drop ticket board
β β βββ TicketCard.tsx # Individual ticket cards
β β βββ DashboardStats.tsx # Statistics display
β βββ modals/ # Modal dialogs
β β βββ TicketDetailsModal.tsx # Full ticket details and conversation
β β βββ NewWorkflowModal.tsx # Create new workflow
β β βββ TagManagementModal.tsx # Manage workflow tags
β β βββ WizardModal.tsx # Integration configuration wizard
β βββ sections/ # Major application sections
β β βββ AutomationHubSection.tsx # Workflows, logs, and accounts management
β β βββ IntegrationsSection.tsx # Integration templates browser
β β βββ WorkflowsSection.tsx # Legacy workflow section
β βββ ui/ # Reusable UI component library (Radix UI + Tailwind)
β β βββ status-badge.tsx # Ticket status badges
β β βββ priority-badge.tsx # Priority level badges
β β βββ modal-wrapper.tsx # Reusable modal wrapper
β β βββ loading-spinner.tsx # Loading state components
β β βββ empty-state.tsx # Empty list state component
β βββ FlowCard.tsx # Workflow card with actions menu
β βββ FlowsGrid.tsx # Grid/list layout for workflows
β βββ LogsView.tsx # Execution logs viewer with filtering
β βββ DesignerView.tsx # Embedded visual workflow designer
β βββ AccountsView.tsx # Connected accounts management
β βββ NewTicketForm.tsx # Ticket creation form
βββ contexts/ # React context providers
β βββ AuthContext.tsx # Authentication state management
β βββ AppmixerContextSimple.tsx # Appmixer SDK initialization
β βββ DemoModeContext.tsx # Demo mode state
βββ hooks/ # Custom React hooks
β βββ use-appmixer-api.ts # Appmixer API operations
β βββ use-insights-logs.ts # Logs widget integration
β βββ use-async-operation.ts # Async state management with loading/error handling
β βββ use-editable-field.ts # Edit mode state management
β βββ use-form-field.ts # Form field state with validation
β βββ use-confirm-dialog.tsx # Reusable confirmation dialogs
βββ lib/ # Utility libraries
β βββ database.ts # Database operations and API calls
β βββ supabase.ts # Supabase client configuration
β βββ appmixer-api-client.ts # Appmixer API client
β βββ appmixer-api-types.ts # TypeScript types for Appmixer
β βββ constants.ts # Application-wide constants (statuses, priorities, etc.)
β βββ utils.ts # General utility functions
βββ pages/ # Route components
β βββ Index.tsx # Main dashboard page
β βββ Login.tsx # Authentication page
β βββ NotFound.tsx # 404 page
βββ types/ # TypeScript type definitions
β βββ support.ts # Support ticket types
βββ main.tsx # Application entry point
- Node.js 18+
- npm or yarn
- Supabase account and project
- Clone the repository
- Install dependencies:
npm install - Set up environment variables (see
.env.example) - Run database migrations:
supabase db push - Seed the database:
supabase db reset
npm run dev- Start development server (port 5173 by default)npm run dev-server- Start mock API server for development (port 3001)npm run build- Build for productionnpm run typecheck- Run TypeScript type checkingnpm test- Run unit testsnpm run format.fix- Format code with Prettier
Create a .env file based on .env.example:
# Supabase Configuration
VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
# Appmixer Configuration
VITE_APPMIXER_BASE_URL=your_appmixer_base_url
VITE_APPMIXER_API_KEY=your_appmixer_api_key
VITE_APPMIXER_VIRTUAL_USER_TOKEN=your_virtual_user_tokenThe application uses Supabase for data persistence:
- Migrations: Located in
supabase/migrations/ - Seed Data: Sample data in
supabase/seed.sqlandsupabase/demo-seed-data.sql - Real-time: Automatic updates when data changes
- Mock API: Development server in
dev-server.jsfor testing without Supabase
The application includes REST API endpoints in the api/ directory for integration with Appmixer components:
api/tickets/- Ticket CRUD operationsapi/customers/- Customer managementapi/comments/- Comment operationsapi/tags/- Tag management and statistics
These endpoints are used by the custom Appmixer components and can be called directly for external integrations.
The project includes a custom Appmixer module (yoursaas) with components for the support system, located in src/appmixer/yoursaas/.
Architecture Note: The Appmixer components have been refactored to use factory patterns for code reuse and consistency:
- triggerBase.js - Factory for creating trigger components (NewTicket, NewCustomer, etc.)
- listHandler.js - Factory for list/fetch operations (ListTickets, ListCustomers, etc.)
- crudHandler.js - Factory for CRUD operations (Create, Get, Update, Delete)
- commons.js - Shared utilities for authentication, transformations, and API calls
This architecture reduces code duplication by ~230 lines while ensuring consistent behavior across all components.
CreateTicket- Create new support ticketsGetTicket- Retrieve ticket details by IDListTickets- List all tickets with filteringUpdateTicket- Update ticket propertiesSearchTickets- Full-text search across ticketsGetCustomerTickets- Get tickets for a specific customerGetTicketStats- Calculate ticket metrics and statisticsNewTicket- Webhook trigger for new ticket eventsTicketStatusChanged- Webhook trigger for status changesTicketPriorityChanged- Webhook trigger for priority changes
CreateCustomer- Create new customer recordsGetCustomer- Retrieve customer detailsListCustomers- List all customersUpdateCustomer- Update customer informationNewCustomer- Webhook trigger for new customer events
AddComment- Add comments to ticketsListComments- List comments for a ticketUpdateComment- Update existing commentsDeleteComment- Remove commentsNewComment- Webhook trigger for new comment events
CreateTag- Create new tagsListTags- List all available tagsGetTagStats- Get statistics for tagsUpdateTag- Update tag propertiesDeleteTag- Remove tagsAddTagsToTicket- Associate tags with ticketsGetTicketTags- Get tags for a specific ticketRemoveTagFromTicket- Remove tag associationsGetTicketsByTags- Filter tickets by tagsGetPopularTags- Get most frequently used tagsNewTag- Webhook trigger for new tag eventsTicketTagged- Webhook trigger for ticket tagging events
These components enable building automation workflows that interact with the support system, such as:
- Auto-assign tickets based on keywords or priority
- Send Slack notifications when high-priority tickets are created
- Sync customer data with external CRM systems
- Generate reports on ticket resolution times
- Escalate tickets that haven't been updated in X hours
Tickets flow through four main statuses with visual indicators:
- New (Blue) - Freshly created tickets awaiting initial response
- In Progress (Yellow) - Tickets being actively worked on
- Waiting for Customer (Purple) - Awaiting customer response or action
- Resolved (Green) - Completed tickets
Four priority levels with color coding:
- Low (Blue) - Non-urgent feature requests or minor issues
- Medium (Yellow) - Standard support requests
- High (Orange) - Important issues affecting user experience
- Urgent (Red) - Critical issues requiring immediate attention
- Chronological display of all ticket interactions
- Support agent responses and customer messages
- Internal team notes for coordination
- Visual distinction between message types
- User identification and timestamp tracking
The Automation Hub is the central control center for all workflow automation:
- Three-Tab Interface:
- Workflows: Browse and manage Pre-built templates, Active integrations, and Custom workflows
- Logs: Real-time execution logs with flow-specific filtering via Appmixer InsightsLogs widget
- Accounts: Manage OAuth connections and API credentials for external services
- Flow Types:
- Pre-built Templates (
integration-template): Ready-to-use integrations with wizards - Active Integrations (
integration-instance): Running instances created from templates - Custom Workflows (
automation): User-created flows with visual designer
- Pre-built Templates (
- Flow Actions: Start/stop, clone, edit in designer, manage tags, view logs, delete
- Tag-based Organization: Categorize flows with custom tags and filter by category
- Search & Filtering: Full-text search, active-only filter, grid/list view modes
- Embedded Appmixer flow designer with drag-and-drop component placement
- Connect services with pre-built connectors (Slack, Gmail, webhooks, etc.)
- Configure component properties and mappings
- Real-time validation and error checking
- Flow-Specific Logs: Click "See logs" on any workflow card to view filtered execution logs
- InsightsLogs Widget: Real-time log streaming with component-level details
- Clear Filter: Easy navigation back to all logs view
- Log Context: Displays flow name and filtering status
- Wizard-based Configuration: Step-by-step setup for pre-built integrations
- OAuth Management: Secure authentication flow for external services
- API Integration: RESTful API for external system integration
- Real-time Updates: Automatic UI refresh when flows start/stop
This application demonstrates a production-ready customer support system with modern development practices, comprehensive Appmixer integration, workflow automation capabilities, and scalable architecture patterns.