Arquitectura de React Native en Product Hunt

Rate this content
Bookmark

Voy a mostrar la arquitectura de React Native que utilizamos en nuestra nueva aplicación móvil en Product Hunt. Lo que aprendimos en el camino. Cómo trasladamos lo que sabemos de la web al móvil. Los temas serán el diseño de componentes reutilizables de React, GraphQL, enrutamiento en la aplicación, ciclo de vida de la aplicación, controles de teclado, mensajes de aviso y otros.

18 min
14 May, 2021

Video Summary and Transcription

El orador discute la arquitectura de React Native que utilizan en su nueva aplicación móvil, eligiendo React Native en lugar del desarrollo nativo debido a los recursos limitados y la necesidad de experimentar con la interfaz de usuario. La arquitectura consta de soporte, componentes y pantallas, con un enfoque en la organización del código y la extensibilidad. El orador explica el proceso de creación de pantallas, incluido el uso de React Native Navigation y un patrón de máquina de estados. También destacan el uso de GraphQL para la recuperación de datos y la navegación entre pantallas. La charla cubre la estructura de los componentes comunes, utilidades para el estilo y el soporte para el modo oscuro. En general, el orador enfatiza la importancia de aislar las dependencias y utilizar un enfoque de estructura de directorios.

Available in English

1. Introducción a la Arquitectura de React Native

Short description:

Hola a todos. Mi nombre es Radoslav Stankov y vengo de Bulgaria. Hoy hablaré sobre nuestra arquitectura de React Native y cómo hemos estructurado nuestra aplicación de React. Produhunt es este sitio web. Cuando decidimos reconstruir nuestra aplicación móvil, teníamos dos opciones: usar Swift nativo o usar React Native. Tuvimos una experiencia terrible con React Native en el pasado, pero solo teníamos dos desarrolladores con experiencia en Swift y ninguno en Android. También necesitábamos experimentar con la interfaz de usuario y admitir Android, así que elegimos React.

Estoy aquí en Bulgaria, sentado en este momento. Y soy el jefe de ingeniería en Produhunt.

Hoy hablaré un poco sobre nuestra arquitectura de React Native y cómo hemos estructurado nuestra aplicación de React. Pero antes de entrar en los detalles técnicos, para una buena arquitectura, es necesario conocer el contexto, como de dónde viene el equipo, cuáles son los requisitos y cómo se construye todo.

Produhunt es este sitio web. Así es como nos vemos en la web. Y he dado presentaciones anteriores sobre la arquitectura de Produhunt. No entraré en detalles allí. Pero cuando decidimos reconstruir nuestra aplicación móvil a principios de este año, en realidad la lanzamos este año, comenzamos un poco más tarde que eso. Nos preguntábamos, bueno, ahora deberíamos hacer un gran reinicio en nuestra aplicación móvil. Y para nuestro caso, básicamente teníamos dos opciones.

Una era usar Swift nativo y la otra era usar React Native. Realmente tuvimos una experiencia terrible hace más de dos años cuando inicialmente comenzamos con React Native. Fue bastante desafiante. Por otro lado, solo teníamos dos desarrolladores que tenían algo de experiencia en Swift, no muy nuevos, y no teníamos ningún desarrollador con experiencia en Android. Y nuestra aplicación realmente necesitaba funcionar en Android también. Además, Apollo, así que usamos GraphQL para todas nuestras transferencias de datos y la mejor manera de usarlo es Apollo, en mi opinión. Apollo para Swift no es tan bueno como Apollo para JavaScript. Y nuestro equipo ya sabía cómo lidiar con React y Apollo. Lo otro que necesitábamos para esta aplicación era hacer muchas experimentaciones de interfaz de usuario, y nuevamente, también necesitábamos Android.

