Feat/crowdfunding#619
Conversation
…rchestration and API client architecture.
…eceipts/send Winners: new task-first Winners section (pick winner per prize with engine default, inline stacking confirm, deliberate 'Don't award' + unawarded-funds acknowledgement); /rewards redirects to /winners; staged Pick -> Confirm -> Pay. Judging: slimmed Results tab to read-only standings + 'Go to Winners'; criterionId name fix; AI scorecards, recommendation thresholds, CSV judge import, tracks + custom questions wizard sections; validation + empty-state polish. Public: private + password access gate, community links, card private badge. Treasury: receipts + Send funds. Removed the stacking toggle from prize setup. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…599) (#611) The net-new bounty UI with no hackathon analog: the two-axis mode picker and the mode-conditional submission settings that drive all six combinations. - modeSchema.ts: plain taxonomy unions (entryType x claimType), the computeBountyModeLabel helper, and getModeFields — the mode -> field matrix derived functionally from the publish gate (validateTwoAxisMode) so it cannot drift from the backend. - submissionModelSchema.ts: makeSubmissionModelSchema(mode), a mode-aware Zod factory whose required fields and the >=2 floors (maxApplicants for open competition, shortlistSize for application competition) mirror the server gate. - ModeTab.tsx: entry x claim picker, a winners stepper (1-3) for competitions, and a live computed mode label. - SubmissionModelTab.tsx: renders each field per the matrix (required / optional / hidden) and shows submissionVisibility read-only, forced by the mode (HIDDEN_UNTIL_DEADLINE for competitions). Standalone components (props: mode, onSave, onContinue, initialData, isLoading); they wire into the wizard shell + routes in #597 / #598.
…ow) (#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.
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.
…cking - 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>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important Review skippedToo many files! This PR contains 275 files, which is 125 over the limit of 150. To get a review, narrow the scope: Upgrade to a paid plan to raise the limit. ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (275)
You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
No description provided.