diff --git a/app/page.tsx b/app/page.tsx index 3b9c101..247955f 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -2,6 +2,8 @@ import { Nav } from "@/components/nav"; import { LookingFor } from "@/components/looking-for"; import { Hero } from "@/components/hero"; import { LogoList } from "@/components/logo-list"; +import { TaskRequirements } from "@/components/task-requirements"; +import { PayoutFlow } from "@/components/payout-flow"; import { CTA } from "@/components/cta"; import { Footer } from "@/components/footer"; import { Testimonial } from "@/components/testimonial"; @@ -14,6 +16,8 @@ export default function Home() { + + diff --git a/components/cta.tsx b/components/cta.tsx index 28d88ca..29da4e4 100644 --- a/components/cta.tsx +++ b/components/cta.tsx @@ -1,7 +1,7 @@ "use client"; import { Button } from "@/components/ui/button"; -import { ArrowRight } from "lucide-react"; +import { ArrowRight, HelpCircle, PlusCircle, Search } from "lucide-react"; import Ripple from "./ui/ripple"; import { motion } from "framer-motion"; import { FADE_UP_ANIMATION_VARIANTS } from "@/lib/framer-variants"; @@ -34,14 +34,32 @@ export function CTA() { variants={FADE_UP_ANIMATION_VARIANTS} className="text-center mt-2 text-muted-foreground" > - Check out gibwork and create or complete your very first work. + Check out gibwork to browse active bounties, post tasks, or learn how payments work. - - + + - Get Started - + + Browse Tasks + + + + + + + + Post a Task + + + + + + + Learn How Payments Work diff --git a/components/hero.tsx b/components/hero.tsx index a85820f..7e1586c 100644 --- a/components/hero.tsx +++ b/components/hero.tsx @@ -2,7 +2,7 @@ import { SolanaLogoType } from "@/components/logo/solana"; import { Button } from "@/components/ui/button"; -import { ArrowRight } from "lucide-react"; +import { ArrowRight, HelpCircle, PlusCircle, Search } from "lucide-react"; import Image from "next/image"; import dashboard from "@/public/dashboard-2.png"; import { Badge } from "@/components/ui/badge"; @@ -11,8 +11,6 @@ import { siteConfig } from "@/lib/site-config"; import SparklesText from "./ui/sparkles-text"; import { motion } from "framer-motion"; import { FADE_UP_ANIMATION_VARIANTS } from "@/lib/framer-variants"; -import { Clipboard } from "flowbite-react" - export function Hero() { return ( @@ -53,20 +51,38 @@ export function Hero() { connects you with the perfect match. - - + {/* 3-split CTA buttons */} + + + + + Browse Tasks + + + + + - Get Started For Free - + + Post a Task + + + + + + + Learn How Payments Work - powered by - {/* - - - - CA - - - F7Hwf8ib5DVCoiuyGr618Y3gon429Rnd1r5F9R5upump - - - F7Hwf8ib5D.....d1r5F9R5upump - - - - - - - - - */} - diff --git a/components/logo-list.tsx b/components/logo-list.tsx index 9c242f7..668631e 100644 --- a/components/logo-list.tsx +++ b/components/logo-list.tsx @@ -66,7 +66,7 @@ export function LogoList() { - Dean's List + Dean's List diff --git a/components/looking-for.tsx b/components/looking-for.tsx index 360463c..0b5bbc8 100644 --- a/components/looking-for.tsx +++ b/components/looking-for.tsx @@ -112,7 +112,7 @@ export function LookingFor() { height={100} /> - Open Source Bounty + Open-Source Bounties Incentivize a pull request made from a Github issue. diff --git a/components/payout-flow.tsx b/components/payout-flow.tsx new file mode 100644 index 0000000..650fa39 --- /dev/null +++ b/components/payout-flow.tsx @@ -0,0 +1,132 @@ +"use client"; + +import { motion } from "framer-motion"; +import { FADE_UP_ANIMATION_VARIANTS } from "@/lib/framer-variants"; +import { Coins, FileCheck, SearchCheck, ArrowRightLeft, GitBranch, Code2, ArrowRight } from "lucide-react"; +import Link from "next/link"; +import { Button } from "@/components/ui/button"; +import { siteConfig } from "@/lib/site-config"; + +export const payoutSteps = [ + { + step: "01", + title: "Escrow Deposit", + description: "Client creates task/bounty and funds escrow upfront on Solana.", + icon: Coins, + }, + { + step: "02", + title: "Check & Submit", + description: "Developer claims task and submits required deliverables or GitHub PR.", + icon: FileCheck, + }, + { + step: "03", + title: "Sponsor Review", + description: "Sponsor inspects submission details and verifies code or proof.", + icon: SearchCheck, + }, + { + step: "04", + title: "Approved Payout", + description: "Approved work releases SOL/USDC instantly to developer wallet.", + icon: ArrowRightLeft, + }, +]; + +export function PayoutFlow() { + return ( + + + + From task to payout + + + Transparent workflow from escrow funding to sponsor review and secure payout release. + Approved work gets paid directly from escrow upon sponsor confirmation. + + + + {/* Payout Steps */} + + {payoutSteps.map((stepItem, idx) => { + const Icon = stepItem.icon; + return ( + + + + + + + + STEP {stepItem.step} + + + {stepItem.title} + + {stepItem.description} + + + + ); + })} + + + {/* Developer / Open-Source Card */} + + + + + + + + + Open-Source Bounties + + + + Developer Workflow & GitHub Contributions + + + For open-source bounties, review the linked GitHub issue, work in a dedicated branch, + open a clear PR, and submit the PR through Gibwork for sponsor review. + + + + + + Explore Open-Source Tasks + + + + + + ); +} diff --git a/components/task-requirements.tsx b/components/task-requirements.tsx new file mode 100644 index 0000000..9f6f30f --- /dev/null +++ b/components/task-requirements.tsx @@ -0,0 +1,120 @@ +"use client"; + +import { motion } from "framer-motion"; +import { FADE_UP_ANIMATION_VARIANTS } from "@/lib/framer-variants"; +import { + ShieldCheck, + Twitter, + MessageSquare, + GitPullRequest, + Users, + Wallet, + Layers, + CheckCircle2, +} from "lucide-react"; + +export const taskBadges = [ + { + title: "Verified-only", + description: "Requires identity verification via Solana wallet signature", + icon: Wallet, + }, + { + title: "GitHub required", + description: "Connected GitHub profile needed for PR tracking and validation", + icon: GitPullRequest, + }, + { + title: "Wallet/payment required", + description: "Verified payment address or connected wallet needed for payout", + icon: ShieldCheck, + }, + { + title: "X required", + description: "Connected X (Twitter) account needed for submission", + icon: Twitter, + }, + { + title: "Discord required", + description: "Active community member in project Discord", + icon: MessageSquare, + }, + { + title: "Minimum followers", + description: "Specific social audience or reach threshold", + icon: Users, + }, + { + title: "Submission limit", + description: "Cap on total entries or max submissions per worker", + icon: Layers, + }, + { + title: "Sponsor approval required", + description: "Deliverables are reviewed before funds are released", + icon: CheckCircle2, + }, +]; + +export function TaskRequirements() { + return ( + + + + Know what each task needs before you start + + + Gibwork tasks can require verified profiles, connected accounts, GitHub PRs, + product feedback, social deliverables, or other specific proof. Clear + requirements help workers choose tasks they can actually complete. + + + + + {taskBadges.map((badge, idx) => { + const Icon = badge.icon; + return ( + + + + + + {badge.title} + + {badge.description} + + + + + Requirement Criteria + + + ); + })} + + + ); +} diff --git a/components/ui/sparkles-text.tsx b/components/ui/sparkles-text.tsx index e5aed37..8dcbc4f 100644 --- a/components/ui/sparkles-text.tsx +++ b/components/ui/sparkles-text.tsx @@ -102,7 +102,7 @@ const SparklesText: React.FC = ({ const interval = setInterval(updateStars, 100); return () => clearInterval(interval); - }, [colors.first, colors.second]); + }, [colors.first, colors.second, sparklesCount]); return ( ( )}
+ {stepItem.description} +
+ For open-source bounties, review the linked GitHub issue, work in a dedicated branch, + open a clear PR, and submit the PR through Gibwork for sponsor review. +
+ {badge.description} +