Booking options
£63.99
£63.99
On-Demand course
11 hours 12 minutes
All levels
Explore offline-first app development with Angular, Ionic, PouchDB, and CouchDB. Sync data effortlessly, design for web and mobile, and deploy with ease for a seamless user experience. Learn data synchronization, advanced features such as RxJS and custom pipes, implement state machines with XState, and build scalable, multi-platform web apps.
Angular is a popular JavaScript framework for building scalable web apps, while Ionic is an open-source framework that uses Angular to create cross-platform mobile apps. PouchDB is a JavaScript-based database for offline storage and seamless data synchronization and CouchDB is a NoSQL database designed for distributed environments with built-in data replication and offline access. Together, they enable developers to build scalable, offline-first web apps. The course begins with an introduction and preview, and a walkthrough of the Ionic project structure. We will then proceed to build a fast and easy Todo app and embark on the development of Julies app, starting with an introduction and screen design for the home and order screens and essential concepts such as four-way binding, the CAP theorem, and eventual consistency. You will learn to propagate changes from PouchDB, work with types/models, and create a view for products consumed. Displaying available products for ordering, fixing bugs, and styling the products view are further topics addressed. We will cover adding custom fonts, performing CRUD operations on products and tables, transitioning from paid to free, and generating code documentation using compodoc. Upon completion, we will be equipped with the knowledge/skills to build scalable and feature-rich offline-first apps.
Build offline-first apps with Angular, Ionic, PouchDB, CouchDB
Sync data seamlessly between local and remote databases
Utilize repository patterns for advanced database solutions
Implement XState state machines for efficient state management
Handle problems in development using practical techniques
Explore advanced features such as RxJS and custom pipes
This course is designed for software engineers who are interested in creating multi-platform apps using a web framework, suitable for engineers who want to explore advanced features like repository patterns for database solutions and implementing state machines with XState. This course assumes a basic knowledge of Angular and Ionic. If new to these frameworks, you can refer to the documentation provided. Prior knowledge of TypeScript is desirable. Basic understanding of JavaScript is essential. The course focuses on practical implementation, so not every basic concept is thoroughly explained.
The course takes a practical approach, emphasizing hands-on implementation and project-based learning. Rather than focusing on theoretical concepts, you will actively work on building real-world apps using Angular, Ionic, PouchDB, and CouchDB. The course encourages self-directed learning, where we may need to refer to documentation or other resources to fill in any gaps in our knowledge.
Design apps that function without an internet connection, ensuring a seamless user experience * Integrate PouchDB/CouchDB into apps to achieve seamless data synchronization between front/backend * Explore advanced concepts such as repository patterns, XState machines to manage complex app states
https://github.com/PacktPublishing/Offline-First-Apps-with-Angular-Ionic-PouchDB-and-CouchDB
Dominic Rudigier is a professionally experienced full-stack software developer specializing in web and mobile app development. With expertise in TypeScript, Angular, Ionic, NestJS, Java, C#, and Python, Dominic has 13 years of experience in developing software solutions. He is passionate about distributed systems, improving mobile app loading times, and constantly exploring new technologies in the web development space. Dominic is dedicated to sharing his knowledge and enjoys teaching as a side project, alongside his self-employment in project-based work. He is also pursuing a master's degree in software engineering to further enhance his skills and expertise.
1. Introduction
In this section, we will focus on getting introduced to the course and its objectives, understand the key concepts, and get ready to embark on your journey to building offline-first apps with Angular, Ionic, PouchDB, and CouchDB.
1. Introduction This video provides an overview of the course, its objectives, and the skills we will acquire. We will understand the importance of offline-first apps and get motivated to dive into the exciting world of Angular, Ionic, PouchDB, and CouchDB. |
2. Ionic Setup In this video, you will learn to set up your development environment for Ionic. We will follow the step-by-step instructions to install the necessary tools and configure our system, ensuring a smooth and hassle-free setup process. |
3. Ionic Project Structure Walkthrough In this video, we will explore the structure of an Ionic project and gain familiarity with its components. We will understand the project directories and files, their purpose, and how they contribute to the overall structure of an Ionic application. |
2. Our Quick First Todo App
In this section, we will build a quick and easy Todo app using Angular and Ionic. This hands-on experience will guide us through the process of setting up the project and implementing essential features such as adding, editing, and deleting todo items.
1. A Fast and Easy Todo App 1 In this video, we will explore building our very own Todo app using Angular and Ionic. We will follow along as we set up the project and create the foundation for managing and displaying todo items. |
2. A Fast and Easy Todo App 2 In this continuation, we will complete our Todo app by adding advanced functionality such as editing and deleting todo items. You will learn to implement these features and refine the user experience of your app. |
3. Julies - The Offline-First App for Restaurants
In this section, we will focus on building Julies, an offline-first app designed for restaurants. We will explore the unique features and functionality of Julies and learn to create a seamless offline experience for restaurant operations. We will develop the necessary screens, implement intuitive user interfaces, and enhance the overall dining experience.
1. Julies App - Introduction In this video, we will be introduced to Julies, an offline-first app designed for restaurants. Learn about its purpose, features, and how it leverages offline capabilities to enhance the dining experience. |
2. Screen Design - Home and Order Screen In this video, we will explore the screen design process for the Julies app. We will discover how to create visually appealing and user-friendly home and order screens, considering layout, navigation, and essential elements. |
3. Home Screen with Table Overview In this video, we will dive into implementing the home screen for the Julies app. You will learn to display an overview of tables, including occupancy status, and enable interactive features to manage table reservations and orders efficiently. |
4. PouchDB / CouchDB Integration, Four-Way-Binding
This section focuses on integrating PouchDB and CouchDB, enabling seamless offline data storage and synchronization. You will learn to set up CouchDB, integrate PouchDB into our app, and leverage four-way-binding for real-time updates and synchronization between our app, PouchDB, CouchDB, and the UI.
1. Setting Up CouchDB In this video, you will learn the step-by-step process of setting up CouchDB, a NoSQL database, for your application. We will understand the configuration, installation, and database creation steps required to establish a seamless connection with our application. |
2. PouchDB Integration In this video, we will dive into the integration of PouchDB, a JavaScript database library that enables offline data storage and synchronization. We will explore the PouchDB API, learn to create, read, update, and delete documents, and understand the mechanisms for syncing data with CouchDB. |
3. Four-Way-Binding In this video, we will discover the power of four-way-binding that allows for real-time updates and synchronization between our app, PouchDB, CouchDB, and the user interface. You will learn to leverage this feature to create a responsive and interactive app that reflects data changes in real-time across all connected components. |
4. CAP-Theorem, Eventual Consistency, Update Is Better Than Fetch In this video, we will delve into the fundamentals of distributed systems with a focus on the CAP Theorem. We will understand the concepts of eventual consistency and why updating data is preferable to fetching data. We will gain insights into how these principles impact the design and performance of our application. |
5. Propagate Changes from PouchDB In this video, you will learn to effectively propagate changes made in PouchDB to CouchDB. We will explore different strategies for syncing data, including one- and two-way replication, and understand how to handle conflicts that may arise during the synchronization process. |
5. Using Models, Implementing the Table Details Screen and the Ordering Process
This section focuses on models to structure our application's data and implement key features related to the table details screen and the ordering process. You will learn to define and utilize models effectively, ensuring a solid foundation for your application.
1. Types / Models In this video, we will delve into the world of TypeScript models, gaining an understanding of how to define and utilize models to represent various data types and structures in our app. You will learn the principles of creating robust and scalable models, enabling better organization and management of data. |
2. Table Details Models In this video, we will focus on creating specific models tailored for the table details screen. You will learn to design models that accurately represent the relevant data and incorporate advanced features such as validation and data manipulation. We will be equipped with the skills to effectively implement models specific to the table details screen. |
3. Products Consumed View In this video, you will learn to develop a visually appealing user-friendly view that displays the products consumed by customers. We will explore techniques to present ordered items in an organized and comprehensive manner, allowing users to easily track their orders and view relevant details. |
4. Display Available Products for Ordering In this video, we will explore creating the functionality to display a list of available products that can be ordered. You will learn to retrieve and present product data in an efficient and user-friendly manner, ensuring that users can easily browse and select the desired items. |
5. Bugfix: Same Products Consumed for Every Table In this video, we will address a critical bug where the same products were being consumed for every table in our app. We will explore the root cause of the issue and implement the necessary fixes to ensure accurate and independent tracking of orders for each table. |
6. Styling the Products View In this video, you will learn to apply custom styling techniques to the product view, enhancing its overall appearance and user experience. We will explore various styling options, including layout adjustments, color schemes, and typography, to create an esthetically pleasing and cohesive design. |
7. String Versus String in Typescript In this video, we will dive into the distinction between the string and string data types in TypeScript. We will explore their differences, usage scenarios, and best practices to ensure proper handling of string-related operations in our application. |
8. Add Ordered Product to Consumed Products In this video, we will implement functionality that adds ordered products to the list of consumed products. You will learn how to efficiently manage and update the consumed products data based on user orders, ensuring accurate tracking and inventory management. |
9. Save Add / Delete of Consumed Products to PouchDB and CouchDB In this video, you will learn to seamlessly save the addition or deletion of consumed products to PouchDB and CouchDB, ensuring data consistency and persistence across different platforms and devices. |
10. Create Documents in the Database for Empty Tables In this video, we will discover how to create documents in the database specifically for empty tables in our application. You will learn the techniques to handle empty tables and implement the necessary logic to ensure data integrity and proper functioning of our app. |
6. Refactoring the Database Implementation
In this section, we will focus on refactoring the database implementation of our application. By applying best practices and the repository pattern, you will learn to optimize data access and management.
1. Refactor: Adding Repository Pattern In this video, we will understand the process of adding the repository pattern to our codebase, providing a clean and modular structure for interacting with the database. We will improve the overall efficiency and maintainability of our app's database implementation. |
7. Add/Remove Products, Creating a Custom Sorting Pipe
This section focuses on two key aspects of our application: adding/removing products and creating a custom sorting pipe, demonstrates how to implement the functionality of adding and removing products, enabling users to customize their selections.
1. Add / Remove Products In this video, you will learn to implement the functionality of adding and removing products in our application. This will enable users to customize their selections and manage their cart or order list effectively. |
2. OrderByPipe to Sort Nested Array of Objects In this video, we will discover how to create a custom sorting pipe that targets nested arrays of objects. This will allow us to organize and display data in a desired order, enhancing the user experience and providing better usability for our application. |
8. Payment Screen
In this section, you will learn to enhance your application by adding and removing products, allowing users to customize their selections. We will explore the concept of creating a custom sorting pipe to organize and display data in a desired order.
1. Ion-Fab-Button to Navigate to the Payment Screen This video demonstrates how to add an Ion-Fab-Button to our application, allowing users to navigate to the payment screen easily, enhancing the user experience, and providing a convenient way for users to proceed with the payment process. |
2. Payment Page 01 In this video, you will learn to design and implement the first part of the payment page in your application. We will explore various components and functionalities needed for the payment process, setting a solid foundation for the overall payment flow. |
3. Payment Page 02 Continuing from the previous video, this video focuses on the second part of the payment page. You will learn to integrate additional components and features, further refining the payment process and ensuring a smooth user experience. |
4. Payment Page 03 The third part of the payment page will explore advanced techniques and functionalities to handle payment calculations, validation, and confirmation. By the end of this video, we will have a fully functional payment page in our application. |
5. Creating a Service for Generating Bills In this video, we will discover how to create a service that generates bills for each user in our application. This service will handle the logic and calculations required to generate accurate and detailed bills, providing a seamless experience for users. |
6. Refactor: Create New Bill for Every User without Update Building upon the previous video, this video focuses on refactoring the code to create a new bill for every user without performing unnecessary updates. You will learn to optimize the process and improve the performance of bill generation in our application. |
9. Kitchen View Screen
This section focuses on building the Kitchen View screen in our application, which allows kitchen staff to manage orders and track their status. Through a series of videos, you will learn to implement the necessary components and functionality to create an efficient and intuitive Kitchen View.
1. Kitchen View In this video, we will be introduced to the Kitchen View screen and its purpose within the application. You will learn to design and structure the layout, ensuring that it provides a clear overview of orders and their status for kitchen staff. |
2. Using XState to Create a State Machine for Every Table This video explores the use of XState, a powerful state management library, to create a state machine for each table in the Kitchen View. You will learn to define different states and transitions to represent the lifecycle of an order, enabling effective order tracking and management. |
3. Implement Styling and Continue with State Machine Building upon the previous video, this video focuses on implementing styling for the Kitchen View and continuing the development of the state machine. You will learn to apply appropriate styles and visual cues to enhance the user interface and provide a seamless experience for the kitchen staff. |
4. Implement State Transitions: Part 1 In this video, we will dive deeper into implementing state transitions within the Kitchen View. You will learn to handle different events and triggers that cause state changes, ensuring that the order status is accurately updated and reflected in real-time. |
5. Implement State Transitions: Part 2 Continuing from the previous, this video completes the implementation of state transitions within the Kitchen View. You will learn how to handle additional scenarios and edge cases, refining the state machine to handle various order management scenarios effectively. |
10. Improve Waiter Workflow
In this section, you will learn to enhance the workflow for waiters in your application, improving efficiency and usability. We will explore techniques to streamline the ordering process and ensure a smooth experience for waitstaff.
1. Improve Workflow, Sorting In this video, we will discover strategies to optimize the workflow for waiters. You will learn to implement features such as sorting orders based on priority or specific criteria, enabling waitstaff to handle orders more effectively and efficiently. |
2. Make Changes Visible before Storing Them in the Database This video focuses on enhancing the user experience by making changes visible to waiters before they are stored in the database. You will learn to implement temporary changes or previews, allowing waitstaff to review and confirm modifications before persisting them, ensuring accuracy and preventing errors. |
11. Debug and Styling Using Different Fonts
In this section, you will learn essential techniques for debugging and styling our application. These skills are crucial for identifying and resolving issues effectively, as well as creating visually appealing interfaces with custom fonts.
1. How to Debug In this video, we will explore various debugging strategies and tools to identify and fix issues in our application. You will learn to leverage debugging techniques to track down and resolve errors, ensuring the smooth operation of our web or mobile app. |
2. Adding Custom Fonts This video focuses on enhancing the visual aesthetics of our application by incorporating custom fonts. We will discover how to integrate and apply different fonts to your UI components, creating unique and engaging user experiences that align with our app's branding and design. |
12. CRUD for Products and Tables
In this section, you will learn to perform CRUD (Create, Read, Update, Delete) operations for both products and tables within our application, fundamental operations which are essential for managing and manipulating data effectively.
1. CRUD Products: Part 1 In this video, we will dive into the process of creating, reading, updating, and deleting products. We will gain a comprehensive understanding of how to interact with product data, enabling us to add, view, modify, and remove products within our application. |
2. CRUD Products: Part 2 Building upon the previous video, this segment will cover additional techniques for CRUD operations related to products. We will explore advanced functionalities and best practices for managing product data efficiently, ensuring seamless user experiences when working with product information. |
3. CRUD Products: Part 3 Continuing the series, this video will provide further insights into performing CRUD operations for products. We will delve deeper into the nuances of updating and deleting product data, refining our skills in manipulating product information within our application. |
4. CRUD Tables In this final video of the section, we will shift our focus to CRUD operations for tables. You will learn to create, read, update, and delete table data, empowering you to manage and organize table information effectively within your application. |
13. Fix the Last Bug - Tables Cannot Be Free after Being Occupied Once
In this section, we will address a critical bug related to table occupancy in our application. Specifically, we will focus on resolving the issue where tables cannot be set as free after being occupied once, ensuring proper functionality and user experience.
1. Transition from Paid to Free In this video, we will dive into the process of fixing the bug by implementing a smooth transition from the paid state to the free state for occupied tables. You will learn to properly manage and update the table's status, enabling users to easily mark tables as free once they are no longer occupied. |
14. Documentation
In this section, you will learn about the importance of code documentation and how to generate comprehensive documentation for our application using compodoc.
1. Generate Code Documentation Using compodoc In this video, we will explore compodoc, a powerful tool for generating code documentation in Angular applications. You will learn to set up and configure compodoc, and walk through the process of generating documentation for our codebase. |
15. Unit Tests
In this section, we will dive into unit testing and learn to write effective tests for our Angular applications. By mocking the database, you can simulate different scenarios and ensure that your code behaves correctly under various conditions.
1. Mock the Database for Unit Tests In this video, we will explore the concept of mocking the database in unit tests. You will learn to create mock implementations of our database dependencies to isolate our tests from the actual database operations. |