# Project export: Provability

This document was generated by HackStack to give an AI agent context about a hackathon project. Sections are labeled with their provenance; content marked as truncated was cut to keep this document small.

## Project metadata

- Hackathon: TreeHacks 2026
- Tagline: Trustless, crypto-powered training for private AI models. We connect clients with expert builders to deliver provably correct results, automated verification, and instant on-chain payments.
- Devpost: https://devpost.com/software/provability
- GitHub: https://github.com/balaji-balachandran/Proovability
- Video: https://www.youtube.com/embed/Bcbh4ZbYjig?enablejsapi=1&hl=en_US&rel=0&start=&version=3&wmode=transparent
- Team: 1 GitHub contributor(s) — Balaji Balachandran (1 commits)

## Devpost submission (written by the team)

### Inspiration

Crypto is often viewed strictly as a financial tool, as a way to move digital currency across the web. Provability flips the script by leveraging the privacy-preserving power of blockchain for private ML model training. Traditional platforms like Kaggle require a leap of faith; contestants must trust the platform not to steal their model weights and to honestly pay out prizes. Provability removes the need for "faith" by using a trustless, crypto-powered architecture. Beyond security, we’ve designed Provability to bridge the gap between technical brilliance and real-world needs. You don’t need to be an ML expert to benefit from our ecosystem. Our platform allows anyone to request a model, set a bounty, and have it built for them. Whether you're a business owner with data but no data scientists, or an enthusiast with a vision, you can commission high-performance models without ever writing a line of code—all while maintaining complete ownership and privacy of the results.

### How we built it

I built Provability on top of the Solana network, and used smart contracts on Solana to ensure that when an individual hits the performance threshold, the prize money is instantly paid out. To make the platform completely trustless, I used zero knowledge proofs of computation. For the ML inference (for performance verification), I used Runpod and Modal as the compute providers. To train models to test the system, I used Google Colab. I also deployed my platform on Vercel for scalability.

### Challenges we ran into

Coding in Solana to create smart contracts and the ZK proof was very difficult, as I had never done that before. Theoretically, it was challenging to design a trustless system of this kind, where even the platform itself is not trusted. The system I built handles collusion between any two parties, and is also cryptographically secure.

### Accomplishments we're proud of

I’m proud that I was able to put together the database, the crypto backend, the ML inference, and the frontend in 36 hours. I am also happy about the trustless architecture of Provability which was enabled by the use of ZK proofs and the Solana blockchain, as well as the visually appealing frontend that ties everything together.

### What we learned

Zero knowledge proofs are powerful tools in proving that computation was done correctly, without needing to know anything about the actual computation. This enabled us to make the model performance evaluation completely trust less, since we could verify that a trusted compute node ran the evaluation script properly, without the model builder ever seeing the test data, and the bounty provider ever seeing the model weights. However, this powerful tool came with the price of a steep learning curve, as learning Rust on the fly to code on the Solana blockchain was very difficult. I also needed Rust to program the smart contracts that would be in charge of holding and releasing the funds at appropriate times.

### What's next

For my next step, I want to first enable GPU acceleration on the platform to speed up the ZK proofs, as that is the current bottleneck in the system. I would also want to allow more flexible compute options, such as on-prem or existing cloud providers. It would also take time to fully ensure the cryptographic security guarantees that I would desire in a full-fledged product. For example, I am interested in using recent advances in cryptographically secure ML, such as Fully Homomorphic Encryption (FHE), in order to guarantee the privacy of test data and prevent leakage.

## README (from the GitHub repository)

No README available.

## Detected evidence (automated analysis)

Indexed codebase: 105 recognized source files, 300 KB.
- CSS (language) — detected in the code
- HTML (language) — detected in the code
- JavaScript (language) — detected in the code
- Python (language) — detected in the code
- React (technology) — detected in the code
- Rust (language) — detected in the code
- SQL (language) — detected in the code
- Supabase (technology) — detected in the code
- Tailwind CSS (technology) — detected in the code
- TypeScript (language) — detected in the code
- Next.js (technology) — claimed on Devpost, not found in the code

## Codebase structure (from repository index)

### Files (120 of 138)

