entrytwo

docs / invoices / getting-started / installation.md

Installation

Self-host Invoices (contacts + AI-native invoicing). Not entrytwo accounting.

Repo: github.com/felixkrusch/invoices

Deep ops notes live in the app repo: docs/PRODUCTION.md, docs/VPS-Auth-Install.md.


Deploy: Most production setups use a VPS with Docker and HTTPS. You can also install and run locally (e.g. on a Mac) for real use: same full app, like classic non-cloud accounting software. Runs on your VPS or locally.

Let AI install it for you

Not a terminal person? You can still get this running. Point an AI coding agent at this page (and the repo) and ask it to install Invoices for you — for example Claude Code, OpenClaw, Hermes, Cursor, or a similar tool that can run commands on your machine or VPS. Share your goal (local Mac vs VPS + domain), paste errors back if something fails, and keep secrets (passwords, API keys) out of chats you do not trust. The steps below remain the source of truth; the agent just walks them with you. Canonical agent files: llms.txt and invoices SKILL.md.

Prerequisites

  • Docker & Docker Compose (recommended)
  • Domain + reverse proxy for HTTPS in production
  • SMTP and/or Google/Microsoft OAuth for real sign-in
  • Optional LLM API key for chat invoice drafts

Quick start (Docker)

git clone https://github.com/felixkrusch/invoices.git
cd invoices
cp .env.example .env
# set secrets, AUTH_URL, SMTP or OAuth, POSTGRES_PASSWORD
# LICENSE_VERIFY_URL=https://entrytwo.com/api/license/verify  (paid key later; 30-day trial needs no key)
# If entrytwo already uses :3000 on this machine: APP_PORT=3001 and AUTH_URL=http://localhost:3001
docker compose up -d --build

Open the site → bootstrap first ADMIN → company settings → tax rates → first contact → first invoice.

Confirm GET /api/health → ready: true. Default host port 3000 (APP_PORT override). Humans buy at Buy; agents must not complete Stripe checkout. After trial, activate with POST /api/license/activate and an invoices et1. key.


Handler mode (one compose per client)

Invoices is not multi-tenant. One stack = one legal entity.

Per client: own COMPOSE_PROJECT_NAME (e.g. invoices-acme), own APP_PORT, own secrets and volumes, own .invbackup files. Never restore company A into company B. Do not mix with entrytwo .etbackup. ≥ 2 GB RAM per stack. Lock chat for bulk agent work; never execute below 0.85 confidence.


Production checklist

  1. Fresh secrets: AUTH_SECRET, ENCRYPTION_KEY, JOB_RUNNER_SECRET, POSTGRES_PASSWORD
  2. Real sign-in: full SMTP and/or OAuth (instant email is off in production)
  3. AUTH_URL=https://your.domain, AUTH_TRUST_HOST=true
  4. DNS A record before expecting HTTPS
  5. Worker service running for outbound invoice email jobs
  6. After trial: activate an Invoices license key (product: invoices)

Need a full ledger instead? entrytwo installation.