Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 14 additions & 70 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,80 +1,24 @@
# solsentry-app

> RugCheck tells you a fire is burning. SolSentry tells you who lit it.
The website at [solsentry.app](https://solsentry.app): one page about the SolSentry Android app, which turns a
phone into a verifier of public Solana data.

Public web app for [SolSentry](https://solsentry.app) — Solana threat
intelligence. Landing, lookup, operator/token pages, live dashboards and
integration docs for the operator-risk intelligence layer.
## What is served

Live product:
- `/`: the landing page (`src/app/page.tsx`).
- `/.well-known/assetlinks.json`: Digital Asset Links for the Android app (`app.solsentry.mobile`), checked by
wallets over Mobile Wallet Adapter.
- Any other path redirects to `/` (`src/middleware.ts`), so old shared links land on the page.

- App: `https://solsentry.app`
- API: `https://api.solsentry.app/v1/stats`
- Infra backing the API: `Contabo US-East (66.94.105.185)`, migrated from
Hetzner on `2026-06-09`
- Frontend hosting: `Cloudflare/Vercel` (not on the VPS)
The previous site (all pages and branches) is kept in a separate private archive repository.

## What this app exposes

- landing page and positioning for SolSentry
- live operator lookup UI
- public install/docs entrypoint for REST and MCP
- links to the wider public SolSentry surface

## Stack

- Next.js 15.1 + React 19 + TypeScript 5.7
- App Router
- Static export where possible; SSR (edge runtime) for `/operator/[wallet]`
- Consumes the public REST API at https://api.solsentry.app
- Cloudflare Pages deployment

## Routes

| Route | Type | Purpose |
|---|---|---|
| `/` | Static/server | Landing with live stats-backed lookup entry |
| `/lookup` | Server | Universal wallet/mint lookup redirect |
| `/scan` | Server | Scan fallback for unknown wallet/mint inputs |
| `/operator/[wallet]` | Dynamic | Live operator risk profile |
| `/token/[mint]` | Dynamic | Live token risk profile and deployer context |
| `/network/[wallet]` | Dynamic | Operator graph view |
| `/drain/[wallet]` | Dynamic | Drain-trace view |
| `/share/operator/[wallet]` | Dynamic | Public read-only operator share card |
| `/dashboard`, `/live`, `/alerts` | Dynamic/client | Live network and alert surfaces |
| `/clusters`, `/clusters/[id]` | Dynamic | Bot-cluster registry and detail pages |
| `/top-operators`, `/operators`, `/tokens`, `/wallets` | Dynamic | Public directories |
| `/api`, `/docs`, `/mcp`, `/telegram`, `/x402` | Static/server | Integration and developer pages |
| `/pricing` | Static | Tiers and credit packs read live from `/v1/pricing` |
| `/lab/*`, `/screen`, `/dashboard/v3`, `/fun`, `/sidetrack` | Internal/noindex | Labs, presentation and experimental surfaces |

## Local development
## Run

```bash
npm install
npm run dev
npm ci
npm run dev # http://localhost:3000
npm run pages:build # Cloudflare Workers bundle (OpenNext)
npx wrangler dev # serve that bundle locally
```

## Build

```bash
npm run build
npm run pages:build
```

## Environment

| Variable | Default | Purpose |
|---|---|---|
| `NEXT_PUBLIC_API_URL` | `https://api.solsentry.app` | REST API base URL |

## Notes

- Public claims should point back to `https://api.solsentry.app/v1/stats`.
- Precision is auditable per-mint at `/v1/predictions/{mint}` (live) — never
publish a hardcoded accuracy/precision number or operator-level aggregate as
a standing fact; re-verify live on the day.

## License

MIT
Deployed on Cloudflare Workers from `main`.
21 changes: 0 additions & 21 deletions components.json

This file was deleted.

15 changes: 15 additions & 0 deletions public/.well-known/assetlinks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[
{
"relation": [
"delegate_permission/common.handle_all_urls",
"delegate_permission/common.get_login_creds"
],
"target": {
"namespace": "android_app",
"package_name": "app.solsentry.mobile",
"sha256_cert_fingerprints": [
"6C:3D:54:55:14:FA:46:37:83:07:AF:59:61:8E:99:1A:82:C5:B0:C0:30:A8:D0:1C:80:16:58:65:55:89:42:50"
]
}
}
]
2 changes: 2 additions & 0 deletions public/_headers
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/app/latest.json
Cache-Control: public, max-age=300
Binary file removed public/alert-telegram-4kxscute.png
Binary file not shown.
1 change: 1 addition & 0 deletions public/app/latest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"versionCode":21,"name":"0.1.21","url":"https://api.solsentry.app/app/solsentry-0.1.21.apk","sha256":"1eeff3af6c4e80e16d3dce63b744f0cb14b8ed312d57a205e8baa82738034868","notes":"First public build."}
Binary file removed public/og/og-default.png
Binary file not shown.
Binary file removed public/og/og-telegram.png
Binary file not shown.
Binary file added public/screens/account.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/screens/home.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/screens/points.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading