Context
Boundless Bounty pillar, Configure phase wizard (organizer "host a bounty") in the legacy v1 app boundless. The app is REST-only (openapi-fetch + axios; no GraphQL). This flow mirrors the existing hackathon Configure wizard and reuses the escrow runner, prize math, and wallet/treasury layers. AI assist is deferred.
Depends on the backend draft endpoints for the draft DTOs: boundlessfi/boundless-nestjs milestone Bounty Configure (Host a Bounty) (#310-#317, key dependency boundlessfi/boundless-nestjs#313). The bounty escrow paths/DTOs are already in lib/api/generated/schema.d.ts, so the escrow client is unblocked.
Wizard (5 steps)
Scope -> Mode -> Submission Model -> Reward -> Review & Publish. The ModeTab (two-axis picker) and SubmissionModelTab (mode-conditional fields) are net-new with no hackathon analog; the rest mirror the hackathon tabs.
Plain taxonomy (see boundless-nestjs#317)
claimType (Single claim / Competition) x entryType (Open / Application (light) / Application (full)). A Competition pays a single winner or multiple winners (1-3 prize positions).
Mode -> field matrix (drives ModeTab + SubmissionModelTab)
| Field |
Open + single claim |
Open + competition |
App (light) + single claim |
App (light) + competition |
App (full) + single claim |
App (full) + competition |
| entryType |
OPEN |
OPEN |
APPLICATION_LIGHT |
APPLICATION_LIGHT |
APPLICATION_FULL |
APPLICATION_FULL |
| claimType |
SINGLE_CLAIM |
COMPETITION |
SINGLE_CLAIM |
COMPETITION |
SINGLE_CLAIM |
COMPETITION |
| submissionVisibility |
ORGANIZER_ONLY |
HIDDEN (forced) |
ORGANIZER_ONLY |
HIDDEN (forced) |
ORGANIZER_ONLY |
HIDDEN (forced) |
| reputationMinimum |
required |
hidden |
hidden |
hidden |
hidden |
hidden |
| applicationWindowCloseAt |
hidden |
hidden |
required |
required |
required |
required |
| maxApplicants |
hidden |
required (>=2) |
optional |
optional |
optional |
optional |
| shortlistSize |
hidden |
hidden |
optional |
required (>=2) |
optional |
required (>=2) |
| submissionDeadline |
required |
required |
required |
required |
required |
required |
| Prize tiers (winners) |
1 |
1-3 |
1 |
1-3 |
1 |
1-3 |
Blueprint to mirror
features/hackathons/*
app/(landing)/organizations/[id]/hackathons/*
components/organization/hackathons/new/*
hooks/use-hackathon-{steps,draft,publish}.ts
- Reused as-is:
lib/utils/hackathon-escrow.ts, lib/config/tokens.ts, lib/wallet/wallet-kit.ts, components/providers/wallet-provider.tsx, features/treasury/, the useEscrowOpRunner primitive.
Tasks
Verification (testnet)
Create a draft in each of the six combinations, save + resume, publish MANAGED (draft -> draft_awaiting_funding -> open), confirm one winner for single claim and the multi-position split for a competition, and confirm the negative gate checks block (competition shortlistSize < 2, open + single claim missing reputationMinimum, application entry type missing applicationWindowCloseAt).
Out of scope
Bounty Operate / Decide / Payout, AI "Draft with AI", category / tags, builder-facing discovery and apply.
Context
Boundless Bounty pillar, Configure phase wizard (organizer "host a bounty") in the legacy v1 app
boundless. The app is REST-only (openapi-fetch + axios; no GraphQL). This flow mirrors the existing hackathon Configure wizard and reuses the escrow runner, prize math, and wallet/treasury layers. AI assist is deferred.Depends on the backend draft endpoints for the draft DTOs:
boundlessfi/boundless-nestjsmilestone Bounty Configure (Host a Bounty) (#310-#317, key dependencyboundlessfi/boundless-nestjs#313). The bounty escrow paths/DTOs are already inlib/api/generated/schema.d.ts, so the escrow client is unblocked.Wizard (5 steps)
Scope -> Mode -> Submission Model -> Reward -> Review & Publish. The ModeTab (two-axis picker) and SubmissionModelTab (mode-conditional fields) are net-new with no hackathon analog; the rest mirror the hackathon tabs.
Plain taxonomy (see boundless-nestjs#317)
claimType(Single claim / Competition) xentryType(Open / Application (light) / Application (full)). A Competition pays a single winner or multiple winners (1-3 prize positions).Mode -> field matrix (drives ModeTab + SubmissionModelTab)
Blueprint to mirror
features/hackathons/*app/(landing)/organizations/[id]/hackathons/*components/organization/hackathons/new/*hooks/use-hackathon-{steps,draft,publish}.tslib/utils/hackathon-escrow.ts,lib/config/tokens.ts,lib/wallet/wallet-kit.ts,components/providers/wallet-provider.tsx,features/treasury/, theuseEscrowOpRunnerprimitive.Tasks
Verification (testnet)
Create a draft in each of the six combinations, save + resume, publish MANAGED (
draft -> draft_awaiting_funding -> open), confirm one winner for single claim and the multi-position split for a competition, and confirm the negative gate checks block (competitionshortlistSize < 2, open + single claim missingreputationMinimum, application entry type missingapplicationWindowCloseAt).Out of scope
Bounty Operate / Decide / Payout, AI "Draft with AI",
category/tags, builder-facing discovery and apply.