@@ -0,0 +1,124 @@
3+title = "Modernize Urbit React Developer Documentation"
7+grant_type = ["Proposal"]
8+grant_category = ["Documentation"]
12+description = "Modernize Urbit React Developer Documentation"
14+assignee = ["~sidnym-ladrut"]
15+champion = ["~lagrev-nocfep"]
26+The front-end React examples provided in Urbit's developer documentation (i.e. the ["Chat Lightning Tutorial"][ex-1] and ["App School II: Full-Stack"][ex-2] pages) use legacy, class-based React patterns that have largely been phased out over the past few years in favor of [modern, hook-based React style][re-hook]. These examples should be refactored to use this modern style to improve the developer onboarding experience (as increasing amounts of [React learning materials use hooks][re-tut]) and future-proof the material presented (as the official React documentation eventually migrates to [primarily present the modern style][re-docs]).
34+The content for the Urbit React examples is split across two repositories:
38+1. [urbit/doc-examples][git-ex]: Contains the source code for the React examples.
40+2. [urbit/developers.urbit.org][git-org]: Contains the web-hosted documentation for the React examples, which can be viewed at [developers.urbit.org](developers.urbit.org).
44+Within these repositories, the content associated with the following examples needs to be updated to the modern React style:
48+1. ["Chat Lightning Tutorial"][ex-1]: Will require edits primarily in the source references, particularly those in the ["Additional commentary" section][ex-1-edit].
50+2. ["App School II: Full-Stack"][ex-2]: Will require nearly a full rewrite, though many source references will look similar.
54+## Features in scope ##
58+- Refactor the ["Chat" example][git-chat-src] to replace React classes with React hooks wherever possible.
60+- Refactor the ["Journal" example][git-jour-src] to replace React classes with React hooks wherever possible.
62+- Revise the ["Chat Lightning Tutorial"][git-chat-doc] documentation to update source references and add commentary to any new and nontrivial references.
64+- Rework the ["App School II: Full-Stack"][git-jour-doc] documentation to explain the flow and key operations (i.e. peeks, pokes, and subscriptions) of the refactored React "Journal" code.
68+## Implementation Notes ##
72+The refactored React examples will take architectural inspiration and library
74+cues from popular React applications in the Urbit ecosystem (e.g. [`%landscape`][git-landscape] and [`%sphinx`][git-sphinx]) to further improve their utility for learning developers.
78+## Milestones and Compensation ##
82+The grantee will receive 1 star upon fulfillment of this grant.
88+[git-ex]: https://github.com/urbit/docs-examples
90+[git-org]: https://github.com/urbit/developers.urbit.org
92+[git-chat-src]: https://github.com/urbit/docs-examples/blob/main/chat-app/react-frontend/src/App.jsx
94+[git-chat-doc]: https://github.com/urbit/developers.urbit.org/blob/main/content/guides/quickstart/chat-guide.md
96+[git-jour-src]: https://github.com/urbit/docs-examples/blob/main/journal-app/ui/src/App.js
98+[git-jour-doc]: https://github.com/urbit/developers.urbit.org/blob/main/content/guides/core/app-school-full-stack/7-app-logic.md
100+[git-landscape]: https://github.com/tloncorp/landscape-apps
102+[git-sphinx]: https://github.com/arthyn/sphinx
106+[re-hook]: https://reactjs.org/blog/2019/02/06/react-v16.8.0.html
108+[re-tut]: https://beta.reactjs.org/learn/tutorial-tic-tac-toe
110+[re-docs]: https://beta.reactjs.org/
114+[ex-1]: https://developers.urbit.org/guides/quickstart/chat-guide
116+[ex-1-edit]: https://developers.urbit.org/guides/quickstart/chat-guide#additional-commentary
118+[ex-2]: https://developers.urbit.org/guides/core/app-school-full-stack/7-app-logic
120+[ex-2-get]: https://developers.urbit.org/guides/core/app-school-full-stack/7-app-logic#getting-entries
122+[ex-2-sub]: https://developers.urbit.org/guides/core/app-school-full-stack/7-app-logic#subscription
124+[ex-2-add]: https://developers.urbit.org/guides/core/app-school-full-stack/7-app-logic#add-edit-delete