SlideShare a Scribd company logo
Web frontend is an app too!
Jakub Baierl
Before
Using MVP frameworks - PHP Symfony, Nette, Laravel, Wordpress
Non static websites - web frontend dependent of backend
Web frontend as a part of backend - only templates, no possibility of code
reusing, no flexibility
Slow performance
Hard build and deploy process - installing packages for whole system
Now
Simple Scalability - few files hosted even on different server, focus on my
application - not whole infrastructure
Communication via API
Modularity - more suitables technologies for different problems
Increased Flexibility - using API for web, mobile app, public expose
Separate build and deploy
How to choose
the right technology?
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Who will win? Client’s wish,
common sense or our pride?
Web frontend is independent -> huge market of frameworks & libs
Constant changes or hard resets on dev stacks
Build app on unsuitable technology
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Requirements
Administrative part - fetching data from API, huge number of forms,
dynamic part - graphs, sorting lists, maps
Requirements
Administrative part - fetching data from API, huge number of forms,
dynamic part - graphs, sorting lists, maps
Requirements
Client app - fetching data from API, loading data once (mobile app base),
temporary saving data, custom responsive layout, SEO
Requirements
Client app - fetching data from API, loading data once (mobile app base),
temporary saving data, custom responsive layout, SEO
Prepared packages
Static websites - pure HTML, SASS, JS
Static websites with support of multiple languages or dynamic elements or
SEO - Middleman generator of static sites
Dynamic websites with fast communication with API - React (server
rendering for seo), Webpack
Nonpublic administration (internal) systems - React, Webpack, Redux
Choose from the magic pouch
Chosen heroes
React - Layout, Components, App structure, Server-rendering (microsite)
Fetch API - Getting data from API
Redux - Data flow, App state
Sass - CSS preprocessor, design
React
component-based javascript library
only for user interface
prepared events - onClick, onHover
virtual DOM
Containers
class CarContainer extends Component {
constructor(props) {
super(props);
}
render = () => {
return (
<Loader show={this.props.isFetching}>
{this.props.car ?
<CarComponent car={car}/>
: null}
</Loader>
);
}
}
export default connect(state => ({
isFetching: state.carIsFetching,
car: state.car,
}),
(dispatch) => ({
carActions: bindActionCreators(carActions, dispatch)
})
)(CarContainer);
Components
class CarComponent extends Component {
constructor(props) {
super(props);
};
componentWillMount () {}
componentDidMount () {}
render() {
return (
<div>
<p>{this.props.car.name}</p>
</div>
);
};
};
export default CarComponent;
Managing data
stop using carcinogenic CALLBACKS
button -> click ->wait for callback ….. confusion
NOW -> unidirectional data flow -> button -> click -> make action ->
change application state -> components reload
Redux
CSS before
Huge files
No code reusing
Non-objective
No flexibility - change color of app - change on 100 lines
—> use CSS preprocessors - Less, Sass, Stylus
Sass now!
Variables
Nesting
Mixins - code reusing
Imports - different libraries
Math - width: (100%+35)
Simply awesome <3
Variables & Nesting
//Prague open fesival 2017
$main_colour_1: #0C4D78
$main_colour_2: #0f4064 
$second_colour: #F7966B
$bg_colour: #ffffff
$contrast_colour: #000000
$text_colour_1: #000000
$text_colour_2: #ffffff
=====================================================
// Testing of sass loader
@import "../../common.sass"
@import "../../../../variables.sass"
.Header
background-color: $main_colour_1
&-logo
float: left
img
width: 100%
Building the web app
Transpiling to browser language - from JSX, ES6 …
Translate Sass files to CSS files
Livereloading - realtime watching for changes and reloading app
Different data for development and production
Tools: Gulp, Grunt, Webpack
module bundler
dependency graph -> bundles
-> browser can load it
building
watching
transpiling
extracting
minifying
uglyfying
livereload support
development vs. production
Webpack
var Webpack = require('webpack');
var LiveReloadPlugin = require('webpack-livereload-plugin');
var GlobalConfig = require('./config_global.js');
module.exports = {
entry: "./src/ui/module.js",
output: {
path: "./"+process.env.NAME,
filename: "bundle.js"
},
module: {
loaders: [
{
test: /.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['react']
}
},
{
test: /.sass$/,
loader: 'style!css!sass?indentedSyntax'
},
{
test: /.css$/,
loader: "style!css"
},
{
test: /.(png|gif)$/,
loader: "url?mimetype=image/[ext]&limit=10000"
}
]
},
plugins: [
new LiveReloadPlugin(),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false,
},
}),
build native mobile apps with
javascript!
using native blocks (java, obj-c)
compose blocks using JS
best solution for specific applications
React Native
render() {
const rows = this.state.news.map((row, ii)
=> {
return <Row key={ii} data={row.data}/>;
});
return (
<ScrollView
style={styles.scrollview}
refreshControl={
<RefreshControl
refreshing={this.props.isFetching}
onRefresh={this._onRefresh}
tintColor="#1b1b1b"
title="Loading..."
titleColor="#1b1b1b"
colors={['#ff0000', '#00ff00',
'#0000ff']}
progressBackgroundColor="#ffed00"
/>
}>
{rows}
</ScrollView>
);
}
Advanced topic
Hosting react apps - Google Storage Bucket
Redux sagas and middleware
React native routing - using native controllers
www.ackee.de
lovely people, lovely apps

