Alle Projekte

lazy-koins

Crypto tax documents for Switzerland: exports and wallets in, tax value, income and statement out. Runs on lazy-koins.hello-eme.ch, still in development.

AI-generated
  • Tools
  • Steuern
  • Crypto

lazy-koins runs on lazy-koins.hello-eme.ch and is still in development. You can sign up and try it with your own exports. Quite a bit will still change before the first stable version, and errors are possible, so always check the numbers yourself.

Why I built it

  • For the fun of it: I like planning, building and testing. A project that goes from the idea all the way to a running app is my favourite way to try new things.
  • Building ideas with AI: With AI, ideas can be built quickly and validated right away with real data. “Wouldn't it be handy if …” turns into a feature you can test in no time, and that's simply fun.
  • A simple statement is enough: In Switzerland, capital gains on private assets are tax-free. The tax return only needs a list of the coins as of 31 December with their tax value, plus the year's income. The usual tools calculate much more and charge a yearly subscription for it.

What is lazy-koins?

lazy-koins turns exports from crypto exchanges and wallet addresses into the documents for one tax year: wealth as of 31 December with the tax value of every position, and the year's income from interest, staking, airdrops and launchpools, valued on the day it was received. From that it creates statements and tax documents as PDF, Excel and CSV, up to the e-tax statement for the cantonal tax software. The first focus is Switzerland, private assets. The app is available in German and English.

Ablauf in fünf Schritten: Daten holen (Exporte und Wallets), Mapping, Berechnung, Prüfen, Auszug als PDF, Excel oder per Mail

Dashboard

The start page shows your crypto wealth across all projects: its history over any period you choose, deposits and withdrawals, income, costs and trading fees, the split by asset and the holdings. Every figure can be clicked to show the transactions behind it. A filter shows the holdings you should still take a look at.

Dashboard mit Seitenleiste: Gesamtwert per 31.12.2025 mit Jahresverlauf, Kennzahlen und Verteilung nach Asset
Das Dashboard über alle Projekte, gerechnet aus denselben Daten und Kursen wie die Steuer.
Dashboard: Verteilung nach Asset und Tabelle der Bestände mit Menge, Kurs, Marktwert und kleinem Kursverlauf
Bestände per Stichtag, aufklappbar nach Plattform und Konto.

Files and mappings

Exports are uploaded as CSV, Excel or PDF and stay unchanged. A file belongs to the user, not to a project. Each tax year only picks which files it uses, and single files can be turned off for a project. Instead of a separate parser per exchange, a small JSON describes how to read an export. There are ready-made default mappings for ten platforms; you can write your own or let an AI draft them. In the mapping library users share and rate their mappings. The desktop app can read the library of a web server too.

Seite Dateien: alle Dateien unabhängig von Projekten, nach Plattform gruppiert, mit Status, Zeitraum und Verwendung
Dateien gehören dir, nicht einem Projekt. Ein Projekt wählt nur aus, welche es verwendet.
Mapping-Bibliothek: Suche, Filter nach Plattform und ein veröffentlichtes Kraken-Mapping mit Bewertung und Anzahl Übernahmen
In der Bibliothek teilen Benutzer ihre Mappings und bewerten sie.

For each project lazy-koins notices when an export stops too early, starts too late or a statement as of 31 December is missing, and lists it under “Notices”.

Projekt-Tab Hinweise: Lücken am Anfang oder Ende von Exporten und fehlende Kontoauszüge, gruppiert nach Plattform
Hinweise zeigen, welche Dateien oder Zeiträume vermutlich fehlen.

Transactions: one truth per entry

All transactions from all files and wallets are on one page, along with how they count in the tax calculation: as income, as wealth, as a transfer between your own accounts, as spam or not yet classified. Reclassifying a transaction, hiding it or linking the two sides of a transfer applies in every project that uses it, always with a reason and always reversible. The original file stays unchanged. An AI can analyse unknown transactions and make suggestions.

Seite Transaktionen: alle Buchungen aus Dateien und Wallets mit Art, Wert, Quelle und Status, Filtern und AI-Analyse
Transaktionen: eine Wahrheit pro Buchung. Änderungen gelten in jedem Projekt, mit Begründung und rückgängig machbar.

Wallets and prices

Wallets are added with their public address and queried directly: Bitcoin (xpub too), Ethereum and other EVM networks, Solana, plus Cardano and Polkadot rewards. lazy-koins rejects seed phrases and private keys before anything is stored.

Projekt-Tab Wallets: eine Bitcoin- und eine Ethereum-Adresse mit Status je Netzwerk, letztem Abruf und Anzahl Bewegungen
Wallets: öffentliche Adressen werden je Netzwerk abgerufen.

