Your reputation, portable forever.
RepuLink is a portable, on-chain reputation system built on Solana. Initially designed for freelancers, the protocol is flexible enough for any trust-based relationship: employers verifying employees, clients endorsing service providers, DAOs credentialing contributors, or communities recognizing members.
Built on Solana · Submitted to WayLearn x Solana Foundation Hackathon 2026
Freelancers in LATAM and globally build their reputation across Upwork, Fiverr, and direct clients — but that reputation is trapped in each platform. When they switch platforms or work directly, they start from zero.
RepuLink fixes that. When a freelancer completes a project, they send the client a verification link. The client approves it on-chain with their identity (wallet, LinkedIn, Twitter, email). The result is a soulbound badge — permanently on Solana, owned by the freelancer, verifiable by anyone with a public profile link.
No wallet required for clients. No crypto knowledge needed. The blockchain is invisible.
| Feature | Description |
|---|---|
| Freelancer profile | Create an on-chain identity with a username and avatar |
| Endorsement requests | Send clients a link to verify your completed work |
| Client approval | Clients approve or reject via a simple link — no wallet required |
| Soulbound badges | Non-transferable NFTs that cannot be faked or sold |
| Client identity on-chain | Approvals store wallet address, LinkedIn, Twitter, and email |
| Public profile | Share a repulink.app/your-address link — verifiable by anyone |
| Profile editor | Update username, upload avatar, delete account |
| Solana Explorer | Every badge links directly to the on-chain transaction |
┌─────────────────────────────────────────────────────┐
│ Frontend │
│ Next.js · React · TailwindCSS │
│ │
│ HomePage → Dashboard → CreateBadge │
│ ↓ │
│ ApproveBadge ← (client link) │
│ ↓ │
│ PublicProfile (shareable) │
└──────────────────────┬──────────────────────────────┘
│ @solana/react-hooks
│ @solana/kit
│ Codama (generated types)
┌──────────────────────▼──────────────────────────────┐
│ Solana Devnet │
│ │
│ Program: EQEWMBEtLZE7L2WS3iWo88rk8tQ4o8P9djmEJkG8gTFw │
│ │
│ PDAs: │
│ ├── FreelancerProfile [seeds: "profile" + owner] │
│ └── Badge [seeds: "badge" + owner + index] │
│ │
│ Instructions: │
│ ├── initialize_profile(username) │
│ ├── update_profile(username) │
│ ├── close_profile() │
│ ├── create_badge(title, description, client_*) │
│ ├── approve_badge(index, linkedin, twitter, email) │
│ └── reject_badge(index) │
└──────────────────────┬──────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────┐
│ Helius RPC │
│ getAccountInfo · getProgramAccounts (badge fetch) │
└─────────────────────────────────────────────────────┘
Freelancer Client
│ │
│ 1. Create endorsement │
│ request (on-chain) │
│ │
│ 2. Copy approval link ──► │ Opens link (no wallet needed)
│ │ Privy creates embedded wallet
│ │ Fills identity (LinkedIn, email...)
│ │ Signs approval on-chain
│ │
│ ◄── Badge appears ────────│
│ in dashboard │
│ (soulbound NFT) │
Backend (on-chain)
- Rust + Anchor framework
- Token Extensions (soulbound / non-transferable logic)
- PDA accounts for profile and badge state
- Deployed on Solana Devnet
Frontend
- React + Vite + TypeScript
- TailwindCSS
@solana/react-hooks+@solana/kit- Codama (auto-generated program client from IDL)
- Helius RPC (on-chain data fetching)
- Privy (embedded wallet for clients — no extension required)
- Node.js 18+
- Rust + Cargo
- Solana CLI
- Anchor CLI
git clone https://github.com/YhonaPeguero/Solana-Hackathon-WayLearn.git
cd Solana-Hackathon-WayLearn/template_codespaces
npm installCopy the example file and fill in your values:
cp .env.example .envVITE_HELIUS_API_KEY=your_helius_api_key
VITE_HELIUS_RPC_URL=https://devnet.helius-rpc.com/?api-key=your_helius_api_key
VITE_PROGRAM_ID=EQEWMBEtLZE7L2WS3iWo88rk8tQ4o8P9djmEJkG8gTFwGet your Helius API key at dashboard.helius.dev.
cd anchor
anchor build
anchor deploycd ..
npm run setupnpm run devVisit http://localhost:5173
The repo includes a full Codespaces setup. Just open it in GitHub and click Create codespace — Rust, Solana CLI, Anchor, and Node are installed automatically.
After the setup finishes, run:
export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
cd template_codespaces
npm install && npm run devEQEWMBEtLZE7L2WS3iWo88rk8tQ4o8P9djmEJkG8gTFw
template_codespaces/
├── anchor/
│ ├── programs/repulink/src/lib.rs ← Anchor program
│ ├── tests/repulink.ts ← Integration tests
│ └── Anchor.toml
├── src/
│ ├── pages/ ← Route-level components
│ │ ├── HomePage.tsx
│ │ ├── DashboardPage.tsx
│ │ ├── CreateBadgePage.tsx
│ │ ├── ApproveBadgePage.tsx
│ │ └── PublicProfilePage.tsx
│ ├── components/
│ │ ├── badge/ ← BadgeCard, BadgeList
│ │ ├── layout/ ← Header, Layout
│ │ ├── profile/ ← ProfileEditor
│ │ └── ui/ ← StatusBadge
│ ├── hooks/
│ │ ├── useRepulink.ts ← On-chain instructions
│ │ └── useOnChainData.ts ← Profile + badge fetching
│ ├── generated/repulink/ ← Codama auto-generated client
│ └── types/repulink.ts ← Shared TypeScript types
└── .env.example
cd anchor
anchor test --skip-deploy4 tests cover the full badge lifecycle:
- Creates a freelancer profile
- Creates a badge with Pending status
- Client approves the badge → status becomes Approved
- Cannot approve an already approved badge → expects
BadgeNotPendingerror
- Solana — The fastest blockchain for this use case
- Anchor — Rust framework for Solana programs
- Helius — RPC and DAS API
- Codama — Type-safe program client generation
- WayLearn — Hackathon organizer
RepuLink — Solana LATAM Hackathon 2026 by: Yhona Peguero