More Related Content

PDF
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
PDF
Get your mobile app in production in 3 months: Backend
PDF
Get your mobile app in production in 3 months: DevOps and Infrastructure
PDF
Introducción al JAMStack - JS Ourense
PPTX
Highload JavaScript Framework without Inheritance
PDF
Serverless with Firebase - Launchpad Build Burgos
PDF
Facilitez votre transition DevOps grâce à l'automatisation de votre infras...
PDF
Make your animations perform well - Anna Migas - Codemotion Rome 2017
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: Backend
Get your mobile app in production in 3 months: DevOps and Infrastructure
Introducción al JAMStack - JS Ourense
Highload JavaScript Framework without Inheritance
Serverless with Firebase - Launchpad Build Burgos
Facilitez votre transition DevOps grâce à l'automatisation de votre infras...
Make your animations perform well - Anna Migas - Codemotion Rome 2017

What's hot (20)

PPTX
Google cloud functions
PPTX
Build 2017 - B8110 - Modernize WinForms and WPF apps with maximum code reuse,...
PPTX
Demand driven applications with om.next and react native
PPTX
Blazor and Azure Functions - a serverless approach
PPTX
Serverless in azure
PDF
Build a Chatbot in Ten Minutes - Dave Kerr - Serverless Summit
PPTX
Azure Static Web Apps 入門
PPTX
Building Tools for the Hadoop Developer
PDF
Serverless Machine Learning Workshop
PDF
Simpler Web Architectures Now! (At The Frontend 2016)
PPTX
Serverless + Machine Learning – Bringing the best of two worlds together
PPTX
Node.js BFFs: our way to better/micro frontends
PDF
Meteor + React
PPTX
Asp.net visual studio 2013
PPTX
TUTTO SU VISUAL STUDIO ALM 2015
PPTX
React Alicante - React Redux a development workflow
PDF
Creating Island Tracker - Xamarin, Azure Functions, Table Storage, & More
PDF
Net Conf Israel - Intro & Building Cloud Native Apps with .NET Core 3.0 and K...
PDF
The Apollo and GraphQL Stack
PPTX
Going Serverless with Azure Functions
Google cloud functions
Build 2017 - B8110 - Modernize WinForms and WPF apps with maximum code reuse,...
Demand driven applications with om.next and react native
Blazor and Azure Functions - a serverless approach
Serverless in azure
Build a Chatbot in Ten Minutes - Dave Kerr - Serverless Summit
Azure Static Web Apps 入門
Building Tools for the Hadoop Developer
Serverless Machine Learning Workshop
Simpler Web Architectures Now! (At The Frontend 2016)
Serverless + Machine Learning – Bringing the best of two worlds together
Node.js BFFs: our way to better/micro frontends
Meteor + React
Asp.net visual studio 2013
TUTTO SU VISUAL STUDIO ALM 2015
React Alicante - React Redux a development workflow
Creating Island Tracker - Xamarin, Azure Functions, Table Storage, & More
Net Conf Israel - Intro & Building Cloud Native Apps with .NET Core 3.0 and K...
The Apollo and GraphQL Stack
Going Serverless with Azure Functions
Ad

