Skip to content

Feat/crowdfunding#640

Merged
0xdevcollins merged 21 commits into
mainfrom
feat/crowdfunding
Jun 24, 2026
Merged

Feat/crowdfunding#640
0xdevcollins merged 21 commits into
mainfrom
feat/crowdfunding

Conversation

@0xdevcollins

Copy link
Copy Markdown
Collaborator

No description provided.

0xdevcollins and others added 21 commits June 11, 2026 07:37
…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.
…ow) (#596) (#612)

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.
* 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.
Completes the editable surface of the bounty Configure wizard, dropping the
three remaining tabs into the seams the shell (#598) left.

- tabs/schemas/scopeSchema.ts: title, description, optional GitHub issue
  url/number, optional project/window.
- tabs/schemas/rewardSchema.ts: makeRewardSchema(claimType) — exactly one tier
  for single claim, 1-3 for a competition; amounts > 0, unique positions
  including position 1 (mirrors the publish gate's deriveWinnerDistribution).
- lib/utils/bounty-escrow.ts: adapts the bounty reward shape to reuse the
  hackathon prize-pool math (getTotalPrizePoolForFunding, buildWinnerDistribution,
  2.5% PLATFORM_FEE) rather than duplicating it.
- tabs/ScopeTab.tsx: scope form.
- tabs/RewardTab.tsx: currency + mode-driven prize tiers (field array sized to
  the winner count) with a live prize-pool / fee / total preview.
- tabs/ReviewTab.tsx: per-section summary, validation summary, funding totals,
  and a publish CTA disabled until every section validates.
- NewBountyTab.tsx + constants.ts: wire the three tabs into the wizard; the form
  snapshot now uses the per-tab form schema types.

Reward currency is collected in the Reward step (the backend section that
persists it) rather than Scope, so it round-trips. The publish action is a
placeholder pending the escrow publish flow (#601); the disabled-until-valid
gate is wired here.
…601) (#615)

* feat(bounty): Scope + Reward + Review tabs and Zod schemas (#600)

Completes the editable surface of the bounty Configure wizard, dropping the
three remaining tabs into the seams the shell (#598) left.

- tabs/schemas/scopeSchema.ts: title, description, optional GitHub issue
  url/number, optional project/window.
- tabs/schemas/rewardSchema.ts: makeRewardSchema(claimType) — exactly one tier
  for single claim, 1-3 for a competition; amounts > 0, unique positions
  including position 1 (mirrors the publish gate's deriveWinnerDistribution).
- lib/utils/bounty-escrow.ts: adapts the bounty reward shape to reuse the
  hackathon prize-pool math (getTotalPrizePoolForFunding, buildWinnerDistribution,
  2.5% PLATFORM_FEE) rather than duplicating it.
- tabs/ScopeTab.tsx: scope form.
- tabs/RewardTab.tsx: currency + mode-driven prize tiers (field array sized to
  the winner count) with a live prize-pool / fee / total preview.
- tabs/ReviewTab.tsx: per-section summary, validation summary, funding totals,
  and a publish CTA disabled until every section validates.
- NewBountyTab.tsx + constants.ts: wire the three tabs into the wizard; the form
  snapshot now uses the per-tab form schema types.

Reward currency is collected in the Reward step (the backend section that
persists it) rather than Scope, so it round-trips. The publish action is a
placeholder pending the escrow publish flow (#601); the disabled-until-valid
gate is wired here.

* feat(bounty): use-bounty-publish (escrow publish via shared runner) (#601)

Wires the bounty publish action, mirroring use-hackathon-publish.

- hooks/use-bounty-publish.ts: builds PublishBountyEscrowDto (ownerAddress,
  tokenAddress via getTokenAddress('USDC'), budget = sum of tier amounts,
  submissionDeadline as unix from the draft deadline, applicationCreditCost,
  winnerDistribution via the shared buildBountyWinnerDistribution, fundingMode)
  and drives it with useEscrowOpRunner: MANAGED returns PENDING_CONFIRM then
  polls; EXTERNAL signs the returned XDR via signXdrWithKit then submits + polls.
  On COMPLETED the bounty has moved draft_awaiting_funding -> open. Pre-flight
  resumes an in-flight op, short-circuits an already-published bounty, and runs a
  MANAGED USDC balance check (pool + 2.5% fee).
- NewBountyTab.tsx: replace the Review placeholder with the real publish() and
  wire isPublishing into the CTA.

Treasury funding (sourceWalletId) is omitted until the backend treasury-parity
issue (boundless-nestjs #314) lands; MANAGED + EXTERNAL are supported. The
funding-source picker + progress modal remain a follow-up; the hook exposes the
escrow phase/error/txHash they need.
Adds the organizer bounty routes, mirroring the hackathon route tree, and the
published-list data needed by the list page.

- app/(landing)/organizations/[id]/bounties/page.tsx: list page with a Drafts
  section (resume links + status badges + mode label / section count) and a
  Published section (status badges + reward), plus a "Host a bounty" CTA.
- .../bounties/new/page.tsx: renders <NewBountyTab organizationId={id} />.
- .../bounties/drafts/[draftId]/page.tsx: renders
  <NewBountyTab organizationId={id} draftId={draftId} />.
- features/bounties/api/core.ts + use-bounties.ts: listOrganizationBounties +
  useOrganizationBounties for the root list (the backend root GET has no
  response DTO, so the row shape is projected to OrganizationBountyListItem).

The pages mount the existing wizard shell (#598); the list separates drafts
(draft / draft_awaiting_funding) from published bounties so they don't
double-list.
Adds a Bounties menu item (/organizations/{orgId}/bounties) and a Post Bounty
quick action (/organizations/{orgId}/bounties/new) to OrganizationSidebar, so
organizers can reach the bounty list + Configure wizard.

Codegen reconcile: re-ran npm run codegen against the v2 backend; the committed
lib/api/generated/schema.d.ts already matches (BountyDraftResponseDto +
UpdateBountyDraftDto present, no drift), so no schema change is needed.
…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>
…618)

* feat(bounty): wizard enhancements (resources step, currency, reputation, nav)

- Resources: new optional Resources step (links + PDF/DOC/PPT/MD uploads),
  mirroring the hackathon resources tab; never blocks publish. Reuses a now
  configurable ResourceFileUpload (folder/tags/accepted types props; unique
  input id per row).
- Reward currency: dropdown of USDC (default) / XLM (disabled) with real token
  logos, replacing the free-text field.
- Reputation: per-category minimum floor (development highest); the organizer
  can raise it but not drop below the category baseline.
- Navigation: Back button on every step after the first.
- Scope: category chips + searchable country dropdown with flags + markdown
  description; GitHub issue URL required only for development.
- Publish: redirect to the organizer's bounty list once publish finalizes.
- Dev-only "Fill with mock" button to populate every section at once.

* feat(bounty): hackathon-style org bounty list + delete-draft confirm

- Rebuild the organization bounty list page in the hackathon style: sticky
  header with stats, Published/Drafts tabs, search + sort, and a banner-less
  reward-focused card grid (draft cards show a progress bar + resume link).
- Deleting a draft now opens a confirmation modal (DeleteBountyDraftDialog)
  instead of deleting on the first click.
- Expose `_count.submissions` on the org bounty list item for the cards.
…ces/review tabs, publish flow)

Merge feat/t-replace into feat/crowdfunding. Conflict resolution: all 6 bounty
wizard files took the feat/t-replace version (more complete) over our stubs:

- constants.ts: added resources step, proper per-section TypeScript schemas
- NewBountyTab.tsx: replaced SectionPlaceholder stubs with real ScopeTab,
  RewardTab, ResourcesTab, ReviewTab; wired publish flow + dev mock helper
- types.ts: added resources to DRAFT_SECTIONS + BountyFormData
- use-bounty-draft.ts: added saveAllSections, resources hydration, scopeExtra
  for category/country fields (pre-codegen cast)
- use-bounty-steps.ts: added resources step to initial state
- features/bounties/index.ts: added useOrganizationBounties + core exports

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 24, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
boundless-kd16 Building Building Preview, Comment Jun 24, 2026 8:48pm

@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 292 files, which is 142 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a88ac4dc-169e-4f36-bea5-c78b981e78f5

📥 Commits

Reviewing files that changed from the base of the PR and between fd2b990 and 0718279.

⛔ Files ignored due to path filters (2)
  • lib/api/generated/schema.d.ts is excluded by !**/generated/**
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (292)
  • .claude/launch.json
  • .env.example
  • .husky/pre-push
  • app/(landing)/crowdfunding/[slug]/milestones/[id]/page.tsx
  • app/(landing)/crowdfunding/[slug]/milestones/page.tsx
  • app/(landing)/crowdfunding/[slug]/page.tsx
  • app/(landing)/crowdfunding/new/page.tsx
  • app/(landing)/crowdfunding/page.tsx
  • app/(landing)/hackathons/[slug]/components/AccessGate.tsx
  • app/(landing)/hackathons/[slug]/components/RegistrationQuestionsDialog.tsx
  • app/(landing)/hackathons/[slug]/components/SponsorsSection.tsx
  • app/(landing)/hackathons/[slug]/components/header/ActionButtons.tsx
  • app/(landing)/hackathons/[slug]/components/sidebar/CommunityLinks.tsx
  • app/(landing)/hackathons/[slug]/components/sidebar/MySubmissionPanel.tsx
  • app/(landing)/hackathons/[slug]/components/sidebar/PoolAndAction.tsx
  • app/(landing)/hackathons/[slug]/components/sidebar/index.tsx
  • app/(landing)/hackathons/[slug]/components/tabs/contents/Overview.tsx
  • app/(landing)/hackathons/[slug]/components/tabs/contents/index.tsx
  • app/(landing)/hackathons/[slug]/components/tabs/contents/submissions/SubmissionCard.tsx
  • app/(landing)/hackathons/[slug]/page.tsx
  • app/(landing)/hackathons/[slug]/submit/page.tsx
  • app/(landing)/hackathons/layout.tsx
  • app/(landing)/hackathons/preview/[orgId]/[draftId]/page.tsx
  • app/(landing)/organizations/[id]/bounties/drafts/[draftId]/page.tsx
  • app/(landing)/organizations/[id]/bounties/new/page.tsx
  • app/(landing)/organizations/[id]/bounties/page.tsx
  • app/(landing)/organizations/[id]/hackathons/[hackathonId]/judging/page.tsx
  • app/(landing)/organizations/[id]/hackathons/[hackathonId]/page.tsx
  • app/(landing)/organizations/[id]/hackathons/[hackathonId]/participants/page.tsx
  • app/(landing)/organizations/[id]/hackathons/[hackathonId]/rewards/page.tsx
  • app/(landing)/organizations/[id]/hackathons/[hackathonId]/settings/page.tsx
  • app/(landing)/organizations/[id]/hackathons/[hackathonId]/winners/page.tsx
  • app/(landing)/organizations/[id]/hackathons/drafts/[draftId]/page.tsx
  • app/(landing)/organizations/[id]/hackathons/new/page.tsx
  • app/(landing)/organizations/[id]/hackathons/page.tsx
  • app/(landing)/organizations/[id]/treasury/page.tsx
  • app/(landing)/organizations/[id]/treasury/receipts/[receiptId]/page.tsx
  • app/(landing)/organizations/layout.tsx
  • app/(landing)/projects/[slug]/page.tsx
  • app/judge/[hackathonId]/submissions/[submissionId]/page.tsx
  • app/layout.tsx
  • app/me/crowdfunding/[slug]/components/CampaignBanner.tsx
  • app/me/crowdfunding/[slug]/components/CampaignTabs.tsx
  • app/me/crowdfunding/[slug]/components/FundingProgress.tsx
  • app/me/crowdfunding/[slug]/components/ProjectDetails.tsx
  • app/me/crowdfunding/[slug]/components/index.ts
  • app/me/crowdfunding/[slug]/contributions/page.tsx
  • app/me/crowdfunding/[slug]/edit/components/BasicInfoSection.tsx
  • app/me/crowdfunding/[slug]/edit/components/ContactSocialSection.old.tsx
  • app/me/crowdfunding/[slug]/edit/components/ContactSocialSection.tsx
  • app/me/crowdfunding/[slug]/edit/components/DetailsFundingSection.tsx
  • app/me/crowdfunding/[slug]/edit/components/MilestonesSection.tsx
  • app/me/crowdfunding/[slug]/edit/components/ProjectLinksSection.tsx
  • app/me/crowdfunding/[slug]/edit/components/RepoLinksSection.tsx
  • app/me/crowdfunding/[slug]/edit/components/TeamSection.tsx
  • app/me/crowdfunding/[slug]/edit/components/index.ts
  • app/me/crowdfunding/[slug]/edit/components/md-editor-custom.css
  • app/me/crowdfunding/[slug]/edit/page.tsx
  • app/me/crowdfunding/[slug]/layout.tsx
  • app/me/crowdfunding/[slug]/milestones/[milestoneIndex]/page.tsx
  • app/me/crowdfunding/[slug]/milestones/page.tsx
  • app/me/crowdfunding/[slug]/page.tsx
  • app/me/crowdfunding/new/page.tsx
  • app/me/crowdfunding/page.tsx
  • app/me/layout.tsx
  • app/partners/contribute/[token]/page.tsx
  • app/providers.tsx
  • components/app-sidebar.tsx
  • components/auth/LoginWrapper.tsx
  • components/auth/OtpForm.tsx
  • components/crowdfunding-table-columns.tsx
  • components/crowdfunding-table-toolbar.tsx
  • components/crowdfunding/CampaignStatusBanner.tsx
  • components/crowdfunding/ContributeSheet.tsx
  • components/crowdfunding/MilestoneSubmitForm.tsx
  • components/crowdfunding/VotePanel.tsx
  • components/crowdfunding/campaign-funding-tab.tsx
  • components/crowdfunding/campaign-milestones-tab.tsx
  • components/crowdfunding/campaign-stats.tsx
  • components/crowdfunding/milestone-card.tsx
  • components/crowdfunding/milestones-metrics.tsx
  • components/crowdfunding/new/NewCampaignSidebar.tsx
  • components/crowdfunding/new/NewCampaignWizard.tsx
  • components/crowdfunding/new/WizardHelpButton.tsx
  • components/crowdfunding/new/constants.ts
  • components/crowdfunding/new/fee.ts
  • components/crowdfunding/new/milestone-templates.ts
  • components/crowdfunding/new/steps/BasicsStep.tsx
  • components/crowdfunding/new/steps/FundingStep.tsx
  • components/crowdfunding/new/steps/LinksStep.tsx
  • components/crowdfunding/new/steps/MilestonesStep.tsx
  • components/crowdfunding/new/steps/ReviewStep.tsx
  • components/crowdfunding/new/steps/StoryStep.tsx
  • components/crowdfunding/new/steps/TeamStep.tsx
  • components/crowdfunding/quick-links.tsx
  • components/crowdfunding/submit-evidence-modal.tsx
  • components/hackathons/HackathonsPage.tsx
  • components/hackathons/overview/RegisterHackathonModal.tsx
  • components/hackathons/submissions/SubmissionAnchorProgress.tsx
  • components/hackathons/submissions/SubmissionForm.tsx
  • components/judge/JudgeAiAssist.tsx
  • components/landing-page/hackathon/HackathonCard.tsx
  • components/landing-page/navbar.tsx
  • components/me-dashboard.tsx
  • components/organization/OrganizationSettings.tsx
  • components/organization/OrganizationSidebar.tsx
  • components/organization/bounties/DeleteBountyDraftDialog.tsx
  • components/organization/bounties/new/NewBountyTab.tsx
  • components/organization/bounties/new/constants.ts
  • components/organization/bounties/new/mock-data.ts
  • components/organization/bounties/new/tabs/ModeTab.tsx
  • components/organization/bounties/new/tabs/ResourcesTab.tsx
  • components/organization/bounties/new/tabs/ReviewTab.tsx
  • components/organization/bounties/new/tabs/RewardTab.tsx
  • components/organization/bounties/new/tabs/ScopeTab.tsx
  • components/organization/bounties/new/tabs/SubmissionModelTab.tsx
  • components/organization/bounties/new/tabs/schemas/modeSchema.ts
  • components/organization/bounties/new/tabs/schemas/resourcesSchema.ts
  • components/organization/bounties/new/tabs/schemas/rewardSchema.ts
  • components/organization/bounties/new/tabs/schemas/scopeSchema.ts
  • components/organization/bounties/new/tabs/schemas/submissionModelSchema.ts
  • components/organization/cards/ReviewSubmissionModal/SubmissionModalHeader.tsx
  • components/organization/hackathons/HackathonPublishStatusBanner.tsx
  • components/organization/hackathons/ParticipantsGrid.tsx
  • components/organization/hackathons/ParticipantsTable.tsx
  • components/organization/hackathons/details/HackathonSidebar.tsx
  • components/organization/hackathons/judging/AiScorecardsPanel.tsx
  • components/organization/hackathons/judging/AllocationPreviewCard.tsx
  • components/organization/hackathons/judging/ImportJudgesCsvDialog.tsx
  • components/organization/hackathons/judging/JudgingResultsTable.tsx
  • components/organization/hackathons/judging/OrganizerJudgesPanel.tsx
  • components/organization/hackathons/judging/RecommendationThresholdsCard.tsx
  • components/organization/hackathons/new/FundingConfirmationModal.tsx
  • components/organization/hackathons/new/FundingProgressModal.tsx
  • components/organization/hackathons/new/GenerateWithAiDialog.tsx
  • components/organization/hackathons/new/HackathonTabsNavigation.tsx
  • components/organization/hackathons/new/NewHackathonTab.tsx
  • components/organization/hackathons/new/PrePublishAnnounceDialog.tsx
  • components/organization/hackathons/new/RegenerateSectionButton.tsx
  • components/organization/hackathons/new/constants.ts
  • components/organization/hackathons/new/tabs/CustomQuestionsTab.tsx
  • components/organization/hackathons/new/tabs/InfoTab.tsx
  • components/organization/hackathons/new/tabs/JudgingTab.tsx
  • components/organization/hackathons/new/tabs/ReviewTab.tsx
  • components/organization/hackathons/new/tabs/RewardsTab.tsx
  • components/organization/hackathons/new/tabs/TimelineTab.tsx
  • components/organization/hackathons/new/tabs/TracksTab.tsx
  • components/organization/hackathons/new/tabs/components/CategorySelection.tsx
  • components/organization/hackathons/new/tabs/components/ResourceFileUpload.tsx
  • components/organization/hackathons/new/tabs/components/review/EscrowSummary.tsx
  • components/organization/hackathons/new/tabs/components/review/HackathonPublishedModal.tsx
  • components/organization/hackathons/new/tabs/components/review/PublishSection.tsx
  • components/organization/hackathons/new/tabs/components/review/WalletConnectionWarning.tsx
  • components/organization/hackathons/new/tabs/schemas/rewardsSchema.ts
  • components/organization/hackathons/rewards/CreateMilestonesDialog.tsx
  • components/organization/hackathons/rewards/EscrowStatusCard.tsx
  • components/organization/hackathons/rewards/PublishWinnersWizard.tsx
  • components/organization/hackathons/rewards/RewardDistributionStatusBanner.tsx
  • components/organization/hackathons/rewards/RewardPayoutProgressModal.tsx
  • components/organization/hackathons/rewards/RewardsPageContent.tsx
  • components/organization/hackathons/rewards/RewardsPageHeader.tsx
  • components/organization/hackathons/rewards/SubmissionListItem.tsx
  • components/organization/hackathons/rewards/SubmissionsList.tsx
  • components/organization/hackathons/rewards/WinnerFormItem.tsx
  • components/organization/hackathons/rewards/WinnersBoard.tsx
  • components/organization/hackathons/settings/AdvancedSettingsTab.tsx
  • components/organization/hackathons/settings/AllocateContributionModal.tsx
  • components/organization/hackathons/settings/PartnersSettingsTab.tsx
  • components/organization/hackathons/settings/RewardsSettingsTab.tsx
  • components/organization/hackathons/settings/TracksSettingsTab.tsx
  • components/organization/tabs/MembersTab.tsx
  • components/organization/tabs/MembersTab/MemberCard.tsx
  • components/organization/tabs/MembersTab/PermissionsTable.tsx
  • components/organization/treasury/AuditLog.tsx
  • components/organization/treasury/Receipts.tsx
  • components/organization/treasury/SendFunds.tsx
  • components/organization/treasury/WalletsSection.tsx
  • components/project-details/project-sidebar/ProjectSidebarLinks.tsx
  • components/providers/auth-provider.tsx
  • features/bounties/api/core.ts
  • features/bounties/api/draft-client.ts
  • features/bounties/api/escrow-client.ts
  • features/bounties/api/keys.ts
  • features/bounties/api/use-bounties.ts
  • features/bounties/api/use-draft.ts
  • features/bounties/api/use-escrow.ts
  • features/bounties/index.ts
  • features/bounties/types.ts
  • features/crowdfunding/api/campaign-client.ts
  • features/crowdfunding/api/keys.ts
  • features/crowdfunding/api/milestone-client.ts
  • features/crowdfunding/api/use-campaign.ts
  • features/crowdfunding/api/use-milestone.ts
  • features/crowdfunding/components/CrowdfundingExplore.tsx
  • features/crowdfunding/components/CrowdfundingPageHero.tsx
  • features/crowdfunding/index.ts
  • features/crowdfunding/types.ts
  • features/hackathons/api/draft-client.ts
  • features/hackathons/api/escrow-client.ts
  • features/hackathons/api/keys.ts
  • features/hackathons/api/use-draft.ts
  • features/hackathons/api/use-escrow.ts
  • features/hackathons/api/use-generate-from-brief.ts
  • features/hackathons/api/use-regenerate-section.ts
  • features/hackathons/api/use-submission-anchor.ts
  • features/hackathons/api/use-submission.ts
  • features/hackathons/index.ts
  • features/hackathons/types.ts
  • features/projects/api/index.ts
  • features/projects/components/ProjectCard.tsx
  • features/projects/types/index.ts
  • features/treasury/api.ts
  • features/treasury/index.ts
  • features/treasury/keys.ts
  • features/treasury/types.ts
  • features/treasury/use-treasury-audit.ts
  • features/treasury/use-treasury-policy.ts
  • features/treasury/use-treasury-receipts.ts
  • features/treasury/use-treasury-spend.ts
  • features/treasury/use-treasury-wallets.ts
  • hooks/hackathon/use-cancel-hackathon.ts
  • hooks/hackathon/use-delete-hackathon.ts
  • hooks/hackathon/use-hackathon-queries.ts
  • hooks/hackathon/use-hackathons-list.ts
  • hooks/hackathon/use-register-hackathon.ts
  • hooks/hackathon/use-team-posts.ts
  • hooks/use-auth.ts
  • hooks/use-bounty-draft.ts
  • hooks/use-bounty-publish.ts
  • hooks/use-bounty-steps.ts
  • hooks/use-follow.ts
  • hooks/use-hackathon-draft.ts
  • hooks/use-hackathon-publish.ts
  • hooks/use-hackathon-rewards.ts
  • hooks/use-hackathon-step-save.ts
  • hooks/use-hackathon-steps.ts
  • hooks/use-hackathons.ts
  • hooks/use-publish-winners.ts
  • hooks/use-rank-assignment.ts
  • hooks/use-reward-distribution-status.ts
  • hooks/use-winners-board.ts
  • hooks/use-wizard-steps.ts
  • instrumentation-client.ts
  • instrumentation.ts
  • lib/api/api.ts
  • lib/api/auth.ts
  • lib/api/client.ts
  • lib/api/hackathon.ts
  • lib/api/hackathons.ts
  • lib/api/hackathons/custom-questions.ts
  • lib/api/hackathons/draft.ts
  • lib/api/hackathons/index.ts
  • lib/api/hackathons/judging.ts
  • lib/api/hackathons/participants.ts
  • lib/api/hackathons/partners.ts
  • lib/api/hackathons/rewards.ts
  • lib/api/hackathons/tracks.ts
  • lib/api/hackathons/winners.ts
  • lib/api/index.ts
  • lib/api/judge.ts
  • lib/api/openapi.ts
  • lib/api/organization.ts
  • lib/api/types.ts
  • lib/api/user/earnings.ts
  • lib/api/wallet.ts
  • lib/auth/logger.ts
  • lib/config/tokens.ts
  • lib/config/wallet-kit.ts
  • lib/crowdfunding/status.ts
  • lib/error-reporting.ts
  • lib/providers/OrganizationProvider.tsx
  • lib/providers/hackathonProvider.tsx
  • lib/stores/auth-store.ts
  • lib/utils/bounty-escrow.ts
  • lib/utils/effective-prize-tiers.ts
  • lib/utils/hackathon-escrow.ts
  • lib/utils/hackathon-form-transforms.ts
  • lib/utils/hackathon-step-validation.ts
  • lib/utils/hackathon-winner-distribution.ts
  • lib/utils/prize-tier-matcher.ts
  • lib/utils/publish-op-storage.ts
  • lib/wallet/wallet-kit.ts
  • next.config.ts
  • openapi.snapshot.json
  • package.json
  • sentry.edge.config.ts
  • sentry.server.config.ts
  • types/earnings.ts
  • types/hackathon/core.ts
  • types/hackathon/draft.ts
  • types/hackathon/index.ts
  • types/hackathon/rewards.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/crowdfunding

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@0xdevcollins 0xdevcollins merged commit 52be58c into main Jun 24, 2026
2 of 7 checks passed
0xdevcollins added a commit that referenced this pull request Jun 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants