Early groundwork for p2p mentorship built on Arkiv. More once the basics are alive. 🌱
We are tracking our developer experience with Arkiv in our runbook.
MentorGraph is an on-chain, p2p mentorship and trust-graph layer built on Arkiv. Users create a wallet-owned profile, publish Asks (what they want help with) and Offers (how they can help), explore a dynamic network graph to discover aligned mentors, mentees, and collaborators, and request meetings with each other for learning sessions. Arkiv is the core data layer: profiles, asks, offers, and graph edges are stored as Arkiv entities. The app demonstrates how Arkiv can power real-time, low-cost, composable social data graphs.
You can test our live demo at http://mentor-graph.vercel.app
As our data layer, Arkiv allows us to build trustless, permissionless, and serverless tools from day 1. We aim to build p2p tools for mentorship, knowledge exchange, learning, and growth without reliance on intermediaries. Arkiv's current capabilities already enable a plethora of necessary functions for these tools, and we were able to implement an initial working MVP of a p2p mentorship platform building entirely on Arkiv for this hackathon.
- Store and update mentor/mentee profiles
- Create Asks & Offers as separate Arkiv entities
- Track relational edges between users (e.g., “hasSkill”, “wantsHelpWith”)
- Graph explorer filters based on skill tags, availability, location, ask/offer type
- Cross-entity filtering to match mentors/mentees
- Querying profiles + asks/offers in a single flow
- Request meetings with other users from the network graph
- Two-way confirmation system (both mentor and learner must confirm)
- Automatic Jitsi video call link generation upon confirmation
- Session status tracking (pending, scheduled, in-progress, completed, cancelled)
- Sessions expire automatically after session end time
- Upcoming meetings displayed on dashboard
- Live updates when new Asks/Offers are posted
- Real-time graph exploration without refresh
- TTL-aware UX
- Asks/Offers can expire
- UI hints when TTL is about to expire
The mentorship graph is stored directly in Arkiv, not in local state. The UI is built around querying Arkiv as a dynamic knowledge graph. The developer experience report in runbook.md documents the friction points, RPC issues, ergonomics of the SDK, and areas where Arkiv can improve.
- Next.js 15 - React framework
- TypeScript - Type safety
- Arkiv SDK - Decentralized entity storage
- React 19 - UI library
- Node.js 18+
- npm or yarn
- Install dependencies:
npm install- Create
.envfile:
ARKIV_PRIVATE_KEY=0x...
ARKIV_RPC_URL=https://mendoza.hoodi.arkiv.network/rpc
ARKIV_WS_URL=wss://mendoza.hoodi.arkiv.network/ws
JITSI_BASE_URL=https://meet.jit.si
- Run development server:
npm run devnpm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm run seed- Seed dummy datanpm run seed:simple- Seed simple asks/offers only
ARKIV_PRIVATE_KEY(required) - Private key for server-side operationsARKIV_RPC_URL(optional) - Arkiv RPC endpoint, defaults to Mendoza testnetARKIV_WS_URL(optional) - Arkiv WebSocket endpoint, defaults to Mendoza testnetJITSI_BASE_URL(optional) - Jitsi base URL, defaults to meet.jit.si
pages/- Next.js pages and API routessrc/arkiv/- Arkiv entity helpers (profiles, asks, offers, sessions, feedback, trustEdges)src/config.ts- Environment configurationsrc/wallet.ts- Wallet connection utilitiessrc/lib/jitsi.ts- Jitsi meeting generationdocs/- Documentation (guides, architecture, development notes)examples/basic/- Basic Arkiv usage examples
- Connect repository to Vercel
- Set environment variables in Vercel dashboard:
ARKIV_PRIVATE_KEY(required)ARKIV_RPC_URL(optional)ARKIV_WS_URL(optional)JITSI_BASE_URL(optional)
- Deploy automatically on push to main branch
If updates don't appear after deployment:
- Force redeploy - Vercel dashboard → Deployments → Redeploy (disable build cache)
- Clear build cache - Settings → Clear Build Cache → Redeploy
- Check build logs - Verify build completed successfully
- Verify environment variables - Ensure all required vars are set
- Hard refresh browser -
Cmd+Shift+RorCtrl+Shift+R - Check branch - Verify correct branch is deployed
See troubleshooting guide for detailed troubleshooting steps.