Similar to Get your mobile app in production in 3 months: Native and Reactive Mobile Apps (20)

PPTX
Progressive Web Apps and React
PDF
ReactJS - frontend web developing reactjs
PDF
API Platform 2.1: when Symfony meets ReactJS (Symfony Live 2017)
PPTX
Дмитрий Тежельников «Разработка вэб-решений с использованием Asp.NET.Core и ...
PDF
Frontend as a first class citizen
PPTX
Top Frontend Frameworks to Know for Modern Web Development.pptx
PPTX
Full Stack_Reac web Development and Application
PPTX
Eureko frameworks
PPTX
Angular jS Introduction by Google
 
PPTX
Advanced Web Introduction REACT NODEjs.pptx
PDF
TPSE Thailand 2015 - Rethinking Web with React and Flux
PPTX
Unit 1 Part A.pptx bca subject with the ppt
PDF
Selecting the Best Javascript Web Framework
PPTX
Women Who Code, Ground Floor
PPTX
Frontender in-2016
PPTX
Single page application and Framework
PPTX
Moving Beyond WordPress At Tech in Asia
PPTX
Professionalizing the Front-end
PDF
three_software_development_trends_to_follow_in_2016
PDF
9 Best Tools to Leverage for Progressive Web App Development
Progressive Web Apps and React
ReactJS - frontend web developing reactjs
API Platform 2.1: when Symfony meets ReactJS (Symfony Live 2017)
Дмитрий Тежельников «Разработка вэб-решений с использованием Asp.NET.Core и ...
Frontend as a first class citizen
Top Frontend Frameworks to Know for Modern Web Development.pptx
Full Stack_Reac web Development and Application
Eureko frameworks
Angular jS Introduction by Google
 
Advanced Web Introduction REACT NODEjs.pptx
TPSE Thailand 2015 - Rethinking Web with React and Flux
Unit 1 Part A.pptx bca subject with the ppt
Selecting the Best Javascript Web Framework
Women Who Code, Ground Floor
Frontender in-2016
Single page application and Framework
Moving Beyond WordPress At Tech in Asia
Professionalizing the Front-end
three_software_development_trends_to_follow_in_2016
9 Best Tools to Leverage for Progressive Web App Development
Ad

Recently uploaded (20)

PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PPTX
sap open course for s4hana steps from ECC to s4
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Machine learning based COVID-19 study performance prediction
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
KodekX | Application Modernization Development
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Empathic Computing: Creating Shared Understanding
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
sap open course for s4hana steps from ECC to s4
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Machine learning based COVID-19 study performance prediction
The AUB Centre for AI in Media Proposal.docx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
KodekX | Application Modernization Development
Chapter 3 Spatial Domain Image Processing.pdf
Unlocking AI with Model Context Protocol (MCP)
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Encapsulation_ Review paper, used for researhc scholars
Empathic Computing: Creating Shared Understanding
The Rise and Fall of 3GPP – Time for a Sabbatical?
Per capita expenditure prediction using model stacking based on satellite ima...
Mobile App Security Testing_ A Comprehensive Guide.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Digital-Transformation-Roadmap-for-Companies.pptx

