ScamShield helps users decide whether a link or website is trustworthy before they click deeper, enter a password, approve a wallet action, or make a payment. It includes a public web scanner for pasted links and a browser extension for checking the active tab. Each scan is sent through a public relay and the final verdict is recorded through GenLayer consensus.
GitHub repository description: GenLayer-powered browser extension for scam detection, website risk checks, and consensus-backed safety verdicts.
- Live web scanner:
https://scamshield-relay.vercel.app - Public relay/API base:
https://scamshield-relay.vercel.app - Health checks:
https://scamshield-relay.vercel.app/apiandhttps://scamshield-relay.vercel.app/health - GenLayer contract:
0x0d0E704daB5Db76937631b4bA9ABCDddc02baDb7 - Tester package:
release/tester-extension.zip - Unpacked tester folder:
release/tester-extension
The submitted Vercel URL now serves the ScamShield web scanner at /, while the relay remains available at /api. The current tester extension build is configured to use the public relay above, so testers do not need to run the backend locally.
- Checks a pasted public URL from the web scanner.
- Analyzes the active website from the browser extension popup.
- Extracts limited page context such as title, meta description, and visible text excerpt.
- Submits the scan to a relay API that coordinates with GenLayer.
- Returns a verdict of
SAFE,SUSPICIOUS, orSCAM. - Shows confidence, a short summary, and key risk flags in the web frontend and extension popup.
- Keeps browser-internal pages, local files, and private authenticated pages outside the supported public test flow.
Use this path if you want to verify the submitted frontend URL directly.
- Open
https://scamshield-relay.vercel.app. - Paste a public
http://orhttps://URL into the scanner. - Click
Check link. - Wait for the GenLayer-backed verdict.
- Review the verdict, confidence score, summary, risk flags, and transaction reference.
Use this path if you want to test the browser extension experience.
- Download
tester-extension.zipfrom the project release or shared test package. - Unzip the file.
- Open
chrome://extensionsin Chrome, Brave, or Edge. - Turn on
Developer mode. - Click
Load unpacked. - Select the unzipped
tester-extensionfolder. - Open any normal public website tab, then click the ScamShield extension icon.
- Click
Check current taband wait for the GenLayer verdict.
Regular Chrome mobile does not support loading unpacked extensions. If testing on Android with Mises Browser, use its zip import flow.
- Download
tester-extension.ziponto the phone. - Open Mises Browser.
- Go to
mises://extensions. - Turn on
Developer modeif it is not already enabled. - Tap
+ (from .zip/.crx/.user.js). - Select
tester-extension.zip. - Open a website, then launch ScamShield from the extension menu.
Mobile extension support can vary by browser. If a scan fails on mobile, retest the same site on desktop Chrome to confirm whether the issue is browser compatibility or the scan itself.
- Open
https://scamshield-relay.vercel.app. - Confirm the page shows
Know before you click.and the relay status is online. - Paste a public URL.
- Click
Check link. - Wait while the scan is submitted and finalized through GenLayer consensus.
- Review the verdict, confidence score, summary, risk flags, and transaction reference.
- Open a normal
http://orhttps://website. - Open the ScamShield extension popup.
- Confirm the current URL appears in the popup.
- Click
Check current tab. - Wait while the scan is submitted and finalized through GenLayer consensus.
- Review the verdict, confidence score, summary, and risk flags.
- Click
Scan againto clear the current result and test another page.
The extension does not analyze browser settings pages, local files, or internal pages such as chrome://extensions.
apps/extension Browser extension popup and manifest
apps/relay Relay API for scan submission and status polling
api Vercel serverless entrypoints
contracts/genlayer GenLayer intelligent contract and deploy scripts
packages/shared Shared schemas, types, and constants
public Vercel web scanner frontend and public assets
release Generated tester builds
scripts Release automation
Install dependencies:
npm installCreate a local environment file:
cp .env.example .envRequired relay values:
PORT=8787
SCAMSHIELD_PUBLIC_BASE_URL=http://localhost:8787
GENLAYER_RPC_URL=https://studio.genlayer.com/api
GENLAYER_EXPLORER_URL=https://explorer-studio.genlayer.com
GENLAYER_PRIVATE_KEY=0xyour_private_key
GENLAYER_CONTRACT_ADDRESS=0xyour_contract_addressOptional rate limiting values:
UPSTASH_REDIS_REST_URL=
UPSTASH_REDIS_REST_TOKEN=Start the relay:
npm run dev:relayStart the extension dev server:
npm run dev:extensionBuild all workspaces:
npm run buildBuild a tester release against the public relay:
$env:VITE_SCAMSHIELD_RELAY_URL="https://scamshield-relay.vercel.app"
npm run release:testerThis generates:
release/tester-extensionrelease/tester-extension/INSTALL.txtrelease/tester-extension.zip
The release command rejects localhost relay URLs unless SCAMSHIELD_ALLOW_LOCAL_RELAY_RELEASE=1 is set for private local testing.
Health check:
GET /apiSubmit a scan:
POST /api/scan
Content-Type: application/json{
"url": "https://example.com",
"pageContext": {
"title": "Example Domain",
"metaDescription": "",
"visibleTextExcerpt": "Example Domain"
}
}Check scan status:
GET /api/scan-status?scanKey=...&txHash=...&sanitizedUrl=...The web frontend is served from public/index.html, with public assets in public/. The relay is deployed on Vercel through the root api entrypoints:
api/index.tsapi/scan.tsapi/scan-status.ts
vercel.json keeps /health mapped to /api and leaves / available for the web scanner.
Production environment variables required on Vercel:
SCAMSHIELD_PUBLIC_BASE_URL=https://scamshield-relay.vercel.app
GENLAYER_RPC_URL=https://studio.genlayer.com/api
GENLAYER_EXPLORER_URL=https://explorer-studio.genlayer.com
GENLAYER_PRIVATE_KEY=0xyour_private_key
GENLAYER_CONTRACT_ADDRESS=0xyour_contract_address
UPSTASH_REDIS_REST_URL=
UPSTASH_REDIS_REST_TOKEN=Do not commit real private keys or production secrets.
Lint the GenLayer contract:
npm run lint:contractDeploy the GenLayer contract:
npm run deploy:contractThe current public tester release already points to the deployed contract listed in the Live Testnet Deployment section.
- ScamShield is a testnet build and is not yet published on the Chrome Web Store.
- Results are generated through the configured relay and GenLayer contract.
- Scans may take a few seconds while consensus finalizes.
- Avoid submitting private pages, authenticated dashboards, or sensitive content during public testing.
- If the extension appears inactive, open a normal website tab and try again.