{"id":13767330,"url":"https://github.com/IgorShadurin/clickcaster","last_synced_at":"2025-05-10T22:31:49.196Z","repository":{"id":226470843,"uuid":"768732561","full_name":"IgorShadurin/clickcaster","owner":"IgorShadurin","description":"A platform for traffic exchange and analytics for Frames applications in Farcaster.","archived":false,"fork":false,"pushed_at":"2024-06-21T10:55:08.000Z","size":5210,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-19T04:26:30.003Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://clickcaster.xyz","language":"TypeScript","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/IgorShadurin.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":"2024-03-07T16:23:28.000Z","updated_at":"2024-06-21T10:55:12.000Z","dependencies_parsed_at":"2024-05-22T15:52:52.803Z","dependency_job_id":"913570fb-016e-4c3b-821b-e6e55897705a","html_url":"https://github.com/IgorShadurin/clickcaster","commit_stats":null,"previous_names":["igorshadurin/warpcast-traffic","igorshadurin/clickcaster"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IgorShadurin%2Fclickcaster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IgorShadurin%2Fclickcaster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IgorShadurin%2Fclickcaster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IgorShadurin%2Fclickcaster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IgorShadurin","download_url":"https://codeload.github.com/IgorShadurin/clickcaster/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251856996,"owners_count":21655119,"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":[],"created_at":"2024-08-03T16:01:07.535Z","updated_at":"2025-05-10T22:31:44.174Z","avatar_url":"https://github.com/IgorShadurin.png","language":"TypeScript","funding_links":[],"categories":["Uncategorized"],"sub_categories":["Uncategorized"],"readme":"# ClickCaster\n\nClickCaster is a traffic exchange and analytics service for Frames in Farcaster.\n\nWarpcast is a social network on Optimism with support for Solana wallets and more than 200k users. \n\nThey launched Frames technology, allowing the creation of applications within the social network. It's almost like an App Store for Web3.\n\nWith the traffic exchange platform, Frames developers can exchange users, which will stimulate engagement in Web3 projects.\n\n[Documentation and plans for the gradual transformation of the system from centralized to DAO.](/docs/README.md)\n\n[Visit the site: https://clickcaster.xyz/](https://clickcaster.xyz/)\n\n## Features Overview\n\n### Analytics\n\n- Our platform offers analytics to track user activity within your Frame. It provides insights into the number of unique users and the total actions they perform, presented in daily charts.\n\n- The data is exportable, allowing for further analysis on external platforms.\n\n### Click Exchange\n\n- Frame authors can register their Frames in the system to share click data.\n\n- Our recommendation system suggests which Frames to display to visitors, prioritizing those that have contributed traffic to the network.\n\n- The system ensures that visitors are unique daily, directing only new users to your Frame each day, enhancing user uniqueness.\n\n### Fraud Prevention\n\n- We employ cryptographic techniques to ensure the authenticity of traffic and prevent fraud. Unlike basic HTTP requests, which can be artificially generated, Warpcast traffic is cryptographically signed and user-specific, offering precise and reliable data.\n\n- Each traffic provider uses a unique cryptographic key, enabling us to identify both the traffic initiator and provider. This ensures that every click is verifiable, contributing to high-quality analytics and fraud prevention.\n\n## Integration\n\n1. Create a key on the website. Click \"Add Key\", \"Create Key\". Copy the ID and PK to yourself. Click \"Save\".\n2. Insert the following script into your Warpcast request handling method.\n\nInstall ethers or a similar library.\n\n```shell\nnpm i ethers\n```\n\nFor node \u003c18\n\n```shell\nnpm i node-fetch\n```\n\n```typescript\nimport { Wallet } from 'ethers'\nimport node from 'node-fetch' // for node \u003c18\n\nasync function clickLog(signer: Wallet, clickData: string): Promise\u003cunknown\u003e {\n  const signature = await signer.signMessage(clickData)\n\n  return (\n    await fetch('https://api.clickcaster.xyz/v1/click/log', {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({ clickData, signature }),\n    })\n  ).json()\n}\n\n// your PK from the dashboard\nconst signer = new Wallet('PK_STRING')\n// raw click data in the form of hex (req.body.trustedData.messageBytes)\nconst clickData = 'RAW_CLICK_DATA_IN_FORM_OF_HEX'\nclickLog(signer, clickData).then(console.log).catch(console.log)\n```\n\n3. Register your application's unique URL on the website. Click \"Add Frame\". Copy the unique tag for your account. Insert it on the main page of your Frame, accessible via a GET request. Fill in the fields and click \"Save\".\n\n## Development\n\n### Start the server\n\n```shell\n# install dependencies\nnpm ci\n\n# copy and fill the env\ncp example.env .env\n\n# create DB\nmysql -u root -p \u003c ./migrations/db.sql\n\n# start interactive mode for MySQL user creation:\nmysql -u root\n\n# and run commands\nCREATE USER 'dappy_warpcast'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD_HERE';\nGRANT ALL PRIVILEGES ON dappy_warpcast.* TO 'dappy_warpcast'@'localhost';\nFLUSH PRIVILEGES;\n\n# apply migrations\nnpx knex migrate:latest --env production\n\n# start deployer service via PM2\nnpx pm2 start npm --name \"Warpcast Traffic\" -- run start\n\n# OR start the server manually\nnpm run start\n```\n\n### Create migration\n\n```shell\n# create new migration\nnpx knex migrate:make my_new_migration\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FIgorShadurin%2Fclickcaster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FIgorShadurin%2Fclickcaster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FIgorShadurin%2Fclickcaster/lists"}