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
Backend-Driven UI: Making Screens Dynamic
Search
yhkaplan
October 16, 2020
Programming
1.9k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Backend-Driven UI: Making Screens Dynamic
yhkaplan
October 16, 2020
More Decks by yhkaplan
See All by yhkaplan
Using the latest UICollectionView APIs
yhkaplan
0
3.5k
Swift and Concurrency: The Plan for World Domination
yhkaplan
0
210
Migrating from UIKit to SwiftUI efficiently
yhkaplan
4
3.9k
Property Wrappers
yhkaplan
0
620
Parser Combinators
yhkaplan
0
320
The Great Swift Migration
yhkaplan
1
4.3k
Speeding Up Your CI
yhkaplan
0
520
Automate All the Things
yhkaplan
4
2.7k
Other Decks in Programming
See All in Programming
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
180
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.7k
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.8k
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
720
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
240
仕様駆動開発の消費期限
watany
20
8.6k
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
390
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
510
Foundation Models frameworkで画像分析
ryodeveloper
1
620
プロポーザルを書いてもらう
pvcresin
0
550
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
700
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
210
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
First, design no harm
axbom
PRO
2
1.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
710
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
HDC tutorial
michielstock
2
790
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Visualization
eitanlees
152
17k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
Designing for humans not robots
tammielis
254
26k
Ruling the World: When Life Gets Gamed
codingconduct
0
300
Transcript
Backend-Driven UI: Making Screens Dynamic 1
Self-intro — Name: Joshua Kaplan (@yhkaplan) — Work: minne @
GMO Pepabo — Interests: ! CI/CD, " frameworks, and more — Hobbies: # bread, $ history, and running 2
What is a backend driven UI? — Extreme end: every
individual view defined by backend — Less extreme: order of and type of view defined by backend — Why JSON? 3
Purpose — Change content for each customer — A/B testing
— Feature flags — Less work to make changes 4
Demo 5
How I made it — Prototype in sample app —
Use compositional layout and diffable data sources — Define each section type as JSON w/ a title and subtitle — Firebase Remote Config 6
Code Example let homeReducer = Reducer<HomeState, HomeAction, HomeEnvironment> { state,
action, environment in switch action { case .loadSectionData: state.isSectionLoading = true return environment.homeService.homeContentPublisher() .replaceError(with: []) .receive(on: DispatchQueue.main) .map { HomeAction.loadItemData(sections: $0) } .eraseToEffect() case let .loadItemData(sections): state.isSectionLoading = true return environment.homeService.sectionItemsPublisher(sections: sections) .replaceError(with: [:]) .receive(on: DispatchQueue.main) .map { HomeAction.setSections(sections: $0) } .eraseToEffect() } return .none } 7
Challenges/risks — App Review risks (AKA don’t pull a Fortnite)
— Server unavailable 8
Other possible approaches — Defining more in JSON — microsoft/AdaptiveCards
— spotify/HubFramework — Web views 9
Conclusion — Easy to strike a balance w/ compositional layout
— Think of important, frequently changing screens — Worth it for minne — Try it out in a prototype! — yhkaplan/Shop 10