A web3-native job board where job postings, company profiles, and applications are owned by users and stored on Arkiv.
Live: https://arkiv-job-board.vercel.app
- Companies (wallet required): Create a company profile, post jobs, edit listings, mark as filled, and see flag counts.
- Job seekers (no wallet needed): Browse and search jobs, filter by status/location/employment/discipline, view company profiles, apply via external links.
All company and job data is stored on Arkiv (Kaolin testnet); listings are verifiable on-chain.
- Frontend: React, TypeScript, Vite, Tailwind CSS, shadcn/ui, Framer Motion
- Wallet: RainbowKit + wagmi
- Data: Arkiv SDK (Kaolin testnet)
Use the live app: https://arkiv-job-board.vercel.app
Run locally (Node.js 18+ and npm):
# Install dependencies
npm install
# Run the dev server (frontend only)
npm run devOpen http://localhost:8080.
- Connect: Use the header Connect Wallet (e.g. MetaMask).
- Network: Switch to Kaolin (Arkiv testnet, chain ID
60138453025). - Test ETH: Kaolin faucet if needed.
Only companies need a wallet (to create a profile and post/edit jobs). Job seekers can browse and apply without connecting.
If the browser gets rpc method is not whitelisted or 403 when creating/updating entities, use the local proxy so writes go through your server:
- Copy
.env.exampleto.env. - Set
ARKIV_PRIVATE_KEYto a testnet wallet private key (fund it from the faucet). - Set
VITE_ARKIV_API_URL=http://localhost:3001. - Run frontend and proxy together:
npm run dev:fullThe proxy runs at http://localhost:3001 and performs Arkiv writes; the owner of each entity is still the connected user’s wallet.
| Role | Features |
|---|---|
| Companies | Create company profile · Post job (title, description, apply link, location/employment type, expiry 30/60/90 days, optional salary & discipline) · Edit job · Edit company · Mark job as filled · View flag count per job |
| Job seekers | Browse jobs · Search by keyword (title, description, company name) · Filter by status (active/filled/expired), location, employment type, seniority, discipline · View job detail & company profile · Apply via external link |
| All | Flag suspicious listings (wallet required); flag count visible to job poster |
| Command | Description |
|---|---|
npm run dev |
Start Vite dev server (port 8080) |
npm run dev:full |
Start dev server + backend proxy (port 3001) |
npm run build |
Production build |
npm run preview |
Preview production build |
npm test |
Run tests |
src/pages/— Route pages (Jobs, JobDetail, Dashboard, CompanyForm, JobForm, etc.)src/components/— UI (JobCard, JobFilters, StatusBadge, Layout, shadcn components)src/lib/api.ts— Arkiv API (companies, jobs, flags)src/lib/arkivClient.ts— Arkiv public + wallet clientsrc/lib/types.ts— Shared typesserver/index.mjs— Optional proxy for Arkiv writes
MIT.