Commit Graph
18 Commits
Author SHA1 Message Date
SimonandClaude Opus 5 e3930aa633 fix(a11y): ta bort alfa-tonad textfärg — 82 kontrastöverträdelser (UI-09)
CI (SIAX Cloud) / integration (push) Skipped
masterplan-lock / check (push) Successful in 7s
Security Scan (SIAX Cloud) / security (push) Successful in 20s
CI (SIAX Cloud) / security (push) Successful in 47s
masterplan-lock / check (pull_request) Successful in 10s
CI (SIAX Cloud) / quality (push) Successful in 1m11s
Security Scan (SIAX Cloud) / security (pull_request) Successful in 32s
CI (SIAX Cloud) / security (pull_request) Successful in 42s
CI (SIAX Cloud) / integration (pull_request) Successful in 56s
CI (SIAX Cloud) / quality (pull_request) Successful in 59s
axe-core 4.10.2 mot 0pt.app 2026-09-26: en enda regel, color-contrast,
impact=serious, 82 noder. Estatets största enskilda a11y-defekt. Alla 82
har samma form: en Tailwind-alfamodifierare på en textfärg.

Uppmätt WCAG 2.2-kontrast mot bägge temabakgrunderna i styles/globals.css:

  text-muted-foreground        4.73:1 ljust   7.63:1 mörkt   GODKÄNT
  text-muted-foreground/70     2.71:1         4.20:1         faller
  text-muted-foreground/60     2.29:1         3.37:1         faller
  text-muted-foreground/50     1.96:1         2.67:1         faller
  text-muted-foreground/40     1.69:1         2.11:1         faller
  text-foreground/20           1.57:1         1.74:1         faller

Den omodifierade token klarar AA i bägge teman, så åtgärden är helt enkelt
att aldrig tona den. Elva textställen bytte till text-muted-foreground.
Kopieringsknappen i app/portal går från 1.57:1 till 4.73:1 i viloläge och
19.79:1 vid hover — den föll även 1.4.11 för icke-textkomponenter.
Toastens stängknapp klarade redan 1.4.11 (3.71:1) men blir 4.73:1.

Kvar med alfa är endast den dekorativa masthead-siffran i app/bestall, som
redan bär aria-hidden + select-none + pointer-events-none. Den är undantagen
både av WCAG och av axe, och guarden nedan tillåter den på just den grunden.

scripts/ci/check-text-contrast.mjs är en blockerande källkodsgrind i
quality-jobbet. Den är avsiktligt inte en axe-körning: den fullständiga
axe-jobb som UI-09 också begär kräver build + serve i CI och spåras separat.
Tills det finns stoppar den här grinden regressionen vid den form som
orsakade defekten.

Refs: UI-09
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-27 01:27:28 +02:00
admin 7ce92827c0 fix: close demo payment bypass and guard order transitions
masterplan-lock / check (pull_request) Successful in 4s
CI (SIAX Cloud) / security (push) Successful in 14s
CI (SIAX Cloud) / security (pull_request) Successful in 15s
Security Scan (SIAX Cloud) / security (pull_request) Successful in 16s
CI (SIAX Cloud) / integration (pull_request) Successful in 26s
masterplan-lock / check (push) Successful in 35s
CI (SIAX Cloud) / quality (pull_request) Successful in 37s
Security Scan (SIAX Cloud) / security (push) Successful in 1m4s
CI (SIAX Cloud) / integration (push) Successful in 1m14s
CI (SIAX Cloud) / quality (push) Successful in 2m12s
2026-09-15 18:52:23 +02:00
adminandClaude Sonnet 4.6 10146c62c3 fix: translate type/frequency in deposit page recap via entityLabel+FREQUENCY_LABEL
Values were stored as stable Swedish IDs ('Bolag', 'Engångs') but rendered raw.
Now resolved through entityLabel()/FREQUENCY_LABEL + t() at render time so
the recap panel respects the active locale on every re-render.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 19:38:22 +02:00
adminandClaude Sonnet 4.6 240a42b2b7 fix: reveal animations for standalone pages on direct load
RouteReveal layout component applies in-view on every route change.
useReveal hook falls back to immediate rAF when element is already visible.
bestall/page.tsx: added missing useReveal ref.
katalog/[id]/page.tsx: DatasetView uses useReveal directly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 19:20:10 +02:00
adminandClaude Sonnet 4.6 8424c61b8a fix: aria labels on form inputs in order configurator and describe flow
- aria-label + aria-value* attrs on confidence range slider (screen readers)
- aria-label on volume number input
- aria-pressed on service/destination selector buttons in beskriv flow
- aria-label on describe textarea

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 17:52:57 +02:00
adminandClaude Sonnet 4.6 c0751da5a7 feat: error boundary page + aria-pressed on order configurator chips
- app/error.tsx: Next.js App Router error boundary matching mono design
  (500 graphic texture, "Try again" reset button, Home link)
