| type | Feature |
|---|---|
| title | Export due milestones as an ICS calendar file from the Milestones page |
| labels | type:feature, area:milestones, stack:nextjs, stack:react, stack:typescript, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 |
| assignees |
src/app/milestones/page.tsx renders milestones with due dates that are only surfaced in-app through src/lib/dueSoon.ts. Freelancers cannot move those deadlines into their own calendar. Add an "Add to calendar" action that serializes the visible milestones into a downloadable .ics file.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Add
src/lib/icsExport.tsthat builds RFC 5545 VEVENT blocks from milestone title, due date, and status, escaping commas, semicolons, and newlines. - Reuse
parseLocalDatefromsrc/lib/dueSoon.tsso exported dates do not shift across timezones. - Trigger the download with a Blob object URL and revoke it after the click; skip milestones with no due date.
- Fork the repo and create a branch
git checkout -b feature/milestones-ics-export- Write code in:
src/lib/icsExport.ts - Write comprehensive tests in:
src/lib/__tests__/icsExport.test.ts - Add documentation:
docs/lib/ics-export.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
feat(milestones): export due milestones as an ICS calendar file
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Add a keyboard command palette for jumping between contracts, milestones, and reputation" labels: type:feature, area:navigation, stack:nextjs, stack:react, stack:typescript, priority:low, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
Navigation today is limited to src/components/Navbar.tsx links and the header controls in src/components/HeaderActions.tsx. Power users repeatedly mouse through the same three routes. Add a Cmd/Ctrl+K command palette that lists routes and quick actions with fuzzy filtering.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Create
src/components/CommandPalette.tsxmounted fromsrc/app/layout.tsx, opening on Cmd+K / Ctrl+K and closing on Escape. - Implement the listbox with
role="combobox"/role="listbox",aria-activedescendant, and arrow-key navigation; return focus to the previously focused element on close. - Respect
useMediaQueryfromsrc/hooks/useMediaQuery.tsfor reduced-motion open transitions.
- Fork the repo and create a branch
git checkout -b feature/navigation-command-palette- Write code in:
src/components/CommandPalette.tsx - Write comprehensive tests in:
src/components/__tests__/CommandPalette.test.tsx - Add documentation:
docs/components/CommandPalette.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
feat(navigation): add cmd+k command palette for route navigation
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Add a print-friendly stylesheet and print action for the contract detail page" labels: type:feature, area:contract-detail, stack:nextjs, stack:react, stack:typescript, priority:low, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
src/app/contracts/[id]/page.tsx composes ContractSummary, ContractProgress, and ActionPanel, none of which degrade well when printed or saved to PDF. Add a print action plus @media print rules so a contract can be archived as a clean one-page record.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Hide
src/components/ActionPanel.tsxcontrols, the navbar, and the header actions in print, and expand truncated addresses to their full value. - Add a "Print contract" button on the detail page that calls
window.print()and is itself excluded from print output. - Keep print colors legible on white by forcing high-contrast text for
src/components/StatusBadge.tsx.
- Fork the repo and create a branch
git checkout -b feature/contract-detail-print-view- Write code in:
src/app/contracts/[id]/page.tsx - Write comprehensive tests in:
src/app/contracts/[id]/__tests__/page.test.tsx - Add documentation:
docs/components/ContractDetail.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
feat(contract-detail): add print stylesheet and print action
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Surface an offline connectivity banner that blocks wallet actions while the browser is offline" labels: type:enhancement, area:connectivity, stack:nextjs, stack:react, stack:typescript, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
src/contexts/WalletContext.tsx and src/components/ActionPanel.tsx let users trigger connect, release, and dispute actions with no awareness of network state, so an offline user gets a confusing generic failure. Add a connectivity hook and a persistent banner that disables those actions until connectivity returns.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Add
src/hooks/useOnlineStatus.tssubscribing toonline/offlineevents with an SSR-safe initial value. - Render an
aria-live="polite"banner insrc/app/layout.tsxand feed the offline reason into the existingdisabledReasonsAPI ofActionPanel. - Re-enable actions and announce recovery when the browser comes back online.
- Fork the repo and create a branch
git checkout -b enhancement/connectivity-offline-banner- Write code in:
src/hooks/useOnlineStatus.ts - Write comprehensive tests in:
src/hooks/__tests__/useOnlineStatus.test.ts - Add documentation:
docs/hooks/useOnlineStatus.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
feat(connectivity): add offline banner and gate wallet actions
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Enforce a client bundle size budget as part of the build pipeline" labels: type:enhancement, area:performance, stack:nextjs, stack:react, stack:typescript, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
package.json exposes only next build with no guard on output size, and the repo root already carries stale artifacts such as next-build.txt and build-out.txt from manual size checks. Add a scripted budget check that parses the App Router build manifest and fails when a route's first-load JS exceeds a declared ceiling.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Add
scripts/check-bundle-budget.mjsreading.next/app-build-manifest.jsonand abundleBudgetmap committed alongside it. - Wire an
npm run analyzescript inpackage.jsonand document the current baselines per route. - Exit non-zero with a per-route diff table so regressions are actionable in CI logs.
- Fork the repo and create a branch
git checkout -b enhancement/performance-bundle-budget- Write code in:
scripts/check-bundle-budget.mjs - Write comprehensive tests in:
src/lib/__tests__/bundleBudget.test.ts - Add documentation:
docs/performance/bundle-budget.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
chore(performance): enforce first-load JS budget in the build
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Memoize milestone rows so filtering does not re-render the whole list" labels: type:enhancement, area:performance, stack:nextjs, stack:react, stack:typescript, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
src/components/MilestonesList.tsx re-renders every row whenever the filter in src/components/milestones/MilestoneFilter.tsx changes, and each row re-runs currency formatting from src/lib/preferences.tsx. Split the row into a memoized child and stabilize the callbacks passed down so only changed rows re-render.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Extract a
MilestoneRowcomponent wrapped inReact.memowith a comparator keyed on milestone id, status, amount, and due date. - Wrap the filtered list derivation in
useMemoand row handlers inuseCallbackin the parent list. - Add a render-count assertion in tests so the optimization cannot silently regress.
- Fork the repo and create a branch
git checkout -b enhancement/performance-memoize-milestone-rows- Write code in:
src/components/MilestonesList.tsx - Write comprehensive tests in:
src/components/__tests__/MilestonesList.test.tsx - Add documentation:
docs/components/MilestonesList.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
perf(milestones): memoize milestone rows to cut filter re-renders
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Fix the malformed img-src directive that breaks CSP parsing in next.config.js" labels: type:security, area:csp, stack:nextjs, stack:react, stack:typescript, priority:high, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
next.config.js emits img-src 'self' data:' with a stray trailing apostrophe, producing an invalid source expression that browsers drop. The result is a directive that does not mean what the surrounding comments in docs/security-headers.md claim. Correct the token and add a parser-level assertion so a malformed directive fails the test suite.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Change the value to
img-src 'self' data:and confirm the joined header string round-trips cleanly. - Extend
src/app/__tests__/csp.test.tswith a directive tokenizer that rejects unbalanced quotes across every directive, not justimg-src. - Verify both the development and production branches of
cspDirectivesproduce valid policies.
- Fork the repo and create a branch
git checkout -b security/csp-fix-img-src-directive- Write code in:
next.config.js - Write comprehensive tests in:
src/app/__tests__/csp.test.ts - Add documentation:
docs/security-headers.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
fix(security): correct malformed img-src token in the CSP header
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Redact raw error details from the SafeBoundary fallback shown to users" labels: type:security, area:error-handling, stack:nextjs, stack:react, stack:typescript, priority:high, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
src/components/SafeBoundary.tsx and the route boundaries in src/app/error.tsx and src/app/global-error.tsx can surface raw exception text, which may include wallet addresses, storage keys, or stack frames. Show a stable user-facing message and route the full detail only through src/lib/errorReporter.ts.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Add a redaction helper that strips Stellar G-addresses, URLs, and stack traces before any detail reaches the DOM.
- Keep an unredacted path in development behind a
process.env.NODE_ENVcheck, and always redact in production builds. - Display the reporter's error digest instead of the message so users can quote a safe identifier in support requests.
- Fork the repo and create a branch
git checkout -b security/error-handling-redact-boundary-details- Write code in:
src/components/SafeBoundary.tsx - Write comprehensive tests in:
src/components/SafeBoundary.test.tsx - Add documentation:
docs/error-reporting.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
fix(security): redact sensitive error detail in boundary fallbacks
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Add tests for MilestoneFilter radiogroup keyboard selection and result-count announcements" labels: type:test, area:milestones, stack:nextjs, stack:react, stack:typescript, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
src/components/milestones/MilestoneFilter.tsx implements a fieldset-based radiogroup with a polite live region reporting resultCount, but it has no dedicated test file. Cover selection via keyboard and pointer, the announcement text, and the zero-result wording.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Assert every option in the
All | Pending | Completed | Paid | Disputedset renders, is reachable with arrow keys, and firesonChangeexactly once. - Assert the live region updates when
resultCountchanges, including singular versus plural phrasing at 1 and 0 results. - Include a
jest-axepass using the helpers insrc/test-utils/a11y.tsx.
- Fork the repo and create a branch
git checkout -b test/milestones-milestone-filter- Write code in:
src/components/milestones/MilestoneFilter.tsx - Write comprehensive tests in:
src/components/milestones/__tests__/MilestoneFilter.test.tsx - Add documentation:
docs/components/MilestonesList.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
test(milestones): cover MilestoneFilter selection and live region
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Add tests for the RouteAnnouncer main-landmark focus and h1 fallback text" labels: type:test, area:navigation, stack:nextjs, stack:react, stack:typescript, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
src/components/RouteAnnouncer.tsx focuses <main> and announces the first <h1> on every pathname change, falling back to Page: <pathname>. The existing src/components/__tests__/RouteAnnouncer.test.tsx should be extended to pin down the first-render no-op and the fallback path.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Mock
usePathnamefromnext/navigationand assert no announcement fires on the initial mount. - Assert
<main tabIndex={-1}>receives focus on navigation, and that a missing<main>does not throw. - Cover the
Page: /milestonesfallback when the document has no<h1>and the whitespace-only<h1>case.
- Fork the repo and create a branch
git checkout -b test/navigation-route-announcer- Write code in:
src/components/RouteAnnouncer.tsx - Write comprehensive tests in:
src/components/__tests__/RouteAnnouncer.test.tsx - Add documentation:
docs/components/Accessibility.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
test(navigation): cover RouteAnnouncer focus and fallback announcement
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Add tests for validateLogin length ceilings and required-then-length-then-format ordering" labels: type:test, area:auth, stack:nextjs, stack:react, stack:typescript, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
src/lib/validateLogin.ts documents MAX_EMAIL_LENGTH of 254 and MAX_PASSWORD_LENGTH of 128 plus a strict required β length β format precedence, but src/lib/validateLogin.test.ts does not exercise those boundaries. Add exhaustive boundary and ordering assertions.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Test emails at 253, 254, and 255 characters, and passwords at 7, 8, 128, and 129 characters.
- Assert a whitespace-only email yields the required error, and an over-length malformed email yields the length error before the format error.
- Assert the returned
ValidationError[]order matches field order soErrorSummaryanchors stay stable.
- Fork the repo and create a branch
git checkout -b test/auth-validate-login-boundaries- Write code in:
src/lib/validateLogin.ts - Write comprehensive tests in:
src/lib/validateLogin.test.ts - Add documentation:
docs/lib/validate-login.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
test(auth): cover validateLogin length ceilings and error ordering
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Add tests for the HeaderActions mobile disclosure toggle and aria-expanded state" labels: type:test, area:header, stack:nextjs, stack:react, stack:typescript, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
src/components/HeaderActions.tsx collapses wallet actions behind a disclosure button below the sm breakpoint, wiring aria-expanded, aria-controls, and a swapped screen-reader label. src/components/__tests__/HeaderActions.test.tsx should assert that contract end to end.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Assert
aria-expandedflips between"true"and"false"and thataria-controlsmatches the id of the rendered panel. - Assert the visually hidden label swaps between "Open wallet actions" and "Close wallet actions".
- Assert
ThemeToggleandWalletConnectButtonboth mount, and add ajest-axecheck for the expanded state.
- Fork the repo and create a branch
git checkout -b test/header-header-actions-disclosure- Write code in:
src/components/HeaderActions.tsx - Write comprehensive tests in:
src/components/__tests__/HeaderActions.test.tsx - Add documentation:
docs/components/HeaderActions.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
test(header): cover HeaderActions disclosure toggle behavior
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Document the ConfirmDialog focus-trap contract and caller responsibilities" labels: type:docs, area:dialogs, stack:nextjs, stack:react, stack:typescript, priority:low, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
src/components/ConfirmDialog.tsx traps focus, closes on Escape, and explicitly delegates focus restoration to the caller, but docs/components has no page for it. Contributors wiring new destructive flows have to read the source to learn that contract.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Document every prop in
ConfirmDialogProps, including theconfirmLabel/cancelLabeldefaults. - State clearly that callers must retain a trigger ref and restore focus on close, using
src/components/ActionPanel.tsxas the worked example. - Note the
FOCUSABLE_SELECTORSlist and what happens when the dialog contains no focusable element.
- Fork the repo and create a branch
git checkout -b docs/dialogs-confirm-dialog- Write code in:
src/components/ConfirmDialog.tsx - Write comprehensive tests in:
src/components/__tests__/ConfirmDialog.test.tsx - Add documentation:
docs/components/ConfirmDialog.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
docs(dialogs): document ConfirmDialog focus and escape contract
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Write a milestone status filter guide covering the radiogroup API and live-region wording" labels: type:docs, area:milestones, stack:nextjs, stack:react, stack:typescript, priority:low, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
src/components/milestones/MilestoneFilter.tsx defines the canonical MilestoneStatusFilter union and an accessible radiogroup pattern that other list views should copy. Capture the API, the announcement wording rules, and the WCAG rationale in a dedicated guide.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Document the
selected,onChange, andresultCountprops plus the orderedFILTER_OPTIONSlist. - Explain the
<fieldset>/<legend>choice for WCAG 1.3.1 and why the live region ispoliterather thanassertive. - Show the consumption example from
src/app/milestones/page.tsxincluding how the filtered count is derived.
- Fork the repo and create a branch
git checkout -b docs/milestones-status-filter-guide- Write code in:
src/components/milestones/MilestoneFilter.tsx - Write comprehensive tests in:
src/app/milestones/__tests__/page.test.tsx - Add documentation:
docs/components/MilestoneFilter.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
docs(milestones): add MilestoneFilter radiogroup usage guide
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Consolidate the duplicate jest.setup.js and jest.setup.ts bootstrap files" labels: type:refactor, area:test-infra, stack:nextjs, stack:react, stack:typescript, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
The repo root carries both jest.setup.js and jest.setup.ts while jest.config.js can only reference one of them, leaving a dead file that silently drifts from the active setup. Collapse them into a single TypeScript setup module and delete the orphan.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Diff both files, merge any unique matchers or global mocks, and keep
@testing-library/jest-domplus thejest-axematchers registered exactly once. - Update
setupFilesAfterEach/setupFilesAfterEnvinjest.config.jsand any path reference intsconfig.test.json. - Confirm the full suite passes unchanged after removal so no test depended on the orphaned file.
- Fork the repo and create a branch
git checkout -b refactor/test-infra-single-jest-setup- Write code in:
jest.setup.ts - Write comprehensive tests in:
src/components/__tests__/a11y.test.tsx - Add documentation:
CONTRIBUTING.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
refactor(test-infra): consolidate jest setup into a single module
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Extract the nested layout providers into a single Providers client component" labels: type:refactor, area:app-shell, stack:nextjs, stack:react, stack:typescript, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
src/app/layout.tsx nests the wallet, preferences, and toast providers together with client-only components such as RouteAnnouncer, which forces server/client boundary noise into the root layout. Move the provider tree into one Providers client component so the layout stays a server component with metadata concerns only.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Create
src/app/providers.tsxcomposingWalletProviderfromsrc/contexts/WalletContext.tsx, the provider insrc/lib/preferences.tsx, andsrc/components/toast/toast-provider.tsxin the current order. - Keep provider ordering identical so theme application still runs before toast density reads preferences.
- Update
src/app/__tests__/layout.test.tsxto render through the new component without changing observable behavior.
- Fork the repo and create a branch
git checkout -b refactor/app-shell-extract-providers- Write code in:
src/app/providers.tsx - Write comprehensive tests in:
src/app/__tests__/layout.test.tsx - Add documentation:
docs/walkthrough.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
refactor(app-shell): extract root providers into a Providers component
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Promote ConfirmDialog to alertdialog semantics with wired aria-labelledby and aria-describedby" labels: type:a11y, area:dialogs, stack:nextjs, stack:react, stack:typescript, priority:high, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
src/components/ConfirmDialog.tsx traps focus correctly but its title and description are not programmatically associated with the dialog container, so screen readers announce an unnamed dialog. Generate ids with useId and expose role="alertdialog" for destructive confirmations such as dispute and release funds in src/components/ActionPanel.tsx.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Wire
aria-labelledbyandaria-describedbytouseId-generated heading and description ids, and setaria-modal="true". - Add an optional
toneprop that selectsalertdialogfor destructive actions anddialogotherwise, defaulting to the current behavior. - Mark background content
inertoraria-hiddenwhile open so virtual-cursor users cannot escape the dialog.
- Fork the repo and create a branch
git checkout -b a11y/dialogs-confirm-dialog-alertdialog- Write code in:
src/components/ConfirmDialog.tsx - Write comprehensive tests in:
src/components/__tests__/ConfirmDialog.test.tsx - Add documentation:
docs/components/Accessibility.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
fix(a11y): give ConfirmDialog accessible name, description, and modal semantics
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated. ++++++
type: Feature title: "Give the breadcrumb trail a nav landmark label, aria-current, and visible focus styling" labels: type:a11y, area:breadcrumbs, stack:nextjs, stack:react, stack:typescript, priority:medium, MAYBE REWARDED, GRANTFOX OSS, OFFICIAL CAMPAIGN, Official Campaign | FWC26 assignees: ''
src/components/Breadcrumbs.tsx renders the trail used on the contract detail route, but the current page is conveyed by styling alone and the trail competes with the primary nav in src/components/Navbar.tsx for landmark identity. Add proper landmark labelling, aria-current="page", and keyboard-visible focus rings.
- Repository scope: Talenttrust/Talenttrust-Frontend only.
- Wrap the trail in
<nav aria-label="Breadcrumb">with an ordered list, and render the final crumb as non-interactive text carryingaria-current="page". - Mark the chevron separators
aria-hidden="true"so they are not read between crumb names. - Add
focus-visiblering utilities that meet 3:1 contrast in both light and dark themes.
- Fork the repo and create a branch
git checkout -b a11y/breadcrumbs-landmark-and-current- Write code in:
src/components/Breadcrumbs.tsx - Write comprehensive tests in:
src/components/__tests__/Breadcrumbs.test.tsx - Add documentation:
docs/components/Accessibility.md
- Run
npm run lint,npm test,npm run build - Cover edge cases; include test output
fix(a11y): label the breadcrumb landmark and mark the current page
- Minimum 95 percent test coverage for impacted modules
- Clear documentation
- Timeframe: 96 hours.
- π¬ Join the TalentTrust community on Discord: https://discord.gg/WqnGpcPx
- β This is a GrantFox OSS / Official Campaign task and may be rewarded. When your PR is merged you'll be prompted to rate the project β a 5-star rating is much appreciated.