Skip to content

feat(bounties): sort by upvotes, link existing repositories, organization select - #36

Merged
debba merged 3 commits into
mainfrom
feat/bounty-link-repo
Oct 13, 2026
Merged

debba merged 3 commits into
mainfrom
feat/bounty-link-repo

Conversation

@debba

@debba debba commented Oct 13, 2026

Copy link
Copy Markdown
Contributor

What

  • Sort: the Bounty Board opens sorted by upvotes (descending); "Most voted" is now the first option, "By status" still available.
  • Link an existing repository: the Start building form has a "New repository / Link an existing one" switch. Linking calls POST /api/requests/:id/repo and suggests the repositories the visitor maintains. Kinds without a scaffold get the link form only.
  • Organization select: filled from GET /api/submit/owners (account first, then orgs); falls back to the old text field with autofill disabled.

Merge order

Needs TabularisDB/tabularium#33 deployed first. Before that, the organization field stays free text and linking returns the registry's 404 as an error.

Checks

next build passes (the fetch-app-data step was rate-limited by GitHub locally, so it was run separately).

debba added 2 commits October 13, 2026 23:27
… from a list

The Start building form gains a "Link an existing one" mode backed by
Tabularium's POST /api/requests/:id/repo, with the claimer's maintained
repositories as suggestions. The organization field becomes a select fed by
GET /api/submit/owners, falling back to free text (without autofill).
@vercel

vercel Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
website Ready Ready Preview Oct 13, 2026 9:44pm UTC

Request Review

}, [canScaffold]);

// Suggestions for the link field, loaded the first time it is shown.
useEffect(() => {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: useEffect caches failed fetches permanently

The effect only runs when repos === null. If the first fetch fails, repos becomes [] (line 297 in requests.ts) and the effect never runs again when re-entering 'link' mode. User can still paste a URL manually, but suggestions won't refresh.

Consider using a separate reposLoaded boolean flag or allowing retry on mode change.

return (
<div className={styles.wrapper}>
{canScaffold && (
<div className={styles.modes} role="tablist" aria-label="Repository">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: ARIA tabs pattern incomplete for segmented control

The mode toggle uses role="tablist" and role="tab" but lacks aria-controls/id attributes linking tabs to their panels. For a simple two-button toggle, role="group" with aria-pressed on each button is more semantically appropriate and accessible.

try {
const res = await fetch(`${TABULARIUM_URL}/api/submit/repos?page=1`, {credentials: 'include'});
if (!res.ok) return [];
const body = (await res.json()) as {groups: Array<{repos: MaintainedRepo[]}>};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: Fragile API response assumption

fetchMaintainedRepos assumes {groups: Array<{repos: MaintainedRepo[]}>} structure. If the API changes, this silently returns [] via the catch block. Consider validating the response structure or logging a warning in development to detect API drift early.

@kilo-code-bot

kilo-code-bot Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Files Reviewed (2 files)
  • src/components/pages/plugins/bounties/BountyGrid/ScaffoldForm/ScaffoldForm.tsx
  • src/lib/plugins/requests.ts
Previous Review Summary (commit f735767)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit f735767)

Status: 3 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 3
Issue Details (click to expand)

SUGGESTION

File Line Issue
src/components/pages/plugins/bounties/BountyGrid/ScaffoldForm/ScaffoldForm.tsx 64 useEffect caches failed fetches permanently
src/components/pages/plugins/bounties/BountyGrid/ScaffoldForm/ScaffoldForm.tsx 154 ARIA tabs pattern incomplete for segmented control
src/lib/plugins/requests.ts 294 Fragile API response assumption
Files Reviewed (5 files)
  • src/components/pages/plugins/bounties/BountyGrid/BountyFilters/BountyFilters.tsx
  • src/components/pages/plugins/bounties/BountyGrid/BountyGrid.tsx
  • src/components/pages/plugins/bounties/BountyGrid/ScaffoldForm/ScaffoldForm.module.scss
  • src/components/pages/plugins/bounties/BountyGrid/ScaffoldForm/ScaffoldForm.tsx
  • src/lib/plugins/requests.ts

Fix these issues in Kilo Cloud


Reviewed by free · Input: 37.2K · Output: 1.5K · Cached: 106K

@debba
debba merged commit f5f6654 into main Oct 13, 2026
2 of 3 checks passed
@debba
debba deleted the feat/bounty-link-repo branch October 13, 2026 21:42

This branch was successfully deployed

1 active deployment
Preview — 3bd11f25 Deployed Oct 13, 2026 by vercel[bot]
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.

1 participant