LedgerLeaf

FAQ

Short answers to the questions that come up most often.

What is "demo data" and should I load it?

Demo data is a one-click sample: a fully branded company (Northwind Studio (demo)) with four clients, a five-item price list, seven invoices spread across paid / outstanding / overdue states, currencies and VAT rates, a linked credit note, and four quotes in every state (open, accepted, converted, cancelled). Its purpose is to let you explore the ledger, statements, reports and PDFs with realistic numbers before entering your own. If you're evaluating LedgerLeaf or learning the screens, yes — load it. It's the quickest way to see how everything fits together.

Will removing demo data delete my real companies?

No. LedgerLeaf records the exact IDs it created when you loaded the demo (in DATA_DIR/config.json) and Remove demo data deletes only those. Companies you created yourself are never touched. You can also delete the demo company by hand from its company page like any other — and both load and remove are written to the audit log.

Can I edit the demo company or use it for real work?

You can edit it freely — it's ordinary data created through the same code as anything you enter by hand. But it's intended as a sandbox: the cleanest path is to explore it, remove it, then create your own company. If you do want to keep it, just rename it and clear the sample records.

What's the difference between the Ledger and the Reports tab?

The Ledger is a transactional view — every invoice and credit note in order with a running outstanding balance. It's the printable journal you'd hand to an accountant. Reports are headline numbers: invoiced YTD, top clients, top products, monthly bars. Different cuts of the same data.

How is the open balance on a statement calculated?

For the chosen client: sum of every invoice that isn't marked Paid, minus the sum of every credit note. Aging buckets group the open invoices by how many days past their due date (or issue date when no due date is set) they are, measured against today in the display timezone.

Can I print just the ledger or statement, not the whole page?

Yes. The Print button on each page uses your browser's print dialog, and a print stylesheet hides the sidebar, tabs and action buttons so what reaches paper is the data only. For a polished branded PDF use Download PDF instead.

How are invoice numbers generated?

The format is PREFIX-YYYY-####, e.g. INV-2026-0001. The counter is per-company and increments only when a document is actually saved. Quotes and credit notes each have their own counter and prefix, and converting a quote takes the next invoice number rather than reusing the quote's.

Can I edit an invoice after it's been issued?

Yes — the dates, client details, status, line items and notes are all editable; totals are recalculated when you save. The document number is fixed once allocated. The PDF is rendered on request, so a refresh shows the new version. If you need to retract an invoice that was already sent, issue a credit note instead — that's the audit-friendly way.

What happens to a client or product I delete?

Old invoices keep the snapshotted name, address, description and price — LedgerLeaf never rewrites history. The client/product simply disappears from future pickers. If you want to keep a product but stop selling it, archive it instead.

Why does my product show 15% (default)?

The price list shows the company's default VAT rate for any product without a rate of its own. Leave it blank for standard-rated items — the line will follow whatever default the document uses. Set a rate (typically 0) only for zero-rated or exempt items; that rate is then applied to the line whenever the product is picked on a quote, invoice or credit note.

How does the SKU auto-generate?

If you leave the SKU blank, LedgerLeaf takes up to four alphanumeric uppercase characters from the product name and appends the zero-padded ID — e.g. "Brand identity package" becomes BRAN-0007. You can always override it.

The PDF totals look different from the form. Why?

All amounts are stored to two decimals. The form recalculates totals live as you type, but the saved totals are computed server-side at the moment of issue. Refresh the document page to confirm.

How do I bill in a different currency?

Each document has its own currency field — change it on the form. Tip: exported services are typically zero-rated in South Africa, so set the foreign client's lines (or the whole document's default) to 0% VAT. The locale (number formatting) stays the same as the company, so a USD invoice rendered with en-ZA still looks tidy.

What columns does the CSV importer need?

The first row must be the header. Use the templates linked from the Import page — they ship with the exact columns and a couple of example rows. Empty cells fall back to defaults.

Is the time on my invoice in SA time or UTC?

Both. The database stamp is stored in GMT/UTC for consistency, and every screen — including the PDF — converts it to the display timezone (default Africa/Johannesburg, SAST, GMT+2). The current display timezone is shown in the bottom-left of the sidebar.

Why is the currency stuck on ZAR?

It isn't — ZAR is just the default for new South African companies (SARS-required for SA VAT invoices). You can override the currency on a single document if you bill abroad, and you can change the company default in the company form.

Do I have to set a password on a company?

No. Passwords are optional. Leave the field blank and the company stays open. You can add or remove a password later from the company's edit page.

I forgot my company password — what now?

Passwords are scrypt-hashed; the original is unrecoverable. If you have shell access to the deployment, the SQLite file (or Postgres database) is portable — clearing the company's password_hash column resets protection.

Can I move from SQLite to PostgreSQL later?

Yes. Visit /setup and paste your Postgres URL, or set DATABASE_URL on Railway. The schema is created on first connect. Existing SQLite data isn't migrated automatically — copy it over with a tool like pgloader if you need to keep history.

Where is the database stored?

SQLite, in DATA_DIR/ledgerleaf.db (defaults to ./data). Mount a Railway volume there to persist across deploys. Company logos are stored inside the database itself, so they survive redeploys even without a volume (also true when using Postgres). The runtime config sits alongside the database in DATA_DIR/config.json.

Can I use LedgerLeaf offline or install it on my phone?

You can install it: it is a Progressive Web App, so your browser's Install or Add to Home Screen option (or the sidebar's Install app button) puts it on your home screen or desktop with its own icon and window. It still needs a connection to read and write your data — offline you get a clear "You're offline" page rather than a browser error, and everything works again as soon as you reconnect.

Can LedgerLeaf make my email signature?

Yes — every company has a Signature tab that turns its logo, contact details and product list into a paste-ready HTML signature, with an editable tagline and bullet list. Copy it into Gmail or Apple Mail, or download the HTML for Outlook, Thunderbird and CRMs. Images are served from your LedgerLeaf server, so keep it online for recipients to see them.

Is there an export?

Every quote, invoice and credit note can be downloaded as a self-contained PDF. The Reports tab shows the headline numbers; if you need raw data the SQLite file is portable — open it with any SQLite tool.