Get your mobile app in production in 3 months: Native and Reactive Mobile Apps

  • 1. Web frontend is an app too! Jakub Baierl
  • 2. Before Using MVP frameworks - PHP Symfony, Nette, Laravel, Wordpress Non static websites - web frontend dependent of backend Web frontend as a part of backend - only templates, no possibility of code reusing, no flexibility Slow performance Hard build and deploy process - installing packages for whole system
  • 3. Now Simple Scalability - few files hosted even on different server, focus on my application - not whole infrastructure Communication via API Modularity - more suitables technologies for different problems Increased Flexibility - using API for web, mobile app, public expose Separate build and deploy
  • 4. How to choose the right technology?
  • 15. Who will win? Client’s wish, common sense or our pride? Web frontend is independent -> huge market of frameworks & libs Constant changes or hard resets on dev stacks Build app on unsuitable technology
  • 17. Requirements Administrative part - fetching data from API, huge number of forms, dynamic part - graphs, sorting lists, maps
  • 18. Requirements Administrative part - fetching data from API, huge number of forms, dynamic part - graphs, sorting lists, maps
  • 19. Requirements Client app - fetching data from API, loading data once (mobile app base), temporary saving data, custom responsive layout, SEO
  • 20. Requirements Client app - fetching data from API, loading data once (mobile app base), temporary saving data, custom responsive layout, SEO
  • 21. Prepared packages Static websites - pure HTML, SASS, JS Static websites with support of multiple languages or dynamic elements or SEO - Middleman generator of static sites Dynamic websites with fast communication with API - React (server rendering for seo), Webpack Nonpublic administration (internal) systems - React, Webpack, Redux
  • 22. Choose from the magic pouch
  • 23. Chosen heroes React - Layout, Components, App structure, Server-rendering (microsite) Fetch API - Getting data from API Redux - Data flow, App state Sass - CSS preprocessor, design
  • 24. React component-based javascript library only for user interface prepared events - onClick, onHover virtual DOM
  • 25. Containers class CarContainer extends Component { constructor(props) { super(props); } render = () => { return ( <Loader show={this.props.isFetching}> {this.props.car ? <CarComponent car={car}/> : null} </Loader> ); } } export default connect(state => ({ isFetching: state.carIsFetching, car: state.car, }), (dispatch) => ({ carActions: bindActionCreators(carActions, dispatch) }) )(CarContainer);
  • 26. Components class CarComponent extends Component { constructor(props) { super(props); }; componentWillMount () {} componentDidMount () {} render() { return ( <div> <p>{this.props.car.name}</p> </div> ); }; }; export default CarComponent;
  • 27. Managing data stop using carcinogenic CALLBACKS button -> click ->wait for callback ….. confusion NOW -> unidirectional data flow -> button -> click -> make action -> change application state -> components reload
  • 28. Redux
  • 29. CSS before Huge files No code reusing Non-objective No flexibility - change color of app - change on 100 lines —> use CSS preprocessors - Less, Sass, Stylus
  • 30. Sass now! Variables Nesting Mixins - code reusing Imports - different libraries Math - width: (100%+35) Simply awesome <3
  • 31. Variables & Nesting //Prague open fesival 2017 $main_colour_1: #0C4D78 $main_colour_2: #0f4064  $second_colour: #F7966B $bg_colour: #ffffff $contrast_colour: #000000 $text_colour_1: #000000 $text_colour_2: #ffffff ===================================================== // Testing of sass loader @import "../../common.sass" @import "../../../../variables.sass" .Header background-color: $main_colour_1 &-logo float: left img width: 100%
  • 32. Building the web app Transpiling to browser language - from JSX, ES6 … Translate Sass files to CSS files Livereloading - realtime watching for changes and reloading app Different data for development and production Tools: Gulp, Grunt, Webpack
  • 33. module bundler dependency graph -> bundles -> browser can load it building watching transpiling extracting minifying uglyfying livereload support development vs. production Webpack
  • 34. var Webpack = require('webpack'); var LiveReloadPlugin = require('webpack-livereload-plugin'); var GlobalConfig = require('./config_global.js'); module.exports = { entry: "./src/ui/module.js", output: { path: "./"+process.env.NAME, filename: "bundle.js" }, module: { loaders: [ { test: /.js$/, exclude: /node_modules/, loader: 'babel-loader', query: { presets: ['react'] } }, { test: /.sass$/, loader: 'style!css!sass?indentedSyntax' }, { test: /.css$/, loader: "style!css" }, { test: /.(png|gif)$/, loader: "url?mimetype=image/[ext]&limit=10000" } ] }, plugins: [ new LiveReloadPlugin(), new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false, }, }),
  • 35. build native mobile apps with javascript! using native blocks (java, obj-c) compose blocks using JS best solution for specific applications React Native render() { const rows = this.state.news.map((row, ii) => { return <Row key={ii} data={row.data}/>; }); return ( <ScrollView style={styles.scrollview} refreshControl={ <RefreshControl refreshing={this.props.isFetching} onRefresh={this._onRefresh} tintColor="#1b1b1b" title="Loading..." titleColor="#1b1b1b" colors={['#ff0000', '#00ff00', '#0000ff']} progressBackgroundColor="#ffed00" /> }> {rows} </ScrollView> ); }
  • 36. Advanced topic Hosting react apps - Google Storage Bucket Redux sagas and middleware React native routing - using native controllers