Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
11 KiB
Service Request Template Starter Pack Design
Date: 2026-04-16
Slug: service-request-template-starter-pack
Summary
Define a stronger built-in service request starter pack for common MSP portal services. The current CE starter pack contains a single New Hire template. This design expands the pack to six practical, high-frequency templates that work well with the current CE architecture and field builder, while remaining future-friendly for richer EE workflow variants.
The selected pack is:
- New Hire Onboarding
- Employee Offboarding
- Access Request
- Hardware Request
- Software / License Request
- Shared Mailbox / Distribution List Request
Current-State Findings
Review of the current implementation shows:
- Templates are provider-owned in-memory definitions, not database-backed entities.
- CE currently ships one built-in template in
server/src/lib/service-requests/providers/builtins/starterTemplateProvider.ts. - Template instantiation already creates ordinary draft definitions with no persistent template linkage.
- The current CE-safe basic form field types are:
short-textlong-textselectcheckboxdatefile-upload
- Built-in CE templates should remain compatible with:
ticket-onlyexecutionbasicform behaviorall-authenticated-client-usersvisibility
- The original service request PRD explicitly called out demand around:
- new hire onboarding
- offboarding
- access requests
- hardware requests
- software/license provisioning
This means the best v1 template expansion is not a new architecture. It is a content expansion within the existing provider seam.
Recommended Approach
Use a core MSP service desk starter pack.
Why:
- It matches the original PRD examples and user demand.
- It provides immediate value in CE with
ticket-onlyexecution. - It avoids niche or environment-specific templates that many MSPs would delete immediately.
- It leaves clean room for EE variants later without changing the template contract.
Design Decisions Confirmed
The approved design choices are:
- Template set: Option A lifecycle/service-desk pack, plus the mailbox/group request template.
- Count: Six templates.
- Language: Vendor-neutral overall, with a light Microsoft 365 bias where natural.
- Field density: Balanced forms, roughly 6-10 fields per template.
- Approval-ish fields: Lightweight only, such as justification, needed-by date, and occasional manager name.
- Categories: Use suggested grouping labels in the design, but leave built-in template
category_idunset in v1. - Naming convention: Prefer process-style names over uniform
Requestsuffixes.
Product Rules
- All built-in templates remain ordinary starter definitions after creation.
- No new database tables or schema changes are required.
- No template should assume EE workflow execution to be useful.
- Each template should be publishable as-is after routing configuration, but still easy to trim or adapt.
- Template copy should feel polished and service-oriented rather than generic or overly technical.
- Built-in templates should not match or create tenant
service_categoriesrows as a side effect.
Starter Pack Definition
1. New Hire Onboarding
- Suggested grouping: People (left unset in template metadata)
- Icon:
user-plus - Portal name:
New Hire Onboarding - Description:
Request setup for a new employee joining your organization. - Default ticket title:
New Hire Onboarding: {{employee_name}}
Fields
employee_name— short-text — requiredstart_date— date — requiredjob_title— short-text — optionaldepartment— short-text — optionalmanager_name— short-text — optionalwork_location— select — required- Office
- Remote
- Hybrid
employment_type— select — optional- Full-time
- Part-time
- Contractor
- Temporary
device_requirements— long-text — optionalsoftware_access_needed— long-text — optional
2. Employee Offboarding
- Suggested grouping: People (left unset in template metadata)
- Icon:
user-minus - Portal name:
Employee Offboarding - Description:
Request account shutdown and return handling for a departing employee. - Default ticket title:
Employee Offboarding: {{employee_name}}
Fields
employee_name— short-text — requiredlast_working_date— date — requireddepartment— short-text — optionalmanager_name— short-text — optionaldisable_access_immediately— checkbox — optionalrecover_company_equipment— checkbox — optionalmailbox_forwarding_contact— short-text — optionaloffboarding_notes— long-text — optional
3. Access Request
- Suggested grouping: Access (left unset in template metadata)
- Icon:
key - Portal name:
Access Request - Description:
Request new, changed, or removed access to a system or application. - Default ticket title:
Access Request: {{requested_for}} - {{application_or_system}}
Fields
requested_for— short-text — requiredapplication_or_system— short-text — requiredrequest_type— select — required- New access
- Change existing access
- Remove access
access_level_needed— short-text — optionalneeded_by_date— date — optionalbusiness_justification— long-text — requiredmanager_name— short-text — optionalsupporting_attachment— file-upload — optional
4. Hardware Request
- Suggested grouping: Devices & Software (left unset in template metadata)
- Icon:
laptop - Portal name:
Hardware Request - Description:
Request new equipment, replacement hardware, or accessories. - Default ticket title:
Hardware Request: {{requested_for}} - {{hardware_type}}
Fields
requested_for— short-text — requiredhardware_type— select — required- Laptop
- Desktop
- Monitor
- Dock
- Phone
- Accessory
- Other
quantity— short-text — required- default:
1
- default:
request_reason— select — optional- New equipment
- Replacement
- Upgrade
- Loaner
- Other
needed_by_date— date — optionaldelivery_location— short-text — optionalbusiness_justification— long-text — requiredadditional_details— long-text — optional
5. Software / License Request
- Suggested grouping: Devices & Software (left unset in template metadata)
- Icon:
app-window - Portal name:
Software / License Request - Description:
Request software installation, license provisioning, or additional seats. - Default ticket title:
Software / License Request: {{requested_for}} - {{software_name}}
Fields
requested_for— short-text — requiredsoftware_name— short-text — requiredplatform— select — optional- Windows
- macOS
- Web
- Mobile
- Other
license_type_or_edition— short-text — optionalneeded_by_date— date — optionalbusiness_justification— long-text — requiredmanager_name— short-text — optionalvendor_quote_or_screenshot— file-upload — optionaladditional_details— long-text — optional
6. Shared Mailbox / Distribution List Request
- Suggested grouping: Collaboration (left unset in template metadata)
- Icon:
mail - Portal name:
Shared Mailbox / Distribution List Request - Description:
Request a shared mailbox, distribution list, or Microsoft 365 group. - Default ticket title:
Mailbox / Group Request: {{mailbox_or_group_name}}
Fields
request_type— select — required- Shared mailbox
- Distribution list
- Microsoft 365 group
mailbox_or_group_name— short-text — requiredprimary_owner— short-text — requiredadditional_members— long-text — optionalallow_external_senders— checkbox — optionaldepartment_or_team— short-text — optionalneeded_by_date— date — optionalbusiness_purpose— long-text — requiredadditional_notes— long-text — optional
Default Provider Selections
For all six templates, the initial draft should use:
- Execution provider:
ticket-only - Form behavior provider:
basic - Visibility provider:
all-authenticated-client-users - Linked service: unset
This keeps the starter pack fully usable in CE and preserves the expected template-instantiation behavior.
Category Strategy
Use category groupings as design guidance only, but leave built-in template category metadata unset in v1.
Suggested groupings are:
- People
- New Hire Onboarding
- Employee Offboarding
- Access
- Access Request
- Devices & Software
- Hardware Request
- Software / License Request
- Collaboration
- Shared Mailbox / Distribution List Request
This avoids coupling starter templates to tenant-specific service_categories rows or silently creating billing/service taxonomy records during template instantiation.
Naming Strategy
Use process-style names in the template picker and default metadata:
New Hire OnboardingEmployee OffboardingAccess RequestHardware RequestSoftware / License RequestShared Mailbox / Distribution List Request
This is preferable to making every item a uniform ... Request label because it feels more service-oriented and less like raw ticket form duplication.
Implementation Shape
Likely touchpoints:
server/src/lib/service-requests/providers/builtins/starterTemplateProvider.ts- any tests covering template discovery and template draft creation
- possibly management-page tests that assert template options or template creation behavior
Testing Focus
Add or update tests for:
- template provider discovery returning the expanded CE starter pack
- each template producing a valid draft shape
- select fields including valid option lists
- file-upload fields being accepted in template form schemas
- default execution, form behavior, and visibility providers remaining CE-safe
- null category assignment, icon, and ticket title templates being stored correctly on instantiation
Non-Goals
This design does not include:
- new database entities for templates
- EE-only workflow-specific template variants
- conditional field behavior in CE templates
- template marketplace or tenant-installable packs
- service-specific routing defaults such as board/category lookup heuristics
Conclusion
The right v1 move is to strengthen the built-in starter pack with six broadly useful MSP service templates, using balanced forms, light M365 bias where natural, and polished process-style naming. This improves first-run value without changing the underlying service request architecture.