```
Provability-main/Provability-main/.gitignore
Provability-main/Provability-main/.prettierignore
Provability-main/Provability-main/Anchor.toml
Provability-main/Provability-main/assets/font/satoshi/Satoshi-Black.otf
Provability-main/Provability-main/assets/font/satoshi/Satoshi-BlackItalic.otf
Provability-main/Provability-main/assets/font/satoshi/Satoshi-Bold.otf
Provability-main/Provability-main/assets/font/satoshi/Satoshi-BoldItalic.otf
Provability-main/Provability-main/assets/font/satoshi/Satoshi-Italic.otf
Provability-main/Provability-main/assets/font/satoshi/Satoshi-Light.otf
Provability-main/Provability-main/assets/font/satoshi/Satoshi-LightItalic.otf
Provability-main/Provability-main/assets/font/satoshi/Satoshi-Medium.otf
Provability-main/Provability-main/assets/font/satoshi/Satoshi-MediumItalic.otf
Provability-main/Provability-main/assets/font/satoshi/Satoshi-Regular.otf
Provability-main/Provability-main/backend/zkml/Cargo.toml
Provability-main/Provability-main/backend/zkml/contracts/Anchor.toml
Provability-main/Provability-main/backend/zkml/contracts/programs/zkml/Cargo.toml
Provability-main/Provability-main/backend/zkml/contracts/programs/zkml/src/lib.rs
Provability-main/Provability-main/backend/zkml/deploy.sh
Provability-main/Provability-main/backend/zkml/elf/riscv32im-succinct-zkvm-elf
Provability-main/Provability-main/backend/zkml/program/Cargo.toml
Provability-main/Provability-main/backend/zkml/program/src/main.rs
Provability-main/Provability-main/backend/zkml/program/src/node.py
Provability-main/Provability-main/backend/zkml/README.md
Provability-main/Provability-main/backend/zkml/script/Cargo.toml
Provability-main/Provability-main/backend/zkml/script/src/main.rs
Provability-main/Provability-main/backend/zkml/z7vFZVAXE25w1RhEDD2qgjZVvQrKgZiL9GhTwFCYETi.json
Provability-main/Provability-main/bun.lockb
Provability-main/Provability-main/Cargo.toml
Provability-main/Provability-main/client.ts
Provability-main/Provability-main/components.json
Provability-main/Provability-main/eslint.config.js
Provability-main/Provability-main/frontend/src/app/utils/supabase/client.ts
Provability-main/Provability-main/frontend/src/app/utils/supabase/middleware.ts
Provability-main/Provability-main/frontend/src/app/utils/supabase/server.ts
Provability-main/Provability-main/index.html
Provability-main/Provability-main/migrations/deploy.ts
Provability-main/Provability-main/package.json
Provability-main/Provability-main/postcss.config.js
Provability-main/Provability-main/postcss.config.mjs
Provability-main/Provability-main/programs/bounty_escrow/Cargo.toml
Provability-main/Provability-main/programs/bounty_escrow/src/lib.rs
Provability-main/Provability-main/public/fonts/Satoshi-Italic.otf
Provability-main/Provability-main/public/robots.txt
Provability-main/Provability-main/README.md
Provability-main/Provability-main/rust-toolchain.toml
Provability-main/Provability-main/src/App.css
Provability-main/Provability-main/src/App.tsx
Provability-main/Provability-main/src/app/bounties/bounties.module.css
Provability-main/Provability-main/src/app/bounties/page.tsx
Provability-main/Provability-main/src/app/not-found.tsx
Provability-main/Provability-main/src/app/providers.tsx
Provability-main/Provability-main/src/components/bounties/BountiesSection.tsx
Provability-main/Provability-main/src/components/bounties/BountyCard.tsx
Provability-main/Provability-main/src/components/BountiesSection.tsx
Provability-main/Provability-main/src/components/BountyCard.tsx
Provability-main/Provability-main/src/components/DropField.tsx
Provability-main/Provability-main/src/components/Header.tsx
Provability-main/Provability-main/src/components/Hero.tsx
Provability-main/Provability-main/src/components/NavLink.tsx
Provability-main/Provability-main/src/components/TrainingDataViewer.tsx
Provability-main/Provability-main/src/components/ui/accordion.tsx
Provability-main/Provability-main/src/components/ui/alert-dialog.tsx
Provability-main/Provability-main/src/components/ui/alert.tsx
Provability-main/Provability-main/src/components/ui/aspect-ratio.tsx
Provability-main/Provability-main/src/components/ui/avatar.tsx
Provability-main/Provability-main/src/components/ui/badge.tsx
Provability-main/Provability-main/src/components/ui/breadcrumb.tsx
Provability-main/Provability-main/src/components/ui/button.tsx
Provability-main/Provability-main/src/components/ui/calendar.tsx
Provability-main/Provability-main/src/components/ui/card.tsx
Provability-main/Provability-main/src/components/ui/carousel.tsx
Provability-main/Provability-main/src/components/ui/chart.tsx
Provability-main/Provability-main/src/components/ui/checkbox.tsx
Provability-main/Provability-main/src/components/ui/collapsible.tsx
Provability-main/Provability-main/src/components/ui/command.tsx
Provability-main/Provability-main/src/components/ui/context-menu.tsx
Provability-main/Provability-main/src/components/ui/dialog.tsx
Provability-main/Provability-main/src/components/ui/drawer.tsx
Provability-main/Provability-main/src/components/ui/dropdown-menu.tsx
Provability-main/Provability-main/src/components/ui/form.tsx
Provability-main/Provability-main/src/components/ui/hover-card.tsx
Provability-main/Provability-main/src/components/ui/input-otp.tsx
Provability-main/Provability-main/src/components/ui/input.tsx
Provability-main/Provability-main/src/components/ui/label.tsx
Provability-main/Provability-main/src/components/ui/menubar.tsx
Provability-main/Provability-main/src/components/ui/navigation-menu.tsx
Provability-main/Provability-main/src/components/ui/pagination.tsx
Provability-main/Provability-main/src/components/ui/popover.tsx
Provability-main/Provability-main/src/components/ui/progress.tsx
Provability-main/Provability-main/src/components/ui/radio-group.tsx
Provability-main/Provability-main/src/components/ui/resizable.tsx
Provability-main/Provability-main/src/components/ui/scroll-area.tsx
Provability-main/Provability-main/src/components/ui/select.tsx
Provability-main/Provability-main/src/components/ui/separator.tsx
Provability-main/Provability-main/src/components/ui/sheet.tsx
Provability-main/Provability-main/src/components/ui/sidebar.tsx
Provability-main/Provability-main/src/components/ui/skeleton.tsx
Provability-main/Provability-main/src/components/ui/slider.tsx
Provability-main/Provability-main/src/components/ui/sonner.tsx
Provability-main/Provability-main/src/components/ui/switch.tsx
Provability-main/Provability-main/src/components/ui/table.tsx
Provability-main/Provability-main/src/components/ui/tabs.tsx
Provability-main/Provability-main/src/components/ui/textarea.tsx
Provability-main/Provability-main/src/components/ui/toast.tsx
Provability-main/Provability-main/src/components/ui/toaster.tsx
Provability-main/Provability-main/src/components/ui/toggle-group.tsx
Provability-main/Provability-main/src/components/ui/toggle.tsx
Provability-main/Provability-main/src/components/ui/tooltip.tsx
Provability-main/Provability-main/src/components/ui/use-toast.ts
Provability-main/Provability-main/src/hooks/use-mobile.tsx
Provability-main/Provability-main/src/hooks/use-toast.ts
Provability-main/Provability-main/src/hooks/useAuth.ts
Provability-main/Provability-main/src/hooks/useTypewriter.ts
Provability-main/Provability-main/src/index.css
Provability-main/Provability-main/src/integrations/supabase/client.ts
Provability-main/Provability-main/src/integrations/supabase/types.ts
Provability-main/Provability-main/src/lib/supabaseServer.ts
Provability-main/Provability-main/src/lib/uploadModel.ts
Provability-main/Provability-main/src/lib/utils.ts
Provability-main/Provability-main/src/main.tsx
[18 more files omitted for size]
```

