Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
f6d11dd
feat: add exit survey form schema
sajclarke Dec 17, 2025
3b6a66e
fix: update validation rules for fields which are not required
sajclarke Dec 17, 2025
286feea
chore: update schema for textbook grant form
sajclarke Dec 18, 2025
6ded7c1
Merge branch 'develop' of https://github.com/govtech-bb/form-processo…
Ethical-Ralph Dec 18, 2025
ad0e598
Remove payment processor from grant schema
Ethical-Ralph Dec 18, 2025
88108aa
Merge branch 'chore/update-textbook-grant-form-schema' of https://git…
Ethical-Ralph Dec 18, 2025
b3c052c
feat: update applicant and guardian information fields in grant templ…
Ethical-Ralph Dec 18, 2025
90fdd54
Merge pull request #20 from govtech-bb/chore/update-textbook-grant-fo…
Ethical-Ralph Dec 18, 2025
aa9e64d
Merge branch 'develop' of https://github.com/govtech-bb/form-processo…
Ethical-Ralph Dec 18, 2025
e6223ef
Merge pull request #19 from govtech-bb/fix/death-certificate-2
Ethical-Ralph Dec 18, 2025
e26af1b
feat: implement exit survey email template and update survey submissi…
Ethical-Ralph Dec 18, 2025
748ff39
Merge pull request #18 from govtech-bb/feat/exit-survey-form
Ethical-Ralph Dec 18, 2025
a1d0fc9
feat: enhance expression resolver to support multiple embedded expres…
Ethical-Ralph Dec 19, 2025
fecc2ad
chore: update textbook grant schema
sajclarke Dec 22, 2025
ad1715d
chore: set vscode project formatting options
sajclarke Dec 24, 2025
281ccb6
chore: allow local database connection
sajclarke Dec 24, 2025
e9c110a
feat: modify form schema to accept array of objects for beneficiaries
sajclarke Dec 24, 2025
3c84a5a
Merge pull request #24 from govtech-bb/feat/update-textbook-grant-schema
sajclarke Dec 24, 2025
4c52a2a
fix (primary-school-textbook-grant): remove email to guardian
sajclarke Dec 24, 2025
1f47b77
feat: add reserve-society-name to api
sajclarke Dec 30, 2025
f303922
Merge pull request #25 from govtech-bb/feat/reserve-society-name
sajclarke Dec 30, 2025
15fd7d9
fix: add email template for reserve society name
sajclarke Dec 30, 2025
00cca59
Merge pull request #26 from govtech-bb/fix/reserve-society-name
sajclarke Dec 30, 2025
587631f
fix: correct display proposed names in email for reserve-society-name
sajclarke Dec 30, 2025
5695ccf
Merge pull request #27 from govtech-bb/fix/reserve-society-name-2
sajclarke Dec 30, 2025
2f926e3
feat: add processing for 'reserve-company-name'
sajclarke Dec 31, 2025
6ca5bd3
Merge pull request #28 from govtech-bb/feat/reserve-company-name
sajclarke Dec 31, 2025
8df01cd
feat: add schemas for post office redirection notifce forms for busin…
sajclarke Jan 2, 2026
983bbbe
Update pull request template for testing checklist
sajclarke Jan 2, 2026
522f8fb
Merge pull request #29 from govtech-bb/feat/post-office-redirection-n…
sajclarke Jan 2, 2026
645aa15
fix: email template for post office redirection notice
sajclarke Jan 2, 2026
f3bcd7b
Merge pull request #30 from govtech-bb/fix/post-office-redirection-em…
sajclarke Jan 2, 2026
dcdbf17
fix: add minor dependent details to the schema for the post office re…
sajclarke Jan 2, 2026
83d8278
feat: add schema for requesting fire service inspection
sajclarke Jan 2, 2026
249cdab
Update schemas/post-office-redirection-individual.json
sajclarke Jan 2, 2026
4dcc3d9
Merge pull request #32 from govtech-bb/fix/post-office-redirection-in…
sajclarke Jan 2, 2026
4d9e9b7
Merge pull request #31 from govtech-bb/feat/fire-service-inspection
sajclarke Jan 2, 2026
f89cae6
fix: remove unnecessary fields from the applicant object in the form …
sajclarke Jan 2, 2026
392c8a1
Merge branch 'develop' into fix/fire-service-inspection
sajclarke Jan 2, 2026
72c042e
feat: add schema for conductor licence
sajclarke Jan 4, 2026
a0a40b4
Merge pull request #33 from govtech-bb/fix/fire-service-inspection
sajclarke Jan 4, 2026
e88ca95
chore: update email template
sajclarke Jan 4, 2026
b9ae302
Merge pull request #34 from govtech-bb/feat/conductor-licence
sajclarke Jan 4, 2026
88fa61a
feat: add schema and email template for jobstart programme
sajclarke Jan 5, 2026
272263c
Merge pull request #35 from govtech-bb/feat/jobstart-plus-programme
sajclarke Jan 5, 2026
03ca558
feat: enable local testing of email delivery
sajclarke Jan 5, 2026
48b189a
chore: update README
sajclarke Jan 5, 2026
ac8e326
Merge pull request #37 from govtech-bb/feat/local-email-testing
sajclarke Jan 6, 2026
b6ce673
feat: add schema for permission to remove protected tree
sajclarke Jan 6, 2026
3230186
chore: update email template
sajclarke Jan 6, 2026
e2733a6
Merge pull request #38 from govtech-bb/feat/permission-to-remove-tree
sajclarke Jan 7, 2026
f14fbae
feat: add schema and email template
sajclarke Jan 7, 2026
831093c
chore: update form schema
sajclarke Jan 9, 2026
be0c822
fix: validating dates that are not required
sajclarke Jan 12, 2026
b68803b
Merge pull request #42 from govtech-bb/fix/date-field-validations
Ethical-Ralph Jan 12, 2026
98d5719
chore: remove phone regex from validation schema
Ethical-Ralph Jan 12, 2026
a82bd2e
chore: update primary-school-textbook-grant
Ethical-Ralph Jan 12, 2026
df2f975
Merge branch 'develop' of https://github.com/govtech-bb/form-processo…
Ethical-Ralph Jan 12, 2026
836f288
Merge branch 'production' into develop
Ethical-Ralph Jan 12, 2026
c805caf
Merge pull request #40 from govtech-bb/feat/sell-goods-services-beach…
Ethical-Ralph Jan 12, 2026
95f7728
fix: schema for "sell goods or services at beach or park"
sajclarke Jan 12, 2026
5ad7a87
Merge pull request #44 from govtech-bb/fix/forms/sell-goods-services-…
Ethical-Ralph Jan 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,6 @@ EZPAY_TRANSPORT_API_KEY=transport_api_key_here
# Form-specific secrets (example)
PRIMARY_SCHOOL_TEXTBOOK_GRANT_PAYMENT_CODE=EDU001
PRIMARY_SCHOOL_TEXTBOOK_GRANT_ADMIN_EMAIL=education@gov.bb

