Smart Bulb Controller (smart-bulb)
📋 SMART_BULB_RUN1
Phase 2 FOUNDATION & SETUP
Get familiar with the tools, language and project setup
Milestone Frame the problem & understand user needs (Design Thinking)
BEFORE CODING — frame the problem and understand what the user needs (Design Thinking, condensed reading): Core problem: Users with ESP32-powered smart bulbs…
ULO-DESIGN_PROCESS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of the design process as a structured, user-centered methodology for problem solving, characterized by stages such as empathizing, defining, ideating, prototyping, and testing.
CIO-DESIGN_PROCESS-01 · CONCEPTUAL_IMPL · Bloom: understand
The learner will be able to design a model solution for an application feature by applying the Design Thinking process, mapping user needs to functional requirements, brainstorming alternative approaches, and planning iterative prototypes for user feedback.
SIO-SWIFT-DESIGN_PROCESS-01 · SPECIFIC_IMPL · Bloom: apply
The learner will be able to implement a design-thinking-driven workflow on the Swift platform, using a Design Thinking workshop tool or template to document personas, user journeys, and prototype sketches for a SwiftUI application.
ULO-PEDAGOGY-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the five stages of design thinking—empathize, define, ideate, prototype, and test—as an iterative approach to user-centered design.
CIO-PEDAGOGY-01 · CONCEPTUAL_IMPL · Bloom: understand
The learner will be able to design a learning module that applies design thinking methods to create educational software solutions.
SIO-SWIFT-PEDAGOGY-01 · SPECIFIC_IMPL · Bloom: apply
The learner will be able to implement a design thinking workshop in a Swift development environment, building a low-fidelity prototype for a focused user problem.
Milestone Install Xcode and command line tools
Install Xcode from the App Store, run `xcode-select --install` in Terminal, and add an iOS Simulator runtime via Xcode Settings.
ULO-DEVELOPMENT_TOOLS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of development tools as software applications that assist developers in creating, debugging, maintaining, and testing code, including simulators, compilers, and integrated development environments.
CIO-DEVELOPMENT_TOOLS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for using development tools on the Swift platform, outlining a workflow that incorporates the iOS Simulator for user interface testing, debugging, and performance analysis within Xcode.
SIO-SWIFT-DEVELOPMENT_TOOLS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a test deployment using the iOS Simulator on the Swift platform, launching a running app, interacting with its interface, and capturing diagnostic logs to validate behavior.
ULO-VERSION_CONTROL-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand that version control maintains a history of code changes and supports branching, while the iOS Simulator offers a local execution environment for running and debugging each version.
CIO-VERSION_CONTROL-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a workflow where every feature is developed on a separate branch, and the iOS Simulator is used to validate the build before the branch is merged into the mainline.
SIO-SWIFT-VERSION_CONTROL-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement version control practices by committing changes to a repository and launching the iOS Simulator on the SWIFT platform to verify that each commit behaves as intended.
Milestone Install Arduino IDE and ESP32 board support
Download and install the Arduino IDE, add the ESP32 board manager URL, and install the esp32 board package in Boards Manager. Verify your ESP32 is detected.
ULO-DEVELOPMENT_TOOLS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of development tools as software applications that assist developers in creating, debugging, maintaining, and testing code, including simulators, compilers, and integrated development environments.
CIO-DEVELOPMENT_TOOLS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for using development tools on the Swift platform, outlining a workflow that incorporates the iOS Simulator for user interface testing, debugging, and performance analysis within Xcode.
SIO-SWIFT-DEVELOPMENT_TOOLS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a test deployment using the iOS Simulator on the Swift platform, launching a running app, interacting with its interface, and capturing diagnostic logs to validate behavior.
ULO-HARDWARE_PLATFORM-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the characteristics of a hardware platform, including its processor, memory, I/O, and software ecosystem compared to general-purpose computers.
CIO-HARDWARE_PLATFORM-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a hardware/software boundary that abstracts the underlying platform and supports interchangeable hardware components.
SIO-SWIFT-HARDWARE_PLATFORM-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a hardware platform driver in Swift that uses an Arduino IDE-compiled firmware via a serial interface.
Milestone Clone and open the base-project
Clone the base-project repo. Open the folder in Xcode, or create a new iOS App and add the provided .swift files. Open smart_bulb.ino in Arduino IDE.
ULO-VERSION_CONTROL-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand that version control maintains a history of code changes and supports branching, while the iOS Simulator offers a local execution environment for running and debugging each version.
CIO-VERSION_CONTROL-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a workflow where every feature is developed on a separate branch, and the iOS Simulator is used to validate the build before the branch is merged into the mainline.
SIO-SWIFT-VERSION_CONTROL-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement version control practices by committing changes to a repository and launching the iOS Simulator on the SWIFT platform to verify that each commit behaves as intended.
ULO-DEVELOPMENT_TOOLS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of development tools as software applications that assist developers in creating, debugging, maintaining, and testing code, including simulators, compilers, and integrated development environments.
CIO-DEVELOPMENT_TOOLS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for using development tools on the Swift platform, outlining a workflow that incorporates the iOS Simulator for user interface testing, debugging, and performance analysis within Xcode.
SIO-SWIFT-DEVELOPMENT_TOOLS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a test deployment using the iOS Simulator on the Swift platform, launching a running app, interacting with its interface, and capturing diagnostic logs to validate behavior.
Milestone Build a SwiftUI Hello World demo
Create a new SwiftUI project, display 'Hello, World!', and run it in the Simulator. Practice Swift basics: variables, functions, if/for, and @main.
ULO-PROGRAMMING_LANGUAGE-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand SwiftUI as a declarative programming framework where the UI is described by value-driven state, with view updates automatically synchronized to state changes.
CIO-PROGRAMMING_LANGUAGE-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a modular SwiftUI app architecture using a hierarchy of views, each bound to a specific data model, so that the entire user interface can be regenerated with a single state change.
SIO-SWIFT-PROGRAMMING_LANGUAGE-01 · SPECIFIC_IMPL · Bloom: apply
The learner will be able to implement a complete SwiftUI view for a login screen using SwiftUI framework on the SWIFT platform, with observable state and input handling.
ULO-FRONTEND_FRAMEWORKS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of frontend frameworks and libraries as pre-built sets of tools and components that facilitate the creation of user interfaces, including declarative syntax, state management, and reusable views.
CIO-FRONTEND_FRAMEWORKS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for a frontend interface using a modern framework such as SwiftUI, structuring the view hierarchy, defining state bindings, and planning component reuse to achieve responsive layouts.
SIO-SWIFT-FRONTEND_FRAMEWORKS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a user interface component using the SwiftUI framework on the Swift platform, declaring views, applying modifiers, and feeding observable state to render dynamic content.
ULO-ENTRY_POINT-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of an entry point as the designated location in a program where execution begins, including how the platform initializes the application and sets up the main run loop.
CIO-ENTRY_POINT-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for an application entry point in a SwiftUI-based iOS app, defining the App protocol structure, the @main attribute, and the initial scene that hosts the root view.
SIO-SWIFT-ENTRY_POINT-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an application entry point using SwiftUI on the Swift platform, creating an App struct annotated with @main and specifying the initial WindowGroup that presents the first content view.
ULO-DEVELOPMENT_TOOLS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of development tools as software applications that assist developers in creating, debugging, maintaining, and testing code, including simulators, compilers, and integrated development environments.
CIO-DEVELOPMENT_TOOLS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for using development tools on the Swift platform, outlining a workflow that incorporates the iOS Simulator for user interface testing, debugging, and performance analysis within Xcode.
SIO-SWIFT-DEVELOPMENT_TOOLS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a test deployment using the iOS Simulator on the Swift platform, launching a running app, interacting with its interface, and capturing diagnostic logs to validate behavior.
Milestone Build an Arduino blink demo for ESP32
Write a minimal Arduino sketch with setup/loop, toggle an LED, and upload it to your ESP32. This covers C++ syntax and the ESP32 workflow.
ULO-HARDWARE_PLATFORM-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the characteristics of a hardware platform, including its processor, memory, I/O, and software ecosystem compared to general-purpose computers.
CIO-HARDWARE_PLATFORM-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a hardware/software boundary that abstracts the underlying platform and supports interchangeable hardware components.
SIO-SWIFT-HARDWARE_PLATFORM-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a hardware platform driver in Swift that uses an Arduino IDE-compiled firmware via a serial interface.
ULO-PROGRAMMING_LANGUAGE-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand SwiftUI as a declarative programming framework where the UI is described by value-driven state, with view updates automatically synchronized to state changes.
CIO-PROGRAMMING_LANGUAGE-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a modular SwiftUI app architecture using a hierarchy of views, each bound to a specific data model, so that the entire user interface can be regenerated with a single state change.
SIO-SWIFT-PROGRAMMING_LANGUAGE-01 · SPECIFIC_IMPL · Bloom: apply
The learner will be able to implement a complete SwiftUI view for a login screen using SwiftUI framework on the SWIFT platform, with observable state and input handling.
ULO-ENTRY_POINT-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of an entry point as the designated location in a program where execution begins, including how the platform initializes the application and sets up the main run loop.
CIO-ENTRY_POINT-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for an application entry point in a SwiftUI-based iOS app, defining the App protocol structure, the @main attribute, and the initial scene that hosts the root view.
SIO-SWIFT-ENTRY_POINT-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an application entry point using SwiftUI on the Swift platform, creating an App struct annotated with @main and specifying the initial WindowGroup that presents the first content view.
ULO-MAIN_LOOP-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the main loop as a program structure that continuously repeats actions, checking inputs and updating outputs in real time.
CIO-MAIN_LOOP-01 · CONCEPTUAL_IMPL · Bloom: understand
The learner will be able to design a main loop that efficiently handles time-sensitive operations and non-blocking calls to maintain responsiveness.
SIO-SWIFT-MAIN_LOOP-01 · SPECIFIC_IMPL · Bloom: apply
The learner will be able to implement a main loop in Swift that controls hardware by invoking digitalWrite for output, using low-level access through a bridge library.
ULO-DIGITAL_ANALOG_IO-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of digital and analog I/O pins as general-purpose hardware interfaces, where digital pins read or write binary HIGH/LOW states and analog pins read or write continuous voltage levels, while considering resolution and limits.
CIO-DIGITAL_ANALOG_IO-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for an ESP32/Arduino circuit that uses digital and analog I/O pins correctly, specifying which pins read switches, which generate PWM signals, and how to protect components.
SIO-ESP32-DIGITAL_ANALOG_IO-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement digital and analog I/O operations on the ESP32/Arduino platform using the Adafruit_NeoPixel.h library, configuring digital outputs for controlling LED strips and analog inputs for reading sensor values.
Milestone Explore the base-project structure
Read the three source files and identify the MVVM-ish structure of the iOS app and the HTTP handling in the firmware, plus build/run entry points.
ULO-ARCHITECTURE_PATTERN-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of architecture patterns as reusable, high-level structural templates that define how software components interact, separate concerns, and manage dependencies, along with the trade-offs of different pattern choices.
CIO-ARCHITECTURE_PATTERN-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for a SwiftUI-based application by selecting an architecture pattern such as Model-View-ViewModel, defining the responsibilities of each component, specifying the communication flow between view and view model, and ensuring separation of concerns.
SIO-SWIFT-ARCHITECTURE_PATTERN-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an architecture pattern using SwiftUI on the Swift platform by constructing SwiftUI views, observable view model classes, and model objects, and wiring them through bindings and observable state.
ULO-HTTP_PROTOCOL-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the HTTP request-response cycle, including method semantics, header fields, and status code classification.
CIO-HTTP_PROTOCOL-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design an HTTP-based API client that properly handles methods like GET, POST, and PUT, and interprets status codes for error handling.
SIO-SWIFT-HTTP_PROTOCOL-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an HTTP client using URLSession in Swift for making asynchronous network requests and decoding JSON responses.
ULO-FRONTEND_FRAMEWORKS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of frontend frameworks and libraries as pre-built sets of tools and components that facilitate the creation of user interfaces, including declarative syntax, state management, and reusable views.
CIO-FRONTEND_FRAMEWORKS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for a frontend interface using a modern framework such as SwiftUI, structuring the view hierarchy, defining state bindings, and planning component reuse to achieve responsive layouts.
SIO-SWIFT-FRONTEND_FRAMEWORKS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a user interface component using the SwiftUI framework on the Swift platform, declaring views, applying modifiers, and feeding observable state to render dynamic content.
ULO-HARDWARE_PLATFORM-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the characteristics of a hardware platform, including its processor, memory, I/O, and software ecosystem compared to general-purpose computers.
CIO-HARDWARE_PLATFORM-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a hardware/software boundary that abstracts the underlying platform and supports interchangeable hardware components.
SIO-SWIFT-HARDWARE_PLATFORM-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a hardware platform driver in Swift that uses an Arduino IDE-compiled firmware via a serial interface.
ULO-ENTRY_POINT-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of an entry point as the designated location in a program where execution begins, including how the platform initializes the application and sets up the main run loop.
CIO-ENTRY_POINT-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for an application entry point in a SwiftUI-based iOS app, defining the App protocol structure, the @main attribute, and the initial scene that hosts the root view.
SIO-SWIFT-ENTRY_POINT-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an application entry point using SwiftUI on the Swift platform, creating an App struct annotated with @main and specifying the initial WindowGroup that presents the first content view.
Milestone Run the development loop and use Git
Build and run the app in the Simulator, upload firmware to ESP32, use the Serial Monitor for debugging, and practice Git commands (branch, commit, push).
ULO-DEVELOPMENT_TOOLS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of development tools as software applications that assist developers in creating, debugging, maintaining, and testing code, including simulators, compilers, and integrated development environments.
CIO-DEVELOPMENT_TOOLS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for using development tools on the Swift platform, outlining a workflow that incorporates the iOS Simulator for user interface testing, debugging, and performance analysis within Xcode.
SIO-SWIFT-DEVELOPMENT_TOOLS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a test deployment using the iOS Simulator on the Swift platform, launching a running app, interacting with its interface, and capturing diagnostic logs to validate behavior.
ULO-VERSION_CONTROL-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand that version control maintains a history of code changes and supports branching, while the iOS Simulator offers a local execution environment for running and debugging each version.
CIO-VERSION_CONTROL-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a workflow where every feature is developed on a separate branch, and the iOS Simulator is used to validate the build before the branch is merged into the mainline.
SIO-SWIFT-VERSION_CONTROL-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement version control practices by committing changes to a repository and launching the iOS Simulator on the SWIFT platform to verify that each commit behaves as intended.
Milestone Add HTTP endpoint for power toggle
Add /api/power route on ESP32 to update bulbOn state and return current state.
ULO-WEB_SERVER-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand a web server on ESP32/Arduino as an embedded service that listens for HTTP requests, routes them to handlers, and returns responses, as exemplified by the WebServer.h library.
CIO-WEB_SERVER-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a RESTful API for an ESP32 device using the WebServer.h library, including endpoints for sensor data and device control, with proper HTTP methods and response codes.
SIO-ESP32-WEB_SERVER-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a web server on ESP32/Arduino that serves an HTML page and handles AJAX requests using WebServer.h to control an LED.
ULO-JSON_SERIALIZATION-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the mapping between native object graphs and JSON structure, including type conversion and nesting.
CIO-JSON_SERIALIZATION-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a serializable data model that handles optional fields, date formats, and error conditions during deserialization.
SIO-SWIFT-JSON_SERIALIZATION-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement JSON encoding and decoding in Swift using JSONSerialization, converting between custom types and JSON data.
ULO-DIGITAL_ANALOG_IO-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of digital and analog I/O pins as general-purpose hardware interfaces, where digital pins read or write binary HIGH/LOW states and analog pins read or write continuous voltage levels, while considering resolution and limits.
CIO-DIGITAL_ANALOG_IO-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for an ESP32/Arduino circuit that uses digital and analog I/O pins correctly, specifying which pins read switches, which generate PWM signals, and how to protect components.
SIO-ESP32-DIGITAL_ANALOG_IO-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement digital and analog I/O operations on the ESP32/Arduino platform using the Adafruit_NeoPixel.h library, configuring digital outputs for controlling LED strips and analog inputs for reading sensor values.
ULO-HTTP_PROTOCOL-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the HTTP request-response cycle, including method semantics, header fields, and status code classification.
CIO-HTTP_PROTOCOL-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design an HTTP-based API client that properly handles methods like GET, POST, and PUT, and interprets status codes for error handling.
SIO-SWIFT-HTTP_PROTOCOL-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an HTTP client using URLSession in Swift for making asynchronous network requests and decoding JSON responses.
Milestone Implement setPower in iOS service
Implement HTTPBulbService.setPower to POST /api/power and decode the new BulbState.
ULO-HTTP_PROTOCOL-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the HTTP request-response cycle, including method semantics, header fields, and status code classification.
CIO-HTTP_PROTOCOL-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design an HTTP-based API client that properly handles methods like GET, POST, and PUT, and interprets status codes for error handling.
SIO-SWIFT-HTTP_PROTOCOL-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an HTTP client using URLSession in Swift for making asynchronous network requests and decoding JSON responses.
ULO-JSON_SERIALIZATION-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the mapping between native object graphs and JSON structure, including type conversion and nesting.
CIO-JSON_SERIALIZATION-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a serializable data model that handles optional fields, date formats, and error conditions during deserialization.
SIO-SWIFT-JSON_SERIALIZATION-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement JSON encoding and decoding in Swift using JSONSerialization, converting between custom types and JSON data.
ULO-DIGITAL_ANALOG_IO-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of digital and analog I/O pins as general-purpose hardware interfaces, where digital pins read or write binary HIGH/LOW states and analog pins read or write continuous voltage levels, while considering resolution and limits.
CIO-DIGITAL_ANALOG_IO-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for an ESP32/Arduino circuit that uses digital and analog I/O pins correctly, specifying which pins read switches, which generate PWM signals, and how to protect components.
SIO-ESP32-DIGITAL_ANALOG_IO-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement digital and analog I/O operations on the ESP32/Arduino platform using the Adafruit_NeoPixel.h library, configuring digital outputs for controlling LED strips and analog inputs for reading sensor values.
ULO-ARCHITECTURE_PATTERN-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of architecture patterns as reusable, high-level structural templates that define how software components interact, separate concerns, and manage dependencies, along with the trade-offs of different pattern choices.
CIO-ARCHITECTURE_PATTERN-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for a SwiftUI-based application by selecting an architecture pattern such as Model-View-ViewModel, defining the responsibilities of each component, specifying the communication flow between view and view model, and ensuring separation of concerns.
SIO-SWIFT-ARCHITECTURE_PATTERN-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an architecture pattern using SwiftUI on the Swift platform by constructing SwiftUI views, observable view model classes, and model objects, and wiring them through bindings and observable state.
Milestone Add HTTP endpoint for brightness
Add /api/brightness route on ESP32 to parse brightness and update LED.
ULO-WEB_SERVER-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand a web server on ESP32/Arduino as an embedded service that listens for HTTP requests, routes them to handlers, and returns responses, as exemplified by the WebServer.h library.
CIO-WEB_SERVER-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a RESTful API for an ESP32 device using the WebServer.h library, including endpoints for sensor data and device control, with proper HTTP methods and response codes.
SIO-ESP32-WEB_SERVER-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a web server on ESP32/Arduino that serves an HTML page and handles AJAX requests using WebServer.h to control an LED.
ULO-JSON_SERIALIZATION-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the mapping between native object graphs and JSON structure, including type conversion and nesting.
CIO-JSON_SERIALIZATION-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a serializable data model that handles optional fields, date formats, and error conditions during deserialization.
SIO-SWIFT-JSON_SERIALIZATION-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement JSON encoding and decoding in Swift using JSONSerialization, converting between custom types and JSON data.
ULO-DIGITAL_ANALOG_IO-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of digital and analog I/O pins as general-purpose hardware interfaces, where digital pins read or write binary HIGH/LOW states and analog pins read or write continuous voltage levels, while considering resolution and limits.
CIO-DIGITAL_ANALOG_IO-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for an ESP32/Arduino circuit that uses digital and analog I/O pins correctly, specifying which pins read switches, which generate PWM signals, and how to protect components.
SIO-ESP32-DIGITAL_ANALOG_IO-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement digital and analog I/O operations on the ESP32/Arduino platform using the Adafruit_NeoPixel.h library, configuring digital outputs for controlling LED strips and analog inputs for reading sensor values.
ULO-HTTP_PROTOCOL-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the HTTP request-response cycle, including method semantics, header fields, and status code classification.
CIO-HTTP_PROTOCOL-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design an HTTP-based API client that properly handles methods like GET, POST, and PUT, and interprets status codes for error handling.
SIO-SWIFT-HTTP_PROTOCOL-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an HTTP client using URLSession in Swift for making asynchronous network requests and decoding JSON responses.
Milestone Implement setBrightness in iOS service
Implement HTTPBulbService.setBrightness to POST /api/brightness and decode the result.
ULO-HTTP_PROTOCOL-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the HTTP request-response cycle, including method semantics, header fields, and status code classification.
CIO-HTTP_PROTOCOL-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design an HTTP-based API client that properly handles methods like GET, POST, and PUT, and interprets status codes for error handling.
SIO-SWIFT-HTTP_PROTOCOL-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an HTTP client using URLSession in Swift for making asynchronous network requests and decoding JSON responses.
ULO-JSON_SERIALIZATION-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the mapping between native object graphs and JSON structure, including type conversion and nesting.
CIO-JSON_SERIALIZATION-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a serializable data model that handles optional fields, date formats, and error conditions during deserialization.
SIO-SWIFT-JSON_SERIALIZATION-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement JSON encoding and decoding in Swift using JSONSerialization, converting between custom types and JSON data.
ULO-DIGITAL_ANALOG_IO-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of digital and analog I/O pins as general-purpose hardware interfaces, where digital pins read or write binary HIGH/LOW states and analog pins read or write continuous voltage levels, while considering resolution and limits.
CIO-DIGITAL_ANALOG_IO-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for an ESP32/Arduino circuit that uses digital and analog I/O pins correctly, specifying which pins read switches, which generate PWM signals, and how to protect components.
SIO-ESP32-DIGITAL_ANALOG_IO-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement digital and analog I/O operations on the ESP32/Arduino platform using the Adafruit_NeoPixel.h library, configuring digital outputs for controlling LED strips and analog inputs for reading sensor values.
ULO-ARCHITECTURE_PATTERN-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of architecture patterns as reusable, high-level structural templates that define how software components interact, separate concerns, and manage dependencies, along with the trade-offs of different pattern choices.
CIO-ARCHITECTURE_PATTERN-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for a SwiftUI-based application by selecting an architecture pattern such as Model-View-ViewModel, defining the responsibilities of each component, specifying the communication flow between view and view model, and ensuring separation of concerns.
SIO-SWIFT-ARCHITECTURE_PATTERN-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an architecture pattern using SwiftUI on the Swift platform by constructing SwiftUI views, observable view model classes, and model objects, and wiring them through bindings and observable state.
Milestone Add HTTP endpoint for color
Add /api/color route on ESP32 to parse red, green, blue and update LED.
ULO-WEB_SERVER-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand a web server on ESP32/Arduino as an embedded service that listens for HTTP requests, routes them to handlers, and returns responses, as exemplified by the WebServer.h library.
CIO-WEB_SERVER-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a RESTful API for an ESP32 device using the WebServer.h library, including endpoints for sensor data and device control, with proper HTTP methods and response codes.
SIO-ESP32-WEB_SERVER-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a web server on ESP32/Arduino that serves an HTML page and handles AJAX requests using WebServer.h to control an LED.
ULO-JSON_SERIALIZATION-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the mapping between native object graphs and JSON structure, including type conversion and nesting.
CIO-JSON_SERIALIZATION-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a serializable data model that handles optional fields, date formats, and error conditions during deserialization.
SIO-SWIFT-JSON_SERIALIZATION-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement JSON encoding and decoding in Swift using JSONSerialization, converting between custom types and JSON data.
ULO-DATA_TYPE-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of data types as classifications that specify the possible values, storage size, and operations permissible for a piece of data within a program, including type safety and type inference.
CIO-DATA_TYPE-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution that defines a data type for representing web server route handlers, specifying the callback signature, input parameters, and return type to enable the WebServer.on method to map routes appropriately.
SIO-SWIFT-DATA_TYPE-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a data type using the WebServer.on method on the Swift platform, defining a structured closure or delegate that receives HTTP request data and returns a response, and registering it with the WebServer.on API.
ULO-HTTP_PROTOCOL-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the HTTP request-response cycle, including method semantics, header fields, and status code classification.
CIO-HTTP_PROTOCOL-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design an HTTP-based API client that properly handles methods like GET, POST, and PUT, and interprets status codes for error handling.
SIO-SWIFT-HTTP_PROTOCOL-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an HTTP client using URLSession in Swift for making asynchronous network requests and decoding JSON responses.
Milestone Implement setColor in iOS service
Implement HTTPBulbService.setColor to POST /api/color with RGB values and decode response.
ULO-HTTP_PROTOCOL-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the HTTP request-response cycle, including method semantics, header fields, and status code classification.
CIO-HTTP_PROTOCOL-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design an HTTP-based API client that properly handles methods like GET, POST, and PUT, and interprets status codes for error handling.
SIO-SWIFT-HTTP_PROTOCOL-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an HTTP client using URLSession in Swift for making asynchronous network requests and decoding JSON responses.
ULO-JSON_SERIALIZATION-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the mapping between native object graphs and JSON structure, including type conversion and nesting.
CIO-JSON_SERIALIZATION-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a serializable data model that handles optional fields, date formats, and error conditions during deserialization.
SIO-SWIFT-JSON_SERIALIZATION-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement JSON encoding and decoding in Swift using JSONSerialization, converting between custom types and JSON data.
ULO-DATA_TYPE-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of data types as classifications that specify the possible values, storage size, and operations permissible for a piece of data within a program, including type safety and type inference.
CIO-DATA_TYPE-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution that defines a data type for representing web server route handlers, specifying the callback signature, input parameters, and return type to enable the WebServer.on method to map routes appropriately.
SIO-SWIFT-DATA_TYPE-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a data type using the WebServer.on method on the Swift platform, defining a structured closure or delegate that receives HTTP request data and returns a response, and registering it with the WebServer.on API.
ULO-ARCHITECTURE_PATTERN-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of architecture patterns as reusable, high-level structural templates that define how software components interact, separate concerns, and manage dependencies, along with the trade-offs of different pattern choices.
CIO-ARCHITECTURE_PATTERN-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for a SwiftUI-based application by selecting an architecture pattern such as Model-View-ViewModel, defining the responsibilities of each component, specifying the communication flow between view and view model, and ensuring separation of concerns.
SIO-SWIFT-ARCHITECTURE_PATTERN-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an architecture pattern using SwiftUI on the Swift platform by constructing SwiftUI views, observable view model classes, and model objects, and wiring them through bindings and observable state.
Milestone Add HTTP endpoint for effects
Add /api/effect route on ESP32 to parse effect string and update LED rendering.
ULO-WEB_SERVER-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand a web server on ESP32/Arduino as an embedded service that listens for HTTP requests, routes them to handlers, and returns responses, as exemplified by the WebServer.h library.
CIO-WEB_SERVER-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a RESTful API for an ESP32 device using the WebServer.h library, including endpoints for sensor data and device control, with proper HTTP methods and response codes.
SIO-ESP32-WEB_SERVER-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a web server on ESP32/Arduino that serves an HTML page and handles AJAX requests using WebServer.h to control an LED.
ULO-JSON_SERIALIZATION-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the mapping between native object graphs and JSON structure, including type conversion and nesting.
CIO-JSON_SERIALIZATION-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a serializable data model that handles optional fields, date formats, and error conditions during deserialization.
SIO-SWIFT-JSON_SERIALIZATION-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement JSON encoding and decoding in Swift using JSONSerialization, converting between custom types and JSON data.
ULO-LIGHT_EFFECTS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand how light effects are programmed via digital outputs and timing sequences to create patterns and animations.
CIO-LIGHT_EFFECTS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a light effect control system that exposes an HTTP endpoint to adjust parameters like color and speed.
SIO-SWIFT-LIGHT_EFFECTS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a light effect controller in Swift that uses WebServer.on to handle HTTP requests and drive LED patterns.
ULO-HTTP_PROTOCOL-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the HTTP request-response cycle, including method semantics, header fields, and status code classification.
CIO-HTTP_PROTOCOL-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design an HTTP-based API client that properly handles methods like GET, POST, and PUT, and interprets status codes for error handling.
SIO-SWIFT-HTTP_PROTOCOL-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an HTTP client using URLSession in Swift for making asynchronous network requests and decoding JSON responses.
Milestone Implement setEffect in iOS service
Implement HTTPBulbService.setEffect to POST /api/effect and decode the updated state.
ULO-HTTP_PROTOCOL-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the HTTP request-response cycle, including method semantics, header fields, and status code classification.
CIO-HTTP_PROTOCOL-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design an HTTP-based API client that properly handles methods like GET, POST, and PUT, and interprets status codes for error handling.
SIO-SWIFT-HTTP_PROTOCOL-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an HTTP client using URLSession in Swift for making asynchronous network requests and decoding JSON responses.
ULO-JSON_SERIALIZATION-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the mapping between native object graphs and JSON structure, including type conversion and nesting.
CIO-JSON_SERIALIZATION-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a serializable data model that handles optional fields, date formats, and error conditions during deserialization.
SIO-SWIFT-JSON_SERIALIZATION-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement JSON encoding and decoding in Swift using JSONSerialization, converting between custom types and JSON data.
ULO-LIGHT_EFFECTS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand how light effects are programmed via digital outputs and timing sequences to create patterns and animations.
CIO-LIGHT_EFFECTS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a light effect control system that exposes an HTTP endpoint to adjust parameters like color and speed.
SIO-SWIFT-LIGHT_EFFECTS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a light effect controller in Swift that uses WebServer.on to handle HTTP requests and drive LED patterns.
ULO-ARCHITECTURE_PATTERN-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of architecture patterns as reusable, high-level structural templates that define how software components interact, separate concerns, and manage dependencies, along with the trade-offs of different pattern choices.
CIO-ARCHITECTURE_PATTERN-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for a SwiftUI-based application by selecting an architecture pattern such as Model-View-ViewModel, defining the responsibilities of each component, specifying the communication flow between view and view model, and ensuring separation of concerns.
SIO-SWIFT-ARCHITECTURE_PATTERN-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an architecture pattern using SwiftUI on the Swift platform by constructing SwiftUI views, observable view model classes, and model objects, and wiring them through bindings and observable state.
Milestone Replace mock service with real HTTP service
Swap MockBulbService for HTTPBulbService in ContentView to use the actual ESP32 REST API.
ULO-HTTP_PROTOCOL-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the HTTP request-response cycle, including method semantics, header fields, and status code classification.
CIO-HTTP_PROTOCOL-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design an HTTP-based API client that properly handles methods like GET, POST, and PUT, and interprets status codes for error handling.
SIO-SWIFT-HTTP_PROTOCOL-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement an HTTP client using URLSession in Swift for making asynchronous network requests and decoding JSON responses.
Milestone Fetch state on launch
Call service.getState() in the .task modifier to retrieve power, brightness, color, and effect from the bulb.
ULO-STATE_MANAGEMENT-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand state management as the practice of storing, reading, and updating application data in a controlled way, specifically through the getState mechanism which exposes a read-only snapshot of current state and triggers subscriptions on update.
CIO-STATE_MANAGEMENT-01 · CONCEPTUAL_IMPL · Bloom: understand
The learner will be able to design a centralized state management solution for a Swift application, using getState as the single source of truth and defining action handlers to modify state immutably.
SIO-SWIFT-STATE_MANAGEMENT-01 · SPECIFIC_IMPL · Bloom: apply
The learner will be able to implement a reactive state container in Swift using the getState keyword to expose state to multiple views, ensuring that every state change causes the subscribed interface to refresh.
Phase 3 BUILD MVP
A runnable product from the start (minimal UI + logic + data)
Milestone Bind toggle to HTTP power service
Replace mock service with HTTPBulbService and wire the Toggle to call setPower.
ULO-FRONTEND_FRAMEWORKS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of frontend frameworks and libraries as pre-built sets of tools and components that facilitate the creation of user interfaces, including declarative syntax, state management, and reusable views.
CIO-FRONTEND_FRAMEWORKS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for a frontend interface using a modern framework such as SwiftUI, structuring the view hierarchy, defining state bindings, and planning component reuse to achieve responsive layouts.
SIO-SWIFT-FRONTEND_FRAMEWORKS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a user interface component using the SwiftUI framework on the Swift platform, declaring views, applying modifiers, and feeding observable state to render dynamic content.
ULO-ASYNC_OPERATIONS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of asynchronous operations as units of work that execute concurrently without blocking the main thread, including how structured concurrency manages them through child tasks, cancellation, and prioritization.
CIO-ASYNC_OPERATIONS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for performing asynchronous operations using Swift concurrency, illustrating how to create and manage task groups, define dependent operations, handle cancellation, and integrate with the main actor for UI updates.
SIO-SWIFT-ASYNC_OPERATIONS-01 · SPECIFIC_IMPL · Bloom: apply
The learner will be able to implement an asynchronous operation using the Task keyword on the Swift platform, writing a concurrency-aware function that starts a task, awaits its result, handles errors, and updates the UI on the main thread.
ULO-DIGITAL_ANALOG_IO-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of digital and analog I/O pins as general-purpose hardware interfaces, where digital pins read or write binary HIGH/LOW states and analog pins read or write continuous voltage levels, while considering resolution and limits.
CIO-DIGITAL_ANALOG_IO-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for an ESP32/Arduino circuit that uses digital and analog I/O pins correctly, specifying which pins read switches, which generate PWM signals, and how to protect components.
SIO-ESP32-DIGITAL_ANALOG_IO-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement digital and analog I/O operations on the ESP32/Arduino platform using the Adafruit_NeoPixel.h library, configuring digital outputs for controlling LED strips and analog inputs for reading sensor values.
Milestone Bind slider to HTTP brightness service
Connect the Slider's value changes to call setBrightness via the HTTP service.
ULO-FRONTEND_FRAMEWORKS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of frontend frameworks and libraries as pre-built sets of tools and components that facilitate the creation of user interfaces, including declarative syntax, state management, and reusable views.
CIO-FRONTEND_FRAMEWORKS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for a frontend interface using a modern framework such as SwiftUI, structuring the view hierarchy, defining state bindings, and planning component reuse to achieve responsive layouts.
SIO-SWIFT-FRONTEND_FRAMEWORKS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a user interface component using the SwiftUI framework on the Swift platform, declaring views, applying modifiers, and feeding observable state to render dynamic content.
ULO-ASYNC_OPERATIONS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of asynchronous operations as units of work that execute concurrently without blocking the main thread, including how structured concurrency manages them through child tasks, cancellation, and prioritization.
CIO-ASYNC_OPERATIONS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for performing asynchronous operations using Swift concurrency, illustrating how to create and manage task groups, define dependent operations, handle cancellation, and integrate with the main actor for UI updates.
SIO-SWIFT-ASYNC_OPERATIONS-01 · SPECIFIC_IMPL · Bloom: apply
The learner will be able to implement an asynchronous operation using the Task keyword on the Swift platform, writing a concurrency-aware function that starts a task, awaits its result, handles errors, and updates the UI on the main thread.
ULO-DIGITAL_ANALOG_IO-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of digital and analog I/O pins as general-purpose hardware interfaces, where digital pins read or write binary HIGH/LOW states and analog pins read or write continuous voltage levels, while considering resolution and limits.
CIO-DIGITAL_ANALOG_IO-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for an ESP32/Arduino circuit that uses digital and analog I/O pins correctly, specifying which pins read switches, which generate PWM signals, and how to protect components.
SIO-ESP32-DIGITAL_ANALOG_IO-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement digital and analog I/O operations on the ESP32/Arduino platform using the Adafruit_NeoPixel.h library, configuring digital outputs for controlling LED strips and analog inputs for reading sensor values.
Milestone Bind ColorPicker to service
Wire ColorPicker selection in ContentView to call service.setColor with RGB values.
ULO-FRONTEND_FRAMEWORKS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of frontend frameworks and libraries as pre-built sets of tools and components that facilitate the creation of user interfaces, including declarative syntax, state management, and reusable views.
CIO-FRONTEND_FRAMEWORKS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for a frontend interface using a modern framework such as SwiftUI, structuring the view hierarchy, defining state bindings, and planning component reuse to achieve responsive layouts.
SIO-SWIFT-FRONTEND_FRAMEWORKS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a user interface component using the SwiftUI framework on the Swift platform, declaring views, applying modifiers, and feeding observable state to render dynamic content.
ULO-DATA_TYPE-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of data types as classifications that specify the possible values, storage size, and operations permissible for a piece of data within a program, including type safety and type inference.
CIO-DATA_TYPE-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution that defines a data type for representing web server route handlers, specifying the callback signature, input parameters, and return type to enable the WebServer.on method to map routes appropriately.
SIO-SWIFT-DATA_TYPE-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a data type using the WebServer.on method on the Swift platform, defining a structured closure or delegate that receives HTTP request data and returns a response, and registering it with the WebServer.on API.
Milestone Extract RGB from Color selection
Add helper in ContentView to convert SwiftUI Color to RGB components using UIColor.
ULO-FRONTEND_FRAMEWORKS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of frontend frameworks and libraries as pre-built sets of tools and components that facilitate the creation of user interfaces, including declarative syntax, state management, and reusable views.
CIO-FRONTEND_FRAMEWORKS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for a frontend interface using a modern framework such as SwiftUI, structuring the view hierarchy, defining state bindings, and planning component reuse to achieve responsive layouts.
SIO-SWIFT-FRONTEND_FRAMEWORKS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a user interface component using the SwiftUI framework on the Swift platform, declaring views, applying modifiers, and feeding observable state to render dynamic content.
ULO-DATA_TYPE-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of data types as classifications that specify the possible values, storage size, and operations permissible for a piece of data within a program, including type safety and type inference.
CIO-DATA_TYPE-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution that defines a data type for representing web server route handlers, specifying the callback signature, input parameters, and return type to enable the WebServer.on method to map routes appropriately.
SIO-SWIFT-DATA_TYPE-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a data type using the WebServer.on method on the Swift platform, defining a structured closure or delegate that receives HTTP request data and returns a response, and registering it with the WebServer.on API.
Milestone Bind Picker to HTTP effect service
Connect the Picker selection changes to call setEffect via the HTTP service.
ULO-FRONTEND_FRAMEWORKS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of frontend frameworks and libraries as pre-built sets of tools and components that facilitate the creation of user interfaces, including declarative syntax, state management, and reusable views.
CIO-FRONTEND_FRAMEWORKS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for a frontend interface using a modern framework such as SwiftUI, structuring the view hierarchy, defining state bindings, and planning component reuse to achieve responsive layouts.
SIO-SWIFT-FRONTEND_FRAMEWORKS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a user interface component using the SwiftUI framework on the Swift platform, declaring views, applying modifiers, and feeding observable state to render dynamic content.
ULO-LIGHT_EFFECTS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand how light effects are programmed via digital outputs and timing sequences to create patterns and animations.
CIO-LIGHT_EFFECTS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a light effect control system that exposes an HTTP endpoint to adjust parameters like color and speed.
SIO-SWIFT-LIGHT_EFFECTS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a light effect controller in Swift that uses WebServer.on to handle HTTP requests and drive LED patterns.
Phase 4 EXPAND
Make it real: real APIs, file persistence, filters
Milestone Publish power state via MQTT
Publish updated state to MQTT topic after power change for real-time sync.
ULO-IOT_MESSAGING_PROTOCOLS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the publish-subscribe model of MQTT, where clients communicate via topics through a broker without direct coupling.
CIO-IOT_MESSAGING_PROTOCOLS-01 · CONCEPTUAL_IMPL · Bloom: understand
The learner will be able to design an MQTT-based messaging system for IoT devices, defining topics and QoS levels to balance reliability and bandwidth.
SIO-ESP32-IOT_MESSAGING_PROTOCOLS-01 · SPECIFIC_IMPL · Bloom: apply
The learner will be able to implement an MQTT client using PubSubClient.h on ESP32/Arduino to publish sensor data and subscribe to control commands.
Milestone Clamp brightness range on firmware
Add constraint on firmware to keep brightness value between 0 and 100.
ULO-CORE_LIBRARIES-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of core libraries as the essential set of frameworks and APIs that provide fundamental functionality such as data serialization, file management, networking, and value types in a programming ecosystem.
CIO-CORE_LIBRARIES-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution that leverages the Foundation library on the Swift platform, choosing appropriate data structures, date formatting, JSON encoding and decoding, and file coordination to meet an application's requirements.
SIO-SWIFT-CORE_LIBRARIES-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a functional component using the Foundation library on the Swift platform, importing Foundation and using its APIs to handle data persistence, network requests, or text processing.
ULO-DIGITAL_ANALOG_IO-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of digital and analog I/O pins as general-purpose hardware interfaces, where digital pins read or write binary HIGH/LOW states and analog pins read or write continuous voltage levels, while considering resolution and limits.
CIO-DIGITAL_ANALOG_IO-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for an ESP32/Arduino circuit that uses digital and analog I/O pins correctly, specifying which pins read switches, which generate PWM signals, and how to protect components.
SIO-ESP32-DIGITAL_ANALOG_IO-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement digital and analog I/O operations on the ESP32/Arduino platform using the Adafruit_NeoPixel.h library, configuring digital outputs for controlling LED strips and analog inputs for reading sensor values.
Milestone Implement breathing animation
Make breathe effect animate brightness using a sine wave over time on the ESP32.
ULO-CORE_LIBRARIES-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of core libraries as the essential set of frameworks and APIs that provide fundamental functionality such as data serialization, file management, networking, and value types in a programming ecosystem.
CIO-CORE_LIBRARIES-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution that leverages the Foundation library on the Swift platform, choosing appropriate data structures, date formatting, JSON encoding and decoding, and file coordination to meet an application's requirements.
SIO-SWIFT-CORE_LIBRARIES-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a functional component using the Foundation library on the Swift platform, importing Foundation and using its APIs to handle data persistence, network requests, or text processing.
ULO-DIGITAL_ANALOG_IO-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of digital and analog I/O pins as general-purpose hardware interfaces, where digital pins read or write binary HIGH/LOW states and analog pins read or write continuous voltage levels, while considering resolution and limits.
CIO-DIGITAL_ANALOG_IO-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution for an ESP32/Arduino circuit that uses digital and analog I/O pins correctly, specifying which pins read switches, which generate PWM signals, and how to protect components.
SIO-ESP32-DIGITAL_ANALOG_IO-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement digital and analog I/O operations on the ESP32/Arduino platform using the Adafruit_NeoPixel.h library, configuring digital outputs for controlling LED strips and analog inputs for reading sensor values.
ULO-LIGHT_EFFECTS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand how light effects are programmed via digital outputs and timing sequences to create patterns and animations.
CIO-LIGHT_EFFECTS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a light effect control system that exposes an HTTP endpoint to adjust parameters like color and speed.
SIO-SWIFT-LIGHT_EFFECTS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a light effect controller in Swift that uses WebServer.on to handle HTTP requests and drive LED patterns.
Milestone Implement rainbow cycle animation
Make rainbow effect cycle colors by shifting wheel hue based on elapsed time.
ULO-CORE_LIBRARIES-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand the nature of core libraries as the essential set of frameworks and APIs that provide fundamental functionality such as data serialization, file management, networking, and value types in a programming ecosystem.
CIO-CORE_LIBRARIES-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a model solution that leverages the Foundation library on the Swift platform, choosing appropriate data structures, date formatting, JSON encoding and decoding, and file coordination to meet an application's requirements.
SIO-SWIFT-CORE_LIBRARIES-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a functional component using the Foundation library on the Swift platform, importing Foundation and using its APIs to handle data persistence, network requests, or text processing.
ULO-LIGHT_EFFECTS-01 · UNIVERSAL · Bloom: understand
The learner will be able to understand how light effects are programmed via digital outputs and timing sequences to create patterns and animations.
CIO-LIGHT_EFFECTS-01 · CONCEPTUAL_IMPL · Bloom: apply
The learner will be able to design a light effect control system that exposes an HTTP endpoint to adjust parameters like color and speed.
SIO-SWIFT-LIGHT_EFFECTS-01 · SPECIFIC_IMPL · Bloom: analyze
The learner will be able to implement a light effect controller in Swift that uses WebServer.on to handle HTTP requests and drive LED patterns.