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
Building Calypso-like Applications
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Nikolay Bachiyski
January 28, 2016
Programming
890
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
310
Else Considered Harmful
nb
2
1.1k
On Learning
nb
2
840
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
180
Other Decks in Programming
See All in Programming
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.6k
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
160
Web3Dライブラリを作ってVue Custom Rendererの仕組みを理解しよう / lets learn vue custom renderer by making 3d library
drumath2237
1
120
baseline으로 마이그레이션, 리팩토링 안전하게 맡기기
fornewid
1
820
ActionController meets Protocol Buffers
sorah
1
770
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.1k
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
2.6k
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
260
Event is what happens
moro
2
2.9k
SFCで実現する病院・医療システムの動的組み立て式UI
koukimiura
1
160
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
1.3k
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
310
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.2k
Mobile First: as difficult as doing things right
swwweet
225
10k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
460
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
540
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
Done Done
chrislema
187
17k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.3k
Building Adaptive Systems
keathley
44
3.3k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
870
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How STYLIGHT went responsive
nonsquared
100
6.3k
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