Entonces, a principios de 2020, estábamos haciendo experimentos de aplicaciones móviles para YourStack. A principios de 2000, trabajamos en dos aplicaciones para algunos de nuestros productos y experimentación. Una era YourStack, la otra se llamaba StackCamp. Ambas no se lanzaron porque eran solo internas. Probamos algunas ideas allí. Así que, sí, no se lo digas a nadie. A partir de eso, pudimos comparar los ecosistemas de React y Swift. Y decidimos ir con React simplemente porque necesitábamos Android.

2. Visión general de la arquitectura de React Native

Short description:

Nuestro equipo ya conocía React Native y decidió utilizarlo junto con GraphQL y Apollo. Priorizamos facilitar las operaciones comunes, organizar el código, aislar las dependencias y garantizar la extensibilidad y usabilidad. Nuestra arquitectura consta de tres pilares: soporte, componentes y pantallas. La estructura de directorios de nuestra aplicación móvil refleja esta arquitectura. Comenzamos con la capa superior, las pantallas, que se definen en la app GS y utilizan React Native Navigation.

y React Native realmente ha mejorado mucho en comparación con hace dos años y medio. Se ha vuelto mucho más rápido, mucho más estable y no hemos tenido los mismos problemas que antes. La pila tecnológica que decidimos utilizar fue React y React Native. Utilizamos GraphQL y accedemos a él a través de Apollo. TypeScript, Jest y Prettier son básicamente imprescindibles si utilizamos el ecosistema JavaScript. Y para todo lo relacionado con la aplicación móvil, utilizamos Fastlane para las herramientas.

En cuanto a la arquitectura, si no sabes por dónde empezar, es muy fácil encontrarse en una situación en la que te quedas atascado. Así que queremos avanzar rápido y desayunar, no romper cosas rápidamente. Queremos avanzar. Por tanto, en nuestra arquitectura tenemos cuatro objetivos. El primero es facilitar las operaciones comunes para que los ingenieros puedan añadir fácilmente nuevas funcionalidades. Luego, necesitamos organizar el código para que los nuevos miembros del equipo puedan incorporarse fácilmente al código base. Aislar las dependencias, como en el mundo JavaScript y en prácticamente cualquier mundo moderno en el que trabajemos con dependencias externas que pueden desincronizarse fácilmente, quedar obsoletas y romper muchas cosas sin nuestro control. Y por último, la extensibilidad y usabilidad. Queremos construir cosas que podamos ampliar y reutilizar a lo largo del tiempo. Pero lo más importante para nosotros es facilitar las operaciones comunes para que todo lo que un desarrollador tenga que hacer a diario sea muy fácil para ellos.

La forma en que veo las partes de la arquitectura es a través de tres pilares: el soporte, los componentes y las pantallas. Así es como lo veo en mi cabeza. Tenemos una gran área de soporte que nos ayuda a construir los componentes reutilizables principales y luego construimos las pantallas sobre eso. Para alguien más familiarizado, así es como puedes imaginarlo. Tienes los pilotos, los colocas en las líneas y forman a Voltron y lo hacen realmente bien. Si miras nuestro directorio, así es como se ve la estructura de directorios de la aplicación móvil y representa la arquitectura de esta aplicación. Y si te fijas, si lo marco con colores aquí, tenemos soporte, componentes y pantallas.

Entonces, una vez más, hablemos de código. Empecemos por la capa superior porque en realidad nos ayuda a entender las capas de ambas si empezamos al revés. Desde las pantallas. Todas las pantallas se definen en la app GS. Y aquí, lo que hacemos es utilizar la navegación de React Native

3. Creación y estructura de pantallas en React Native

Short description:

Experimentamos con diferentes opciones de navegación, pero React Native Navigation se ajustó mejor a nuestro estilo de trabajo. Nuestra pantalla principal consiste en una pila principal que adjunta las pantallas. Las pantallas están organizadas en una carpeta de pantallas, y cada pantalla se exporta desde un archivo índice. Cada pantalla tiene su propio directorio, que incluye componentes privados, una consulta de gráficos para la recuperación de datos, utilidades y el archivo JS de índice. Las pantallas siguen un patrón de máquina de estados, comenzando con un diseño, pasando a un estado de carga y manejando los estados de error y carga. Hemos extraído una utilidad llamada CreateScreen para simplificar la creación de pantallas mediante la definición del nombre de la pantalla, la consulta, las variables de consulta, el componente y el tipo.

