Sponsor: Hounslow Council
Project: Financial Expenditure for Children's Safeguarding Service
- Dominic Child (K21051491)
- Pratap Guha (K21007823)
- Riazwaan Mir (K21002871)
- Matthew Stanbrell (K21044080)
- Dean Whitbread (K21014289)
- Levi Yeo (K21009934)
| Name | Password | Role | |
|---|---|---|---|
| Susan Stanley | susan@mattstanbrellgmail.onmicrosoft.com | Audily2025! | Social Worker |
| Greg Green | greg@mattstanbrellgmail.onmicrosoft.com | Audily2025! | Social Worker |
| Joy Johnson | joy@mattstanbrellgmail.onmicrosoft.com | Audily2025! | Authorisation Manager |
| William Wonka | will@mattstanbrellgmail.onmicrosoft.com | Audily2025! | Application Administrator |
- Issue: Sign in doesn't always redirect to home page
- Cause: Amplify Cognito authentication issue
- Solution: Refresh the page after logging in
- Issue: After signing out, clicking 'sign in' again will automatically sign you in with the same account
- Cause: Known Amplify authentication issue (Issue #4044, Issue #12991)
- Solution: Use incognito/private browsing windows, and it may sometimes also be necessary to completely quit the browser application before signing in with a different account
Norm is our friendly AI model that assists social worker completes expenditure forms.
- You must be logged in with a social worker account.
- Login
- Click 'New Form'
- On desktop:
- Norm is located on the right side. Type in the prompt to start a conversation with Norm!
- On mobile:
- Initial screen is Norm! To access the form, start a conversation with Norm and tap 'View Form'.
- You must be logged in with a social worker or manager account.
- Login
- Select 'Formboard' from dashboard
- You must be logged in with a social worker or manager account.
- A form must be submitted.
- Social Worker User:
- Method 1:
- From the homepage, select the 'Threads' option.
- Click on the thread messages.
- Method 2:
- Access formboard
- Click on the form in the submitted board.
- Click 'Contact Manager' button.
- Method 1:
- Manager User:
- From the homepage, select the 'Threads' option.
- Click on the thread messages.
- You must be logged in with a social worker.
- A submitted form must be authorised by a manager.
- Login
- Access Formboard and choose the form in the authorised board.
- Click 'Attachments'
- Select 'Upload' button, browse, choose the image to upload, and click OK
- You will see a form populated with the receipt data.
- You must be logged in with the application administrator.
- From the homepage, click the 'Audit Log' option to view the logs.
- You must be logged in with any user.
- On Desktop:
- Click the 'Settings' option from the homepage.
- On Mobile:
- Click the menu icon in the top right corner (three lines)
- Click 'Settings' option
amplify (AWS Amplify Gen 2 resources)
├── auth (authentication configuration)
│ ├── post-authentication (post-login user processing)
│ │ ├── _helpers.ts
│ │ ├── constants.ts (permission group constants)
│ │ ├── handler.ts (user object creation/update after login)
│ │ └── resource.ts (function definition)
│ └── resource.ts (Microsoft Entra ID setup)
├── data (database configuration)
│ └── resource.ts (DynamoDB schema)
├── functions (Amplify functions)
│ ├── financeCode (generates suggested finance code for a form)
│ │ ├── handler.ts
│ │ └── resource.ts
│ ├── norm (generates Norm responses)
│ │ ├── handler.ts
│ │ └── resource.ts
│ └── receipt-reader (extracts information from receipt images)
│ ├── handler.ts
│ └── resource.ts
├── shared
│ └── types.ts (shared type definitions)
├── storage
│ └── resource.ts (S3 storage config for receipt images)
├── backend.ts (Amplify backend config)
├── package.json
└── tsconfig.json
public (publicly accessible static assets)
├── action-log.svg
├── ...
src (core application code and UI components)
├── app (Next.js App Router directory containing all pages)
│ ├── admin (administrator route, accessible only to admins)
│ │ ├── child (page for creating new children)
│ │ │ └── page.tsx
│ │ ├── team (page for creating new teams)
│ │ │ └── page.tsx
│ │ ├── user (page for editing a user's team and address)
│ │ │ └── page.tsx
│ │ └── page.tsx (admin page with users, children, and teams)
│ ├── all-forms (page for viewing all submitted forms)
│ │ ├── DeleteButton.tsx
│ │ └── page.tsx
│ ├── audit-logs
│ │ ├── [id]
│ │ │ └── page.tsx (page for viewing individual audit log)
│ │ └── page.tsx (page for viewing list of all audit logs)
│ ├── components (reusabe UI components)
│ │ ├── admin (admin related components - client requested on 17/02/2025)
│ │ │ ├── AdminPanel.tsx
│ │ │ ├── ButtonContainer.tsx
│ │ │ ├── Buttons.tsx
│ │ │ ├── Form.tsx
│ │ │ ├── FormElements.tsx
│ │ │ ├── FormHandlers.tsx
│ │ │ ├── Table.tsx
│ │ │ ├── TableComponents.tsx
│ │ │ └── Views.tsx
│ │ ├── auditLog (audit log related components)
│ │ │ ├── AuditLogEntry.tsx
│ │ │ ├── AuditLogsClient.tsx
│ │ │ ├── AuditLogsFilters.tsx
│ │ │ ├── AuditLogsPagination.tsx
│ │ │ ├── FilterByActionSelector.tsx
│ │ │ ├── FilterByDateSelector.tsx
│ │ │ └── LogsPerPageSelector.tsx
│ │ ├── dashboard (dashboard related components)
│ │ │ ├── AdminButtons.tsx
│ │ │ ├── Buttons.tsx
│ │ │ ├── ButtonsContainer.tsx
│ │ │ ├── ManagerButtons.tsx
│ │ │ └── SocialWorkerButtons.tsx
│ │ ├── form (form related components - client requested on 19/11/2024)
│ │ │ ├── attachments
│ │ │ │ ├── AttachmentTable.tsx
│ │ │ │ ├── Icons.tsx
│ │ │ │ └── TableComponents.tsx
│ │ │ ├── feedback
│ │ │ │ ├── FeedbackContainer.tsx
│ │ │ │ └── Messages.tsx
│ │ │ ├── _helpers.tsx
│ │ │ ├── Buttons.tsx
│ │ │ ├── ButtonsContainer.tsx
│ │ │ ├── FormContent.tsx
│ │ │ ├── FormErrorSummary.tsx
│ │ │ ├── FormLayout.tsx
│ │ │ ├── Icons.tsx
│ │ │ ├── NormLayout.tsx
│ │ │ ├── RecurringPaymentSection.tsx
│ │ │ └── types.ts
│ │ ├── formboard (formboard related components)
│ │ │ ├── _helpers.tsx
│ │ │ ├── Formboard.tsx
│ │ │ ├── FormboardTable.tsx
│ │ │ ├── ManagerFormboard.tsx
│ │ │ └── SocialWorkerFormboard.tsx
│ │ ├── navigation (navigation related components)
│ │ │ ├── _helpers.tsx
│ │ │ ├── Buttons.tsx
│ │ │ ├── FullscreenMenu.tsx
│ │ │ └── Menu.tsx
│ │ ├── receipts (receipt related components)
│ │ │ ├── form
│ │ │ │ ├── Buttons.tsx
│ │ │ │ ├── Form.tsx
│ │ │ │ ├── FormComponents.tsx
│ │ │ │ └── Table.tsx
│ │ │ └── receipt-page.tsx
│ │ ├── settings (settings related components - client suggested on 19/11/2024)
│ │ │ ├── ColourRadioSet.tsx
│ │ │ ├── FontSelector.tsx
│ │ │ ├── FontSizeSelector.tsx
│ │ │ ├── Preview.tsx
│ │ │ ├── Seperator.tsx
│ │ │ └── SpacingSelector.tsx
│ │ ├── threads (threads related components - client requested on 12/12/2024)
│ │ │ ├── Message.tsx
│ │ │ ├── MessageInput.tsx
│ │ │ ├── MessagesContainer.tsx
│ │ │ ├── Thread.tsx
│ │ │ ├── ThreadRow.tsx
│ │ │ ├── ThreadsContainer.tsx
│ │ │ ├── ThreadsSidebar.tsx
│ │ │ └── Toggle.tsx
│ │ ├── types
│ │ │ └── receipt.ts
│ │ ├── util
│ │ │ ├── Avatar.tsx
│ │ │ ├── Button.tsx
│ │ │ ├── NotificationBadge.tsx
│ │ │ └── Tooltip.tsx
│ │ ├── ConfigureAmplify.tsx (Amplify client-side setup for SSR)
│ │ ├── GovUKInitialiser.tsx (GOV.UK frontend intialiser)
│ │ ├── Header.tsx
│ │ ├── HomeSignInButton.tsx
│ │ └── SignInButton.tsx
│ ├── constants (shared application constants)
│ │ ├── global.tsx (global constants like file limits)
│ │ ├── models.tsx (constants related to data models)
│ │ └── urls.tsx (application-wide URL path constants)
│ ├── form
│ │ ├── [slug] (slug is the id of a particular form)
│ │ │ ├── attachments
│ │ │ │ └── page.tsx (lists attachments for that form)
│ │ │ ├── receipt
│ │ │ │ └── page.tsx (choose a receipt image to upload)
│ │ │ └── upload
│ │ │ └── page.tsx (review/edit data extracted from uploaded receipt)
│ │ └── page.tsx (page for creating a new form)
│ ├── formboard (for social worker to view status of all their forms)
│ │ └── page.tsx
│ ├── home (home page)
│ │ └── page.tsx
│ ├── settings (user accessibility settings page)
│ │ ├── page.tsx
│ │ └── SettingsClient.tsx
│ ├── styles (custom application styling)
│ │ ├── _app-styles.scss
│ │ ├── _colours.scss
│ │ └── _govuk-overrides.scss
│ ├── test
│ │ └── page.tsx
│ ├── threads
│ │ ├── [id]
│ │ │ └── page.tsx (view a specific thread)
│ │ ├── layout.tsx
│ │ └── page.tsx (view all threads the user is a part of)
│ ├── types (TypeScript type definitions)
│ │ ├── feedback.ts
│ │ ├── input.ts
│ │ ├── models.ts
│ │ ├── receipts.ts
│ │ ├── recurrence.ts
│ │ └── threads.ts
│ ├── favicon.ico
│ ├── globals.scss (global application styles)
│ ├── layout.tsx (root layout structure for all pages)
│ ├── metadata.ts (website title and description)
│ ├── page.tsx (main landing page content, requesting user to sign in)
│ └── theme.ts (primary theme colour definitions)
├── utils (shared helper functions and utilities)
│ ├── amplifyServerUtils.ts
│ ├── apis.ts
│ ├── authenticationUtils.ts
│ ├── image-utils.ts
│ ├── responsivenessHelpers.ts
│ └── timeUtils.ts
└── middleware.ts
__fixtures__ (test fixture data for unit tests)
└── user.tsx
__helpers__ (testing utility functions and components)
└── render.tsx
__tests__ (test suites)
└── pages
├── __snapshots__
│ ├── AuditLog.test.tsx.snap
│ └── Home.test.tsx.snap
├── AuditLog.test.tsx
└── Home.test.tsx
.gitignore
eslint.config.mjs
finance-codes.json (finance codes and descriptions)
next.config.ts
package.json (project dependencies and scripts)
postcss.config.mjs
README.md (you are here)
tailwind.config.js
tsconfig.json