Roadmap
8-month development timeline for LaWallet NWC, funded by OpenSats (Fifteenth Wave, Dec 2025 – Sep 2026).
8-Month Development Timeline
All eight months are covered by the OpenSats grant (Fifteenth Wave, Dec 2025 – Sep 2026). The phases progress from foundation (M1–M2) through enhancement (M3–M4) and expansion (M5–M6) to monetization and intelligence (M7–M8).
| Month | Phase | Status | Key Deliverables |
|---|---|---|---|
| 1 | Foundation | CompletedSee report → | Vitest + MSW + 154 integration tests, error hierarchy, Zod env + input validation, Pino logging, JWT auth + RBAC (4 roles), rate limiting + request limits, Next.js 16 + ESLint 9 |
| 2 | Foundation | CompletedSee report → | GitHub Actions CI/CD pipeline, security scanning + coverage thresholds, Vercel config, NIP-98 → JWT session auth migration |
| 3 | Enhancement | CompletedSee report → | Figma-based admin dashboard rebuild (Home/Users/Activity/Cards/Settings + shadcn/ui), responsive/mobile layout, multi-tab Settings (Branding/Wallet/Infrastructure), 8-preset theme system, branding image uploads, domain claim onboarding wizard, lawallet.io landing repo split, v0.9.0 release |
| 4 | Enhancement | CompletedSee report → | Monorepo migration (pnpm + Turborepo, 3 apps + 3 packages), full Admin Dashboard E2E (Cards/Designs + BoltCard QR/NFC), schema rewrite (LightningAddress 1→N + NWCConnection, IDLE/ALIAS/NWC modes), user-facing Wallet (onboarding, Send/Receive/Scan, offline cache), system-wide Activity Log + SSE, LUD-12/16/21 compliance, OpenAPI 3.1 + Scalar Playground, docs site overhaul, v0.10.0 release |
| 5 | Expansion | CompletedSee report → | Remote Wallets first (named RemoteWallet model + NWC driver; LND / CLN / BTCPay deferred), then Card System Apps (B.0 QR-based JWT login → card-installer Android bulk-writes/initializes cards → card-manager prints the Activation QR), Platform Polish (full NIP-05, relay picker, user data cache, onboarding v2 with infra-aware .well-known rewrites, customizable domain landing, admin home redesign, dashboard cache, PWA, bug fixes) |
| 6 | Expansion | CompletedSee report → | NWC Payment Listener promoted to a live transport service (relay pool, HMAC webhooks, missed-event recovery, never-drop retry), card activation flow (SIMPLE cards + ONE_TIME QRs: mint / rescue + end-user /wallet/activate claim UI), deploy targets (multi-arch Docker Hub + Umbrel + Start9), Backup & Restore, listener dashboard + hardening, expanded wallet settings. Deferred to M7: MASTER card account-share (FOREVER QRs), NWC Proxy Lite, full LUD-16/21/22 + NIP-57 closeout, @lawallet-nwc/react, WordPress plugin, Resend, Nostr scheduler |
| 7 | Monetization & Communication | In Progress | Carried over from M6 (MASTER account-share, NWC Proxy Lite, compliance closeout, @lawallet-nwc/react, WordPress plugin, Resend, Nostr scheduler), then Subscription Manager (paid tiers, monthly/one-time), perks (vanity LN address, email-to-Nostr bridge, sat allowance), Nostr Chat DMs (NIP-17/44), operator → user broadcast, i18n (en/es/pt-BR) |
| 8 | Intelligence | Planned | AI Agents with own LN address + Nostr identity + NWC wallet (one-click spawn, dashboard funding, scheduled tasks), Vercel AI Gateway router, sat-metered runs with subscriber discounts, Mode A (nsec) + Mode B (NIP-46/Amber) signing |
Phase 1: Foundation (Months 1-2)
Month 1: Backend Infrastructure + Testing (COMPLETED)
See the Month 1 progress report. Exceeded original scope. Delivered 90% of the backend infrastructure:
- Vitest + MSW + 154 integration tests covering all 32 routes
- Error handling (ApiError hierarchy + withErrorHandling)
- Configuration (Zod env validation + AppConfig)
- Pino structured logging (originally Month 2)
- JWT auth + RBAC with 4 roles (originally Month 3)
- Security middleware (rate limiting, request limits, maintenance mode)
- Zod validation for all API inputs
- Next.js 16 + ESLint 9 upgrade
Month 2: CI/CD + Auth Flow Upgrade (COMPLETED)
Per the Months 2–3 progress report:
- GitHub Actions CI/CD pipeline with build integration
- Security scanning in CI + coverage thresholds + test exclusion cleanup
- Vercel configuration with framework detection and security headers
- NIP-98 → JWT session authentication migration (PR #184)
- Aligned frontend login behavior with the new JWT-based admin experience
- TypeScript Client SDK + React Hooks package + Playwright E2E pulled forward to later phases
Phase 2: Enhancement (Months 3-4)
Month 3: Figma Admin Dashboard + Onboarding + Landing Split (COMPLETED)
Per the Months 2–3 progress report — the project pulled forward parts of Month 4 (white-label, branding, customizable landing) during this period:
- Frontend stripped down and rebuilt around the new Figma direction
- New Home, Users, Activity, Cards, and Settings experiences
- Full-page login flow + responsive/mobile layout support
- Component preview environment for fast UI iteration
- shadcn/ui adopted as the base component system
- Multi-tab Settings (Branding / Wallet / Infrastructure) with 8 theme presets
- Image uploads for logotype/isotype branding + border radius presets
- Setup banner + domain configuration UX
- Onboarding wizard with
veintiuno.latcommunity lookup, debounced username availability, NostrConnect form lawallet.iolanding extracted into its ownlawallet-landingrepo- Released v0.9.0
Month 4: User Wallet + Admin Dashboard E2E + Schema Rewrite (COMPLETED)
See the Month 4 progress report. The largest release window in the project's history. Original scope (User Dashboard, Courtesy NWC Proxy, wallet polish, white-label) was significantly exceeded:
- Monorepo migration
- Brand-new user-facing wallet
- Complete admin dashboard build-out
- Schema rewrite enabling per-address NWC routing
- System-wide activity log with real-time SSE
- Full LUD-12 / LUD-16 / LUD-21 compliance via the mode-aware resolver
- OpenAPI 3.1 spec with a live Scalar playground
- Public docs site overhaul
- Courtesy NWC reframed mid-month as a Bun-based NWC notification service on the
nostr-triggerbranch (feature-rich but not yet merged); a lite version lands in Month 6 as the LUD-16/21/22/NIP-57 settlement layer
Phase 3: Expansion (Months 5-6)
Month 5: Remote Wallets + Card System Apps + Platform Polish
Three themes, executed in dependency order — Remote Wallets first because every card and address binds to one.
- Remote Wallets (Connections Manager) —
RemoteWalletmodel + pluggable NWC driver (LND / CLN / BTCPay reserved) + Connection Map UI (desktop canvas + mobile tabs); legacyNWCConnectionrows migrated forward. - Card System Apps —
card-installer(Android, NFC; bulk-writes blank NTAG424 cards and registers them as initialized) andcard-manager(prints an Activation QR for any initialized card). The end-user "Activate Card" flow lands in Month 6. - Platform Polish — full NIP-05, relay picker, user data cache, onboarding v2 (infra-aware
.well-knownrewrites), customizable domain landing, admin home redesign, dashboard cache, PWA wallet, in-codebase plugin system + installer CLI, bug fixes.
Month 6: NWC Payment Listener + Deploy Targets + Backup & Restore
The infrastructure tier landed across the v1.1.0 → v1.4.0 releases; the settlement / compliance layer was deferred to Month 7.
Delivered:
- NWC Payment Listener (transport-only) — the
apps/listener/echo stub became a live service: relay pool, HMAC-signed webhooks toapps/web, missed-event catch-up, never-drop webhook retry - Card activation flow (SIMPLE + ONE_TIME) —
CardActivationTokenmodel, mint / list / rescue endpoints, and the end-user/wallet/activate/[id]claim UI (MASTER account-share reserved — see Deferred) - Deploy targets — multi-arch Docker Hub images, Umbrel app-store auto-update, published Start9 / StartOS
.s9pk - Backup & Restore — ADMIN zip export/import of 14 models with optional AES-256-GCM encryption (merge / replace modes)
- Listener dashboard + hardening, expanded wallet settings, admins can grant ADMIN, read-only address view
Deferred to Month 7:
- MASTER card account-share — FOREVER QRs +
CardClaim/LightningAddressShare/RemoteWalletSharemodel + share-revoke - NWC Proxy Lite settlement layer + full LUD-16 / LUD-21 / LUD-22 / NIP-57 closeout
@lawallet-nwc/reactextraction, WordPress plugin, Resend adapter, Nostr scheduler, threat model + audit prep, Vercel / Netlify configs
Phase 4: Monetization & Intelligence (Months 7-8)
Month 7: Monetization Plane (Subscription Manager + Nostr Chat) — In Progress
The active window. First it clears the work carried over from Month 6, then operators can charge users in sats for tier access and users can talk to each other.
Carried over from Month 6 (do first): MASTER card account-share (FOREVER QRs), NWC Proxy Lite + full LUD-16 / LUD-21 / LUD-22 / NIP-57 closeout, @lawallet-nwc/react extraction, WordPress plugin, Resend adapter, Nostr scheduler, threat model + audit prep, Vercel / Netlify deploy configs.
Month 7 scope:
- Subscription Manager — operator-defined plans with monthly or one-time pricing in sats
- Perks (P0): vanity Lightning address, email-to-Nostr bridge, sat allowance credited monthly
- Nostr Chat — DMs (NIP-17 gift-wrapped over NIP-44, NIP-04 fallback) with relay-only message storage
- Email-to-Nostr bridge —
username+inbox@domain.comMX route delivered as NIP-44 DMs - Operator → user broadcast via instance nsec, segmented by tier
- Daily expiry cron runs in
apps/listener - M5 rename: legacy "Subscription Manager (admin)" follower-capture endpoint becomes "Follower Capture Endpoint"
See Month 7.
Month 8: Intelligence Plane (AI Agents)
Operators spawn AI agents with full identity and a wallet; users pay in sats with subscriber discounts.
- One-click agent spawn from the dashboard — generates Nostr keypair, provisions
<slug>@domain.comLN address, creates an NWC wallet via the M6 Proxy - Per-agent funding — operator clicks "Fund Agent", pays an invoice from their wallet, agent balance updates
- Identity Mode A (server-side encrypted nsec, autonomous) and Mode B (NIP-46 / Amber bunker URI, delegated)
- Heartbeats / scheduled tasks — cron-driven
POST,REPLY_TO_MENTIONS,ZAP_LIST,CUSTOM_PROMPT - Sat-metered runs — debits the M7 user allowance first; falls back to a 402-style invoice from the agent's wallet
- Reference agents: Drafter + Summarizer + custom OperatorBot
- Vercel AI SDK + AI Gateway as the model router (no new container)
See Month 8.
Beyond M8
Group chat threads (NIP-29), operator-hosted paid Nostr relay (strfry/khatru), Cashu eCash mint, and the community plugin family (Events, Badges, Commerce) live in Vision under "Beyond M8 / Community Vision".
Current State (as of v1.4.0)
Snapshot of what has shipped so far. This grows each month as deliverables land.
| Area | State |
|---|---|
| API Routes | 79 route handlers, all wrapped with error handling, Zod validation, and unified auth |
| Admin Dashboard | Full Figma rebuild — Home / Users / Activity / Cards / Designs / Settings, fully responsive |
| Wallet UI | Onboarding, Send / Receive / Scan, offline cache, NWC setup, full settings; PWA installable with offline service worker; Activate Card flow |
| Remote Wallets | RemoteWallet model + pluggable NWC driver + Connection Map UI (desktop canvas + mobile tabs); LNCurl disposable wallets |
| NWC Listener | Live transport service in apps/listener/ — relay pool, HMAC webhooks, missed-event recovery, never-drop retry, realtime dashboard |
| Landing | Split into the lawallet-landing repo; this app redirects / there |
| Auth Backend | NIP-98 → JWT exchange, dual-method (Authorization: Nostr or Bearer), RBAC with 4 roles, maintenance mode |
| Testing | 108 unit/integration test files (Vitest + MSW + happy-dom) + 8 Playwright E2E specs, CI-enforced coverage thresholds |
| Database | 15 Prisma models incl. User, LightningAddress, RemoteWallet, Card, CardActivationToken, CardPaymentAttempt, CardDesign, Ntag424, ActivityLog, PluginRecord, NostrProfileCache, Settings, Invoice |
| Lightning Address | LUD-12 (comments) + LUD-21 (verify) live; LUD-16 alias / NWC modes; NIP-05 (.well-known/nostr.json); LUD-22 webhook transport via listener — full LUD-16/22 + NIP-57 closeout in M7 |
| NFC Cards | Full NTAG424 encryption, scan, write, OTC activation, BoltCard QR pairing, SIMPLE/ONE_TIME activation tokens |
| Backup & Restore | ADMIN zip export/import of 14 models with optional AES-256-GCM encryption (merge / replace modes) |
| Deploy | Multi-arch Docker Hub images, Umbrel app-store auto-update, published Start9 .s9pk, installer CLI |
| Plugins | In-codebase plugin system (apps/web/plugins/) with a badges reference plugin; pnpm plugin:new scaffold |
| Alby Integration | Sub-account management via @getalby/sdk v7 |
| Developer Surface | OpenAPI 3.1 spec + Scalar Playground at beta.lawallet.io/api-docs; TS SDK + @lawallet-nwc/react extraction in M7 |
| Monorepo | pnpm workspaces + Turborepo — 4 apps (web, docs, listener, cli) + 3 packages (sdk, shared, openapi) |
Lightning Address Compliance Timeline
| Feature | Standard | Month | Status |
|---|---|---|---|
| Address management (admin) | — | 3 | Completed |
| User dashboard + npub | — | 4 | Completed |
| Payer comments | LUD-12 | 4 | Completed |
| Verify endpoint | LUD-21 | 4 | Completed |
| Address redirect | — | 5 | Completed |
| Base Lightning address | LUD-16 | 4 | Completed |
| Webhooks | LUD-22 | 6 → 7 | In Progress |
| Zaps | NIP-57 | 7 | Planned |
| Courtesy NWC (Proxy Lite) | — | 7 | Planned |
Containers Timeline
| Month | Container | Status | Service |
|---|---|---|---|
| 4 | lawallet-listener | Stub in apps/listener/ (echo) | NWC Payment Listener — added during the monorepo migration |
| 6 | lawallet-listener | ✅ Live (transport-only) | NWC relay pool + HMAC payment webhooks + missed-event recovery (v1.1.0) |
| 7 | lawallet-nwc-proxy | ⏳ Planned (Lite) | Courtesy NWC settlement layer for external providers (carried over from M6) |
The NWC Proxy (carried into M7) is the last new container; M8 adds none. The email-to-Nostr bridge (M7) and the agent scheduler / heartbeat ticker (M8) extend apps/listener. Agent inference (M8) runs inside apps/web route handlers via the Vercel AI SDK. Container count settles at 3 (web, listener, nwc-proxy).