Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
23 KiB
Alga PSA - UI Navigation Structure
This document provides a comprehensive map of the Alga PSA application's UI structure to help automated tools understand how to navigate between screens, tabs, and components. Each entry includes the file paths where components are defined and key automation IDs.
Overall Application Structure
DefaultLayout (server/src/components/layout/DefaultLayout.tsx)
├── MspSchedulingProvider (outermost wrapper)
│ └── DrawerProvider
│ └── ActivityDrawerProvider
│ ├── SidebarWithFeatureFlags
│ │ └── Sidebar (server/src/components/layout/Sidebar.tsx) [id: main-sidebar]
│ ├── Header (server/src/components/layout/Header.tsx)
│ ├── Body (server/src/components/layout/Body.tsx)
│ │ └── Page Content (varies by route)
│ ├── QuickAskOverlay (AI assistant, feature-flagged)
│ └── Drawer (global drawer)
Header Components
- TenantBadge: Shows current tenant name
- QuickCreateMenu: Global quick-create dropdown (tickets, clients, contacts, projects, assets, services, products)
- ThemeToggle: Light/dark/system theme switcher
- NotificationBell: Notification center
- JobActivityIndicator: Background job metrics
- User Dropdown: Profile, account, sign out
Sidebar Modes
The sidebar operates in 4 modes (controlled by NavMode type):
| Mode | Description | Sidebar ID |
|---|---|---|
main |
Default navigation (all menu items) | main-sidebar |
settings |
Settings-specific navigation (6 sections, 17 items) | settings-sidebar |
billing |
Billing-specific navigation (4 sections, 11 items) | billing-sidebar |
extensions |
Extensions navigation | extensions-sidebar |
Each mode renders a different sidebar layout with its own set of navigation items.
Navigation Menu Structure
Based on server/src/config/menuConfig.ts:
Main Menu Items
1. Home
- Icon: Home
- Route:
/msp/dashboard - File:
server/src/app/msp/dashboard/page.tsx - Menu ID:
menu-home
2. User Activities ⭐ (DOCUMENTED)
- Route:
/msp/user-activities - File:
server/src/app/msp/user-activities/page.tsx - Menu ID:
menu-user-activities - Component:
UserActivitiesDashboard(server/src/components/user-activities/UserActivitiesDashboard.tsx)
Structure:
UserActivitiesDashboard
├── ViewSwitcher (Cards/Table toggle)
├── Cards View:
│ ├── ScheduleSection (server/src/components/user-activities/ScheduleSection.tsx)
│ │ ├── Card container with schedule entries
│ │ ├── Filter button [id: schedule-filters-button]
│ │ └── View All button [calls handleViewAllSchedule]
│ ├── TicketsSection (server/src/components/user-activities/TicketsSection.tsx)
│ │ ├── Card container with ticket entries
│ │ ├── Filter button [id: tickets-filters-button]
│ │ └── View All button [calls handleViewAllTickets]
│ ├── ProjectsSection (server/src/components/user-activities/ProjectsSection.tsx)
│ │ ├── Card container with project task entries
│ │ ├── Filter button [id: projects-filters-button]
│ │ └── View All button [calls handleViewAllProjects]
│ └── WorkflowTasksSection (server/src/components/user-activities/WorkflowTasksSection.tsx)
│ ├── Card container with workflow task entries
│ ├── Filter button [id: workflow-tasks-filters-button]
│ └── View All button [calls handleViewAllWorkflowTasks]
└── Table View:
└── ActivitiesDataTableSection (server/src/components/user-activities/ActivitiesDataTableSection.tsx)
├── DataTable with filtering capabilities
├── Filter controls [id: all-activities-table-section]
└── Pagination controls
Key Components and Files:
- Main page:
server/src/app/msp/user-activities/page.tsx - Dashboard:
server/src/components/user-activities/UserActivitiesDashboard.tsx - Schedule section:
server/src/components/user-activities/ScheduleSection.tsx - Tickets section:
server/src/components/user-activities/TicketsSection.tsx - Projects section:
server/src/components/user-activities/ProjectsSection.tsx - Workflow tasks:
server/src/components/user-activities/WorkflowTasksSection.tsx - Table view:
server/src/components/user-activities/ActivitiesDataTableSection.tsx - Activity cards:
server/src/components/user-activities/ActivityCard.tsx
Key Automation IDs:
- View switcher cards/table toggle
schedule-filters-buttontickets-filters-buttonprojects-filters-buttonworkflow-tasks-filters-buttonall-activities-table-section
Navigation Workflow:
- Click "User Activities" in sidebar (
menu-user-activities) - Choose view mode (Cards or Table) using ViewSwitcher
- In Cards view: Each section has filter button and "View All" button
- "View All" buttons switch to Table view with pre-applied filters
- Table view allows comprehensive filtering and data management
3. Tickets ⭐ (DOCUMENTED)
- Route:
/msp/tickets - File:
server/src/app/msp/tickets/page.tsx - Menu ID:
menu-tickets - Component:
TicketingDashboard(server/src/components/tickets/TicketingDashboard.tsx)
Structure:
TicketingDashboard (Main Container)
├── Header Controls
│ ├── Search Input [debounced search with loading state]
│ ├── ClientPicker [id: ticketing-dashboard-company-picker]
│ │ └── Filter by company (All Companies or specific client)
│ ├── Filter Controls
│ │ ├── Status Select [id: ticketing-dashboard-status-select]
│ │ ├── Priority Select [id: ticketing-dashboard-priority-select]
│ │ ├── Board Select [id: ticketing-dashboard-board-select]
│ │ ├── Category Select [id: ticketing-dashboard-category-select]
│ │ ├── Assigned User Select [id: ticketing-dashboard-assigned-user-select]
│ │ └── Date Range Picker [id: ticketing-dashboard-date-range]
│ ├── Action Buttons
│ │ ├── Add Ticket [id: add-ticket-button]
│ │ ├── View Intervals [id: view-intervals-button]
│ │ └── Export Data [id: export-data-button]
│ └── Advanced Filters Toggle
├── DataTable View [id: ticketing-dashboard-tickets-table]
│ ├── Sortable columns (Number, Subject, Company, Status, Priority, etc.)
│ ├── Row Actions per ticket [id: ticket-actions-{ticket_id}]
│ │ ├── View Details
│ │ ├── Edit Ticket
│ │ ├── Change Status
│ │ ├── Assign User
│ │ └── Delete Ticket
│ ├── Pagination Controls
│ └── Row Selection (for bulk operations)
├── Quick Add Form (Modal)
│ └── QuickAddTicket [id: quick-add-ticket-form]
│ ├── Company selection
│ ├── Subject, description, priority
│ ├── Status, board, category
│ └── Assignment options
└── Bulk Operations
├── Select all checkbox
├── Bulk status change
└── Bulk assignment
Individual Ticket Details:
- Route:
/msp/tickets/[id] - File:
server/src/app/msp/tickets/[id]/page.tsx - Component:
TicketDetail(server/src/components/tickets/TicketDetail.tsx)
Ticket Details Structure:
TicketDetail
├── Header
│ ├── BackNav [href: /msp/tickets]
│ ├── Ticket Number and Status
│ └── Action Buttons
│ ├── Edit Ticket [id: edit-ticket-btn]
│ ├── Change Status [id: change-status-btn]
│ └── More Actions Menu
├── CustomTabs (Tab-based navigation)
│ ├── Details Tab
│ │ ├── Ticket Information Form
│ │ │ ├── Subject, Description, Company
│ │ │ ├── Status, Priority, Channel, Category
│ │ │ ├── Assigned User, Contact, Tags
│ │ │ ├── Entered Date, Due Date
│ │ │ └── Billable flag
│ │ └── Save Changes [id: save-ticket-changes-btn]
│ ├── Comments Tab
│ │ └── CommentsSection
│ │ ├── Comments feed (chronological)
│ │ ├── Add Comment form [id: add-comment-form]
│ │ └── Comment actions (Edit/Delete)
│ ├── Time Tracking Tab
│ │ └── TimeEntriesSection
│ │ ├── Time entries table
│ │ ├── Add Time Entry [id: add-time-entry-btn]
│ │ ├── Timer controls
│ │ └── Time summary statistics
│ ├── Documents Tab
│ │ └── TicketDocuments
│ │ ├── Attached documents list
│ │ ├── Upload Document [id: upload-document-btn]
│ │ └── Document management actions
│ ├── History Tab
│ │ └── TicketHistory
│ │ ├── Audit trail of changes
│ │ ├── Status change history
│ │ └── Assignment history
│ └── Related Items Tab
│ ├── Related Tickets
│ ├── Associated Projects
│ └── Linked Assets
Key Components and Files:
- Main page:
server/src/app/msp/tickets/page.tsx - Dashboard container:
server/src/components/tickets/TicketingDashboardContainer.tsx - Main dashboard:
server/src/components/tickets/TicketingDashboard.tsx - Ticket details:
server/src/app/msp/tickets/[id]/page.tsx - Quick add form:
server/src/components/tickets/QuickAddTicket.tsx - Data table: Uses DataTable component with ticket-specific configurations
- Client picker: Shared
packages/ui/src/components/ClientPicker.tsx
Key Automation IDs:
add-ticket-button- Create new ticket buttonview-intervals-button- View time intervalsexport-data-button- Export ticket dataticketing-dashboard-company-picker- Company filter dropdownticketing-dashboard-status-select- Status filterticketing-dashboard-priority-select- Priority filterticketing-dashboard-board-select- Board filterticketing-dashboard-category-select- Category filterticketing-dashboard-assigned-user-select- Assigned user filterticketing-dashboard-date-range- Date range pickerticketing-dashboard-tickets-table- Main tickets tableticket-actions-{ticket_id}- Row actions for each ticketquick-add-ticket-form- Quick add ticket modaledit-ticket-btn- Edit ticket button (in details)change-status-btn- Change status buttonsave-ticket-changes-btn- Save changes buttonadd-comment-form- Add comment formadd-time-entry-btn- Add time entry buttonupload-document-btn- Upload document button
Navigation Workflow:
- Click "Tickets" in sidebar (
menu-tickets) - Use search and filter controls to find specific tickets
- Filter by company, status, priority, board, category, assigned user, or date range
- View ticket list in DataTable with sortable columns
- Click ticket rows to view individual ticket details
- In details: Use tabs for different ticket aspects (Details, Comments, Time, Documents, History, Related)
- Create new tickets with "Add Ticket" button or quick add form
- Perform bulk operations using row selection
- Use row actions menu for individual ticket operations
- Export data or view time intervals using header action buttons
4. Surveys
- Icon: Star
- Route:
/msp/surveys/dashboard - Menu ID:
menu-surveys
5. Projects (Submenu)
- Route:
/msp/projects - File:
server/src/app/msp/projects/page.tsx - Menu ID:
menu-projects - Submenus:
- All Projects:
/msp/projects - Templates:
/msp/projects/templates
- All Projects:
6. Clients ⭐ (DOCUMENTED)
- Route:
/msp/clients - File:
server/src/app/msp/clients/page.tsx - Menu ID:
menu-clients - Component:
Companies(server/src/components/companies/Companies.tsx)
Structure:
Companies (Main Container)
├── Header Controls
│ ├── Search Input [placeholder: "Search clients"]
│ ├── ClientPicker [id: company-picker]
│ │ ├── Filter controls (Active/Inactive/All)
│ │ └── Client Type filter (Company/Individual/All)
│ ├── Action Buttons
│ │ ├── Create Client [id: create-client-btn]
│ │ └── Actions Menu [id: actions-menu-btn]
│ │ ├── Upload CSV
│ │ └── Download CSV
│ └── ViewSwitcher (Grid/Table toggle)
├── Selection Controls
│ ├── Select All checkbox
│ ├── Selection count display
│ └── Delete Selected [id: delete-selected-btn]
├── View Mode Content
│ ├── Grid View: CompaniesGrid (server/src/components/companies/CompaniesGrid.tsx)
│ │ └── CompanyGridCard components [id: company-card-{company_id}]
│ │ ├── Company checkbox [id: company-checkbox-{company_id}]
│ │ ├── Company logo/avatar
│ │ ├── Company name and details
│ │ ├── Edit button [id: company-edit-button-{company_id}]
│ │ ├── Delete button [id: company-delete-button-{company_id}]
│ │ └── Website link [id: company-url-link-{company_id}]
│ └── Table View: CompaniesList (server/src/components/companies/CompaniesList.tsx)
│ ├── DataTable with sortable columns
│ ├── Pagination [id: companies-pagination]
│ └── Row actions (Edit/Delete)
└── Dialogs & Modals
├── QuickAddCompany [id: quick-add-company-form]
├── CompaniesImportDialog (CSV Import)
├── Multi-delete confirmation [id: multi-delete-confirmation-dialog]
└── Single delete confirmation [id: single-delete-confirmation-dialog]
Individual Company Details:
- Route:
/msp/clients/[id] - File:
server/src/app/msp/clients/[id]/page.tsx - Component:
CompanyDetails(server/src/components/companies/CompanyDetails.tsx)
Company Details Structure:
CompanyDetails
├── Header
│ ├── BackNav [href: /msp/clients]
│ ├── EntityImageUpload (Logo management)
│ └── Company Name heading
└── CustomTabs (Tab-based navigation)
├── Details Tab
│ ├── Company Information Form (Grid layout)
│ │ ├── Client Name, Phone, Industry, Email
│ │ ├── Account Manager (UserPicker)
│ │ ├── Website, Company Size, Annual Revenue
│ │ ├── Locations Management [id: locations-button]
│ │ └── Status Switch (Active/Inactive)
│ └── Action Buttons
│ ├── Save Changes [id: save-company-changes-btn]
│ └── Add Ticket [id: add-ticket-btn]
├── Tickets Tab
│ └── CompanyTickets (server/src/components/companies/CompanyTickets.tsx)
│ ├── Filter controls [id: company-tickets-status-select]
│ ├── Priority filter [id: company-tickets-priority-select]
│ └── Tickets DataTable
├── Billing Tab
│ └── BillingConfiguration (server/src/components/companies/BillingConfiguration.tsx)
│ ├── Contract Lines management
│ ├── Tax settings
│ └── Payment configuration
├── Billing Dashboard Tab
│ └── ClientContractLineDashboard
│ ├── Invoice summaries
│ ├── Payment history
│ └── Billing analytics
├── Contacts Tab
│ └── CompanyContactsList
│ ├── Associated contacts table
│ └── Contact management actions
├── Documents Tab
│ └── Documents component
│ ├── Company-specific documents
│ └── File upload/management
├── Tax Settings Tab
│ └── TaxSettingsForm
│ ├── Tax rate configuration
│ └── Tax exemption settings
├── Additional Info Tab
│ ├── Extended company fields
│ │ ├── Tax ID, Payment Terms
│ │ ├── Parent Company, Timezone
│ │ └── Last Contact Date
│ └── Save Button [id: save-additional-info-btn]
├── Notes Tab
│ ├── Legacy text notes display
│ ├── Rich text editor (BlockNote)
│ └── Save Note [id: {id}-save-note-btn]
└── Interactions Tab
└── InteractionsFeed
├── Interaction history
└── Add new interactions
Key Components and Files:
- Main page:
server/src/app/msp/clients/page.tsx - Main container:
server/src/components/companies/Companies.tsx - Grid view:
server/src/components/companies/CompaniesGrid.tsx - Table view:
server/src/components/companies/CompaniesList.tsx - Company details:
server/src/components/companies/CompanyDetails.tsx - Quick add form:
server/src/components/companies/QuickAddCompany.tsx - Client picker:
packages/ui/src/components/ClientPicker.tsx - Import dialog:
server/src/components/companies/CompaniesImportDialog.tsx
Key Automation IDs:
create-client-btn- Create new client buttonactions-menu-btn- Actions dropdown menudelete-selected-btn- Delete selected companiescompany-picker- Company selection dropdowncompany-card-{company_id}- Individual company cardscompany-checkbox-{company_id}- Selection checkboxesquick-add-company-form- Quick add formcompanies-pagination- Pagination controlssave-company-changes-btn- Save changes in detailslocations-button- Manage locationscompany-tickets-status-select- Ticket status filter
Navigation Workflow:
- Click "Clients" in sidebar (
menu-clients) - Use search, filters, and company picker to find companies
- Toggle between Grid and Table views using ViewSwitcher
- Click company cards or table rows to view details
- In details: Use tabs for different company aspects
- Create new companies with "Create Client" button
- Bulk operations with selection checkboxes
- Import/Export via Actions menu
7. Contacts
- Route:
/msp/contacts - File:
server/src/app/msp/contacts/page.tsx - Menu ID:
menu-contacts
8. Documents
- Route:
/msp/documents - File:
server/src/app/msp/documents/page.tsx - Menu ID:
menu-documents
9. Assets
- Icon: Monitor
- Route:
/msp/assets - Menu ID:
menu-assets
10. Time Management (Submenu)
- Menu ID:
menu-time-management - Submenus:
- Time Entry:
/msp/time-entry(server/src/app/msp/time-entry/page.tsx) - Approvals:
/msp/time-sheet-approvals(server/src/app/msp/time-sheet-approvals/page.tsx)
- Time Entry:
11. Billing
- Menu ID:
menu-billing - Main Route:
/msp/billing?tab=client-contracts(server/src/app/msp/billing/page.tsx) - Sidebar Mode: Clicking Billing switches the sidebar to
billingmode (billing-sidebar)
Billing uses its own sidebar navigation with 4 sections:
Contracts:
- Contract Templates
- Client Contracts
- Contract Line Presets
Invoicing:
- Invoicing
- Invoice Templates
- Billing Cycles
Pricing:
- Service Catalog
- Products
- Tax Rates
Tracking & Reports:
- Usage Tracking
- Reports
- Accounting Exports
12. Schedule
- Route:
/msp/schedule - File:
server/src/app/msp/schedule/page.tsx - Menu ID:
menu-schedule
13. Technician Dispatch
- Route:
/msp/technician-dispatch - File:
server/src/app/msp/technician-dispatch/page.tsx - Menu ID:
menu-technician-dispatch
14. Automation Hub
- Menu ID:
menu-automation-hub - Main Route:
/msp/workflows - Tab-based Navigation (query parameter:
?tab=<tab-name>):- Workflows:
?tab=workflows - Runs:
?tab=runs - Events:
?tab=events - Dead Letter:
?tab=dead-letter
- Workflows:
15. System Monitor (Submenu)
- Menu ID:
menu-system - Submenus:
- Jobs:
/msp/jobs(server/src/app/msp/jobs/page.tsx) - Email Logs:
/msp/email-logs(feature-flagged)
- Jobs:
16. Extensions
- Icon: Puzzle
- Route:
/msp/extensions - Menu ID:
menu-extensions
Bottom Menu Items
Settings (Submenu)
- Menu ID:
bottom-menu-settings - Sidebar Mode: Clicking Settings switches the sidebar to
settingsmode (settings-sidebar) - Submenus:
- General:
/msp/settings(server/src/app/msp/settings/page.tsx) - Profile:
/msp/profile(server/src/app/msp/profile/page.tsx) - Security:
/msp/security-settings(server/src/app/msp/security-settings/page.tsx)
- General:
Support
- Menu ID:
bottom-menu-support - External URL:
https://www.nineminds.com/support
Common UI Patterns
Layout Components
- Sidebar: Always present, collapsible, contains main navigation
- Header: Contains user menu, notifications, theme toggle
- Drawer: Modal-like overlay for forms and detailed views
- RightSidebar: Collapsible panel for additional tools/chat
Navigation Patterns
- Menu Navigation: Click sidebar menu items
- Tab Navigation: Within pages like Billing and Automation Hub
- View Switching: Cards vs Table views (User Activities)
- Filter Navigation: Filter buttons lead to focused views
- Drawer Navigation: Modal overlays for detailed forms
Common Component Patterns
- DataTable: Used throughout for data lists with filtering
- Card: Used for summarized views and dashboards
- Button: Primary actions, often with automation IDs
- Dialog/Modal: For forms and confirmations
- ViewSwitcher: Toggle between different view modes
Automation ID Naming Conventions
Based on the UI coding standards, automation IDs follow these patterns:
- Menu items:
menu-{name}or{name}-menu - Buttons:
{action}-{object}-button(e.g.,add-ticket-button) - Dialogs:
{purpose}-{object}-dialog - Form fields:
{object}-{field}-field - Tables:
{object}-tableor{object}-grid - Sections:
{object}-section
How to Use This Document
- Finding a Screen: Locate the main menu item or submenu
- Understanding Structure: Review the component hierarchy
- Locating Files: Use the provided file paths to examine implementation
- Finding IDs: Look for automation IDs in the documented structure
- Navigation Workflow: Follow the step-by-step navigation instructions
Adding New Screens
When documenting new screens, include:
- Route and main file location
- Component hierarchy with file paths
- Key automation IDs
- Navigation workflow
- Common interaction patterns
Last Updated: Based on codebase analysis as of current date Documented Screens: User Activities, Clients, Tickets (3/16+ screens) Next to Document: Home, Projects, Contacts, Documents, Assets, Surveys, etc.