Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
The art of building framework independent desig...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
37
Taming huge Angular applications at bol.com
stefannhs
0
450
Taming huge enterprise applications with Mono repos, Design Systems & Web Components
stefannhs
0
160
Micro Frontends & Design Systems, built with Angular and Stencil
stefannhs
0
470
Building a framework independent component library with StencilJS
stefannhs
0
280
Other Decks in Technology
See All in Technology
FactoryBotアンチパターン / factory_bot anti-patterns
toshimaru
0
150
今さら理解するウェブフォントver.2026
takanorip
3
680
Getting Started with Google Antigravity
glaforge
0
220
今こそ知りたいAmplifyGen2
mkdev10
2
160
Datadog の学び方 - あるいは、オブザーバビリティを学ぶとは何か
mananyuki
1
550
go-sqletch
moznion
0
140
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
スキマバイトという雇用形態は存在しないので、雇用期間1日のアルバイト契約を事業者とワーカーが結ぶ手続きを支えるのがタイミーなんです
akitoshiga
0
120
Running Kotlin + Quarkus with Lambda
nealle
1
450
Deep Data Security 機能解説
oracle4engineer
PRO
2
790
ハードウェアコンペでもAI駆動開発が進んでいる話
iotengineer22
1
690
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.3k
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
550
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
730
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
280
Design in an AI World
tapps
1
350
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
490
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
800
Facilitating Awesome Meetings
lara
57
7.2k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
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