@@ -1,6 +1,6 @@
11+++
22title = "Clojure Urbit Client"
3−date = "2021-10-07"
3+date = "2021-10-25"
44[taxonomies]
55grant_type = ["Proposal"]
66grant_category = ["App Dev - Other"]
@@ -8,7 +8,7 @@ grant_category = ["App Dev - Other"]
88image = ""
99description = "Urbit client baasd on the Clojure programming language"
1010reward = 3
11−assignee = ""
11+assignee = "~sorted-falnyd"
1212id = ""
1313completed = false
1414link = ""
@@ -46,12 +46,74 @@ Further work might justify more stars.
4646
4747### Milestone 1 - Create client and send/recieve messages
4848
49−Expected completion:
49+Expected completion: 4 - 5 weeks
5050
5151Payment: 1 star
5252
53+- SSE client (10)
54+ - Build a fully [specification](https://html.spec.whatwg.org/multipage/server-sent-events.html) compliant SSE client (10)
55+ - Have zero external dependencies besides Clojure and JVM
56+ - Expose low-level callback-based API
57+ - Distribute to Clojars
58+- Clojure Airlock API (35-40)
59+ - Study [Urbit's API](https://urbit.org/docs/arvo/eyre/external-api-ref) (2)
60+ - Setting up a connection
61+ - Creating subscriptions
62+ - Interacting with specific applications
63+ - Design an Airlock client (3) + review + fixes (?1)
64+ - Design principles
65+ - Data driven API: send data, recieve data
66+ - Support concurrency
67+ - Build up abstractions
68+ - Event driven
69+ - Interactivity and introspection are a must
70+ - Core implementation (10)
71+ - Handle primitives such as connections, acks and subscriptions
72+ - Application level implementation (20-25)
73+ - Chat (10-15) << Start here
74+ - Notebook (5)
75+ - Index (5)
76+ - Distribute to Clojars
77+
5378### Milestone 2 - Develop and deploy GUI
5479
55−Expected completion:
80+Expected completion: 5 - 6 weeks
5681
5782Payment: 2 stars
83+
84+- JVM Clojure GUI (25-30) initial phase, (20-30+) secondary phase, total (45-60)
85+ - Design and define a UI + review (3)
86+ - Prioritize programmatic abstraction and interaction. They can always enable user experience and features. e.i. correctness > features.
87+ - Prioritize usability over aesthetics: I am not a designer, but if I make something useful which works a designer can easily contribute to it.
88+ - Interactivity: UI is Clojure process, can be modified and interacted with programmatically, live.
89+ - Stateless design?
90+ - Initial implementation should already be useful
91+ - Features and functionality (tagged by order)
92+ - Log in #A
93+ - Local and remote processes #B
94+ - Basic configuration #A
95+ - Full configuration #B
96+ - Chat #A
97+ - Notebooks #B
98+ - Index #B
99+ - Group navigation #A
100+ - Background connections #B
101+ - Local cache #C
102+ - Search? #C
103+ - Media embedding #A
104+ - Links embedding #B
105+ - Markdown rendering #C
106+ - GUI layout controls #C
107+ - Log levels #A
108+ - REPL interaction #A
109+ - Keyboard and mouse navigation #B
110+ - Technology survey (2)
111+ - Seesaw (Swing)
112+ - cljfx (JavaFX)
113+ - Membrane (backend agnostic, can target mobile in future!)
114+ - SKIJA?
115+ - #A Initial implementation (15-20)
116+ - Distribution and packaging (5)
117+ - Support Windows, OSX, Linux
118+ - #B Intermediary implementation (20)
119+ - #C Bells & whistles (10+)