Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
13 KiB
PRD — AlgaDesk Lightweight Help Desk Product Seam
- Slug:
2026-05-05-algadesk-lightweight-helpdesk-product-seam - Date:
2026-05-05 - Status: Draft
- Source design:
docs/plans/2026-05-05-algadesk-lightweight-helpdesk-product-seam-design.md
Summary
Create AlgaDesk as a focused help-desk wedge product inside the existing Alga PSA application. AlgaDesk must feel like a coherent standalone help desk for MSPs that are not ready for the full PSA experience, while continuing to run from the same codebase, Next.js app, database schema, and background-worker model as Alga PSA.
The seam is a product entitlement and composition boundary, not a physical service boundary. PSA tenants keep the existing PSA experience. AlgaDesk tenants get an intentionally smaller product surface: ticketing, clients/contacts, client portal ticketing, ticket attachments, knowledge base, users/teams settings, and email-to-ticket.
Problem
Alga PSA contains a broad MSP operating surface. A prospect that only needs a help desk can be overwhelmed by full PSA navigation, settings, data models, integrations, and workflows. Simply hiding sidebar links is insufficient: direct URLs, broad package barrels, API discovery, server actions, and cross-feature providers can still leak the full PSA product into a lightweight tenant.
We need a product seam that is strong enough to create confidence in AlgaDesk as a standalone product, but pragmatic enough to share the existing application, database, authentication, ticketing, client portal, and email infrastructure.
Goals
- Introduce an orthogonal product entitlement separate from
solo | pro | premiumtiers. - Render a purpose-built AlgaDesk MSP shell, navigation, dashboard, settings surface, ticket composition, client/contact composition, and client portal surface.
- Keep one codebase, one Next.js app, one database schema, and the existing background-worker model.
- Include email-to-ticket and ticket reply/update by email as core AlgaDesk functionality.
- Include ticket attachments and knowledge base without exposing full document management.
- Enforce product boundaries in browser routes, API routes, API metadata/OpenAPI, and high-risk server actions.
- Preserve existing PSA behavior for PSA tenants.
- Support future
/desk/*aliases without making aliases required for the first launch.
Non-goals
- Do not split AlgaDesk into a separate repository, deployment, Next app, database, or physical process boundary.
- Do not make AlgaDesk another value in the existing PSA tier ladder.
- Do not include billing, contracts, quotes, projects, project tasks, time entry, scheduling, dispatch, assets/RMM, workflows, service request forms, surveys, extensions, AI chat, reporting, or full document management in v1.
- Do not attempt comprehensive test coverage for every feature checklist item. Use confidence-building tests that validate critical seams and journeys.
- Do not redesign the entire ticketing, portal, email, or authorization systems.
- Do not force background email polling, queue processing, or retry logic into the Next.js request process.
Users and Primary Flows
MSP owner / admin evaluating AlgaDesk
- Signs into an AlgaDesk tenant.
- Sees an AlgaDesk dashboard and help-desk navigation only.
- Configures users, teams, ticketing basics, client portal, knowledge base, and email channels.
- Does not see PSA modules such as billing, projects, assets, workflows, or time.
MSP dispatcher / technician
- Opens the ticket list.
- Filters by board, status, priority, category, tag, client, assignee, team, response state, due date, and search.
- Opens a ticket detail page.
- Comments, replies, attaches files/images, assigns users/teams, updates status/priority/category, and views client/contact context.
- Sees email thread/delivery context where useful.
- Does not see SLA cards, project task links, time entry, asset panels, surveys, AI chat, or billing prompts inside ticket work.
MSP client portal contact
- Signs into the client portal.
- Views a simple portal dashboard.
- Creates a free-form ticket with description and attachments.
- Views ticket status and technician replies.
- Uses knowledge base articles.
- Manages profile/client settings permitted for portal users.
- Does not see billing, projects, devices/assets, document library, appointments, service requests, or extensions.
API consumer for AlgaDesk
- Authenticates with an API key.
- Discovers only AlgaDesk-allowed API endpoints in metadata/OpenAPI.
- Can manage tickets, comments, assignment, boards/statuses/priorities/categories, clients, contacts, users/teams as permitted, tags, KB, and email-to-ticket settings.
- Receives structured product-denied errors for excluded PSA endpoints.
UX / UI Notes
- AlgaDesk should feel like a purpose-built product, not PSA with missing menu items.
- Use an AlgaDesk MSP shell/sidebar/dashboard/settings surface instead of the full PSA layout stack.
- Major excluded human-facing routes should show a branded upgrade boundary: clear copy that the feature belongs to Alga PSA, not a broken route.
- Deep/internal/test routes can return not-found or product-denied.
- AlgaDesk dashboard should focus on open tickets, aging, awaiting customer/internal, recent activity, and email channel health.
- AlgaDesk settings should expose only General, Users, Teams, Ticketing, Email Channels, Client Portal, Knowledge Base, Profile/Security where appropriate.
- Client portal sidebar should expose only dashboard, tickets, KB, profile, and client settings.
- Ticket detail should retain core ticket collaboration and remove PSA-only affordances.
Requirements
Functional Requirements
Product entitlement and resolution
- Add a persisted product entitlement for tenants, initially
psaoralgadesk. - Existing tenants default to
psa. - Product access should be resolved through shared helpers, not raw column reads throughout app code.
- Product access should be composable with RBAC, tiers, and add-ons.
AlgaDesk MSP shell
- AlgaDesk tenants render an AlgaDesk-specific MSP layout/sidebar/provider stack.
- PSA tenants render the existing PSA layout/sidebar/provider stack.
- AlgaDesk shell must not import full PSA cross-feature providers for projects, workflows, scheduling, assets, SLA, surveys, extensions, or AI chat.
- AlgaDesk navigation exposes only dashboard, tickets, clients, contacts, knowledge base, and allowed settings/profile/security entries.
Ticketing
- AlgaDesk supports ticket list and ticket detail flows.
- AlgaDesk keeps ticket CRUD, comments, public/internal conversation behavior, assignment, boards, statuses, priorities, categories, tags, response state, ticket origin, attachments, and email thread context.
- AlgaDesk excludes SLA UI/registration, project task linking, time entry/timer controls, asset panels, surveys, and AI chat.
- Existing PSA ticket behavior remains unchanged.
Clients and contacts
- AlgaDesk includes client, contact, and location management needed for support.
- AlgaDesk client/contact views include ticket support context.
- AlgaDesk excludes contracts, contract lines, billing configuration, tax rates, service catalog, client assets, client surveys, full documents, projects, and time/billing adjacent tabs.
- Existing PSA client/contact behavior remains unchanged.
Knowledge base and attachments
- AlgaDesk includes KB articles.
- AlgaDesk includes ticket attachments and rich-text image uploads where tied to ticket comments.
- AlgaDesk excludes full document library, folders, broad sharing, and project/client document surfaces.
- Attachment APIs/components should use a ticket-attachment/KB-safe seam rather than importing full document management where avoidable.
Client portal
- AlgaDesk client portal includes dashboard, tickets, ticket detail, free-form ticket creation, KB, profile, and client settings.
- AlgaDesk client portal excludes billing, projects, devices/assets, document library, appointments, service request forms, and extensions.
- Existing PSA client portal behavior remains unchanged.
Email-to-ticket
- AlgaDesk includes inbound support mailbox/channel configuration.
- AlgaDesk maps inbound email to board/category/default priority.
- AlgaDesk creates tickets from new inbound messages.
- AlgaDesk adds public ticket comments from replies.
- AlgaDesk preserves message/thread metadata for dedupe.
- AlgaDesk sends outbound ticket notifications/replies.
- AlgaDesk shows useful mailbox/channel health and delivery/thread status.
- AlgaDesk excludes broad non-email integrations and workflow-driven email automations.
Route and API boundaries
- AlgaDesk allowed browser routes render AlgaDesk compositions.
- AlgaDesk direct hits to major excluded human-facing routes render a branded upgrade boundary.
- AlgaDesk direct hits to deep/internal/test routes return not-found or product-denied.
- AlgaDesk API access is allowed only for product-allowed API groups.
- AlgaDesk API metadata/OpenAPI/docs do not advertise blocked endpoints.
- High-risk excluded server actions explicitly assert product access.
Non-functional Requirements
- Maintain one app/runtime model and avoid creating a physical product fork.
- Keep the AlgaDesk composition package dependency-bounded so excluded domains are not imported accidentally.
- Fail closed for product access decisions: unknown product or unknown surface should not expose PSA functionality to AlgaDesk tenants.
- Keep PSA behavior backward-compatible.
- Prefer incremental seams and targeted composition over large rewrites.
Data / API / Integrations
- Add
product_codetotenantsor an equivalent first-cut persisted entitlement, with resolver abstraction. - Define product constants and tenant interface updates in shared types.
- Add a product surface registry that classifies capabilities, route groups, navigation groups, API groups, and metadata visibility.
- Add tenant product resolvers/assertions in the tenancy/server layer.
- Add product-aware checks to the v1 API controller base and standalone routes as needed.
- Filter metadata/OpenAPI by product entitlement.
- Product-gate email webhook/IMAP/OAuth/configuration paths needed for email-to-ticket.
Security / Permissions
- Product access is not a replacement for RBAC; both must pass.
- API keys for AlgaDesk tenants must not access denied PSA endpoints even when RBAC permissions would otherwise allow the action.
- Server actions in excluded domains should throw structured product-denied errors for AlgaDesk tenants.
- Portal access must continue to enforce tenant/client/contact visibility rules.
- Browser route hiding must not be the only enforcement layer.
Observability
No broad observability platform changes are in scope. AlgaDesk v1 should expose user-facing email channel health in the settings/dashboard surfaces because email-to-ticket is core product functionality.
Rollout / Migration
- Add the entitlement schema first and default all existing tenants to
psa. - Add product resolver and registry before product-specific composition changes.
- Introduce AlgaDesk shell behind product entitlement.
- Migrate pages one product surface at a time: dashboard/settings, tickets, clients/contacts/KB, portal, email, hard boundaries.
- Add route/API enforcement after the allowlist is explicit enough to avoid blocking required AlgaDesk flows.
- Validate PSA tenants throughout rollout to prevent regressions.
Open Questions
- What exact branded copy and CTA should the upgrade boundary use?
- Should AlgaDesk retain client/contact notes and interactions in v1?
- Which inbound email providers/settings are required for launch versus later?
- Should
/desk/*aliases be added immediately after v1 or only when marketing requires them? - Should AlgaDesk have product-specific naming in app chrome or inherit existing Alga branding with AlgaDesk labels?
Acceptance Criteria (Definition of Done)
- Existing PSA tenants continue to use the current PSA product surface.
- AlgaDesk tenants see only AlgaDesk MSP navigation, dashboard, settings, ticketing, clients/contacts, KB, and portal surfaces.
- AlgaDesk ticket work supports comments, assignment, statuses/priorities/categories/boards, tags, attachments, and email conversation context.
- AlgaDesk email-to-ticket can create tickets and add replies as comments.
- AlgaDesk client portal supports free-form ticket creation, ticket viewing, KB, profile, and client settings.
- Direct browser access to major excluded PSA routes is handled by upgrade/not-found boundaries.
- AlgaDesk API clients can use allowed endpoints and cannot discover or access blocked PSA endpoints.
- High-risk excluded server actions reject AlgaDesk access.
- Dependency tests prevent AlgaDesk composition from importing excluded PSA packages.
- Confidence-building test suite passes for product resolver, registry, navigation, core MSP/portal flows, email-to-ticket, API boundaries, and PSA regression smoke.