SlideShare a Scribd company logo
1 of 22
Download to read offline
Best of Brew City (BOB)
Mobile Web App - SPA, Backbone.js, Zepto.
js, HTML5, CSS3, JSON API
-Ezekiel Chentnik
What’s this guy gonna talk about?
●
●
●
●
●

what is BOB?
birds eye view of project
technical features
lessons learned
future of project

http://www.jsonline.com/brewcity/?mode=preview
What is BOB?
● A comprehensive & friendly mobile web app that allows
you to find things to do in Milwaukee
● Single page app that acts like a native app
● Built with:
○ HTML5, CSS3, JavaScript,
○ Underscore.js, Backbone.js, Zepto.js,
○ JSON API
○ appMobi
Bird’s Eye View of project
1.
2.
3.
4.

conception/discovery
time estimates, requirements, project approval
project: 2 week sprints, daily standups (soft launch, hard launch)
maintenance/v2

My role
●
●
●

Lead developer (full tech stack)
UI/UX guy
Manager, Teacher, Liaison
Performance
http://gtmetrix.com/reports/m.jsonline.com/xVWam8Sv
Performance
Goal: make as fast as possible
Accomplished: under 1 second home page load .36s
○ embedded image data uri's & sprites
○ compressed css, html & js
○ reduced http requests
○ google web font optimization using condensed font face calls and data
uri embedded fonts
○ server loaded google analytic assets
○ reduced html markup and nested HTML nodes
Improving: (testing: blocking scripts/js, asset caching/fragments, sprites/webfont icons)
Buttery Smooth UI
Goal: make super fast feeling, with native like UI
Features
● ios style page transitions
● pull to refresh
● momentum scrolling w/ios document jumping
bug fixed
Techniques:
● curbing user expectations
● hardware acceleration
● memory management - lightweight views
● panel rendering, active state
http://youtu.be/iPL5-9vWTLU

Demo - Pull to refresh, page transitions, momentum scrolling, overflow
rubber-band effect
Code snippet - Scrolling
.scrollenabled .scrollable{overflow:auto;-webkit-overflow-scrolling:touch;}
.no-scrollenabled .scrollable{/*defaults handle this case, modernizr*/}
.scrollenabled .scrollable .rubberband{margin:-1px 0 0 0;overflow:auto;height:100%;}
.scrollenabled .scrollable .inner-rubberband{margin:1px 0 10px 0;min-height:100%;}
.scrollenabled .scrollable .inner-rubberband:after {content: "";display: table;clear: both;}
<div id="panels" class="navigation-transition">
<section class="active panel promotions">
<article class="active view">
<header> [blue nav bar]
<div class="content scrollable">
<div class="rubberband">
<div class="inner-rubberband">
<div class="refresh">[pull to refresh goes here]
<div class="guts">
[page content goes here]
BOB’s Data
●
●
●
●
●

data caching - localStorage memcache style
geo located results lists - watchPosition, distance threshold
offline error handling
panel rendering/boot-straping panel data
JSON API
JSON/P API
JSON API, JSONP, or Data Bootstraping

JSON/P API
consumed by
BOB

wizardry &
magical
mashing

lucene .net
search service xml

zvents - event
search service xml

Clickability CMS
Data

http://m.jsonline.
com/api/v1/?
bust=y&custom=bl
_get_promotions&t
ype=JI.
BusinessListing&p
age_size=50&serv
icedebug=true&da
y=Wednesday&lati
tude=43.
042723795&longit
ude=-87.91450082
&sortByField=dista
nce&_=138557487
8454
http://youtu.be/Ov69uMrB20Q

Demo - Loading data, fading images, direct url entry points
Code snippet - Panel Rendering
listings:function(splat,queryString){//our route handler
var self = this;
var params = BOB.parseQueryString(queryString);
$.extend(params,BOB.currentPosition);
params.sortByField = "distance";
var collection = new BOB.ListingsCollection([],{params:params});
var view = new BOB.ListingsView({section:self.currentSection,collection:collection,state:self.currentState});
self.fetchCollectionAndRenderView(view,collection,params);
}
●
●
●
●

