Context
Builder/participant lifecycle UI in v1 boundless: discover -> apply/join/claim -> submit -> withdraw (application/submission) -> reward receipt. Mirrors the hackathon participant patterns and reuses the shared escrow runner (participant scope, default MANAGED custodial anchoring), wallet kit, and API client. Rewards are push-model: winners are paid on-chain by select_winners, so "reward withdrawal" is the receipt/earnings view (the only real withdrawals are application + submission).
Depends on the backend gap endpoints: boundlessfi/boundless-nestjs milestone Bounty Builder Lifecycle (#331-#335).
Participant journey by mode (entryType x claimType)
| Mode |
Entry action |
Selection |
Winners |
| OPEN + SINGLE_CLAIM |
Claim (on-chain apply; reputation gate) |
organizer select_winners |
1 |
| OPEN + COMPETITION |
Join (cap; auto-shortlist) |
organizer select_winners |
1-3 (multiple winners) |
| APPLICATION_LIGHT + SINGLE_CLAIM |
Apply (short proposal) |
organizer selects 1 |
1 |
| APPLICATION_LIGHT + COMPETITION |
Apply (short proposal) |
organizer shortlists N |
1-3 |
| APPLICATION_FULL + SINGLE_CLAIM |
Apply (full proposal) |
organizer selects 1 |
1 |
| APPLICATION_FULL + COMPETITION |
Apply (full proposal) |
organizer shortlists N |
1-3 |
All modes then: submit work (on-chain anchor) -> organizer select_winners pushes the reward -> receipt in /me/earnings. Withdrawals: withdraw-application, withdraw-submission.
Blueprint to mirror
- Discover:
components/hackathons/HackathonsPage.tsx + HackathonCard
- Detail:
app/(landing)/hackathons/[slug]/page.tsx
- Submit:
components/hackathons/submissions/SubmissionForm.tsx + SubmissionAnchorProgress.tsx, features/hackathons/api/use-submission-anchor.ts
- My activity:
app/me/participating, app/me/hackathons/submissions, app/me/earnings
- Escrow:
features/hackathons/api/use-escrow.ts (useEscrowOpRunner participant scope), lib/wallet/wallet-kit.ts
Tasks
Out of scope
Organizer Operate/Decide UI (separate); a reward claim/pull step (push model kept); the v2 boundless-platform builder UI (this lives in v1, alongside the organizer Configure flow).
Context
Builder/participant lifecycle UI in v1
boundless: discover -> apply/join/claim -> submit -> withdraw (application/submission) -> reward receipt. Mirrors the hackathon participant patterns and reuses the shared escrow runner (participant scope, default MANAGED custodial anchoring), wallet kit, and API client. Rewards are push-model: winners are paid on-chain byselect_winners, so "reward withdrawal" is the receipt/earnings view (the only real withdrawals are application + submission).Depends on the backend gap endpoints:
boundlessfi/boundless-nestjsmilestone Bounty Builder Lifecycle (#331-#335).Participant journey by mode (entryType x claimType)
All modes then: submit work (on-chain anchor) -> organizer select_winners pushes the reward -> receipt in
/me/earnings. Withdrawals: withdraw-application, withdraw-submission.Blueprint to mirror
components/hackathons/HackathonsPage.tsx+HackathonCardapp/(landing)/hackathons/[slug]/page.tsxcomponents/hackathons/submissions/SubmissionForm.tsx+SubmissionAnchorProgress.tsx,features/hackathons/api/use-submission-anchor.tsapp/me/participating,app/me/hackathons/submissions,app/me/earningsfeatures/hackathons/api/use-escrow.ts(useEscrowOpRunnerparticipant scope),lib/wallet/wallet-kit.tsTasks
Out of scope
Organizer Operate/Decide UI (separate); a reward claim/pull step (push model kept); the v2
boundless-platformbuilder UI (this lives in v1, alongside the organizer Configure flow).