### Dependencies

- Provability-main/Provability-main/backend/zkml/contracts/programs/zkml/Cargo.toml: anchor-lang@0.31, solana-program@2.0, sp1-solana@0.1.0
- Provability-main/Provability-main/backend/zkml/program/Cargo.toml: rand@0.8, rand_chacha@0.3, rand_core@0.6.4, sha2@0.10, sp1-zkvm@3.4.0
- Provability-main/Provability-main/backend/zkml/script/Cargo.toml: anyhow@1.0, dotenv@0.15, openssl@0.10, serde@1.0, serde_json@1.0, solana-client@2.0, solana-program@2.0, solana-sdk@2.0, sp1-sdk@3.4.0, tokio@1.0
- Provability-main/Provability-main/package.json: @eslint/js@^9.32.0, @hookform/resolvers@^3.10.0, @radix-ui/react-accordion@^1.2.11, @radix-ui/react-alert-dialog@^1.1.14, @radix-ui/react-aspect-ratio@^1.1.7, @radix-ui/react-avatar@^1.1.10, @radix-ui/react-checkbox@^1.3.2, @radix-ui/react-collapsible@^1.1.11, @radix-ui/react-context-menu@^2.2.15, @radix-ui/react-dialog@^1.1.14, @radix-ui/react-dropdown-menu@^2.1.15, @radix-ui/react-hover-card@^1.1.14, @radix-ui/react-label@^2.1.7, @radix-ui/react-menubar@^1.1.15, @radix-ui/react-navigation-menu@^1.2.13, @radix-ui/react-popover@^1.1.14, @radix-ui/react-progress@^1.1.7, @radix-ui/react-radio-group@^1.3.7, @radix-ui/react-scroll-area@^1.2.9, @radix-ui/react-select@^2.2.5, @radix-ui/react-separator@^1.1.7, @radix-ui/react-slider@^1.3.5, @radix-ui/react-slot@^1.2.3, @radix-ui/react-switch@^1.2.5, @radix-ui/react-tabs@^1.1.12, @radix-ui/react-toast@^1.2.14, @radix-ui/react-toggle@^1.1.9, @radix-ui/react-toggle-group@^1.1.10, @radix-ui/react-tooltip@^1.2.7, @solana/wallet-adapter-base@^0.9.27, @solana/wallet-adapter-react@^0.15.39, @solana/wallet-adapter-react-ui@^0.9.39, @solana/wallet-adapter-wallets@^0.19.37, @solana/web3.js@^1.98.4, @supabase/supabase-js@^2.95.3, @tailwindcss/typography@^0.5.16, @tanstack/react-query@^5.83.0, @testing-library/jest-dom@^6.6.0, @testing-library/react@^16.0.0, @types/node@^22.16.5, @types/react@^18.3.23, @types/react-dom@^18.3.7, @vitejs/plugin-react-swc@^3.11.0, autoprefixer@^10.4.21, class-variance-authority@^0.7.1, clsx@^2.1.1, cmdk@^1.1.1, date-fns@^3.6.0, embla-carousel-react@^8.6.0, eslint@^9.32.0, eslint-plugin-react-hooks@^5.2.0, eslint-plugin-react-refresh@^0.4.20, globals@^15.15.0, input-otp@^1.4.2, jsdom@^20.0.3, lovable-tagger@^1.1.13, lucide-react@^0.462.0, next-themes@^0.3.0, postcss@^8.5.6, react@^18.3.1, react-day-picker@^8.10.1, react-dom@^18.3.1, react-hook-form@^7.61.1, react-resizable-panels@^2.1.9, react-router-dom@^6.30.1, recharts@^2.15.4, sonner@^1.7.4, tailwind-merge@^2.6.0, tailwind-scrollbar@^3.1.0, tailwindcss@^3.4.17, tailwindcss-animate@^1.0.7, typescript@^5.8.3, typescript-eslint@^8.38.0, vaul@^0.9.9, vite@^5.4.19, vitest@^3.2.4, zod@^3.25.76
- Provability-main/Provability-main/programs/bounty_escrow/Cargo.toml: anchor-lang@0.32.1

