A secure, transparent, and decentralized job board and recruitment platform on the Sui blockchain
Guiding Your Career Journey
- Features
- Technology Stack
- Installation
- Usage
- Smart Contract
- Testing
- Deployment
- Project Structure
- Contributors
- Contributing
- β Job Posting: Employers can create job listings on the blockchain
- β Application System: Candidates can apply for jobs directly on-chain
- β Hiring Process: Employers can review applications and hire candidates
- β User Profiles: Users can create public/private profiles with customizable information
- β Username System: Unique username registration linked to wallet addresses
- β Capability-based Access Control: Secure authorization system
- β On-chain Events: Event emission for all important transactions
- β Multi-language Support: English, Turkish, German, and Greek languages
- β Vectors: Vector usage for job and application collections
- β Option: Option type for optional salary and hired candidate
- β Shared Objects: Global JobBoard shared object
- β Events: JobPosted, ApplicationSubmitted, CandidateHired, ProfileCreated events
- β Access Control: EmployerCap capability pattern
- β Dynamic Fields: Applications stored as dynamic fields
- β Display Object: Display standard for Job objects
- β Contract Upgradeability: Upgrade support with version control
- β Clock: Sui Clock object usage for timestamps
- β Random: Random object for featured job selection
- β Sui TypeScript SDK: Latest SDK usage
- β Wallet Integration: Wallet connection with @mysten/dapp-kit
- β ZkLogin: Blockchain authentication with Google/Facebook (ready)
- β Walrus Storage: CV and document storage on Walrus
- β Modern UI/UX: Animated interface with Tailwind CSS and Framer Motion
- β Sui Brand Colors: Official Sui color palette usage
- β Responsive Design: Perfect display on all devices
- β i18n Support: Full internationalization with 4 languages
- Walrus Integration: CVs and documents stored on decentralized Walrus storage
- ZkLogin Ready: Social media authentication infrastructure for blockchain
- Real-time Updates: Automatic updates every 10 seconds with React Query
- Animated UI: Professional animations with Framer Motion
- Type-Safe: End-to-end TypeScript usage
- Comprehensive Testing: Move tests + Jest integration tests
- Legal Compliance: KVKK & GDPR compliant privacy pages
- Sui Move: Smart contract development
- Sui Framework: Latest mainnet framework
- Dynamic Fields: Scalable data structures
- React 18: Modern React with hooks
- TypeScript 5: Type-safe development
- Vite: Lightning fast build tool
- Tailwind CSS: Utility-first CSS
- Framer Motion: Advanced animations
- Radix UI: Accessible component primitives
- i18next: Internationalization framework
- @mysten/dapp-kit: Wallet and Sui integration
- @mysten/sui: Sui TypeScript SDK
- @mysten/zklogin: ZkLogin authentication
- Walrus: Decentralized storage
- Jest: Unit and integration tests
- Sui Move Test: Smart contract tests
- Docker: Containerization
- Nginx: Production web server
- Node.js 20+
- Sui CLI
- Docker (optional)
- Git
git clone <repo-url>
cd job-board2chmod +x scripts/setup.sh
./scripts/setup.shThis script:
- Installs frontend dependencies
- Creates
.envfile - Creates necessary directories
chmod +x scripts/deploy.sh
./scripts/deploy.shThis script:
- Builds the Move package
- Runs Move tests
- Deploys to testnet
- Displays Package ID
Update frontend/.env file with deployment output:
VITE_NETWORK=testnet
VITE_PACKAGE_ID=<your-package-id>
VITE_JOB_BOARD_ID=<your-job-board-id>
VITE_WALRUS_PUBLISHER_URL=https://publisher.walrus-testnet.walrus.space
VITE_WALRUS_AGGREGATOR_URL=https://aggregator.walrus-testnet.walrus.spacecd frontend
npm run devThe application will run at http://localhost:3000.
cd frontend
npm run build
npm run previewdocker-compose up -dThe application will run at http://localhost:3000.
public fun post_job(
board: &mut JobBoard,
title: vector<u8>,
company: vector<u8>,
location: vector<u8>,
description: vector<u8>,
salary_amount: u64,
include_salary: bool,
clock: &Clock,
ctx: &mut TxContext,
)public fun apply_to_job(
board: &mut JobBoard,
job: &mut Job,
cover_message: vector<u8>,
resume_url: vector<u8>,
clock: &Clock,
ctx: &mut TxContext,
)public fun hire_candidate(
job: &mut Job,
_employer_cap: &EmployerCap,
application_index: u64,
clock: &Clock,
ctx: &mut TxContext,
)public fun create_profile(
board: &mut JobBoard,
username: vector<u8>,
full_name: vector<u8>,
bio: vector<u8>,
location: vector<u8>,
clock: &Clock,
ctx: &mut TxContext,
)// Global shared object
public struct JobBoard has key {
id: UID,
version: u64,
total_jobs: u64,
total_applications: u64,
active_jobs: vector<ID>,
}
// Job listing
public struct Job has key, store {
id: UID,
title: String,
company: String,
location: String,
description: String,
salary: Option<u64>, // Option<T> usage
employer: address,
status: JobStatus,
created_at: u64,
application_count: u64,
hired_candidate: Option<address>, // Option<T> usage
}
// User profile
public struct UserProfile has key, store {
id: UID,
owner: address,
username: String,
full_name: String,
bio: String,
skills: vector<String>,
experience: String,
education: String,
location: String,
email: Option<String>,
portfolio_url: Option<String>,
resume_url: Option<String>,
is_public: bool,
created_at: u64,
updated_at: u64,
}
// Capability pattern
public struct EmployerCap has key, store {
id: UID,
job_id: ID,
}cd move
sui move testTest coverage:
- β Job board initialization
- β Job posting (with/without salary)
- β Job applications
- β Multiple applications
- β Candidate hiring
- β Job closing
- β Job updates
- β User profile creation
- β Profile updates and visibility
- β Access control (unauthorized tests)
- β Job status validations
- β Username uniqueness
cd frontend
npm testIntegration test coverage:
- β Sui client connection
- β Transaction creation
- β Data structure validation
- β Status transitions
- β Salary constraints
- β Address formatting
./scripts/deploy-testnet.shThis automated script:
- Builds the contract
- Runs tests
- Deploys to testnet
- Extracts object IDs
- Creates
.env.local
See TESTNET_GUIDE.md for detailed deployment instructions.
- Change network to mainnet in
.envfile - Run deployment script
- Build and deploy frontend
docker-compose up -d --buildjob-board2/
βββ move/ # Move smart contracts
β βββ sources/
β β βββ job_board.move # Main contract
β βββ tests/
β β βββ job_board_tests.move # Contract tests
β βββ Move.toml
β
βββ frontend/ # React frontend
β βββ src/
β β βββ components/ # UI components
β β β βββ ui/ # Radix UI components
β β β βββ WalletConnector.tsx
β β β βββ ZkLoginButton.tsx
β β β βββ JobCard.tsx
β β β βββ PostJobModal.tsx
β β β βββ ApplyJobModal.tsx
β β β βββ Header.tsx
β β β βββ Footer.tsx
β β β βββ HireCandidateButton.tsx
β β βββ hooks/ # Custom hooks
β β β βββ useSuiJobs.ts
β β β βββ useWalrus.ts
β β β βββ useProfile.ts
β β βββ pages/
β β β βββ HomePage.tsx
β β β βββ JobDetailPage.tsx
β β β βββ ProfilePage.tsx
β β β βββ TermsPage.tsx
β β β βββ PrivacyPage.tsx
β β β βββ KvkkGdprPage.tsx
β β βββ i18n/ # Internationalization
β β β βββ locales/
β β β β βββ en.json
β β β β βββ tr.json
β β β β βββ de.json
β β β β βββ el.json
β β β βββ index.ts
β β βββ lib/
β β β βββ utils.ts
β β βββ config/
β β β βββ constants.ts
β β β βββ sui.config.ts
β β βββ __tests__/ # Tests
β β βββ App.tsx
β βββ package.json
β βββ vite.config.ts
β
βββ scripts/ # Deployment scripts
β βββ deploy.sh
β βββ deploy-testnet.sh
β βββ test-walrus.sh
β βββ setup.sh
β
βββ Dockerfile # Docker configuration
βββ docker-compose.yml
βββ nginx.conf
βββ TESTNET_GUIDE.md
βββ ZKLOGIN_GUIDE.md
βββ QUICK_START.md
βββ README.md
- Primary:
#4DA2FF(Sui Blue) - Secondary:
#6FBCF0(Lighter Sui Blue) - Accent:
#00C2FF(Sui Cyan)
- Page transitions: Framer Motion
- Card hover effects
- Floating elements (Hero section)
- Gradient background animation
- Smooth scrolling
- Mobile-first approach
- Tablet optimization
- Desktop wide-screen support
- β Vectors usage (active_jobs, applications)
- β Option usage (salary, hired_candidate, profile fields)
- β Shared objects (JobBoard)
- β Events (5 different events)
- β Access control (EmployerCap pattern)
- β Dynamic fields (applications, username mapping)
- β Display Object
- β Contract upgradeability (version control)
- β Clock object
- β Random object
- β Wallet connection
- β Job posting
- β Job applications
- β Hiring function
- β Job listings
- β Job details
- β "My Jobs" page
- β User profiles
- β Real-time data updates
- β Modern and user-friendly interface
- β Sui brand colors
- β Smooth animations
- β Responsive design
- β Loading states
- β Error handling
- β Toast notifications
- β Multi-language support
- β Walrus integration (CV storage)
- β ZkLogin ready infrastructure
- β Dynamic fields usage
- β Display Object standard
- β Contract upgradeability
- β Clock and Random objects
- β Comprehensive testing
- β Docker deployment ready
- β User profiles with privacy controls
- β Username system
- β Detailed README
- β Code documentation
- β Deployment scripts
- β Clear project structure
- β Multiple guides (Testnet, ZkLogin, Quick Start)
- Capability pattern for access control
- Input validation
- Transaction replay protection
- Version control for upgrade security
- Username uniqueness validation
- Privacy controls for user profiles
This project was developed by:
- AydΔ±n Yakar
- Ensar Mert GΓΌnay
- UlaΕ Bal
We welcome contributions! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License.
- Sui Foundation
- Move Community
- Walrus Team
- Bootcamp organizers
For questions, please open an issue or reach out at hello@suilor.xyz
Note: This project was developed for the Sui Move Bootcamp Challenge and aims to showcase the future of decentralized technologies.
- Live Demo: suilor.xyz
- Testnet Deployment: See TESTNET_GUIDE.md for deployment instructions
Made with β€οΈ using Sui Move & React
Suilor - Guiding Your Career Journey