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
Design Systems and Component Based Frontend
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Bilal Çınarlı
June 27, 2019
Programming
0
170
Design Systems and Component Based Frontend
Bilal Çınarlı
June 27, 2019
Tweet
Share
More Decks by Bilal Çınarlı
See All by Bilal Çınarlı
Efficieny and Scaling in Frontend
bcinarli
0
37
Navigating with Unknowns
bcinarli
1
31
Story of a Boring Work
bcinarli
0
14
Refactoring Frontend
bcinarli
0
42
Accessible By Default!
bcinarli
0
93
Aninda Yüklenen Uygulamalar
bcinarli
0
140
Iletisimin Mühendisligi
bcinarli
0
64
Independently together: better developer experience & App performance
bcinarli
1
520
Developer Experience: How happy are your engineers?
bcinarli
0
280
Other Decks in Programming
See All in Programming
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
150
ファインチューニングせずメインコンペを解く方法
pokutuna
0
170
GoのDB アクセスにおける 「型安全」と「柔軟性」の両立 - Bob という選択肢
tak848
0
270
我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026
shogogg
2
380
Angular-Apps smarter machen mit Gen AI: Lokal und offlinefähig - Hands-on Workshop!
christianliebel
PRO
0
130
Nuxt Server Components
wattanx
0
120
AIコードレビューの導入・運用と AI駆動開発における「AI4QA」の取り組みについて
hagevvashi
0
550
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
200
Codex の「自走力」を高める
yorifuji
0
1.3k
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
170
Geminiをパートナーに神社DXシステムを個人開発した話(いなめぐDX 開発振り返り)
fujiba
0
100
PHPのバージョンアップ時にも役立ったAST(2026年版)
matsuo_atsushi
0
240
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
150
Claude Code のすすめ
schroneko
67
220k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
490
Everyday Curiosity
cassininazir
0
180
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
86
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
89
Building a Scalable Design System with Sketch
lauravandoore
463
34k
How to Talk to Developers About Accessibility
jct
2
160
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
120
KATA
mclloyd
PRO
35
15k
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