Experimentamos con otras opciones de navegación, pero esta fue la que mejor se adaptó a nuestro estilo de trabajo. Es una biblioteca realmente buena y casi no tuvimos problemas con ella.

Así es como se ve nuestra pantalla principal, como una versión resumida. Tenemos esta pila principal a la que adjuntamos las pantallas. Observa que aquí simplemente estamos haciendo una expansión de las pantallas. Las pantallas provienen de esta carpeta de pantallas y están en el archivo índice, donde simplemente exportamos todas las pantallas diferentes. Tenemos un lugar central donde un desarrollador puede rastrear dónde se encuentra su pantalla. Es como un mapa y para las pantallas, así es como se ve una pantalla.

Básicamente tenemos una lista plana donde, en la raíz, tenemos el nombre de la pantalla. Luego tenemos un directorio donde tenemos todo lo relacionado con la pantalla. Por ejemplo, en esta pantalla, tenemos dos componentes privados, que son la búsqueda y el elemento ajustado. Estos son componentes que solo se utilizan en la pantalla. Tenemos la consulta de gráficos, la consulta que obtendrá los datos para la pantalla. Tenemos algunas utilidades y el archivo JS de índice es la pantalla.

Si pensamos en la pantalla, en realidad es una máquina de estados y esta máquina de estados comienza con un diseño. Luego pasa al estado de carga dentro de este diseño. Si algo malo sucede, hay un estado de error y este error puede ser un error del servidor, error de no encontrado, autorización, autenticación y errores similares. Por otro lado, podemos tener el estado de carga. Cuando la pantalla se carga, hay un par de operaciones que siempre debemos hacer. Necesitamos renderizar la pantalla. Y nos dimos cuenta de que tenemos mucho código de estado en nuestro sistema.

Entonces, lo que hicimos fue extraer una utilidad que tenemos en la web llamada CreateScreen. Y esta CreateScreen nos permite definir, okay, ¿cuál es el nombre de la pantalla? Es muy útil para depurar. ¿Cuál es la consulta, que se utilizará para obtener los datos? ¿Cuáles son las variables de consulta para esta consulta? ¿Qué componente va a renderizar esta pantalla y simplemente pasamos con este componente los datos y los parámetros? ¿Qué tipo de pantalla es esta? En nuestra aplicación tenemos tres tipos de pantalla. Tenemos una pantalla que es como una pantalla de empuje, que simplemente la empujamos hacia atrás. Tenemos una hoja de acciones, que se abre como una hoja de acciones. Y tenemos una superposición, que es una superposición. También hay un par de otras opciones como el fondo de pantalla.

4. Creación de pantallas y navegación en React Native

Short description:

Las diferentes pantallas en nuestro sistema tienen diferentes fondos y títulos en la navegación. Manejamos las diferentes pantallas utilizando un comando para crear pantallas. Nuestra arquitectura de la aplicación involucra pantallas, consultas, componentes y hooks. GraphQL conecta todo en nuestra aplicación, proporcionando seguridad de tipos y la capacidad de anidar fragmentos. También utilizamos un truco llamado rutas, que permite una navegación fácil entre pantallas.

Las diferentes pantallas en nuestro sistema tienen diferentes fondos y títulos en la navegación. También hay un área segura, que es el estilo del iPhone X sin botón de inicio. ¿Y cómo lo hacemos en diferentes pantallas? Así que cada desarrollador puede construir una pantalla simplemente llamando a este comando.

