Jikaan

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.

Browsing services on Jikaan

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]
  1. Sign up with email or Google, then set up a profile: photo, skills, qualification, and the MetaMask wallet that holds your TimeTokens.
  2. List services you can teach. Pick a category and a duration, and Jikaan prices it in TC.
  3. Avail a service. This opens a chat with the teacher, and the chat doubles as the booking: scheduling → booked → awaiting payment.
  4. Pay with one click when the session is done. The transfer is a real ERC-20 transfer from your wallet to the teacher's. Billing keeps a history that links every transaction to Etherscan.
Chat & booking Billing
Chat with a booking awaiting payment Balance, token purchase and history

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
  1. 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
  2. Deploy the security rules, or paste firestore.rules into the console: bash npx firebase-tools deploy --only firestore:rules --project <your-project-id>
  3. 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.

License

MIT

Share this project:

Updates