feat(empty-states): startkort on six pages with strata imagery (#1603)

Replace the true-empty states on Kundfakturor, Transaktioner, Underlag,
Loner, Bokforing and Skattekonto with StartCard: a self-contained dark
hero (image-derived ground baked into the strata render, white primary
CTA) that says what the page can do instead of what is missing. Primary
CTAs lead with the connect/setup action per page (bank via PSD2 deep
link, mailboxes, Skatteverket, migration import); filtered/search empty
states and viewer fallbacks keep the old compact states. Design signed
off in the Startkort prototype iterations 2026-08-13.

Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jakob Wennberg
2026-08-13 23:27:24 +02:00
committed by GitHub
co-authored by Jakob Wennberg Claude Fable 5
parent 08440fed94
commit 57d6651cfc
18 changed files with 556 additions and 248 deletions
+36
View File
@@ -3118,6 +3118,7 @@
"purchase_searched_hint": "We searched the mailboxes. Drop the receipt here, or forward it to the inbox address.",
"purchase_open_portal": "Open {vendor}",
"purchase_drop": "Drop the file here, or click to choose",
"drop_anywhere_hint": "… or drop files anywhere on the page",
"purchase_uploading": "Uploading…",
"purchase_kind": "Purchase without a document",
"purchase_date": "Date",
@@ -7102,6 +7103,41 @@
"preset_reports_action": "Create invoice",
"preset_reports_secondary": "Import transactions"
},
"start_cards": {
"invoices_title": "Your first invoice takes two minutes.",
"invoices_body": "Send it by email, and the payment is matched to the invoice when it arrives.",
"invoices_primary": "Fetch customers and invoices",
"invoices_secondary": "Create invoice",
"transactions_title": "Connect your bank and the books stay a step ahead.",
"transactions_body": "New transactions arrive every night and are matched to invoices and receipts; you approve with one click.",
"transactions_primary": "Connect bank account",
"transactions_secondary": "Import bank file",
"inbox_title": "Drop the receipt here, and it's done.",
"inbox_body": "Snap a photo, email it or drop the file here: the amount is read and matched to the right transaction.",
"inbox_primary": "Connect mailboxes",
"inbox_secondary": "Upload document",
"inbox_dismiss": "Dismiss",
"salary_eyebrow_start": "Get started",
"salary_eyebrow_next": "Next step",
"salary_title": "The 25th takes care of itself.",
"salary_body_no_employees": "Add your first employee: tax, contributions and AGI are calculated and booked.",
"salary_body_ready": "{count, plural, one {One employee is in place} other {# employees are in place}}: tax, contributions and AGI are calculated and booked.",
"salary_primary_add": "Add employee",
"salary_primary_run": "Start payroll run",
"bookkeeping_title": "Your bookkeeping moves in within five minutes.",
"bookkeeping_body": "Move in from your previous software: fiscal years, the chart of accounts and every voucher come along.",
"bookkeeping_primary": "Fetch from another system",
"bookkeeping_secondary": "Import SIE file",
"bookkeeping_mini_mall_title": "From a template",
"bookkeeping_mini_mall_body": "Rent, salary and other recurring events in one click.",
"bookkeeping_mini_assistent_title": "With the assistant",
"bookkeeping_mini_assistent_body": "Describe the event in words and get the posting suggested.",
"bookkeeping_mini_tomt_title": "Blank voucher",
"bookkeeping_mini_tomt_body": "Line by line, with the next voucher number ready.",
"skattekonto_title": "Your tax account reconciles itself.",
"skattekonto_body": "Connect with BankID and the balance and events are fetched continuously, ready to book.",
"skattekonto_primary": "Connect Skatteverket"
},
"skattekonto": {
"help_text": "The balance and events are fetched from Skatteverket and synced automatically every night. Completed events are booked against 1630 Skattekonto, usually automatically; anything that cannot be matched is flagged in the list. Pay in via bankgiro 5050-1055 with your OCR number.",
"copy": "copy",