### Recent commits (newest first)

- done

## Key source files (fetched from GitHub, selected and truncated for size)

### Provability-main/Provability-main/Cargo.toml

```
[workspace]
members = [
    "programs/*"
]
resolver = "2"

[profile.release]
overflow-checks = true
lto = "fat"
codegen-units = 1
[profile.release.build-override]
opt-level = 3
incremental = false
codegen-units = 1

```

### Provability-main/Provability-main/package.json

```
{
  "name": "vite_react_shadcn_ts",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "build:dev": "vite build --mode development",
    "lint": "eslint .",
    "preview": "vite preview",
    "test": "vitest run",
    "test:watch": "vitest"
  },
  "dependencies": {
    "@hookform/resolvers": "^3.10.0",
    "@radix-ui/react-accordion": "^1.2.11",
    "@radix-ui/react-alert-dialog": "^1.1.14",
    "@radix-ui/react-aspect-ratio": "^1.1.7",
    "@radix-ui/react-avatar": "^1.1.10",
    "@radix-ui/react-checkbox": "^1.3.2",
    "@radix-ui/react-collapsible": "^1.1.11",
    "@radix-ui/react-context-menu": "^2.2.15",
    "@radix-ui/react-dialog": "^1.1.14",
    "@radix-ui/react-dropdown-menu": "^2.1.15",
    "@radix-ui/react-hover-card": "^1.1.14",
    "@radix-ui/react-label": "^2.1.7",
    "@radix-ui/react-menubar": "^1.1.15",
    "@radix-ui/react-navigation-menu": "^1.2.13",
    "@radix-ui/react-popover": "^1.1.14",
    "@radix-ui/react-progress": "^1.1.7",
    "@radix-ui/react-radio-group": "^1.3.7",
    "@radix-ui/react-scroll-area": "^1.2.9",
    "@radix-ui/react-select": "^2.2.5",
    "@radix-ui/react-separator": "^1.1.7",
    "@radix-ui/react-slider": "^1.3.5",
    "@radix-ui/react-slot": "^1.2.3",
    "@radix-ui/react-switch": "^1.2.5",
    "@radix-ui/react-tabs": "^1.1.12",
    "@radix-ui/react-toast": "^1.2.14",
    "@radix-ui/react-toggle": "^1.1.9",
    "@radix-ui/react-toggle-group": "^1.1.10",
    "@radix-ui/react-tooltip": "^1.2.7",
    "@solana/wallet-adapter-base": "^0.9.27",
    "@solana/wallet-adapter-react": "^0.15.39",
    "@solana/wallet-adapter-react-ui": "^0.9.39",
    "@solana/wallet-adapter-wallets": "^0.19.37",
    "@solana/web3.js": "^1.98.4",
    "@supabase/supabase-js": "^2.95.3",
    "@tanstack/react-query": "^5.83.0",
    "class-variance-authority": "^0.7.1",
    "clsx": "^2.1.1",
    "cmdk": "^1.1.1",
    "date-fns": "^3.6.0",
    "embla-carousel-react": "^8.6.0",
    "input-otp": "^1.4.2",
    "lucide-react": "^0.462.0",
    "next-themes": "^0.3.0",
    "react": "^18.3.1",
    "react-day-picker": "^8.10.1",
    "react-dom": "^18.3.1",
    "react-hook-form": "^7.61.1",
    "react-resizable-panels": "^2.1.9",
    "react-router-dom": "^6.30.1",
    "recharts": "^2.15.4",
    "sonner": "^1.7.4",
    "tailwind-merge": "^2.6.0",
    "tailwindcss-animate": "^1.0.7",
    "vaul": "^0.9.9",
    "zod": "^3.25.76"
  },
  "devDependencies": {
    "@eslint/js": "^9.32.0",
    "@tailwindcss/typography": "^0.5.16",
    "@testing-library/jest-dom": "^6.6.0",
    "@testing-library/react": "^16.0.0",
    "@types/node": "^22.16.5",
    "@types/react": "^18.3.23",
    "@types/react-dom": "^18.3.7",
    "@vitejs/plugin-react-swc": "^3.11.0",
    "autoprefixer": "^10.4.21",
    "eslint": "^9.32.0",
    "eslint-plugin-react-hooks": "^5.2.0",
    "eslint-plugin-react-refresh": "^0.4.20",
    "globals": "^15.15.0",
    "jsdom": "^20.0.3",
    "lovable-tagger": "^1.1.13",
    "postcss": "^8.5.6",
    "tailwind-scrollbar": "^3.1.0",
    "tailwindcss": "^3.4.17",
    "typescript": "^5.8.3",
    "typescript-eslint": "^8.38.0",
    "vite": "^5.4.19",
    "vitest": "^3.2.4"
  }
}

```

