{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "pigontech--inkvoice",
    "name": "Inkvoice",
    "tagline": "One-container invoicing for freelancers: Stripe and PayPal, expenses, German e-invoicing, REST API.",
    "shortTagline": "Invoicing for freelancers",
    "description": "Inkvoice is a Bun + Hono + React invoicing app in a single ~50 MB container with SQLite: invoices, quotes, recurring billing, online card payments, expenses, multi-currency reports and an opt-in ZUGFeRD/XRechnung/PEPPOL module for Germany. Deployment is an env table; day-to-day settings and Mustache templates are in-app. A REST API under /api/v1 mirrors the UI. MIT; a managed Cloud exists.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "invoicing-finance",
    "alternativeTo": [
      "FreshBooks",
      "Zoho Invoice"
    ],
    "shape": "business-app",
    "formFactor": "web-app",
    "executionModel": "deterministic",
    "provenance": "mixed",
    "codeStack": {
      "languages": [
        "TypeScript"
      ],
      "frameworks": [
        "Bun",
        "Hono",
        "React 19",
        "Vite",
        "Tailwind",
        "shadcn/ui"
      ],
      "packageManager": "bun",
      "database": [
        "SQLite"
      ],
      "hostingTarget": [
        "Docker (ghcr.io/pigontech/inkvoice)",
        "Dokploy template",
        "Coolify"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/pigontech/inkvoice",
        "owner": "pigontech",
        "name": "inkvoice",
        "license": "MIT",
        "stars": 21,
        "lastCommit": "2026-09-02"
      }
    ],
    "interface": {
      "kind": "api",
      "url": "https://docs.inkvoice.app/api/",
      "official": true,
      "hosted": "local"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Invoice lifecycle: draft, send, paid, void, duplicate",
        "reachable": true,
        "evidence": "docs/api/invoices.md; /api/v1/invoices"
      },
      {
        "job": "Quotes and conversion to invoices",
        "reachable": true,
        "evidence": "docs/api/quotes.md; /api/v1/quotes"
      },
      {
        "job": "Recurring invoices",
        "reachable": true,
        "evidence": "packages/backend/src/routes/recurring.ts; not in the docs index"
      },
      {
        "job": "Online payments with Stripe and PayPal",
        "reachable": true,
        "evidence": "public /api/v1/public/invoices/:shareToken/pay; keys from STRIPE_* and PAYPAL_* env"
      },
      {
        "job": "Expense tracking",
        "reachable": true,
        "evidence": "packages/backend/src/routes/expenses.ts; not in the docs index"
      },
      {
        "job": "German e-invoicing and PEPPOL send/receive",
        "reachable": true,
        "evidence": "packages/backend/src/routes/einvoice.ts; docs/features/e-invoicing.md"
      },
      {
        "job": "Reports and CSV export",
        "reachable": true,
        "evidence": "docs/api/reports.md; routes/export.ts"
      },
      {
        "job": "Customers and products",
        "reachable": true,
        "evidence": "docs/api/customers.md, products.md"
      },
      {
        "job": "Invoice and email templates",
        "reachable": true,
        "evidence": "docs/api/templates.md; docs/TEMPLATE_VARIABLES.md"
      },
      {
        "job": "Users and roles",
        "reachable": true,
        "evidence": "routes/users.ts; multi-user with role-based permissions"
      }
    ],
    "editions": [
      {
        "name": "Self-hosted",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/pigontech/inkvoice"
          },
          {
            "kind": "container",
            "url": "https://github.com/pigontech/inkvoice#docker-recommended",
            "command": "docker run -d -p 3000:3000 -v invoice-data:/app/data -e JWT_SECRET=… -e ADMIN_PASS=… ghcr.io/pigontech/inkvoice:latest"
          },
          {
            "kind": "one-click",
            "url": "https://dokploy.com/templates/inkvoice"
          }
        ]
      },
      {
        "name": "Inkvoice Cloud",
        "price": null,
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://cloud.inkvoice.app"
          }
        ]
      }
    ],
    "skills": {
      "kind": "none",
      "paths": [],
      "install": null,
      "note": "No SKILL.md, Claude Code plugin, or published skill found in the repo."
    },
    "customization": {
      "summary": "Set JWT_SECRET and ADMIN_PASS and you are running; add SMTP to send invoices, Stripe or PayPal keys to take payments, OIDC for SSO, and a peppol.sh key for e-invoice transport. Currency, locale, numbering, logo and email and PDF templates (Mustache) are edited in Settings, not files. That is the whole surface for a freelancer or small team.",
      "envVars": [
        "ADMIN_USER",
        "ADMIN_PASS",
        "JWT_SECRET",
        "DATABASE_PATH",
        "PORT",
        "PUBLIC_BASE_URL",
        "COOKIE_SECURE",
        "ENABLE_HSTS",
        "SMTP_HOST",
        "SMTP_PORT",
        "SMTP_USER",
        "SMTP_PASS",
        "SMTP_FROM",
        "STRIPE_SECRET_KEY",
        "STRIPE_PUBLISHABLE_KEY",
        "STRIPE_WEBHOOK_SECRET",
        "PAYPAL_CLIENT_ID",
        "PAYPAL_SECRET",
        "PAYPAL_WEBHOOK_ID",
        "PAYPAL_ENV",
        "OIDC_ISSUER_URL",
        "OIDC_CLIENT_ID",
        "OIDC_CLIENT_SECRET",
        "PEPPOL_SH_API_KEY",
        "PEPPOL_SH_WEBHOOK_SECRET",
        "DEMO_MODE"
      ],
      "configFiles": [
        ".env",
        "docker-compose.yml"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 28
    },
    "useWhen": [
      "I am a freelancer who wants invoices and card payments on a €5 VPS with my data in one SQLite file",
      "I invoice German businesses and need XRechnung or ZUGFeRD without a per-seat subscription"
    ],
    "accounts": [
      "Stripe or PayPal (optional)",
      "SMTP provider (to email invoices)",
      "peppol.sh (PEPPOL transport, optional)",
      "OIDC provider (SSO, optional)"
    ],
    "active": true,
    "lastActivity": "2026-09-02",
    "gotchas": [
      "COOKIE_SECURE defaults to true, so logins silently fail on plain HTTP unless you set it to false",
      "Keep the 512 MB memory cap or Bun grows its heap",
      "API tokens with scopes exist in routes/api-tokens.ts but the docs only describe JWT login",
      "Real-software signal is thin: 21 stars, 8 forks, issues from four people; kept on the Show HN thread, Dokploy template and hosted Cloud"
    ],
    "fit": {
      "adaptable": 3,
      "operable": 2
    },
    "evidence": {
      "formFactor": "single Docker container serving API and SPA (README Tech Stack)",
      "executionModel": "no model at runtime",
      "operability": "REST API documented at docs.inkvoice.app/api by the Builder; docs/api/*.md in repo",
      "effort": "README Configuration table and .env.example name every variable; Settings page holds runtime knobs",
      "editions": "README: MIT source, Inkvoice Cloud managed; no Cloud price found",
      "active": "GitHub pushedAt 2026-09-02; Show HN 2026-08-11; release tag 0.1.0"
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.95,
      "operability": 0.85,
      "effort": 0.9,
      "reach": 0.8,
      "editions": 0.6
    },
    "openQuestions": [
      "Inkvoice Cloud pricing (site and cloud pages rendered without content for the fetcher)",
      "Whether API tokens are documented anywhere for agents, or JWT login is the intended path",
      "Gate 3 borderline; Curator to confirm"
    ],
    "sources": [
      {
        "url": "https://github.com/pigontech/inkvoice",
        "foundBy": "sourcing:invoicing-finance:community"
      },
      {
        "url": "https://docs.inkvoice.app/api/",
        "foundBy": "analysis:invoicing-finance"
      },
      {
        "url": "https://dokploy.com/templates/inkvoice",
        "foundBy": "analysis:invoicing-finance"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "unverified",
      "reason": "The cleanest config-only SMB invoicing surface in the batch; official REST API with broad Reach but partly undocumented (recurring, expenses, tokens), so Operable 2. Thin user evidence flagged.",
      "disputed": [
        "gate 3 real-software: under 50 stars"
      ]
    },
    "url": "apps/pigontech--inkvoice.html",
    "coverage": "complete",
    "paid": false,
    "source": "research/verified/pigontech--inkvoice.json"
  }
}