- bestall/page.tsx: Chip toggle buttons get aria-pressed attribute for
  screen-reader accessibility (markets, entity types, fields, enrichments)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 17:49:42 +02:00
adminandClaude Sonnet 4.6 7d9cfdb597 fix: add id="main-content" to all page main elements for skip link
Ensures the keyboard skip-to-content link (added in layout.tsx) has a
valid anchor target on every page in the app.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 17:46:37 +02:00
adminandClaude Sonnet 4.6 b95507e601 feat: toast feedback, skip-to-content, deposit success notification
- toast.success/error on order creation (bestall/page.tsx)
- toast.success/error on order approval (validera/page.tsx) + fix silent
  success even when API failed (was always setting approved=true)
- toast.success/error on subscription creation (portal/subscriptions)
- toast.success/error on admin status advance (admin/page.tsx)
- toast.success on production page when Stripe redirects back with ?deposit=success
- layout.tsx: skip-to-main-content link (sr-only, visible on focus)
- app/page.tsx: id="main-content" anchor for skip link

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 17:41:59 +02:00
adminandClaude Sonnet 4.6 df63d3a6dd fix: production audit — sync catalog IDs, wire Stripe, mount Toaster, add 404
- Catalog IDs: synced /api/catalog and /katalog/[id] to consistent English slugs
  (nordic-companies, tech-decisionmakers, vehicles-fleet, financial-series,
  buying-signals, sanctions-pep); View links from catalog page were all broken