### Provability-main/Provability-main/backend/zkml/Cargo.toml

```
[workspace]
members = [
    "program",
    "script",
    "contracts/programs/zkml"
]
resolver = "2"
```

### Provability-main/Provability-main/programs/bounty_escrow/Cargo.toml

```
[package]
name = "bounty_escrow"
version = "0.1.0"
description = "Created with Anchor"
edition = "2021"

[lib]
crate-type = ["cdylib", "lib"]
name = "bounty_escrow"

[features]
default = []
cpi = ["no-entrypoint"]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
idl-build = ["anchor-lang/idl-build"]
anchor-debug = []
custom-heap = []
custom-panic = []


[dependencies]
anchor-lang = "0.32.1"


[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(target_os, values("solana"))'] }

```

### Provability-main/Provability-main/backend/zkml/program/Cargo.toml

```
# backend/zkml/program/Cargo.toml

[package]
name = "treehacks-zkml-program"
version = "0.1.0"
edition = "2021"

[dependencies]
sp1-zkvm = "3.4.0"
rand = "0.8"
rand_chacha = "0.3"
rand_core = "0.6.4"
sha2 = "0.10"
```

### Provability-main/Provability-main/backend/zkml/script/Cargo.toml

```
[package]
version = "0.1.0"
name = "treehacks-zkml-script"
edition = "2021"

[dependencies]
# SP1 SDK to generate proofs
sp1-sdk = { version = "3.4.0", features = ["network"] }
# Use vendored OpenSSL to avoid system dependency issues
openssl = { version = "0.10", features = ["vendored"] }

# Solana Interaction - Updated to 2.0 for compatibility with modern dependencies
solana-client = "2.0"
solana-sdk = "2.0"
solana-program = "2.0"

# Utilities
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tokio = { version = "1.0", features = ["full"] } # Needed for async
dotenv = "0.15" 
anyhow = "1.0"
```

