initial commit
Some checks failed
build / lint (push) Failing after 36s
build / build (push) Has been skipped

This commit is contained in:
2026-01-29 16:13:04 +00:00
commit a32badd025
31 changed files with 6256 additions and 0 deletions

81
README.md Normal file
View File

@@ -0,0 +1,81 @@
# PolyNote · Polygon message pusher
Send hex-encoded messages on Polygon mainnet using the Trust Wallet browser extension or in-app browser. The app builds a zero-value transaction with your message in the data field, so only gas is spent.
## What it does
- Connects to an injected EIP-1193 provider (Trust Wallet) and targets Polygon mainnet.
- Hex-encodes up to 280 characters and sends a 0 MATIC transaction carrying the payload.
- Internationalization (English, Spanish, French, German, Italian, Swedish) with a locale picker and auto language detection.
- Live feedback, copy-to-clipboard for the tx hash, Polygonscan deep links, and a session “recent messages” view.
- Light/Dark theme toggle.
## Stack
- Next.js 15 (App Router), React 18, TypeScript
- Ethers v6
- Styling via a single CSS file (`app/globals.css`)
- Path alias: `@/``app/`
- Lint: ESLint 9 (flat config), Prettier
## Getting started
1. Install pnpm and Node 18+ (Node 24 recommended).
2. Install deps:
```bash
pnpm install
```
3. Run dev:
```bash
pnpm dev -- --hostname 127.0.0.1 --port 3120
```
The dev script guards against a missing `.next/server/middleware-manifest.json`.
4. Open the URL, pick a language, connect Trust Wallet, type a message, and send. Only gas is charged.
## Scripts
- `pnpm dev` start dev server (with manifest guard)
- `pnpm build` production build (skips lint, run lint separately)
- `pnpm start` run the production server
- `pnpm lint` ESLint flat config
- `pnpm format` Prettier check
## Project layout
- `app/page.tsx` main UI/logic
- `app/components/LocaleSelector.tsx` locale dropdown
- `app/hooks/useI18n.ts`, `app/hooks/useTheme.ts` i18n + theme toggles
- `app/locales/*.json` translations
- `app/globals.css` styles
- `scripts/ensure-middleware-manifest.cjs` guards against missing Next middleware manifest on fresh starts
## Configuration
No env vars required. Wallet connectivity is via the injected Trust Wallet provider; WalletConnect is not used.
## Docker
The Dockerfile is multi-stage and uses pnpm:
```bash
docker build -t polynote .
# run
docker run -p 3000:3000 polynote
```
BuildKit with cache mounts is supported in the Dockerfile, but if buildx isnt available locally, use the plain `docker build` command above.
## CI (Gitea actions)
`.gitea/workflows/build.yml` runs lint on Node 22, then builds and uploads `.next/standalone` + `.next/static` + `public` as artifacts for `main` and tags.
## Security notes
- Only injected providers are used; no secrets leave the browser.
- Recipient addresses validated with `ethers.isAddress`.
- Zero-value tx; user pays gas. The app requests a switch to Polygon (chainId 137).
- Copy-to-clipboard is wrapped in error handling.
- Serve over HTTPS in production so wallet and clipboard APIs work reliably.
- Sending data to an EOA can be blocked by some wallets/RPCs; a warning is shown when you target your own address.
## Path aliases
Imports under `app/` can use `@/` (configured in `tsconfig.json`):
```ts
import en from "@/locales/en.json";
import { LocaleSelector } from "@/components/LocaleSelector";
```
## Contributing
PRs welcome. Run `pnpm format` and `pnpm lint` before submitting. If you add locales, extend the JSON files under `app/locales/`.
## License
GPL-3.0 (see `LICENSE`). Core dependencies are permissive (MIT): Next.js, React, React DOM, ethers, Prettier, TypeScript, @types/*.