🏗️ Built for Solana Colosseum Hackathon
Vijay is a decentralized freelancing platform built on the Solana blockchain. It introduces a new trustless protocol where clients and freelancers can collaborate on projects securely, without intermediaries. The platform leverages smart contracts to manage registration, project assignment, escrowed payments, and task validation. It enables Clients and Freelancers to collaborate trustlessly using a milestone-based escrow system. Funds are securely held in program-controlled accounts and released on task approval, ensuring a transparent and secure freelancing experience.
- Overview
- Features
- Live Demo
- Architecture
- Directory Structure
- Smart Contract Overview
- Escrow and Vault Logic
- Getting Started
- Usage
- Workflow
- Security & Trust
- Roadmap
- Screenshots
- Pitch
- Technical Demo
- Contributing
- License
Vijay enables:
- Clients to register and publish projects.
- Freelancers to register and receive projects.
- Task review and milestone-based payouts via escrow.
- Automated vault handling and reputation scoring.
-
Role-based Registration
- Clients register by paying 1 SOL.
- Freelancers register for free.
-
Project Management
- Clients publish projects with name, description, budget, and external links.
- View and assign registered freelancers based on skills and contact.
-
Escrow and Payment Mechanism
- Escrow and vault accounts are created on project assignment.
- Payments are released per task upon approval by the client.
- Vaults close automatically when all tasks are completed.
-
Task Flow
- Freelancers request reviews by submitting URLs.
- Clients review, reject, or approve tasks.
-
Advanced Project Controls
- Transfer projects to other freelancers mid-way.
- Close projects prematurely with refunds.
-
Performance Metrics
-
All actions logged.
-
Users have public report cards showing:
- Success rate
- Risk score
-
- Frontend: Next.js
- Smart Contracts: Solana + Anchor
- Storage: Program-derived accounts (PDAs)
- State: Managed on-chain via Anchor accounts
├── src/ # Next.js frontend code
├── .next/ # Next.js build
├── anchor/programs # Anchor smart contracts
├── anchor/migration_script/ # Custom deploy scripts
├── anchor/.anchor/ # Anchor build outputs
├── Anchor.toml # Anchor config
├── tsconfig.json # TypeScript config
├── README.md # Project documentation
initializeState
: Sets the program owner so that owner can withdraw amount earned by program via client registeration.initializeClient
: Creates client profile, deducts 1 SOL as regiteration fee.initializeFreelancer
: Creates Freelancer profile. Free registration with skill metadata.initializeProject
: Publishes a project with details.projectEscrowSetup
: Assigns freelancer to a project.requestTaskReview
: Freelancer submits task URL.reviewTaskProcess
: Client either approves, releases per-task payment or rejects task (no payment).transferProject
: Change assigned freelancer.withdrawProject
: Closes project and refunds unspent budget.
State
Client
ClientReportCard
Freelancer
FreelancerReportCard
Project
Escrow
Vault
FreelancerProject
-
Project Assignment
- Vault and escrow PDAs created
- Full budget held in vault
-
Task Approval
- Budget / total tasks = payout per task
- Vault → Freelancer upon approval
-
Project Completion
- Vault closed, escrow closed
-
Early Termination
- Refund remaining SOL to Client
-
Clone the repository:
git clone git@github.com:Harry-027/vijay.git cd vijay
-
Install frontend dependencies:
pnpm install pnpm build
-
Build and deploy smart contracts locally:
solana config set --url localhost solana-test-validator solana airdrop 2 cd anchor anchor build anchor deploy
-
Run the frontend:
pnpm dev
-
Set the program owner (make sure you are in the anchor directory before running the below command):
ANCHOR_PROVIDER_URL=http://127.0.0.1:8899 \ ANCHOR_WALLET=~/.config/solana/id.json \ ts-node migration_script/migrate.ts
- Register as Client (costs 1 SOL)
- Publish a project
- Assign project to a freelancer
- Review task submissions
- Approve or reject tasks
- Optionally transfer or withdraw project
- Register as Freelancer
- View available projects
- Receive assignment
- Submit tasks via URL
- Receive payouts on approval
-
Registration
- Client pays 1 SOL => ClientAccount created.
- Freelancer signs up => FreelancerAccount created.
-
Project Publishing
- Client provides project metadata + estimated budget.
-
Assignment
- Client selects a freelancer.
- Vault and escrow account initialized with project budget.
-
Task Management
- Freelancer submits URL per task.
- Client verifies and approves.
- Upon approval: budget/task transferred to freelancer.
-
Completion
- Final task triggers escrow/vault closure.
- Freelancer receives remaining amount.
-
Transfer/Abort
- Mid-project transfer creates a new assignment.
- Abort returns remaining funds to client and closes vault.
- Funds are never held by freelancers until tasks are approved.
- Full audit trail of user actions.
- No intermediary or platform-controlled funds.
- Multi-signature approvals for enterprise clients.
- Dispute resolution via DAO governance.
- Reputation weighting in future smart contracts.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Before submitting a PR be sure to run anchor test
and pnpm lint
.
For support or feature requests:
MIT © 2025 Harish Bhawnani
This project was built as part of the Solana Colosseum Hackathon to promote milestone-based trustless freelancing using smart contracts on Solana.