### Provability-main/Provability-main/backend/zkml/contracts/programs/zkml/Cargo.toml

```
[package]
name = "treehacks-zkml"
version = "0.1.0"
description = "Created with Anchor"
edition = "2021"

[lib]
crate-type = ["cdylib", "lib"]
name = "treehacks_zkml"

[features]
no-entrypoint = []
no-idl = []
no-log-ix-name = []
cpi = ["no-entrypoint"]
default = []
idl-build = ["anchor-lang/idl-build"]

[dependencies]
# Anchor Framework - Updated to 0.31 for Solana 2.0 compatibility
anchor-lang = "0.31"

# SP1 Verifier for Solana
# Note: If this version fails, try "0.1.0" or check crates.io for "sp1-solana"
sp1-solana = "0.1.0" 

# Solana Program - Updated to 2.0 for compatibility with modern dependencies
solana-program = "2.0"
```

### Provability-main/Provability-main/src/main.tsx

```typescript
import { createRoot } from "react-dom/client";
import App from "./App.tsx";
import "./index.css";

createRoot(document.getElementById("root")!).render(<App />);

```

### Provability-main/Provability-main/src/App.tsx

```typescript
import { Toaster } from "@/components/ui/toaster";
import { Toaster as Sonner } from "@/components/ui/sonner";
import { TooltipProvider } from "@/components/ui/tooltip";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import { useMemo } from "react";
import { ConnectionProvider, WalletProvider } from "@solana/wallet-adapter-react";
import { WalletAdapterNetwork } from "@solana/wallet-adapter-base";
import { WalletModalProvider } from "@solana/wallet-adapter-react-ui";
import { PhantomWalletAdapter, SolflareWalletAdapter } from "@solana/wallet-adapter-wallets";
import { clusterApiUrl } from "@solana/web3.js";
import Index from "./pages/Index";
import Bounties from "./pages/Bounties";
import NotFound from "./pages/NotFound";
import CreateBounty from "./pages/CreateBounty";
import ModelSubmissions from "./pages/ModelSubmissions";

import "@solana/wallet-adapter-react-ui/styles.css";

const queryClient = new QueryClient();

const App = () => {
  const network = WalletAdapterNetwork.Devnet;
  const endpoint = useMemo(() => clusterApiUrl(network), [network]);

  const wallets = useMemo(
    () => [
      new PhantomWalletAdapter(),
      new SolflareWalletAdapter(),
    ],
    []
  );

  return (
    <ConnectionProvider endpoint={endpoint}>
      <WalletProvider wallets={wallets} autoConnect>
        <WalletModalProvider>
          <QueryClientProvider client={queryClient}>
            <TooltipProvider>
              <Toaster />
              <Sonner />
              <BrowserRouter>
                <Routes>
                  <Route path="/" element={<Index />} />
                  <Route path="/bounties" element={<Bounties />} />
                  <Route path="/createbounty" element={<CreateBounty/>}/>
                  <Route path="/submissions" element={<ModelSubmissions/>}/>
                  {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */}
                  <Route path="*" element={<NotFound />} />
                </Routes>
              </BrowserRouter>
            </TooltipProvider>
          </QueryClientProvider>
        </WalletModalProvider>
      </WalletProvider>
    </ConnectionProvider>
  );
};

export default App;

```