Prices as of 31 December come from the ESTV price list (Swiss Federal Tax Administration), which lazy-koins loads automatically. For everything else you choose the price sources and their order yourself, such as CoinGecko, CoinMarketCap, DefiLlama or the daily prices of exchanges, plus the ECB exchange rates. Every price is stored with its source and can be overridden. Calculations use exact decimals instead of floating point, and every number can be traced back to its file and line.

Projekt-Tab Kurse: ESTV-Kursliste, Kurs überschreiben und gespeicherte Kursreihen mit Quelle und Kurs per 31.12.
Kurse: ESTV-Kursliste, Tageskurse und eigene Überschreibungen, jeweils mit Quelle.

Checks and AI assistant

The checks compare the balance from the transactions with the account statement, look for withdrawals that never arrive in one of your own accounts and show positions without a price, each with a traffic light and an estimated impact. With your own AI connection (OpenAI-compatible, local too, or Anthropic) a chat explains the numbers and suggests corrections. Nothing changes until you click “Run”. The same tools are also available to external AI clients through an MCP server.

Projekt-Tab Prüfungen: Ampeln für Saldo-Abgleich, Transfers, fehlende Kurse und Wallets sowie offene Punkte mit geschätzter Auswirkung
Prüfungen mit Ampel und geschätzter Auswirkung in CHF.
Ergebnis-Tab mit geöffnetem KI-Assistenten: Antwort mit Link zur Rückverfolgung und ein Vorschlag zum Überschreiben eines Kurses mit Ausführen und Abbrechen
Der KI-Assistent erklärt Zahlen und schlägt Änderungen vor. Ausgeführt wird erst nach einem Klick.

Tax documents and e-tax statement

Besides the short and the detailed statement, lazy-koins creates a list of securities (also as CSV for the tax software), a list of income and receipts, and a proof of transactions and holdings for questions from the tax office. New is the e-tax statement according to eCH-0196: as XML for direct import and as PDF with barcode pages that the cantonal tax software can read. All documents contain only declared values. Open points go into a separate internal review report, and everything can be emailed to your accountant straight from the app.

Exporte-Tab: Auszug erstellen und weitere Steuerdokumente – Wertschriftenverzeichnis, Ertrags- und Belegliste, Transaktions- und Bestandesnachweis, E-Steuerauszug
Weitere Steuerdokumente, jeweils als PDF, Excel oder CSV.
E-Steuerauszug nach eCH-0196 als PDF: Wertschriftenliste mit Depots je Plattform, Totale und ein Barcode-Blatt mit PDF417-Codes
Der E-Steuerauszug nach eCH-0196 (Beispieldaten): lesbare Seiten und Barcode-Blatt zum Einlesen in die Steuersoftware.

Setup, help and desktop app

On first start a wizard walks you through profile, accountant, AI, prices, wallets, email and PIN. After that a help page explains step by step how to get from your files to the finished statement. Besides the web app there is a desktop app for Windows and macOS without an account, where all data stays on your own computer. A project can be moved between the two as a package.

Hilfe-Seite: Schritt-für-Schritt-Anleitung mit Inhaltsverzeichnis von der Einrichtung bis zur Desktop-App
Die Hilfe erklärt Schritt für Schritt, wie lazy-koins funktioniert.

How it's built

  • An Nx monorepo with an Angular app (spartan.ng, Tailwind CSS) and a NestJS backend with SQLite via Prisma.
  • The calculation is a plain TypeScript library using decimal.js. Web, desktop, dashboard and tests all calculate with exactly the same code.
  • The e-tax statement is validated against the official XSD schemas. lazy-koins generates the PDF417 barcodes itself and reads them back in its tests.
  • A tool layer for the chat and the MCP server, the desktop app with Electron, hosted with Coolify.
  • Planned, built and tested largely together with AI agents.

Code and license

The code is on GitHub, under the PolyForm Noncommercial License 1.0.0. You may use, change and share it freely for private and other non-commercial purposes. The license does not allow commercial use. Bugs and ideas are welcome as issues. The screenshots show synthetic sample data.

lazy-koins is not tax advice. It documents how every number was calculated, so that you, your accountant or the tax office can check it.

Alle Projekte
  • hello-eme-play

    Game engine that turns any website into a game, configured by a single JSON. With a plugin for Payload CMS.

    AI-generated
    • Tools
  • Moat

    A small PHP gate on the hosting you already have that keeps API keys out of the browser and forwards only approved requests. Still in development.

    AI-generated
    • Tools
  • bexio-dotnet

    .NET library for the bexio API (2.0 and 3.0): invoices, contacts, accounting and more, with personal access token or OAuth2 sign-in.

    AI-assisted
    • Tools

© 2026 Eme. See you space cowboy 2e78c88