Lo que tenemos es la pantalla, que es create screen, pasa por el índice de la pantalla y luego pasa por la aplicación. Aquí hay un ejemplo de pantalla. Esta es la pantalla de inicio que tenemos. Solo tenemos una consulta con su variable. Y luego tenemos el componente y usamos dos hooks para configurar la navegación en vivo. Configuramos las notificaciones push y renderizamos un desplazamiento infinito de elementos. Y nuevamente, GraphQL es lo que también conecta todo en nuestra aplicación. En el backend, usamos Rails y exportamos GraphQL. GraphQL va a Apollo y Apple nos ayuda a generar TypeScript. Usando el generador de código de Apollo, podemos tomar los fragmentos de GraphQL y convertirlos en tipos y TypeScript. Y podemos usarlos en nuestras páginas. Esto nos brinda seguridad de tipos. Y lo bueno de esto es que podemos anidarlos. Podemos adjuntar fragmentos con más fragmentos. Y así es como comenzamos. La forma en que comenzamos es desde la consulta de la página y luego obtiene los fragmentos y desciende al nivel del componente. Y para mí eso sigue siendo mágico. Es muy mágico ir al backend, probar el cambio y la aplicación móvil se queja de que este campo ya no existe o que es nulo, pero esperabas que no fuera nulo. Y esto conecta toda la aplicación.

Otro truco genial que usamos se llama rutas. No he visto esto en aplicaciones React Native, así que creo que puede ser muy útil para todos. Lo que tenemos es este archivo donde simplemente exploramos esta lista de rutas, donde básicamente decimos que nuestras pantallas son rutas. Por ejemplo, tenemos una ruta de inicio de sesión de perfil porque en nuestra aplicación, en cada pantalla, puedes ir a casi cualquier otra pantalla. Simplemente puedes decir, okay, esta es la descripción de dónde iría esta cosa. Y tenemos esos hooks para navegar entre las diferentes pantallas. Y puedes decir, okay, tengo una ruta, volver, pantalla de inicio de sesión, pantalla de perfil. Y puedo usar esto en un botón.

5. Estructura de botones y componentes en React Native

Short description:

Tengo un botón que navega a un producto con ID5. Tenemos un componente de botón principal con funcionalidad incorporada. Nuestros componentes se utilizan en múltiples pantallas y se organizan en una estructura de directorios. Tenemos componentes comunes, como texto y botones, con funcionalidad incorporada. También tenemos componentes de diseño, que incluyen filas flexibles, columnas flexibles y ayudantes como expandir flex y cuadrícula. Tenemos componentes de utilidad, estilo y dominio, con anidamiento profundo y un enfoque en el diseño atómico. Por último, tenemos funciones de utilidad para diversos propósitos.

Puedo decir que tengo un botón y navega al producto con ID5. Y esto es algo muy común. Entonces, lo que hacemos es que lo tenemos incorporado en nuestro componente de botón principal. Y nuestro componente de botón principal simplemente tiene esto.

Bueno, el siguiente paso del que voy a hablar son los componentes. Básicamente, son cosas que se utilizan en más de dos pantallas. Y más de una pantalla, en realidad. Así que usamos el mismo componente como directorio donde la carpeta raíz muestra todo lo público. Las cosas privadas están todas anidadas. Algunos componentes incluso tienen, como, 45 niveles de componentes. Mantenemos aquí el graphQL, la mutación, el índice es donde exportamos. Y tenemos componentes bastante comunes. Tenemos nuestra propia versión de texto, para tener un tamaño de texto consistente. Tenemos esta estructura de espaciado. Otra cosa que tenemos son, nuevamente, los botones habituales. Y para nosotros, los botones no solo son estilo, sino que también tienen funcionalidad. Podemos decir, ok, el botón puede enlazar a una página. Si la función, que se hace clic o se presiona, devuelve una promesa, el botón no te permite presionarlo nuevamente. También tenemos confirmación incorporada, requiere inicio de sesión y también está integrado con GraphQL. Entonces, el botón puede ejecutar una mutación y manejar los resultados de la mutación. También tenemos paquetes para botones. Tenemos un botón que es solo texto, un botón que es un icono, uno sólido y uno de contorno.