AWS_SES_ENDPOINT=PASTE_VALUE_HERE
AWS_SES_FROM_EMAIL=PASTE_VALUE_HERE
10 changes: 3 additions & 7 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,9 @@
<!--Add notes for anything unrelated to the specified categories -->

## Testing
- [ ] Visual regression tests added for all device sizes
- [ ] Verify all pages render correctly
- [ ] Test responsive layout across device sizes (snapshots created)
- [ ] Check accessibility standards are met
- [ ] Validate markdown formatting renders properly
- [ ] Test navigation and breadcrumbs
- [ ] Manual tests completed
- [ ] Added unit tests
- [ ] Added e2e tests

## Related Github Issue(s)/Trello Ticket(s)
<!-- Link any related issues: Fixes #123 -->
Expand All @@ -29,5 +26,4 @@
## Checklist
- [ ] Code follows project style guidelines
- [ ] Self-review completed
- [ ] Tests added/updated (visual regression snapshots)
- [ ] Documentation updated
7 changes: 7 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
}
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,22 @@ npm run test:e2e
npm run test:cov
```

### Testing Emails (Locally)

Start mock server

```
npx aws-ses-v2-local@latest --port 8005
```

Update .env file

```
NODE_ENV=development
AWS_SES_ENDPOINT=http://localhost:8005
AWS_SES_FROM_EMAIL=test@example.com
```

## 🚀 Deployment

### Build for Production
Expand Down
243 changes: 243 additions & 0 deletions schemas/conductor-licence.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,243 @@
{
"id": "apply-for-conductor-licence",
"name": "Conductor Licence Application",
"description": "Conductor Licence Application",
"fields": [
{
"name": "applicant",
"type": "object",
"required": true,
"fields": [
{
"name": "title",
"type": "string",
"label": "Title",
"required": true,
"validations": {
"regex": "^(mr|ms|mrs)$",
"message": "Must select a valid title"
}
},
{
"name": "firstName",
"type": "string",
"label": "First name",
"required": true,
"validations": {
"min": 2,
"max": 100,
"message": "First name is required"
}
},
{
"name": "middleName",
"type": "string",
"label": "Middle name",
"required": false,
"validations": {
"max": 100,
"message": "Middle name is required"
}
},
{
"name": "lastName",
"type": "string",
"label": "Last name",
"required": true,
"validations": {
"min": 2,
"max": 100,
"message": "Last name is required"
}
},
{
"name": "dateOfBirth",
"type": "date",
"label": "Date of birth",
"required": false,
"validations": {
"regex": "^\\d{4}-\\d{2}-\\d{2}$",
"message": "Date of birth is required and must be in YYYY-MM-DD format"
}
}
]
},
{
"name": "contactDetails",
"type": "object",
"required": true,
"fields": [
{
"name": "addressLine1",
"type": "string",
"label": "Address Line 1",
"required": true,
"validations": {
"min": 5,
"max": 200,
"message": "Address must be at least 5 characters"
}
},
{
"name": "addressLine2",
"type": "string",
"label": "Address Line 2",
"required": false,
"validations": {
"max": 200
}
},
{
"name": "parish",
"type": "string",
"label": "Parish",
"required": true,
"validations": {
"regex": "^(christ-church|st-andrew|st-george|st-james|st-john|st-joseph|st-lucy|st-michael|st-peter|st-philip|st-thomas)$",
"message": "Must select a valid parish"
}
},
{
"name": "postalCode",
"type": "string",
"label": "Postal Code",
"required": false,
"validations": {
"regex": "^BB\\d{5}$",
"message": "Enter a valid postal code (e.g., BB17004)"
}
},
{
"name": "email",
"type": "email",
"label": "Email Address",
"required": true
},
{
"name": "telephoneNumber",
"type": "string",
"label": "Telephone Number",
"required": true
}
]
},
{
"name": "licenceHistory",
"type": "object",
"required": true,
"fields": [
{
"name": "hasPreviousLicence",
"type": "string",
"label": "Do you have any previous licence(s)?",
"required": true,
"validations": {
"regex": "^(yes|no)$",
"message": "Must select an option"
}
},
{
"name": "licenceNumber",
"type": "string",
"label": "Provide your licence number",
"required": false
},
{
"name": "dateOfIssue",
"type": "date",
"label": "Date of issue",
"required": false,
"validations": {
"regex": "^\\d{4}-\\d{2}-\\d{2}$",
"message": "Date of issue is required and must be in YYYY-MM-DD format"
}
}
]
},
{
"name": "hasEndorsements",
"type": "string",
"label": "Do you have any endorsements?",
"required": true,
"validations": {
"regex": "^(yes|no)$",
"message": "Must select an option"
}
},
{
"name": "endorsementDetails",
"type": "array",
"label": "Your endorsements",
"required": false,
"items": {
"type": "object",
"properties": {
"typeOfEndorsement": {
"type": "string"
},
"dateOfEndorsement": {
"type": "date"
},
"duration": {
"type": "string"
}
}
}
},
{
"name": "disqualifications",
"type": "object",
"required": true,
"fields": [
{
"name": "hasDisqualifications",
"type": "string",
"label": "Have you ever been disqualified?",
"required": true,
"validations": {
"regex": "^(yes|no)$",
"message": "Must select an option"
}
},
{
"name": "courtName",
"type": "string",
"label": "Court name",
"required": false
},
{
"name": "dateOfDisqualification",
"type": "string",
"label": "Date of disqualification",
"required": false
},
{
"name": "lengthOfDisqualification",
"type": "string",
"label": "Length of disqualification",
"required": false
}
]
},
{
"name": "hasCriminalConvictions",
"type": "string",
"label": "Have you ever had any criminal convictions?",
"required": true,
"validations": {
"regex": "^(yes|no)$",
"message": "Must select an option"
}
}
],
"processors": [
{
"type": "email",
"config": {
"to": "{{db:apply-for-conductor-licence:admin_email}}",
"subject": "Apply for conductor licence - {{formData.applicant.firstName}} {{formData.applicant.lastName}}",
"template": "apply-for-conductor-licence"
}
}
]
}
65 changes: 65 additions & 0 deletions schemas/exit-survey.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
{
"id": "exit-survey",
"name": "Exit Survey",
"description": "Provide feedback on your experience",
"fields": [
{
"name": "difficultyRating",
"type": "string",
"label": "How easy or difficult was it to complete this form?",
"required": true,
"validations": {
"regex": "^(very-easy|easy|neither|difficult|very-difficult)$",
"message": "Must select an option"
}
},
{
"name": "clarityRating",
"type": "string",
"label": "How clear was the information provided?",
"required": true,
"validations": {
"regex": "^(very-clear|clear|neither|unclear|very-unclear)$",
"message": "Must select an option"
}
},
{
"name": "technicalProblems",
"type": "string",
"label": "Did you experience any technical problems?",
"required": true,
"validations": {
"regex": "^(yes|no)$",
"message": "Must select an option"
}
},
{
"name": "technicalProblemsDescription",
"type": "string",
"label": "Please briefly describe the problem you experienced",
"required": false,
"validations": {
"max": 100
}
},
{
"name": "areasForImprovement",
"type": "string",
"label": "What is one thing we could do to improve this form?",
"required": true,
"validations": {
"max": 500
}
}
],
"processors": [
{
"type": "email",
"config": {
"to": "{{db:exit-survey:admin_email}}",
"subject": "New Exit Survey Submission - {{formData.difficultyRating}} Experience",
"template": "exit-survey"
}
}
]
}
Loading