My role: Design and full-stack development
Cryptoskatt helps Swedish crypto traders sort out their taxes — turning transaction history into the numbers needed for the K4 declaration, a chore that otherwise means a spreadsheet and a long evening with Skatteverket's rules.
The problem
Sweden taxes each crypto disposal as a capital gain, calculated with the average cost basis (genomsnittsmetoden). Anyone who has traded across exchanges quickly ends up with hundreds of transactions to reconcile by hand. The tools that exist are mostly international, priced in dollars, and not built around how Swedish declarations actually work.
What I built
A Next.js app in TypeScript where traders import transactions — CSV from Binance, Coinbase or Kraken, or directly from a Bitcoin, Ethereum, Solana or EVM wallet address — and get their cost basis calculated with the average-cost method, including crypto-to-crypto trades and SEK conversion per transaction day using Riksbanken's exchange rates. The output is a finished K4 form (SKV 2104) ready to upload to Skatteverket, with the 30% capital gains tax and the 70% loss deduction rule applied automatically. Supabase handles accounts and data storage, and Stripe handles payment.
Why it's built this way
Building specifically for the Swedish rules — in Swedish, around the K4 flow — is the product. Supabase keeps the backend small enough for a solo developer to operate safely, with the database's row-level security protecting what is genuinely sensitive financial data, and Stripe means paying works the way Swedish users expect.
Highlights
- Average-cost method per Skatteverket's rules, including crypto-to-crypto trades
- Imports from exchange CSVs and directly from wallet addresses across seven chains
- Exports a finished K4 form (SKV 2104) ready for Skatteverket
- Next.js + TypeScript, Supabase for auth and data, Stripe for payments
- Swedish-first: language, rules and declaration flow