listen for route change
initialize route data - create view, collection, state
render panel shell
try cached data, render data OR try fetch data, render data on success
fetchCollectionAndRenderView:function(view,collection,params){//helper method
var self = this;
view.renderPanel();
var storeUrl = _.isFunction(collection.url) ? collection.url() : collection.url;
var resp = self.storageManager.get(storeUrl);
if(resp){
collection.reset(collection.parse(resp),{silent:true});
collection.updateDistances(params.latitude,params.longitude);
collection.sortByField(params.sortByField);
view.renderCollection();
self.transitionManager.show(view);
BOB.stash.add(collection.models,{silent:true});
}else{
self.transitionManager.show(view);
collection.fetch({cache:false,reset:false,silent:true,success:function(c,r,o){
if(c.length > 0){
c.updateDistances(params.latitude,params.longitude);
c.sortByField(params.sortByField);
self.storageManager.set(storeUrl,r);
c.trigger("reset");
}else{
c.trigger("collection:zeroresults");
}
BOB.stash.add(c.models,{silent:true});
},error:function(xhr, errorType, error){
collection.trigger("collection:error");
}});
More features...
●
●
●
●

code base refreshing & idle aware app
last page aware, persistent login, prepped for full offline abilities
debug tools
admin control panel for producers or customers
The Control Panel
Lessons learned...
● too much time spent on non
impactful features, not enough time
spent on important features
● API needs more data architecting
● feeling is important (design is more
than...)
● css bloats, deadlines & other
people
Looking forward - V2
Features:
●
●
●
●
●

re-skin - IOS7 style, flat theme, icon updates
update homepage layout
advanced map controls, search, personality through content
cms interface for updating/adding sections
facebook integration

Code:
●
●
●
●

UI performance improvements (make it even faster) - faster views, smoother transitions
build out debug tools
refactor & modularize codebase - reusable library for other markets
restructure router/controller/pub-sub [explain on whiteboard]

More Related Content

Similar to Best of brew city presentation final

I Know It Was MEAN, But I Cut the Cord to LAMP Anyway
I Know It Was MEAN, But I Cut the Cord to LAMP AnywayI Know It Was MEAN, But I Cut the Cord to LAMP Anyway
I Know It Was MEAN, But I Cut the Cord to LAMP AnywayAll Things Open
 
Now you see me... Adaptive Web Design and Development
Now you see me... Adaptive Web Design and DevelopmentNow you see me... Adaptive Web Design and Development
Now you see me... Adaptive Web Design and DevelopmentJonas Päckos
 
Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...IT Event
 
I Know It Was MEAN, But I Cut the Cord to LAMP Anyway
I Know It Was MEAN, But I Cut the Cord to LAMP AnywayI Know It Was MEAN, But I Cut the Cord to LAMP Anyway
I Know It Was MEAN, But I Cut the Cord to LAMP AnywayPOSSCON
 
Fake it 'til you make it
Fake it 'til you make itFake it 'til you make it
Fake it 'til you make itJonathan Snook
 
gDayX - Advanced angularjs
gDayX - Advanced angularjsgDayX - Advanced angularjs
gDayX - Advanced angularjsgdgvietnam
 
Web Apps and more
Web Apps and moreWeb Apps and more
Web Apps and moreYan Shi
 
Web app and more
Web app and moreWeb app and more
Web app and morefaming su
 
ServiceWorker: New game changer is coming!
ServiceWorker: New game changer is coming!ServiceWorker: New game changer is coming!
ServiceWorker: New game changer is coming!Chang W. Doh
 
Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript Onely
 
Intro To Django
Intro To DjangoIntro To Django
Intro To DjangoUdi Bauman
 
There Are No “Buts” in Progressive Enhancement [Øredev 2015]
There Are No “Buts” in Progressive Enhancement [Øredev 2015]There Are No “Buts” in Progressive Enhancement [Øredev 2015]
There Are No “Buts” in Progressive Enhancement [Øredev 2015]Aaron Gustafson
 
Progressive Web App Challenges
Progressive Web App ChallengesProgressive Web App Challenges
Progressive Web App ChallengesJason Grigsby
 
From Idea to App (or “How we roll at Small Town Heroes”)
From Idea to App (or “How we roll at Small Town Heroes”)From Idea to App (or “How we roll at Small Town Heroes”)
From Idea to App (or “How we roll at Small Town Heroes”)Bramus Van Damme
 
gDayX 2013 - Advanced AngularJS - Nicolas Embleton
gDayX 2013 - Advanced AngularJS - Nicolas EmbletongDayX 2013 - Advanced AngularJS - Nicolas Embleton
gDayX 2013 - Advanced AngularJS - Nicolas EmbletonGeorge Nguyen
 
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3Jamie Matthews
 

Similar to Best of brew city presentation final (20)

I Know It Was MEAN, But I Cut the Cord to LAMP Anyway
I Know It Was MEAN, But I Cut the Cord to LAMP AnywayI Know It Was MEAN, But I Cut the Cord to LAMP Anyway
I Know It Was MEAN, But I Cut the Cord to LAMP Anyway
 
Now you see me... Adaptive Web Design and Development
Now you see me... Adaptive Web Design and DevelopmentNow you see me... Adaptive Web Design and Development
Now you see me... Adaptive Web Design and Development
 
Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...
 
I Know It Was MEAN, But I Cut the Cord to LAMP Anyway
I Know It Was MEAN, But I Cut the Cord to LAMP AnywayI Know It Was MEAN, But I Cut the Cord to LAMP Anyway
I Know It Was MEAN, But I Cut the Cord to LAMP Anyway
 
Fake it 'til you make it
Fake it 'til you make itFake it 'til you make it
Fake it 'til you make it
 
gDayX - Advanced angularjs
gDayX - Advanced angularjsgDayX - Advanced angularjs
gDayX - Advanced angularjs
 
Web Apps and more
Web Apps and moreWeb Apps and more
Web Apps and more
 
Web app and more
Web app and moreWeb app and more
Web app and more
 
ServiceWorker: New game changer is coming!
ServiceWorker: New game changer is coming!ServiceWorker: New game changer is coming!
ServiceWorker: New game changer is coming!
 
Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript
 
Intro To Django
Intro To DjangoIntro To Django
Intro To Django
 
Taking your Web App for a walk
Taking your Web App for a walkTaking your Web App for a walk
Taking your Web App for a walk
 
There Are No “Buts” in Progressive Enhancement [Øredev 2015]
There Are No “Buts” in Progressive Enhancement [Øredev 2015]There Are No “Buts” in Progressive Enhancement [Øredev 2015]
There Are No “Buts” in Progressive Enhancement [Øredev 2015]
 
Progressive Web App Challenges
Progressive Web App ChallengesProgressive Web App Challenges
Progressive Web App Challenges
 
4-identifying-problems.pdf
4-identifying-problems.pdf4-identifying-problems.pdf
4-identifying-problems.pdf
 
From Idea to App (or “How we roll at Small Town Heroes”)
From Idea to App (or “How we roll at Small Town Heroes”)From Idea to App (or “How we roll at Small Town Heroes”)
From Idea to App (or “How we roll at Small Town Heroes”)
 
gDayX 2013 - Advanced AngularJS - Nicolas Embleton
gDayX 2013 - Advanced AngularJS - Nicolas EmbletongDayX 2013 - Advanced AngularJS - Nicolas Embleton
gDayX 2013 - Advanced AngularJS - Nicolas Embleton
 
Nicolas Embleton, Advanced Angular JS
Nicolas Embleton, Advanced Angular JSNicolas Embleton, Advanced Angular JS
Nicolas Embleton, Advanced Angular JS
 
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
Five Pound App talk: hereit.is, Web app architecture, REST, CSS3
 
GWT Architectures and Lessons Learned (WJAX 2013)
GWT Architectures and Lessons Learned (WJAX 2013)GWT Architectures and Lessons Learned (WJAX 2013)
GWT Architectures and Lessons Learned (WJAX 2013)
 

Recently uploaded

Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 

Recently uploaded (20)

Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 

Best of brew city presentation final

  • 1. Best of Brew City (BOB) Mobile Web App - SPA, Backbone.js, Zepto. js, HTML5, CSS3, JSON API -Ezekiel Chentnik
  • 2. What’s this guy gonna talk about? ● ● ● ● ● what is BOB? birds eye view of project technical features lessons learned future of project http://www.jsonline.com/brewcity/?mode=preview
  • 3. What is BOB? ● A comprehensive & friendly mobile web app that allows you to find things to do in Milwaukee ● Single page app that acts like a native app ● Built with: ○ HTML5, CSS3, JavaScript, ○ Underscore.js, Backbone.js, Zepto.js, ○ JSON API ○ appMobi
  • 4. Bird’s Eye View of project 1. 2. 3. 4. conception/discovery time estimates, requirements, project approval project: 2 week sprints, daily standups (soft launch, hard launch) maintenance/v2 My role ● ● ● Lead developer (full tech stack) UI/UX guy Manager, Teacher, Liaison
  • 7. Performance Goal: make as fast as possible Accomplished: under 1 second home page load .36s ○ embedded image data uri's & sprites ○ compressed css, html & js ○ reduced http requests ○ google web font optimization using condensed font face calls and data uri embedded fonts ○ server loaded google analytic assets ○ reduced html markup and nested HTML nodes Improving: (testing: blocking scripts/js, asset caching/fragments, sprites/webfont icons)
  • 8. Buttery Smooth UI Goal: make super fast feeling, with native like UI Features ● ios style page transitions ● pull to refresh ● momentum scrolling w/ios document jumping bug fixed Techniques: ● curbing user expectations ● hardware acceleration ● memory management - lightweight views ● panel rendering, active state
  • 9. http://youtu.be/iPL5-9vWTLU Demo - Pull to refresh, page transitions, momentum scrolling, overflow rubber-band effect
  • 10. Code snippet - Scrolling .scrollenabled .scrollable{overflow:auto;-webkit-overflow-scrolling:touch;} .no-scrollenabled .scrollable{/*defaults handle this case, modernizr*/} .scrollenabled .scrollable .rubberband{margin:-1px 0 0 0;overflow:auto;height:100%;} .scrollenabled .scrollable .inner-rubberband{margin:1px 0 10px 0;min-height:100%;} .scrollenabled .scrollable .inner-rubberband:after {content: "";display: table;clear: both;} <div id="panels" class="navigation-transition"> <section class="active panel promotions"> <article class="active view"> <header> [blue nav bar] <div class="content scrollable"> <div class="rubberband"> <div class="inner-rubberband"> <div class="refresh">[pull to refresh goes here] <div class="guts"> [page content goes here]
  • 11. BOB’s Data ● ● ● ● ● data caching - localStorage memcache style geo located results lists - watchPosition, distance threshold offline error handling panel rendering/boot-straping panel data JSON API
  • 12. JSON/P API JSON API, JSONP, or Data Bootstraping JSON/P API consumed by BOB wizardry & magical mashing lucene .net search service xml zvents - event search service xml Clickability CMS Data http://m.jsonline. com/api/v1/? bust=y&custom=bl _get_promotions&t ype=JI. BusinessListing&p age_size=50&serv icedebug=true&da y=Wednesday&lati tude=43. 042723795&longit ude=-87.91450082 &sortByField=dista nce&_=138557487 8454
  • 13. http://youtu.be/Ov69uMrB20Q Demo - Loading data, fading images, direct url entry points
  • 14. Code snippet - Panel Rendering listings:function(splat,queryString){//our route handler var self = this; var params = BOB.parseQueryString(queryString); $.extend(params,BOB.currentPosition); params.sortByField = "distance"; var collection = new BOB.ListingsCollection([],{params:params}); var view = new BOB.ListingsView({section:self.currentSection,collection:collection,state:self.currentState}); self.fetchCollectionAndRenderView(view,collection,params); } ● ● ● ● listen for route change initialize route data - create view, collection, state render panel shell try cached data, render data OR try fetch data, render data on success
  • 15. fetchCollectionAndRenderView:function(view,collection,params){//helper method var self = this; view.renderPanel(); var storeUrl = _.isFunction(collection.url) ? collection.url() : collection.url; var resp = self.storageManager.get(storeUrl); if(resp){ collection.reset(collection.parse(resp),{silent:true}); collection.updateDistances(params.latitude,params.longitude); collection.sortByField(params.sortByField); view.renderCollection(); self.transitionManager.show(view); BOB.stash.add(collection.models,{silent:true}); }else{ self.transitionManager.show(view); collection.fetch({cache:false,reset:false,silent:true,success:function(c,r,o){ if(c.length > 0){ c.updateDistances(params.latitude,params.longitude); c.sortByField(params.sortByField); self.storageManager.set(storeUrl,r); c.trigger("reset"); }else{ c.trigger("collection:zeroresults"); } BOB.stash.add(c.models,{silent:true}); },error:function(xhr, errorType, error){ collection.trigger("collection:error"); }});
  • 16. More features... ● ● ● ● code base refreshing & idle aware app last page aware, persistent login, prepped for full offline abilities debug tools admin control panel for producers or customers
  • 17.
  • 19.
  • 20.
  • 21. Lessons learned... ● too much time spent on non impactful features, not enough time spent on important features ● API needs more data architecting ● feeling is important (design is more than...) ● css bloats, deadlines & other people
  • 22. Looking forward - V2 Features: ● ● ● ● ● re-skin - IOS7 style, flat theme, icon updates update homepage layout advanced map controls, search, personality through content cms interface for updating/adding sections facebook integration Code: ● ● ● ● UI performance improvements (make it even faster) - faster views, smoother transitions build out debug tools refactor & modularize codebase - reusable library for other markets restructure router/controller/pub-sub [explain on whiteboard]