Charles Krook

Senior Software Engineer

charles.krook@gmail.com · charleskrook.com · linkedin.com/in/charleskrook · github.com/ckrook · instagram.com/charleskrook

Work

Fullstack engineer at Umain. My work spans e-commerce platforms, design systems, and content-driven sites, where the engineering exists to serve the design.

Place

Stockholm, Sweden. Grew up just outside it, spent a few years moving between cities, and came back in 2019.

Off-hours

Outdoors whenever I can. Mostly on the road bike and swiming.

Experience

Fullstack developer, Umain

2023 - Now

Umain is a digital consulting firm who works with a range of brands, everything from mcDonalds, Scania and biamp. Umain offers both web and digital services

Clients: Scania, Poc Sports

Frontend developer, Grebban

2023 - 2023

Grebban is a retail e-commerce firm who create extraordinary e-commerce experiences and digital flagship stores for brands globally.

Clients: Grandpa, Byon, Norstedts, Hestra Gloves

Frontend Developer, Sopra Steria

2022 - 2023

I worked at Sopra Steria, a big tech and consulting company helping businesses with digital solutions and transformation.

Clients: Radiohjälpen

Frontend developer, Freelance work

2016 - 2019

Freelance developer during a longer period of my life. developing sites for clients and businesses.

Selected work

Poc sports · Software Engineer

2023-2024

Led frontend for a new e-commerce platform, from architecture to UI for a fast, modern customer experience.

Centra, Tailwind, Nextjs, Sanity, Klaviyo, Adyen, Gladly, Playwright

Tegel Design System · Codeowner (consultant)

Oct 2024 – 2026

Scania's multibrand design system, powering Scania products across the organization suporting mulit frameworks.

Stenciljs, npm, aws

Scania Experience Center · Senior Software Engineer

2025-2026

An interactive museum platform with 3D installations synced across touchscreens and wall displays in real time.

Technologies

Nextjs, Stenciljs, Tailwind, React, Centra, Sanity, Hygraph, Gladly, Klaviyo, Adyen, Playwright, npm, aws

Charles Krook
Charles Krook
Fullstack engineer
  1. Home
  2. About
  3. Projects
  4. Contact
Charles Krook

Charles KrookFullstack engineer

Tegel Design System

Oct 2024 – 2026·Visit site

Scania's multibrand design system, powering Scania products across the organization suporting mulit frameworks.

tegel.png

The problem: scale

One system ships to teams on four stacks. So a single Figma/code drift, or one a11y regression, multiplies across every product downstream.

When I joined: inconsistent focus, contrast, and aria; motion hand-rolled per component; no shared token layer.

What I worked on

  • Accessibility: standardized aria patterns, forwarded aria-invalid, added an Accessibility section to Storybook, hit WCAG contrast without breaking the palette.

  • Motion & focus: built both from scratch as shared variables, then rolled them through core components.

  • Token migration (current): wrote the Figma→token sync script; migrating components, foundations, and brand primitives onto a semantic layer.

  • Release & infra: automated beta releases, owned a major Stencil core upgrade, tag production builds.

  • Docs: flipped beta→production, wrote the testing guide, added a designer-approval step to PRs.

Scania Detail Mockup 04.png

How it's built

Stencil monorepo. Authored once as web components, shipped as custom elements with auto-generated React + Angular wrappers.

Figma → JSON → Style Dictionary → CSS custom properties, which is why one token PR ripples library-wide.

Storybook is the playground. Playwright + axe-core catch visual and a11y regressions. CSP-safe runtime.

traton-ds2.png

Decisions

  • Stencil over Lit/native: auto wrappers + typed JSX, at the cost of a build step.

  • Web components over React-first: slower to staff, but no stranded Angular/vanilla teams.

  • Stops at components + tokens: layout stays with consumers.

Hard parts

  • Standardizing focus across heterogeneous components without breaking each one.

  • A Stencil core upgrade broke type defs downstream → I owned the rollback and re-shipped with a postinstall patch.

What I'd do differently

CI a11y + contrast checks from day one. Token round-tripping started a year earlier. Both would've made every PR cheaper.

Today

Live across Scania's internal and customer products. On npm as @scania/tegel (+ React, Angular, styles). 19 months, 100 PRs, beta → 1.x.

traton-light.png