{"id":17517695,"url":"https://github.com/imbaniac/talents","last_synced_at":"2026-04-28T08:37:53.318Z","repository":{"id":117655952,"uuid":"533187098","full_name":"imbaniac/talents","owner":"imbaniac","description":"Decentralized Anonymous Talent Pool","archived":false,"fork":false,"pushed_at":"2022-09-25T15:30:02.000Z","size":5764,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-03T09:36:55.863Z","etag":null,"topics":["blockchain","dapp","ethereum","ethonline","hackathon","hardhat","web3"],"latest_commit_sha":null,"homepage":"https://demo.talents.ninja","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imbaniac.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-06T06:17:15.000Z","updated_at":"2022-11-02T07:50:28.000Z","dependencies_parsed_at":null,"dependency_job_id":"eb23351d-5ef9-463f-b398-4fa4f9484f46","html_url":"https://github.com/imbaniac/talents","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imbaniac%2Ftalents","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imbaniac%2Ftalents/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imbaniac%2Ftalents/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imbaniac%2Ftalents/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imbaniac","download_url":"https://codeload.github.com/imbaniac/talents/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246112662,"owners_count":20725300,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","dapp","ethereum","ethonline","hackathon","hardhat","web3"],"created_at":"2024-10-20T08:43:58.180Z","updated_at":"2026-04-28T08:37:43.295Z","avatar_url":"https://github.com/imbaniac.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Talents Ninja: ETHOnline 2022 Hackathon\n\n\u003e Decentralized talent pool for unbiased hiring\n\nTired of going through the same interviews? Be prejudiced before an\ninterview because of age, gender, skin color, or [name](https://www.raconteur.net/hr/diversity-inclusion/ethnic-name-bias/)?\n\nJoin our decentralized impersonal talent pool and start getting job\noffers from top Web3 companies.\n\n\u003cimg src=\"assets/profile.png\" width=\"600\"\u003e\n\n## How it works\n\n- _Profiles_ are pseudo anonymous, only following data is stored:\n  - Position\n  - Category\n  - Country (optional)\n  - Work experience\n  - English level\n  - Employement type\n  - Skills (optional)\n  - Description (optional)\n- _Proposal_ data is currently stored in plain test on IPFS, so don't put any private data in message. Encryption is yet to be implemented.\n- All _Profile_ NFTs are Soulbound (non-transferable).\n- All _Proposal_ NFTs are Souldbound (non-transferable).\n- All Employers are marked 'Unverified' for Candidates, until Companies profiles will be implemented.\n\n![Flowchart](assets/chart2.png)\n\n### Deployed contracts:\n\n**Mumbai Polygon**\n\n- Candidate NFT — [0xe1731923eC8465A078E04C65CF67806d2B222Da3](https://mumbai.polygonscan.com/address/0xe1731923eC8465A078E04C65CF67806d2B222Da3)\n- Proposal NFT - [0x70F1d69cb1e9dE4F943403fe27E9297ff76B8f82](https://mumbai.polygonscan.com/address/0x70F1d69cb1e9dE4F943403fe27E9297ff76B8f82)\n\n## Sponsors\n\n**Eligible**\n\n- Polygon: Smart contracts are deployed on Mumbai Polygon network (testnet) — for scalability and lower fees.\n- Worldcoin: To create a Candidate NFT, you need to prove that you're real human and forces to have only one account.\n- IPFS/Filecoin: NFT metadata is stored on IPFS network, pinned by NFT.storage.\n- XMTP: Communication between candidate and employer\n- EPNS: to send notification about new proposal\n\n**Not sure:**\n\n- TheGraph: Deployed as hosted graph with IPFS and full-text search features.\n- Sizmo: Using existing badges for Candidate NFT. Loading all user NFTs from Moralis API (polygon and mainnet)\n- QuickNode: for RPC on frontend site for Mainner Ethereum network\n\n---\n\n### Worldcoin ID\n\n**Usage:**\nIn anonymous Talent Pool, each Candidate should be a real person. Thanks to Worldcoin, employers can be sure that he communicate with real person with only one profile.\n\n**Depth of the integration:**\nFor hackathon I used onchain integration on staging environment.\nSmart contract implementation: `/packages/hardhat/contracts/Candidate.sol`\nFront-end implementation: `/packages/frontend/src/pages/MintProfile.jsx`\n\n**Future posibilities:**\n\n- Candidates and Employers at our platform could be a good fit for being Orb Operators — after building a track record of successfull hires and employements. And this will help to onboard new people to Talents.\n\n**Issues:**\n\n- Please, fix React widget — it changes fonts for the whole application.\n- Sign out from mobile app.\n- Improve availability of Worldcoin Simulator — I saw 502 more often than 200.\n\n### NFT.Storage\n\n**Usage:**\nTo store and pin Candidate, Proposal NFT's metadata on IPFS network.\n\n**Issues**\nUCAN is very raw and painfull to use.\n\n### XMTP\n\n**Usage:**\nXMTP used as a main communication channel for Candidate and Employer.\n\n**Issues**\n\n- XMTP uses checksumed Ethereum addresses and considers lowercased as different one. It shouldn't be a case, as it's the same address.\n- Too many signatures required\n\n### EPNS\n\n**Usage:**\nSubgraph integration for EPNS — to individually notify Candidate on each Proposal creation.\n\n**Issues**\n\n- On dashboard it's not possible to change channel info or to use same Alias Address twice\n- Incorrect number of subscribers on Admin Dashboard\n\n### TheGraph\n\nUnfortunately I can't deploy my subgraph to TheGraph Network, as it's using IPFS and full-text search features. And my protocol isn't useful without these features. Eventhough, subgraph for Talents propocol could be used to query Candidates by required parameters and use for statistics, HRs automation etc.\n\n**Issues**\n\n- ipfs.cat returns null from time to time (needs time to appear on network). And it breaks subgraph.\n- `graph build` deletes startBlock attribute from .yaml cofig\n\n## How to run with local node and TheGraph\n\n```\nyarn\nyarn chain\nyarn deploy\n$CHAIN={your_chain_name} yarn create-config\nyarn run-graph-node\nyarn graph-create-local\nyarn graph-ship-local\nyarn start\n```\n\n## Tests\n\n```\nyarn test\n```\n\nEach time you stop local hardhat node, state will be lost =\u003e you'll need to:\n\n- Reset Metamask wallet (to reset nonce)\n- Clean graph-node (if data structure in smart contracts changed)\n\n**Issue with --network localhost on hardhat**\n\nGo to /etc/hosts and comment out this line\n\n```\n::1             localhost\n```\n\n---\n\n#### How to setup UCAN for NFT-Storage\n\n```\n    \u003c!-- If you don't have PK --\u003e\n    yarn ucan-keypair-new\n    \u003c!-- Reads UCAN_PK variable from .env --\u003e\n    yarn ucan-keypair-from\n\n    \u003c!-- Save DID and PUB_KEY to .env or elsewhere to use later --\u003e\n\n    \u003c!-- Register your DID in NFT.Storage --\u003e\n    curl -X POST -H \"Authorization: Bearer $NFT_STORAGE_KEY\" -H 'Content-Type: application/json' --data \"{\\\"did\\\": \\\"$DID\\\"}\"\n```\n\n- Generate main DID token and save it\n  - Generate new PK if no in .env\n  - Request all data from PK\n- Register API KEY\n- Get ROOT token\n\n### Screenshots\n\n\u003cimg src=\"assets/home.png\" width=\"600\"\u003e\n\u003cimg src=\"assets/canidates.png\" width=\"600\"\u003e\n\u003cimg src=\"assets/chat2.png\" width=\"600\"\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimbaniac%2Ftalents","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimbaniac%2Ftalents","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimbaniac%2Ftalents/lists"}