Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
4.2 KiB
4.2 KiB
Client Portal Projects
Overview
The client portal provides clients with visibility into their projects, phases, and tasks. MSPs have granular control over what information is visible to clients through the Client Portal Visibility configuration.
Client Portal Views
Project List (/client-portal/projects)
- Shows all projects associated with the client's company
- Filter by status: Active, Completed, On Hold
- Displays project name, status, dates, and progress
- Click to access project details
Project Detail View
The project detail page shows:
- Project overview (name, dates, description)
- Progress metrics
- Phases section (if enabled)
- Tasks section with kanban or list view toggle (if enabled)
Task Views
When tasks are visible, clients can switch between two views:
- Kanban View: Tasks organized by status columns within phases
- List View: Hierarchical table showing phases → statuses → tasks
Visibility Configuration
Configuration Locations
| Location | Description |
|---|---|
| Project Details → Client Portal Visibility | Per-project settings |
| Project Templates → Basics step | Template-level defaults |
When a project is created from a template, it inherits the template's visibility configuration.
Phase Settings
| Setting | Description | Default |
|---|---|---|
| Show Phases | Display project phases to clients | Off |
| Show Phase Completion | Show completion percentage per phase | Off |
Task Settings
| Setting | Description | Default |
|---|---|---|
| Show Tasks | Display tasks within phases | Off |
| Visible Task Fields | Select which task fields clients can see | Name, Due Date, Status |
Available Task Fields
| Field | Key | Description |
|---|---|---|
| Task Name | task_name |
Name of the task |
| Due Date | due_date |
Task due date |
| Status | status |
Current task status |
| Assignee | assigned_to |
Who the task is assigned to |
| Estimated Hours | estimated_hours |
Estimated hours for the task |
| Hours Logged | actual_hours |
Actual hours logged |
| Checklist | checklist_progress |
Checklist completion progress |
| Dependencies | dependencies |
Task dependency indicators |
| Document Uploads | document_uploads |
Allow clients to upload documents |
Document Uploads
When document_uploads is enabled in visible task fields:
- Clients can upload files to individual tasks
- Files are associated with the task and stored securely
- MSP users can view uploaded documents in the task details
- Drag-and-drop or click-to-upload interface
Data Model
Configuration is stored in client_portal_config JSONB column:
interface IClientPortalConfig {
show_phases?: boolean; // Default: false
show_phase_completion?: boolean; // Default: false
show_tasks?: boolean; // Default: false
visible_task_fields?: string[]; // Default: ['task_name', 'due_date', 'status']
}
Tables with this column:
projects- Per-project configurationproject_templates- Template defaults
Components
MSP-Side
| Component | Description |
|---|---|
ClientPortalConfigEditor |
Visibility settings UI with summary preview |
Client Portal
| Component | Description |
|---|---|
ProjectDetailView |
Main project detail page |
ClientKanbanBoard |
Kanban-style task view |
ClientTaskListView |
Hierarchical list view |
TaskDocumentUpload |
Document upload widget |
Server Actions
| Action | Description |
|---|---|
getClientProjectPhases() |
Fetch phases with completion stats |
getClientProjectTasks() |
Fetch filtered task data |
uploadClientTaskDocument() |
Handle document uploads |
All actions are in server/src/lib/actions/client-portal-actions/client-project-details.ts.
Security
- Ownership Verification: All actions verify client ownership through
contact_id→client_idrelationship - Server-Side Filtering: Task fields are filtered based on
visible_task_fieldsconfiguration - Upload Authorization: Document uploads only allowed when explicitly enabled
- Multi-Tenant Isolation: All queries include tenant filtering