Para los diseños, hemos extraído el sistema de flex incorporado en Apollo en React Native porque básicamente nos cansamos de escribir el mismo estilo una y otra vez. Tenemos esta fila flexible y columna flexible y un par de ayudantes como expandir flex, que expande el flex a toda la pantalla, una cuadrícula, que son esos puntos, y un texto, que es básicamente un truco para que los textos floten correctamente con React Native. Y como mencioné, tenemos componentes de utilidad, estilo y dominio, así que también tenemos componentes de dominio. Como esta es la página de inicio y si vemos el elemento de publicación, tiene un botón en negrita. Y este botón en negrita utiliza el componente de botón, pero también el elemento de publicación utiliza el botón en negrita y el botón, por lo que tenemos este anidamiento profundo de componentes de utilidad y componentes de dominio. Es como un diseño atómico, simplemente decimos, ok, tenemos los componentes genéricos y luego tenemos los componentes de dominio, que están relacionados con una entidad de dominio. Por lo general, la diferencia es que uno tiene fragmentos y el otro no. Y la última cosa que quería compartir son las utilidades.

6. Utilidades y Estilos en React Native

Short description:

Quiero hablar sobre algunas de las utilidades que tenemos en nuestro sistema, centrándonos en el estilo. Agregamos un ayudante para márgenes y rellenos, que resultó ser muy útil. Otra característica que implementamos fue el soporte para el modo oscuro utilizando React Native Dynamic. Tenemos soporte incorporado para el modo oscuro y un conjunto principal de componentes, así como componentes de dominio que utilizan GraphQL. En general, hemos aislado nuestras dependencias y utilizado un enfoque de construcción de directorios.

Quiero hablar sobre algunas de las utilidades que tenemos en nuestro sistema, y simplemente viven en utilidades, en hooks y en estilos. Lo dividimos en tres carpetas, porque para los ingenieros descubrimos que es bueno tener un lugar dedicado para cosas como hooks, y sabemos que los archivos allí son muy especiales. Quiero centrarme en el estilo.

Un problema para el cual estábamos escribiendo mucho estilo era para márgenes y rellenos. Entonces, lo que hicimos fue agregar este ayudante que usamos en nuestro componente principal, que tiene esas propiedades para márgenes y rellenos. Aquí hay algo que en la web usamos la propiedad flex-gap, pero esto no es algo que podamos implementar con React Native. Y debido a esto, simplemente tenemos este ayudante de estilo donde tenemos margen, fondo, relleno y todas las asociaciones. Y cada componente puede tener esta propiedad de espaciado, por lo que podemos agregar cualquier espaciado a esos componentes, y esto fue muy útil.

La otra cosa que formaba parte del nuevo conjunto de funciones era tener soporte para el modo oscuro, que es una característica genial. Entonces, usamos este paquete llamado React Native Dynamic, y creamos un envoltorio alrededor de él donde puedes usar esta hoja de estilo dinámica y, según el color, decides qué color estás usando. Y tenemos un par de ayudantes y temas de estilo, como por ejemplo, usar color de fondo. Y tenemos este mapa de colores, que es el valor dinámico. Entonces, en el texto con este color, el texto secundario es con este color, y cada color en nuestra aplicación está definido a este color y debe ir a React Native Dynamic. Así que en realidad tenemos soporte incorporado para el modo oscuro. Y básicamente así es como se combina toda la aplicación. Como construimos sobre los cimientos, que son las utilidades. Y tenemos muchas más utilidades inteligentes. Son mucho más ayudantes internos. Pero los que te mostré, creo que son los más memorables y útiles, y no he visto que se utilicen mucho en otras aplicaciones hasta ahora. Y luego, sobre ellos, construimos este conjunto principal de componentes, que es nuestro conjunto principal, que son cosas como botones, texto, desplazamiento infinito, cosas en las que no les importa la lógica de dominio. Y luego tenemos el componente de dominio, que es como botón de publicación, botón de publicación, elemento de publicación, miniatura de publicación, que básicamente son cosas con fragmentos, cosas que toman cosas de GraphQL. Y luego, todo esto se combina en las páginas, que están envueltas con esta ayuda o crean página. Entonces, para resumir eso, si quieres sacar algunas conclusiones de mi charla, sí, GraphQL es increíble. Ayuda mucho a diseñar un sistema que utiliza GraphQL en todas partes. La creación de pantallas es algo que me sorprende no haber visto a muchas personas usar un patrón como ese o el escalador de pantallas. Y en cuanto a los componentes, fíjate cómo hemos aislado muchas de nuestras dependencias. Utilizamos un enfoque de construcción de directorios y tenemos este concepto de componente de dominio. Así que, sí, muchas gracias. Eso es todo de mi parte. Gracias.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

