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
Design Systems and Component Based Frontend
Search
Bilal Çınarlı
June 27, 2019
Programming
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Design Systems and Component Based Frontend
Bilal Çınarlı
June 27, 2019
More Decks by Bilal Çınarlı
See All by Bilal Çınarlı
Efficieny and Scaling in Frontend
bcinarli
0
73
Navigating with Unknowns
bcinarli
1
56
Story of a Boring Work
bcinarli
0
38
Refactoring Frontend
bcinarli
0
68
Accessible By Default!
bcinarli
0
120
Aninda Yüklenen Uygulamalar
bcinarli
0
160
Iletisimin Mühendisligi
bcinarli
0
73
Independently together: better developer experience & App performance
bcinarli
1
580
Developer Experience: How happy are your engineers?
bcinarli
0
300
Other Decks in Programming
See All in Programming
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
330
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3.2k
地方こそサーバーレス — 10年続けた、顔が見えるチームで確かな基盤を / Serverless Matters Most in Regional Areas — 10 Years of Building Reliable Foundations with Close-Knit Teams
seike460
PRO
1
330
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
370
Secure Your Coding Agent Like It’s Malware (v1.5) 🇬🇧 @Code.talks 2026
richargh
0
110
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
310
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
300
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
570
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
3
1.5k
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
330
Goコンパイラを作ってGoをもっと理解する / Build a Go compiler to better understand Go
ikura_hamu
0
130
느린 네트워크와 저사양 디바이스 사용자를 위한 웹뷰 로딩 시간 개선기
kmkim
1
220
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
Designing for Timeless Needs
cassininazir
1
550
Typedesign – Prime Four
hannesfritz
42
3.2k
Exploring anti-patterns in Rails
aemeredith
4
560
Between Models and Reality
mayunak
4
570
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
390
Technical Leadership for Architectural Decision Making
baasie
3
640
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.3k
Thoughts on Productivity
jonyablonski
76
5.5k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
510
Transcript
Design Systems & Component Based Frontend
Bilal Çınarlı Frontend Architect Software Engineer @Adidas @bcinarli github.com/bcinarli bcinarli.com
None
Harmony from Intuit, GEL – Global Experience Language from BBC,
Material from Google, Lightning from Salesforce, AirBNB’s Visual Language, Joystick from EA, Fluent from Microsoft, Plasma from WeWork, Polaris from Shopify, Lonely Planet, Swarm from Meetup, Canvas from Hubspot …and aDL from Adidas
What is a design system?
A collection of reusable components, guided by clear standards, that
can be assembled together to build any number of applications.
None
A design system is a combination of style, components, and
voice.
It is scalable at any level
Provides consistency between different pages and applications
With the set of rules and guides, increases the efficiency
Enhances the teamwork and eases the on-boarding of new members
http://bit.do/yarnds
http://bit.do/adl_
Components
Components support levels of abstraction in an application. It is
layered and feature-based.
Individual components provide decoupling which leads to better unit testings
and stability.
Design system and Components combine mostly in UI layer where
your presentation occurs
Besides, components can also communicate with the data layer while
rendering our content.
…and with the standardisation, it improves quality.
None
How Popular Libraries Think?
Build encapsulated components that manage their own state, then compose
them to make complex UIs.
Components define areas of responsibility in your UI that let
you reuse these sets of UI functionality.
It’s an abstraction that allows us to build large-scale applications
composed of small, self-contained, and often reusable components.
But the mainly, they should have a responsibility over a
single part.
None
How to Organise?
Define your folder structure based on their functionalities
Think of everything is sort-of a pluggable component. In most
cases, when you remove it, you should expect no traces left.
// DON’T . !"" controllers | !"" cart.js | #""
checkout.js !"" models | !"" cart.js | #"" checkout.js #"" views !"" cart.pug #"" checkout.pug // DO . !"" cart | !"" index.js | #"" template.pug #"" checkout !"" index.js #"" template.pug
…and tests are a part of your components.
// add test specs . !"" cart | !"" index.js
| !"" test.spec.js | #"" template.pug #"" checkout !"" index.js !"" test.spec.js #"" template.pug
Separate config and scripts away from your components.
. !"" config | !"" index.js | #"" server.js !""
scripts | !"" build.sh | #"" post-install.sh !"" test | !"" index.js | #"" setup.spec.js !"" cart | !"" index.js | !"" test.spec.js | #"" template.pug #"" checkout !"" index.js !"" test.spec.js #"" template.pug
Keep HTML and CSS separate in your source code and
never inline manually
// DON’T <p style="margin: 10px 0; padding: 0;">Hello World! </p>
// DO .content-text { margin: 10px 0; padding: 0; } <p class="content- text">Hello World!</p>
Always think about specificity in CSS, try to avoid creating
specific selectors
// DON’T #main .article .title span { font-size: 32px; font-weight:
bold; } // DO .main-article-title { font-size: 32px; font-weight: bold; }
Do not write the code you are going to overwrite
// DON’T .content { display: flex; max-width: 1280px; margin: 0
auto; } .article { width: 900px; } .supplementary { width: 380px; } @media screen and (min-width: 48.0625em) and (max-width: 64em) { .article { width: 644px; } } @media screen and (max-width: 48em) { .content { flex-direction: column; } .article, .supplementary { width: 100%; } } // DO .content { max-width: 1280px; margin: 0 auto; } @media screen and (min-width: 48.0625em) { .content { display: flex; } .article { flex: 1; } .supplementary { width: 380px; } }
A way to unify different frameworks?
Web components are a set of web platform APIs that
allow you to create new custom, reusable, encapsulated HTML tags to use in web pages and web apps.
Custom components and widgets build on the Web Component standards,
will work across modern browsers, and can be used with any JavaScript library or framework that works with HTML.
<script type="module" src=“components/nav/app- drawer“></script> <app-drawer raised class=“indigo">raised</app-drawer>
<script> class AppDrawer extends HTMLElement {...} window.customElements.define('app-drawer', AppDrawer); </script> <app-drawer></app-drawer>
Good part, all JS frameworks outputs to HTML. Theoretically, we
can use any popular JS library to create Web Components
What is more?
Having self-contained, reusable components helps to turn you app to
micro frontends
… that can have independent deployment, build, coding
… leads to autonomous teams
… and you can have a shell that orchestrates which
micro frontend to load
… with the “Best Friend of Frontend"
Your components should not know what the dependencies are in
behind the curtains you are using.
It should only aware of which functions are available for
a particular action.
Every dependency comes with a technical debt for the future.
Thank you @bcinarli