Files
polynote/README.md
Urko a32badd025
Some checks failed
build / lint (push) Failing after 36s
build / build (push) Has been skipped
initial commit
2026-01-29 16:13:04 +00:00

82 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/*.