TechLead Conference 2023TechLead Conference 2023
35 min
A Framework for Managing Technical Debt
Top Content
Let’s face it: technical debt is inevitable and rewriting your code every 6 months is not an option. Refactoring is a complex topic that doesn't have a one-size-fits-all solution. Frontend applications are particularly sensitive because of frequent requirements and user flows changes. New abstractions, updated patterns and cleaning up those old functions - it all sounds great on paper, but it often fails in practice: todos accumulate, tickets end up rotting in the backlog and legacy code crops up in every corner of your codebase. So a process of continuous refactoring is the only weapon you have against tech debt.In the past three years, I’ve been exploring different strategies and processes for refactoring code. In this talk I will describe the key components of a framework for tackling refactoring and I will share some of the learnings accumulated along the way. Hopefully, this will help you in your quest of improving the code quality of your codebases.

React Summit 2023React Summit 2023
24 min
Debugging JS
Top Content
As developers, we spend much of our time debugging apps - often code we didn't even write. Sadly, few developers have ever been taught how to approach debugging - it's something most of us learn through painful experience.  The good news is you _can_ learn how to debug effectively, and there's several key techniques and tools you can use for debugging JS and React apps.
React Advanced Conference 2022React Advanced Conference 2022
22 min
Monolith to Micro-Frontends
Top Content
Many companies worldwide are considering adopting Micro-Frontends to improve business agility and scale, however, there are many unknowns when it comes to what the migration path looks like in practice. In this talk, I will discuss the steps required to successfully migrate a monolithic React Application into a more modular decoupled frontend architecture.
React Advanced Conference 2023React Advanced Conference 2023
22 min
Power Fixing React Performance Woes
Top Content
Next.js and other wrapping React frameworks provide great power in building larger applications. But with great power comes great performance responsibility - and if you don’t pay attention, it’s easy to add multiple seconds of loading penalty on all of your pages. Eek! Let’s walk through a case study of how a few hours of performance debugging improved both load and parse times for the Centered app by several hundred percent each. We’ll learn not just why those performance problems happen, but how to diagnose and fix them. Hooray, performance! ⚡️
React Summit 2023React Summit 2023
24 min
Video Editing in the Browser
Video editing is a booming market with influencers being all the rage with Reels, TikTok, Youtube. Did you know that browsers now have all the APIs to do video editing in the browser? In this talk I'm going to give you a primer on how video encoding works and how to make it work within the browser. Spoiler, it's not trivial!

Workshops on related topic

