PlatziStore is a full-featured demonstration app built with SwiftUI, async/await networking, and a clean, modular architecture.
It integrates with the Platzi FakeStore REST API to load products, categories, images, and authentication flows β all while showcasing production-ready code organization and modern Swift patterns.
This project is designed as an educational reference for anyone learning:
- How to structure a SwiftUI app at scale
- How to build a reusable networking layer
- How to use async/await with URLSession
- How to handle authentication, decoding, API errors
- How to manage application state with observable stores
- How to build clean, testable views & screens
- SwiftUI-powered UI with navigation stacks, lists, forms, modals, alerts
- Async/await networking layer with
URLSession+ custom error handling - Modular, folder-organized architecture
- Category & product browsing
- Authentication flows (Login + Registration)
- Secure token storage using iOS Keychain
- Async image loading with fallback placeholders
- Example of custom view components, extensions & utilities
- Safe concurrency on the main actor where needed
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
The project is organized for clarity, maintainability, and education:
PlatziStore/
βββ Controllers/ # AuthenticationController, ProductsController, etc.
βββ Errors/ # AppError, APIError, decoding failures
βββ Extensions/ # Helpers for String, URL, Color, View, etc.
βββ Networking/ # HTTPClient, endpoints, URLRequest builders
βββ Requests/ # Encodable API request models
βββ Responses/ # Decodable API response models
βββ Screens/ # SwiftUI screens (Login, Register, ProductList, Detail)
βββ Stores/ # Observable app-wide state containers
βββ Utils/ # Constants, helpers, formatters
βββ Views/ # Reusable SwiftUI view components
βββ PlatziApp.swift # Main entry point
This layout mirrors what you'd expect in a production SwiftUI application using REST APIs.
This project integrates with the publicly available Platzi FakeStore API:
Used for:
- Authentication
- Products
- Categories
- Images
- Swift 5.9+
- SwiftUI
- Async/Await Concurrency
- URLSession Networking
- Codable for JSON parsing
- AppStorage / UserDefaults / Keychain
- MVVM-ish view + store separation
-
Clone the repo:
git clone https://github.com/YOUR_USERNAME/PlatziStore.git
-
Open the project:
open PlatziStore.xcodeproj
-
Build & Run in Xcode (iOS 17+ recommended) No API keys are required β everything uses the public Platzi endpoints.
- Centralized HTTP client
- Reusable request builders
- Typed responses
- Automatic error translation
- Stores handle state & business logic
- Screens are light and declarative
- Controllers encapsulate API calls
- Reusable view components reduce duplication
- Environment injection
- NavigationStack
- Alerts, sheets, and loading states
- Async image handling
- Form validation
- Authentication tokens
- Duplicate validation on inputs
- Placeholder images
- URL extensions for random image utilities
"The Complete Guide to Integrating JSON API with SwiftUI" by Mohammad Azam
https://www.udemy.com/course/the-complete-guide-to-integrating-json-api-with-swiftui/
Not affiliated with or endorsed by the instructor or Udemy
All code written by Brian Simmons, unless otherwise notated, and released under the MIT License. Attribution is required.
![]() |
Heard It All - Relive every Billboard Hot 100 #1 |
|
What Year Was It? - Challenge your memory across history |
Created by Brian Simmons
centrasoft.com
Pull requests are welcome. Please open an issue first to discuss major changes.







