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
Building Calypso-like Applications
Search
Nikolay Bachiyski
January 28, 2016
Programming
870
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Building Calypso-like Applications
@ A Day of REST
Nikolay Bachiyski
January 28, 2016
More Decks by Nikolay Bachiyski
See All by Nikolay Bachiyski
React.js for WordPress Developers
nb
0
300
Else Considered Harmful
nb
2
1.1k
On Learning
nb
2
830
WordPress: To OOP or not to OOP
nb
4
8.2k
On Creeds and Manifestos
nb
2
240
Welcome to the Chaos – The Distributed Workplace
nb
3
240
To a thousand servers and beyond: scaling a massive PHP application
nb
3
1.6k
Взимане на продуктови решения (Making product decisions)
nb
0
170
Other Decks in Programming
See All in Programming
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
120
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
260
Press start. Python's next generation.
willingc
PRO
3
310
Building an Out-of-Order CPU
latte72
0
690
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
290
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
2
120
デプロイ直後のレイテンシスパイクを調べたら、 Railsの仕様にたどり着いた
nhsykym
0
110
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
670
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
400
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
How GitHub (no longer) Works
holman
316
150k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
270
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
490
Utilizing Notion as your number one productivity tool
mfonobong
4
570
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
320
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
190
Transcript
BUILDING CALYPSO-LIKE APPLICATIONS
TODAY ▸ What did we learn when building Calypso ▸
How can it help you build similar applcations
WHAT IS CALYPSO?
None
HTTP://WORDPRESS.COM/
https://github.com/Automattic/wp-calypso
CALYPSO GOALS
0. BETTER USER EXPERIENCE
1. FASTER PRODUCT ITERATION
2. BETTER DEVELOPER EXPERIENCE
HOW DOES CALYPSO WORK?
OPEN WORDPRESS.COM?
None
WEBPACK
<script src="/calypso/vendor.7040ada5ffb545212814.min.js"></script> <script src="/calypso/build-production.7040ada5ffb545212814.min.js"></script> <script src="/calypso/reader.f90bc942cc65cc1988e9.min.js"></script>
A USER VISITS A (NEW) URL
page( '/me', controller.sidebar, controller.profile ); page( '/me/account', controller.sidebar, controller.account );
WE RENDER A REACT COMPONENT
COMPONENT = HTML + JS
BUT THE DATA?
WORDPRESS.COM REST API
WP.COM REST API V2 === WP-API
wpcom.js
FETCHING IN CONTROLLER
DUMB
render: function() { const size = this.props.size; if ( !
this.props.user ) { return <span className="gravatar is-placeholder" style={ { width: size, height: size } } />; } const alt = this.props.alt || this.props.user.display_name; const avatarURL = this._getResizedImageURL( safeImageURL( this.props.user.avatar_URL ) ); return ( <img alt={ alt } className="gravatar" src={ avatarURL } width={ size } height={ size } /> ); }
None
<Post post={} user={} alltags={}> {this.props.post} <PostUser user={} /> <TagSelector tags={}
/> </Post>
SMART/CONNECTED CONTAINERS
STORES/GLOBAL STATE ▸ Users ▸ Posts ▸ Fetch Errors
USER ACTIONS
export function requestSitePosts( siteId, query = {} ) { return
( dispatch ) => { dispatch( { type: POSTS_REQUEST, siteId, query } ); return wpcom.site( siteId ).postsList( query ).then( ( { found, posts } ) => { dispatch( receivePosts( posts ) ); dispatch( { type: POSTS_REQUEST_SUCCESS, siteId, query, found, posts } ); } ).catch( ( error ) => { dispatch( { type: POSTS_REQUEST_FAILURE, siteId, query, error } ); } ); }; }
FLUX
REUSABLE COMPONENTS
https://wpcalypso.wordpress.com/devdocs/design
None
THERE’S MORE…
!!! Честит рожден ден, Ю.
WHAT’S IN IT FOR YOU?
DO YOU NEED A SINGLE-PAGE APP?
▸ A lot of user interaction ▸ Quick transitions ▸
Multiple front-ends (web, mobile, desktop) ▸ Skill: JavaScript ▸ Skill: new type of architecture
CHOOSING TECHNOLOGY
EMBER
ANGULAR
REACT + FRIENDS
UNDERSTANDING
UNI-DIRECTIONAL WORKFLOW
→
PROJECTS AROUND REACT
REDUX
http://redux.js.org https://egghead.io/series/getting-started-with-redux
REACT ROUTER
FOMO
FUN
Q? EXTRAPOLATE.ME @NIKOLAYB