diff --git a/.github/workflows/wallet-release.yml b/.github/workflows/wallet-release.yml new file mode 100644 index 0000000..f46f292 --- /dev/null +++ b/.github/workflows/wallet-release.yml @@ -0,0 +1,41 @@ +name: Wallet release + +# Builds the prebuilt extension zip and attaches it to a GitHub Release so the +# website's "Download the wallet" button always serves a current build. The +# wallet is self-contained (no SDK build step), so this is a plain npm build. +on: + push: + tags: ["wallet-v*"] + workflow_dispatch: + +permissions: + contents: write + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - name: Build + zip the extension + working-directory: wallet + run: | + npm install --no-audit --no-fund + npm run build + npm run zip + - name: Stable asset name + run: cp wallet/.output/*-chrome.zip lightnode-wallet-chrome.zip + - name: Publish to release + env: + GH_TOKEN: ${{ github.token }} + run: | + TAG="${{ github.ref_type == 'tag' && github.ref_name || 'wallet-latest' }}" + if gh release view "$TAG" >/dev/null 2>&1; then + gh release upload "$TAG" lightnode-wallet-chrome.zip --clobber + else + gh release create "$TAG" lightnode-wallet-chrome.zip \ + --title "LightNode Wallet ($TAG)" \ + --notes "Prebuilt LightChain wallet extension (Chrome MV3). Unzip and Load unpacked in chrome://extensions." + fi diff --git a/.gitignore b/.gitignore index 3c40533..4f02bf6 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,13 @@ next-env.d.ts # SDK build output sdk/dist +# Guard against an accidental nested clone of this repo (git clone run inside it) +/lightnode/ + +# Wallet build output (WXT) +wallet/.output +wallet/.wxt + # Local-only owner docs (strategy/QA/capabilities) QA-AND-BUSINESS.md CAPABILITIES.md diff --git a/app/wallet/page.tsx b/app/wallet/page.tsx index 6e9d94d..1d399df 100644 --- a/app/wallet/page.tsx +++ b/app/wallet/page.tsx @@ -3,17 +3,18 @@ import Link from "next/link"; import { Server, Sparkles, Landmark, ArrowLeftRight, Fuel, ShieldCheck, Download, KeyRound, Github, Lock } from "lucide-react"; export const metadata: Metadata = { - title: "LightChain Wallet - self-custodial wallet for LightChain", + title: "LightNode Wallet - a self-custodial wallet for the LightChain ecosystem", description: - "A self-custodial browser wallet built for LightChain: worker monitoring, encrypted AI inference, and DAO intelligence. Your keys never leave your device. No smart contract, no custody.", + "LightNode Wallet: a self-custodial home for your LCAI, your worker, encrypted AI inference, and DAO governance on LightChain. Your keys never leave your device. Independent and community-built.", }; const REPO = "https://github.com/marinom2/lightnode/tree/main/wallet"; +const DOWNLOAD_URL = "https://github.com/marinom2/lightnode/releases/latest/download/lightnode-wallet-chrome.zip"; const FEATURES: { icon: typeof Server; title: string; body: string; status: "live" | "soon" }[] = [ { icon: ShieldCheck, title: "Self-custodial", body: "Keys are generated and encrypted on your device with AES-256-GCM + scrypt. They never leave it. No server, no custody, no smart contract.", status: "live" }, { icon: Fuel, title: "Gas done right", body: "LightChain fees are negligible, so the wallet drops the gwei sliders and scary fee modals. One tap, fee shown as what it is: nothing.", status: "live" }, - { icon: Server, title: "Worker control", body: "See if your address is a registered worker, its stake, headroom, and claimable rewards - and stake or top up in one click. No other wallet knows LightChain workers exist.", status: "soon" }, + { icon: Server, title: "Worker control", body: "Your worker, in your wallet: registration, stake, headroom, and claimable rewards at a glance, then stake or top up in a tap.", status: "soon" }, { icon: Sparkles, title: "Encrypted AI inference", body: "Ask an AI a question and pay per call from your own key, end-to-end encrypted and settled on-chain - right inside the wallet.", status: "soon" }, { icon: Landmark, title: "DAO intelligence", body: "Decoded proposals, quorum distance, and your voting power, surfaced from the registries. Vote on the official DAO in a tap.", status: "soon" }, { icon: ArrowLeftRight, title: "Built-in bridge", body: "Move LCAI between Ethereum and LightChain without leaving the wallet, over the Hyperlane warp route.", status: "soon" }, @@ -44,19 +45,22 @@ export default function WalletPage() {
Self-custodial · LightChain
+Self-custodial · Independent
- A browser wallet built for LightChain - worker monitoring, encrypted AI, and DAO intelligence. Like Phantom, it is a pure self-custodial wallet: no smart contract, no custody, and your keys never leave your device. + A self-custodial wallet for the LightChain ecosystem. Hold your LCAI, monitor your worker, run encrypted AI inference, and read the DAO - all in one place. Your keys never leave your device.
- The wallet is open source and runs from source while it goes through a security audit. A Chrome Web Store listing follows the audit. Until then, load it unpacked in ~2 minutes: + Grab the prebuilt extension and load it in under a minute. A one-click Chrome Web Store listing lands after the security audit.
{`git clone https://github.com/marinom2/lightnode
-cd lightnode/wallet
-npm install
-npm run build`}
- Produces a loadable extension at wallet/.output/chrome-mv3.
Then unzip it anywhere - no Node, no build.
chrome://extensions, enable Developer mode (top right), click Load unpacked, and select the wallet/.output/chrome-mv3 folder.
+ Open chrome://extensions, enable Developer mode (top right), click Load unpacked, and select the unzipped folder.
{`git clone https://github.com/marinom2/lightnode
+cd lightnode/wallet
+npm install
+npm run build # outputs wallet/.output/chrome-mv3`}
+