Protyper was a small demo I created to quickly prototype UI designs on... the command line. Yes, you heard that right.
It mimicked the behavior of UIKit elements with similar logic, such as a first responder chain, table view delegates/data sources, and subview management.
For example, if I wanted to show a tab bar that contained a table view, it would look something like this:
```
Home
––––––––––––––––––––––––––––––––––––––––
Tasks:
- Do laundry ✓
- Get groceries
+ Task
Notes:
+ Note
––––––––––––––––––––––––––––––––––––––––
Home Settings
––––––––––––––––––––––––––––––––––––––––
```
Things like the padding of the tabs, navigation, and buttons, were all handled via the first responder chain (navigable by keyboard), and the window would redraw. The equivalent code was:
```
let home = ViewController(title: \"Home\")
let tableView = TableView()
tableView.dataSource = dataSource // I created this separately
home.view = tableView
let homeNav = NavigationController(root: home)
let settings = ViewController(title: \"Settings\")
let tabController = TabBarController(tabs: [homeNav, settings])
let mainWindow = Window()
mainWindow.rootViewController = tabController
mainWindow.draw()
```
I originally designed it with testability in mind (comparing text is easy!), as well as making the UI layer not so strongly tied to UIKit. After all, if I could write the code first in Protyper, then it would be more modular.
It was a fun project, but ultimately became superseded by SwiftUI. Goodbye Protyper, may you rest in peace.