Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The art of building framework independent desig...
Search
Stefan Nieuwenhuis
April 04, 2019
Technology
260
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The art of building framework independent design systems
Video:
https://www.youtube.com/watch?v=ZusytL3s8Zw
Stefan Nieuwenhuis
April 04, 2019
More Decks by Stefan Nieuwenhuis
See All by Stefan Nieuwenhuis
NHSWD/4NG: The JavaScript Big Three
stefannhs
0
35
Taming huge Angular applications at bol.com
stefannhs
0
440
Taming huge enterprise applications with Mono repos, Design Systems & Web Components
stefannhs
0
150
Micro Frontends & Design Systems, built with Angular and Stencil
stefannhs
0
460
Building a framework independent component library with StencilJS
stefannhs
0
280
Other Decks in Technology
See All in Technology
【AG-UI × A2UI × MCP Apps】Generative UIをやさしく解説する
nrinetcom
PRO
1
140
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
1
1.5k
2026-08-15 JAWS-UG 茨城 #16 Secrets ManagerにおけるSecret値の管理(Terraformの場合) / Secrets Manager Secrets
masasuzu
0
190
Go 1.27 の標準パッケージに uuid が入った!のでいろいろ喋る / go_127_std_go_uuid
convto
1
110
その“隠したつもり”が命取り ── 自前と平文をやめて「正解」に委ねる
kuroneko13
0
130
JavaScript 研修 (2026)
recruitengineers
PRO
2
600
Model Studio CLI × Token Plan
maigo999
0
190
AIのためのEthernet技術動向 (SerDes)
markunet
1
180
AI-DLC実践録_フルサイクル開発への挑戦
miyuc
0
220
事業価値と Engineering 2026年度版
recruitengineers
PRO
50
24k
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
310
自宅NWにISR4331を導入してみた話
okaits
0
100
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
340
Ethics towards AI in product and experience design
skipperchong
2
340
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
A Tale of Four Properties
chriscoyier
163
24k
Become a Pro
speakerdeck
PRO
31
6.2k
For a Future-Friendly Web
brad_frost
183
10k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
280
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
890
BBQ
matthewcrist
89
10k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Between Models and Reality
mayunak
4
390
Transcript
@stefannhs @stefannhs @stefannhs
@stefannhs The art of building framework independent design systems Software
Engineer Archaeology Waterpolo Stefan Nieuwenhuis Skydiving Books Developer Avocado
@stefannhs 1999 - bol.com launch > 2000 - new categories
2011 - retail platform 2013 - €1 bln. turnover
@stefannhs Monolith Architecture Server side app User Interface Database
@stefannhs Performance Less cross cutting concerns Planning & Design Less
operational overhead Security
@stefannhs Performance Less cross cutting concerns Planning & Design Less
operational overhead Security
@stefannhs Microservices
@stefannhs Transparency Independency Scalability
@stefannhs Transparency Independency Scalability Consistency
@stefannhs Design System
@stefannhs Pattern Library
@stefannhs // Corporate colors $palette-blue-main: rgb(051,102,204) !default; $palette-blue-dark: rgb(014,052,144) !default;
$palette-blue-light: rgb(058,125,231) !default; $palette-blue-hover: rgb(245,247,252) !default; // Secondary colors $palette-red-main: rgb(248,087,105) !default; $palette-orange-main: rgb(251,120,093) !default; $palette-yellow-main: rgb(255,162,078) !default; $palette-lime-main: rgb(150,210,113) !default; $palette-green-main: rgb(051,204,131) !default; Style guide
@stefannhs
@stefannhs Generic No framework lock-in Flexible Reusable Development speed
@stefannhs <h1> My Awesome button </h1> <p>This button is made
possible w/ Web Components!</p> <my-button>Click me</my-button>
@stefannhs <template id="myButton"> <style>button { border: 2px solid red; border-radius:
5px; background: tomato; padding: 10px; color: white; font-weight: bold; text-transform: uppercase; cursor: pointer; }</style> <button><slot/></button> </template>
@stefannhs class MyButtonElement extends HTMLElement { constructor() { super(); const
template = document.getElementById('myButton'); // Shadow DOM this.attachShadow({ mode: 'closed' }); this.shadowRoot.appendChild( template.content.cloneNode(true)); } }
@stefannhs class MyButtonElement extends HTMLElement { constructor() { super(); const
template = document.getElementById('myButton'); // Shadow DOM this.attachShadow({ mode: 'open' }); this.shadowRoot.appendChild( template.content.cloneNode(true)); } } // Define Custom Element customElements.define('my-button', MyButtonElement);
@stefannhs <h1> My Awesome button </h1> <p>This button is made
possible w/ Web Components!</p> <my-button>Click me</my-button>
@stefannhs Compatibility Easy API Performance Future-proof
@stefannhs npm init stencil
@stefannhs // Stencil controller import { Component, Prop } from
'@stencil/core'; @Component({ tag: 'my-component', styleUrl: 'my-component.css', shadow: true }) export class MyComponent { render() { return <div>Hello world!</div>; } }
@stefannhs // Stencil controller import { Component, Prop } from
'@stencil/core'; @Component({ tag: 'my-button', styleUrl: 'my-button.css', shadow: true }) export class MyButtonElement { render() { return <button><slot/></button>; } }
@stefannhs npm run build
@stefannhs ... <script src="/build/mycomponent.js"></script> </head> <body> <h1> My Awesome button
</h1> <p>This button is made possible w/ Web Components!</p> <my-button>Click me</my-button> </body>
@stefannhs Extensive config Auto docs generation Bundling Dev Server Typed
components Plugins Polyfills
@stefannhs Mono Repository
@stefannhs One single source of truth Reusability Versioning Scalable Experience
@stefannhs
@stefannhs { "name": "@awesome-components-lib/buttons", "version": "5.0.1", "description": "Button Component", ...
} { "name": "@awesome-components-lib/footer", "version": "1.0.0", "description": "Footer Component", ... } Semantic Versioning No interdependencies Scoped packages
@stefannhs
@stefannhs Design System Holy Grail of Consistency
@stefannhs Icons made by Freepik from www.flaticon.com is licensed by
CC 3.0 BY DM’s are open! @stefannhs