/** * Bounty detail page — single desire with fulfillment option. */ import { useParams, Link } from 'react-router-dom'; import { useQuery } from '@tanstack/react-query'; import api from '@/lib/api'; export default function BountyDetail() { const { id } = useParams<{ id: string }>(); const { data: desire, isLoading } = useQuery({ queryKey: ['desire', id], queryFn: async () => { const { data } = await api.get(`/desires/${id}`); return data; }, enabled: !!id, }); if (isLoading) { return (
); } if (!desire) { return (
Desire not found
); } return (
← Back to Bounties

{desire.prompt_text}

🔥 Heat: {desire.heat_score.toFixed(1)} {desire.cluster_count > 1 && ( 👥 {desire.cluster_count} similar )} {desire.tip_amount_cents > 0 && ( 💰 ${(desire.tip_amount_cents / 100).toFixed(2)} bounty )} {new Date(desire.created_at).toLocaleDateString()}
{desire.status}
{desire.style_hints && (

Style hints

              {JSON.stringify(desire.style_hints, null, 2)}
            
)} {desire.status === 'open' && (
Fulfill this Desire →

Write a shader that matches this description, then submit it as fulfillment.

)} {desire.fulfilled_by_shader && (

Fulfilled by

View shader →
)}
); }