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
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
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
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
2022 - 2023
I worked at Sopra Steria, a big tech and consulting company helping businesses with digital solutions and transformation.
Clients: Radiohjälpen
2016 - 2019
Freelance developer during a longer period of my life. developing sites for clients and businesses.
Selected work
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
Oct 2024 – 2026
Scania's multibrand design system, powering Scania products across the organization suporting mulit frameworks.
Stenciljs, npm, aws
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
Scania's multibrand design system, powering Scania products across the organization suporting mulit frameworks.
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.
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.
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.
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.
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.
CI a11y + contrast checks from day one. Token round-tripping started a year earlier. Both would've made every PR cheaper.
Live across Scania's internal and customer products. On npm as @scania/tegel (+ React, Angular, styles). 19 months, 100 PRs, beta → 1.x.