### Provability-main/Provability-main/src/pages/Index.tsx

```typescript
import { Link } from "react-router-dom";
import Header from "@/components/Header";
import { useTypewriter } from "@/hooks/useTypewriter";

const Index = () => {
  const { text, shouldBlinkCaret } = useTypewriter({
    text: "Provable rewards for builders.",
    // Slower + more human: non-uniform delays and extra pauses on spaces/punctuation
    typeMs: 122,
    deleteMs: 90,
    typeJitterMs: 191,
    deleteJitterMs: 160,
    spacePauseMs: 191,
    punctuationPauseMs: 626,
    // Noticeable end-of-line pause before deleting
    pauseAfterTypeMs: 1700,
    pauseAfterDeleteMs: 650,
    startDelayMs: 350,
    loop: true,
  });

  return (
    <div className="min-h-screen bg-background">
      <Header />
      <div className="flex min-h-screen flex-col items-center justify-center px-8">
        <h1 className="text-5xl md:text-7xl font-black tracking-tight text-foreground whitespace-nowrap">
          Provability <span className="text-primary">|</span>{" "}
          <span className="text-primary font-medium text-3xl md:text-5xl">
            {text}
            <span
              className={[
                "inline-block w-[0.6ch] translate-y-[0.06em] align-baseline text-primary/80",
                shouldBlinkCaret ? "animate-caret-blink" : "",
              ].join(" ")}
            >
              |
            </span>
          </span>
        </h1>
        <Link
          to="/bounties"
          className={[
            "group mt-10 inline-flex items-center gap-2 rounded-full px-8 py-3 text-sm font-semibold",
            "text-foreground/90",
            "border border-[hsl(var(--border)/0.6)] bg-[hsl(var(--card)/0.22)] backdrop-blur-md",
            "shadow-[0_0_0_1px_hsl(var(--primary)/0.06),0_12px_40px_-20px_rgba(0,0,0,0.9)]",
            "transition-all duration-200",
            "hover:border-[hsl(var(--primary)/0.35)] hover:bg-[hsl(var(--card)/0.32)] hover:text-foreground hover:shadow-[0_0_0_1px_hsl(var(--primary)/0.12),0_18px_60px_-28px_hsl(var(--primary)/0.45)]",
            "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--primary)/0.55)] focus-visible:ring-offset-2 focus-visible:ring-offset-background",
            "active:translate-y-[1px] active:bg-[hsl(var(--card)/0.38)]",
          ].join(" ")}
        >
          Explore Bounties
          <span className="translate-x-0 transition-transform duration-200 group-hover:translate-x-0.5">
            →
          </span>
        </Link>
      </div>
    </div>
  );
};

export default Index;

```

[100 more indexed source files omitted to keep this export small. The full file list is in the Codebase structure section above.]