- Added 2 missing catalog detail entries: buying-signals, sanctions-pep
- featured-products-section: link cards to /katalog/{id} instead of hardcoded demo URL
- hero-section: 'See a dataset' now links to /katalog/nordic-companies
- layout.tsx: mount <Toaster> (sonner was installed but never mounted)
- bestall/forskott: pay() tries Stripe checkout first, falls back to demo mode
- api/payments/[order_id]/deposit: Stripe Checkout Session creation (501 if unconfigured)
- app/not-found.tsx: custom 404 page matching mono design system
- philosophy-section: fix TS type error on PRINCIPLES array

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 17:38:31 +02:00
adminandClaude Opus 4.8 125b2e1bbe feat(i18n): localize data-layer labels (lib/data + lib/services) — English base complete
All display labels in MARKETS/ENTITY_TYPES/FIELDS/ENRICHMENTS/FREQUENCIES/DELIVERY_FORMATS + SERVICES/FLOW_LABEL are now {en,sv} with stable IDs/values (pricing logic, EntityType/Frequency unions, config keys unchanged). Added entityLabel()/FREQUENCY_LABEL/FORMAT_LABEL. Updated all render sites (configurator, tjanster, beskriv, katalog/[id]) to resolve via useT(). Also fixed 2 pre-existing tsc nits (auth BufferSource cast, orders-store sql.json param type). tsc 0, build green. 0pt is now fully English-by-default with SV toggle.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 11:47:42 +02:00
adminandClaude Opus 4.8 60455ab61a feat(i18n): finish English-base conversion (admin/* + portal settings/integrations + configurator + portal + beskriv)
Second hardened fan-out converted the 7 untouched admin/portal files; hand-finished the configurator (8 block labels + full summary column), portal dashboard, and describe-intake. English renders by default; SV toggle flips the whole app. A few tuple-array data labels intentionally left SV (no-reshape safety) + lib/data label i18n remain as follow-up. build green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 02:48:52 +02:00
adminandClaude Opus 4.8 0ab1818722 feat(i18n): English-base + Swedish toggle (locale provider, switcher, ~20 surfaces converted)
Locale provider (en default, persisted) + EN/SV switcher in header; converted header + landing sections + catalog/sources/order-flow/most-of-portal to useT({en,sv}). Fixed two partial conversions (forskott TRUST object/tuple map; kallor undefined ALL + raw object renders). tsc 0, build green. Remaining: admin/* + a few partials.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 02:39:57 +02:00
adminandClaude Opus 4.8 76b20e341d feat: admin Verktyg (live fordon + sanktioner lookup) + service-type pricing in configurator
/admin/verktyg uses live /api/vehicles (RDW) + /api/screen (OpenSanctions); added to admin nav. Configurator now has a Tjänst selector that applies each service's price multiplier (lib/services) to the live estimate + summary; service_type carried into the order so orders-store prices by service. tsc 0, build green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 02:17:18 +02:00
adminandClaude Opus 4.8 56e117a6d6 feat: buy everything + monitor everything in UI (client order ledger)
lib/order-client: createOrder records each order to a localStorage ledger; portal dashboard + admin queue merge it with /api/orders; order tracker falls back to it. Wired all buy paths: configurator, beskriv (custom services), and one-click catalog Beställ. Makes buy->monitor work in the browser now; becomes server-truth when Postgres is connected. tsc 0, build green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 02:10:12 +02:00
adminandClaude Opus 4.8 78e38e9add feat: full service catalog + custom-job intake (describe -> AI-assist -> order)
lib/services (11 categories: data, scraping, mapping, normalization, consolidation->CRM/ERP, documents/OCR, enrichment, ICP, ML, BI, feeds across the 3 flows); /tjanster catalog; /bestall/beskriv NL intake; /api/ai/parse (engine LLM or heuristic NL->config); CRM/ERP destinations; Tjänster in nav. Sells every custom data service through the platform. tsc 0, build green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 01:59:56 +02:00
adminandClaude Opus 4.8 318e9379c8 feat: catalog index page + wire nav to /katalog /kallor /portal + real order journey
Configurator->POST /api/orders, deposit fetches order + PATCH in_production, header nav reaches the new pages (no orphans). New pages: katalog, katalog/[id], kallor, portal, shared states. tsc 0, build green (13 routes).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:03:06 +02:00
adminandClaude Opus 4.8 86fc1574c5 feat(ui): visual upgrade — sharper, more confident, fewer words
16-file refinement (mono system intact): oversized tight headlines + giant faint mono indices as texture, single shared hairline grids over boxes, wider 8px vertical rhythm, restrained hairline-draw hover micro-interactions, red kept to <=1 per screen. Copy cut to terse, confident Swedish across landing + app screens. Logic/props/ids/contracts preserved; tsc clean, next build green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 18:19:09 +02:00
adminandClaude Opus 4.8 24035dec8b Build 0pt ordering flow: configurator, deposit/escrow, production tracker, validation
Customer order lifecycle on the mono design system: red + provenance tokens, useReveal hook, lib/data pricing model, ProvenanceBadge/CellProvenance, OrderStepper, and 4 routes with live pricing, 50/50 escrow, simulated production, 4-view validation. tsc clean; next build green (5 routes).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 17:28:24 +02:00