You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* feat(bounty): features/bounties data layer (types, keys, draft + escrow) (#596)
Adds the features/bounties/ data layer for the v1 app, mirroring
features/hackathons/. REST-only via the typed openapi-fetch client; every
server shape is aliased from the backend-generated schema so it cannot drift.
- types.ts: aliases the generated draft + escrow DTOs (BountyDraft,
UpdateBountyDraftBody, the four section types, BountyEscrowOpResponse,
PublishBountyEscrowRequest, ...). Derives the two-axis taxonomy from the
generated mode DTO, superseding the local stubs in the ModeTab.
- api/keys.ts: bountyKeys factory.
- api/draft-client.ts + use-draft.ts: imperative CRUD plus the
useDraft / useDraftList / useCreateDraft / useUpdateDraft / useDeleteDraft
hooks against /organizations/{organizationId}/bounties/draft[/{id}] + /drafts.
- api/escrow-client.ts + use-escrow.ts: organizer escrow calls (publish /
cancel / select-winners / submit-signed / poll) plus useEscrowOp +
useEscrowOpRunner, mirroring the hackathon machinery (MANAGED polls; EXTERNAL
signs -> submit -> poll) bounty-scoped.
- index.ts: public surface.
Regenerates lib/api/generated/schema.d.ts from the v2 backend so the bounty
draft paths/DTOs are present.
* feat(bounty): wizard shell + step/draft machinery (#598)
Adds the bounty Configure wizard orchestrator and its step + draft state,
mirroring the hackathon wizard. No AI assist.
- components/organization/bounties/new/constants.ts: StepKey
(scope/mode/submission/reward/review), STEP_ORDER, BountyFormData, and
isBountyStepDataValid.
- hooks/use-bounty-steps.ts: URL ?step= navigation (free-roam) with a
presentational step-status map.
- hooks/use-bounty-draft.ts: lazy create (ensureDraftId) then per-section PATCH,
resume via useDraft, and transformBountyFromApi (sections -> form state;
winnerCount derived from prize tiers, ISO dates trimmed for the inputs).
- components/organization/bounties/new/NewBountyTab.tsx: orchestrator wiring
steps + draft + per-step save, persisting ?draftId= for resume, and threading
the chosen mode from ModeTab into SubmissionModelTab.
Scope/Reward/Review tabs (#600) and the publish + funding flow (#601) are left
as marked placeholders with their save/navigate/draftId seams in place; this
satisfies the acceptance criteria (navigate, autosave, resume) without
speculative publish UI that depends on the unbuilt publish hook.
* feat: implement multi-step crowdfunding campaign wizard with milestone management
* feat(crowdfunding): v2 public pages, builder dashboard, milestone tracking
- Redesigned public listing (ProjectCard) and detail page with proper
lifecycle states, voting panel, contributor list, and fully-funded detection
- Added public milestone list + detail pages under /crowdfunding/[slug]/milestones
- Builder per-campaign management: tabbed layout (overview / milestones /
contributions) with shared header showing milestone X/Y progress and
Fully Funded badge once fundingRaised >= fundingGoal
- Milestone status sourced from milestoneState() utility: claimedAt-based
"paid out" detection replaces stale reviewStatus === 'completed' checks
- CampaignStatusBanner: shows milestone delivery bar and Fully Funded label
during the FUNDING phase when goal is reached
- milestones-metrics: completedAmount correctly sums paid-out milestones;
inProgress checks SUBMITTED/UNDER_REVIEW enum values
- ProjectCard: switches from funding bar to milestone X/Y bar on fully funded;
footer and status badge update to Fully Funded (green)
- lib/crowdfunding/status.ts: single source of truth for all campaign and
milestone status copy and tone
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* chore: update lockfile dependencies for package-lock.json
* refactor: standardize API error extraction to support array-based messages across crowdfunding components
* refactor: restructure StoryStep inputs, enable sidebar navigation, and update campaign wizard validation logic
---------
Co-authored-by: Benjtalkshow <chinedubenj@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
0 commit comments