Teach what you know. Learn what you love.
A skill-exchange marketplace where people pay each other in TimeTokens, an ERC-20 token on Ethereum Sepolia, instead of money.

Why Jikaan
Most of the knowledge people need is exchanged for money, so learning anything of quality means paying for it. But what about people who want to learn for the joy of learning, and teach for the joy of teaching?
On Jikaan you earn by teaching and spend by learning. Say John knows English and wants to learn Python, and Manish knows Python and wants to learn English. They can teach each other. Python is the harder skill to find, though, so an hour of Manish's time is worth more TimeTokens than an hour of John's. The currency keeps that trade fair, and it also lets people who can only teach, or only learn, take part.
How it works
flowchart LR
A[Sign up] --> B[Profile +<br/>MetaMask wallet]
B --> C[List a service]
B --> D[Avail a service]
D --> E[Chat to schedule]
E --> F[Learner confirms<br/>the booking]
F --> G[Teacher marks the<br/>session complete]
G --> H[Learner pays in TC<br/>on-chain]
- Sign up with email or Google, then set up a profile: photo, skills, qualification, and the MetaMask wallet that holds your TimeTokens.
- List services you can teach. Pick a category and a duration, and Jikaan prices it in TC.
- Avail a service. This opens a chat with the teacher, and the chat doubles as the booking: scheduling → booked → awaiting payment.
- Pay with one click when the session is done. The transfer is a real ERC-20
transferfrom your wallet to the teacher's. Billing keeps a history that links every transaction to Etherscan.
| Chat & booking | Billing |
|---|---|
![]() |
![]() |
Screenshots use demo data.
How services are priced
Every category starts with an hourly launch rate, and harder-to-find expertise earns more:
| Category | TC / hour | Category | TC / hour |
|---|---|---|---|
| PG level tests (GRE, GMAT, CAT…) | 4 | International boards | 2 |
| STEM (programming, ML, AI…) | 3 | Personal development | 1.5 |
| UG level tests (SAT, JEE, NEET…) | 2 | Languages / Indian curriculum / Hobbies | 1 |
| Arts / Miscellaneous | 0.5 |
A service costs rate × duration, and the price is fixed when the service is listed.
Once the marketplace has at least 20 listings, rates follow supply. Each category's rate is scaled by how its hours on offer compare with the average:
rate = launchRate × clamp(averageHoursOffered / hoursOfferedInCategory, 0.5, 2)
If twice as many hours of English are offered as hours of Python, Python becomes twice as valuable. The clamp keeps a handful of listings from swinging prices wildly. See src/lib/pricing.js and its tests.
Tech stack
- Frontend: React 18, Vite, Tailwind CSS, shadcn/ui (Radix)
- Backend: Firebase Authentication (email and Google) and Cloud Firestore (profiles, listings, chats, receipts)
- Web3: ethers v6 with MetaMask, and a Solidity ERC-20 based on OpenZeppelin on Sepolia
Getting started
You'll need Node 18+, a Firebase project, and MetaMask with some Sepolia test ETH.
git clone https://github.com/saiompatro/Jikaan-Public.git
cd Jikaan-Public
npm install
cp .env.example .env
- Set up Firebase. In the Firebase console:
- add a Web app and copy its config into
.env - under Authentication, enable Email/Password and Google
- create a Cloud Firestore database
- add a Web app and copy its config into
- Deploy the security rules, or paste
firestore.rulesinto the console:bash npx firebase-tools deploy --only firestore:rules --project <your-project-id> - Run it:
bash npm run dev
Other scripts: npm test runs the pricing tests, npm run lint runs ESLint, and npm run build makes a production build. vercel.json is included for one-click SPA deploys on Vercel.
The TimeToken contract
contracts/TimeToken.sol is an OpenZeppelin ERC-20 (burnable, permit) with a payable mint: anyone can mint TC at 0.0003 ETH per token. It's deployed on Sepolia at 0x71ea27f3f29e1299ee9e4072fed426e4e02f3b04, which the app uses by default.
To use your own copy, deploy the contract (for example with Remix, passing constructor arguments recipient and initialOwner) and set VITE_TIMETOKEN_ADDRESS in .env.
Project structure
contracts/TimeToken.sol ERC-20 TimeToken
firestore.rules Firestore security rules
src/
App.jsx routes and the auth gate
components/Layout.jsx sidebar, current profile, TC balance
components/ServiceCard.jsx
lib/firebase.js Firebase setup, cached profile lookups, receipts
lib/timetoken.js MetaMask and contract calls (balance, buy, pay)
lib/pricing.js skill categories and TC pricing (+ pricing.test.js)
pages/ one file per screen
| Firestore collection | Holds |
|---|---|
users |
profiles (name, skills, qualification, wallet, avatar) |
services |
listings with their locked-in TCValue |
chats (+ messages) |
one booking between a learner and a teacher, with its status |
transactions |
receipts for purchases and payments; the tx hash on Sepolia is the source of truth |
Roadmap
- [ ] Demand-aware pricing: factor bookings, not just listings, into the rate
- [ ] Cash out: a
redeem()that burns TC for ETH (needs a contract redeploy) - [ ] Time-slot scheduling inside a booking
- [ ] Search and category filters on Home
- [ ] Landing page and admin panel
Credits
Built by Saiom Patro and Harshit Rai Verma.


Log in or sign up for Devpost to join the conversation.