React Advanced Conference 2022React Advanced Conference 2022
81 min
Introducing FlashList: Let's build a performant React Native list all together
Top Content
WorkshopFree
In this workshop you’ll learn why we created FlashList at Shopify and how you can use it in your code today. We will show you how to take a list that is not performant in FlatList and make it performant using FlashList with minimum effort. We will use tools like Flipper, our own benchmarking code, and teach you how the FlashList API can cover more complex use cases and still keep a top-notch performance.You will know:- Quick presentation about what FlashList, why we built, etc.- Migrating from FlatList to FlashList- Teaching how to write a performant list- Utilizing the tools provided by FlashList library (mainly the useBenchmark hook)- Using the Flipper plugins (flame graph, our lists profiler, UI & JS FPS profiler, etc.)- Optimizing performance of FlashList by using more advanced props like `getType`- 5-6 sample tasks where we’ll uncover and fix issues together- Q&A with Shopify team
React Summit 2022React Summit 2022
117 min
Detox 101: How to write stable end-to-end tests for your React Native application
Top Content
WorkshopFree
Compared to unit testing, end-to-end testing aims to interact with your application just like a real user. And as we all know it can be pretty challenging. Especially when we talk about Mobile applications.
Tests rely on many conditions and are considered to be slow and flaky. On the other hand - end-to-end tests can give the greatest confidence that your app is working. And if done right - can become an amazing tool for boosting developer velocity.
Detox is a gray-box end-to-end testing framework for mobile apps. Developed by Wix to solve the problem of slowness and flakiness and used by React Native itself as its E2E testing tool.
Join me on this workshop to learn how to make your mobile end-to-end tests with Detox rock.
Prerequisites- iOS/Android: MacOS Catalina or newer- Android only: Linux- Install before the workshop
React Summit Remote Edition 2021React Summit Remote Edition 2021
60 min
How to Build an Interactive “Wheel of Fortune” Animation with React Native
Top Content
Workshop
- Intro - Cleo & our mission- What we want to build, how it fits into our product & purpose, run through designs- Getting started with environment set up & “hello world”- Intro to React Native Animation- Step 1: Spinning the wheel on a button press- Step 2: Dragging the wheel to give it velocity- Step 3: Adding friction to the wheel to slow it down- Step 4 (stretch): Adding haptics for an immersive feel
React Summit Remote Edition 2021React Summit Remote Edition 2021
87 min
Building a Shopify App with React & Node
Top Content
WorkshopFree
Shopify merchants have a diverse set of needs, and developers have a unique opportunity to meet those needs building apps. Building an app can be tough work but Shopify has created a set of tools and resources to help you build out a seamless app experience as quickly as possible. Get hands on experience building an embedded Shopify app using the Shopify App CLI, Polaris and Shopify App Bridge.We’ll show you how to create an app that accesses information from a development store and can run in your local environment.
JSNation 2022JSNation 2022
41 min
Build a chat room with Appwrite and React
WorkshopFree
API's/Backends are difficult and we need websockets. You will be using VS Code as your editor, Parcel.js, Chakra-ui, React, React Icons, and Appwrite. By the end of this workshop, you will have the knowledge to build a real-time app using Appwrite and zero API development. Follow along and you'll have an awesome chat app to show off!
GraphQL Galaxy 2021GraphQL Galaxy 2021
164 min
Hard GraphQL Problems at Shopify
WorkshopFree
At Shopify scale, we solve some pretty hard problems. In this workshop, five different speakers will outline some of the challenges we’ve faced, and how we’ve overcome them.

Table of contents:
1 - The infamous "N+1" problem: Jonathan Baker - Let's talk about what it is, why it is a problem, and how Shopify handles it at scale across several GraphQL APIs.
2 - Contextualizing GraphQL APIs: Alex Ackerman - How and why we decided to use directives. I’ll share what directives are, which directives are available out of the box, and how to create custom directives.
3 - Faster GraphQL queries for mobile clients: Theo Ben Hassen - As your mobile app grows, so will your GraphQL queries. In this talk, I will go over diverse strategies to make your queries faster and more effective.
4 - Building tomorrow’s product today: Greg MacWilliam - How Shopify adopts future features in today’s code.
5 - Managing large APIs effectively: Rebecca Friedman - We have thousands of developers at Shopify. Let’s take a look at how we’re ensuring the quality and consistency of our GraphQL APIs with so many contributors.