Nah
Credit-only white-label wrapper over Firma.dev signing — desktop, web portal, admin, marketing, all one monorepo.
Nah is a $0.50-flat-per-document signing platform that wraps the Firma.dev signing API in a credit-only, white-label surface for firms that want their own brand on the workflow without per-seat fees. One monorepo ships an Electron desktop app, a SvelteKit portal + admin, a Go backend, and the public marketing site — backend is the only thing that touches Firma, Stripe, OpenRouter, or Postmark, so the frontend never holds privileged keys. Deploys are atomic symlink swaps on a pull-mode server.
- Go
- SvelteKit
- TypeScript
- Electron
- Firma.dev
- Stripe
- Postmark
- OpenRouter
- Playwright
- Apache
Nah is a credit-only, white-label wrapper over the Firma.dev signing API — a desktop app, a web portal, a super-admin, and a public marketing site, all in one monorepo. $0.50 flat per document, no per-seat fees, no surprise overages. The platform owner keeps the brand; the user keeps the workflow; Firma keeps the cryptographic side of the signing.
Why credit-only?
Per-seat e-signature pricing punishes intermittent users — every paralegal who signs three documents a quarter pays the same $40/mo as the partner who signs 200. Credit-only flips that: load credits when you need them, pay flat per document, no recurring bill, no contract review. The pricing model is the point of the wrapper.
The monorepo, in five drawers
backend/— Go API, single static binary. The only process that talks to Firma, Stripe, OpenRouter, Postmark; the only thing that holds privileged keys.web/— SvelteKit bundle shared by the customer/portal, the super/admin, and the Electron shell.desktop/— Electron wrapper around the SvelteKit build for firms that prefer a native shell on the operator side.marketing/— public site, static HTML, deployed independently of the app surface.ops/+tests/e2e/— server-side deploy/rollback/migrate scripts, Apache vhost, Playwright end-to-end suite.
The hard rules
- No destructive git, no destructive SQL, no secrets in repo.
- Server is pull-mode after initial setup. Deploys are atomic symlink swaps, never edits in place.
- Frontend never holds privileged keys — backend is the only thing that talks to upstream services.
- Files ≤150 lines, functions ≤30 lines, by policy.
- Bring-your-own-key supported on the AI side — firms can wire their own OpenRouter / model provider and cut their AI cost roughly in half.
What ships today
Windows installer is live; macOS is in build. The web portal runs on the production hostname and the admin behind it handles credit grants, document audit, white-label configuration, and per-tenant branding. The marketing surface is the entry point you're reading the description from.
Straight from the source
The project's own README.
Rendered in place — every link, image, and code block carried over from the repo. The page below is what a contributor would see opening the project for the first time.
Nah
Credit-only, white-labeled wrapper over the Firma.dev signing API. Desktop (Electron), web portal, public marketing site, and super-admin in one monorepo. $0.50 flat per document.
- Prod: https://nah.meiuxmeiux.com
- Repo: github.com/saintpetejackboy/nah (private)
- Bootstrap spec: BOOTSTRAP.md
- Agent collab: AGENTS.md
- Current state + next steps: HANDOFF.md
- Open questions: QUESTIONS.md
- ADR log: DECISIONS.md
Quick start
just doctor # verify toolchain
just dev # run backend + web concurrently
just test # backend unit + vitest + playwright
just lint # gofmt + eslint + svelte-check
See just --list for the full recipe catalog.
Layout
backend/— Go API (single static binary)web/— SvelteKit bundle shared by/portal,/admin, and the Electron shelldesktop/— Electron wrapper aroundweb/buildmarketing/— public site, static HTMLops/— server-side deploy/rollback/migrate scripts + Apache vhosttests/e2e/— Playwrightdocs/agent/— prompts and notes for future agents
Hard rules
See BOOTSTRAP.md §1. The short version:
- No destructive git, no destructive SQL, no secrets in repo.
- Server is pull-mode after initial setup. Deploys are atomic symlink swaps.
- Frontend never holds privileged keys — backend is the only thing that talks to Firma / Stripe / OpenRouter / Postmark.
- Files ≤150 lines, functions ≤30 lines.
- Ask before inventing — add to QUESTIONS.md and pause the thread.
Build something like this
Want a tool like this for your shop?
We've shipped this kind of thing before. Twenty-minute intro call, no slides.