on master help sign in
Merge remote-tracking branch 'origin/grants' into mp/port
5c11f5aMatilde Park
config.toml+5
@@ -11,6 +11,11 @@ compile_sass = true
11# Whether to generate a RSS feed automatically
11# Whether to generate a RSS feed automatically
12generate_feed = true
12generate_feed = true
13build_search_index = true
13build_search_index = true
14+taxonomies = [
15+ { name = "grant_type" },
16+ { name = "grant_category" },
17+ { name = "post_type" }
18+]
14feed_filename = "rss.xml"
19feed_filename = "rss.xml"
15
20
16[markdown]
21[markdown]
content/blog/gifts-q3-2020.md+2
@@ -2,6 +2,8 @@
2title = "Gifts Q3 2020"
2title = "Gifts Q3 2020"
3date = 2020-09-23
3date = 2020-09-23
4description = "Twice a year we distribute address space to those that have made valuable contributions to Urbit. Now called our Gifts program, the gifting of address space has been part of Urbit long before we had a grants program."
4description = "Twice a year we distribute address space to those that have made valuable contributions to Urbit. Now called our Gifts program, the gifting of address space has been part of Urbit long before we had a grants program."
5+[taxonomies]
6+post_type = ["gifts"]
5[extra]
7[extra]
6author = "Josh Lehman"
8author = "Josh Lehman"
7ship = "~wolref-podlex"
9ship = "~wolref-podlex"
content/blog/urbit-grants-and-mid-2019-gifts.md+2
@@ -3,6 +3,8 @@ title = "Urbit Grants and mid-2019 Gifts"
3date = 2019-06-10
3date = 2019-06-10
4description = "Announcing an upcoming Urbit grants program and star gifts for Mid-2019."
4description = "Announcing an upcoming Urbit grants program and star gifts for Mid-2019."
5aliases = ["/posts/essays/urbit-grants-and-mid-2019-gifts", "/posts/urbit-grants-and-mid-2019-gifts"]
5aliases = ["/posts/essays/urbit-grants-and-mid-2019-gifts", "/posts/urbit-grants-and-mid-2019-gifts"]
6+[taxonomies]
7+post_type = ["gifts"]
6[extra]
8[extra]
7author = "Galen Wolfe-Pauly + Alex Matzner"
9author = "Galen Wolfe-Pauly + Alex Matzner"
8ship = "~ravmel-ropdyl + ~mignyt-mogseb"
10ship = "~ravmel-ropdyl + ~mignyt-mogseb"
content/grants/-smol-future-sustained-knowledge-sharing-and-marketing.mdnew file+92
@@ -0,0 +1,92 @@
1++++
2+title = "-=[smol future]=- Sustained Knowledge Sharing and Marketing"
3+date = 2021-01-15
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Create sustained documentation and marketing efforts that will support and encourage new users to run Urbit on their own RPi devices."
10+reward = 10
11+assignee = "~naltyc-wornes (dasfeb.industries)"
12+id = "1395578140"
13+completed = false
14+link = ""
15++++
16+
17+[![smol vibe](https://i.gyazo.com/1307af94079e4ab07880a29b9b0ef2fa.png)](https://i.gyazo.com/1307af94079e4ab07880a29b9b0ef2fa.png)
18+*“If you want to build a ship, don’t drum up the men to gather wood, divide the work and give orders. Instead, teach them to yearn for the vast and endless sea.”  -Antoine de Saint-Exupéry*
19+
20+## Why
21+The core philosophy behind Urbit software is freedom and personal sovereignty in the digital age. Your data, your computation, your identity. This narrative presents a powerful marketing opportunity, as it immediately resonates with modern-day people striving against megacorp data silos, centralized censorship and behavioral data harvesting.
22+
23+But we're only halfway there. To complete the circle, we must also encourage and support the use of *hardware* that allows Urbit to run on personally owned and inexpensive small computing devices. And we need to spread this empowering narrative across the globe.
24+
25+## How
26+Selling productized Urbit hardware devices is one effort to help complete the circle. This will eventually be achievable via customized software development ([see ~botter's Urbian project](https://grants.urbit.org/proposals/337545546)).
27+
28+The other critical area of work is **Sustained Knowledge Sharing and Marketing**. We need updated documentation that helps people set up and manage their own Urbit hardware devices. And we need ongoing marketing outreach to excite and engage broader communities of people where Urbit's philosophy can be introduced, take root, and grow.
29+
30+## What
31+-=[smol future]=- is a project to create sustained documentation and marketing efforts that will support and encourage new users to run Urbit on their own small computing devices. We will focus on Raspberry Pi to leverage its vibrant ecosystem of users, developers and integrators.
32+
33+## Who
34+I joined Urbit in February 2020. Since then, I've cultivated the --=[ smol computers ]=-- group into an active community of ~500 members. I run two stars (~dasfeb and ~dalten) on production-quality small computing devices like Raspberry Pi and NanoPi, and I continually test new hardware configurations while documenting best practices to help others. I am prolific and adept at designing creative marketing content as well as community outreach on Twitter and other social media platforms. My personal and professional credentials are [publicly available](https://johnlester.me).
35+
36+Let's do this and change the world.
37+
38+[![smol vibe](https://i.gyazo.com/2346666e5b40623353fee1dca42f9879.jpg)](https://i.gyazo.com/2346666e5b40623353fee1dca42f9879.jpg)
39+
40+## Milestones
41+
42+
43+### Initial Documentation: Beginner's Guide
44+1 stars
45+Publish a comprehensive guide on urbit.org wiki explaining how to run Urbit on a Raspberry Pi using recommended and tested hardware configurations. Walk the user through every step of of the process.
46+
47+
48+### Initial Marketing: Outreach + Messaging
49+1 stars
50+Research and outreach to engage existing Raspberry Pi users and key hardware manufacturers. Introduce the Urbit narrative into new communities, including memes/vibes.
51+
52+
53+### Sustained Documentation + Marketing: MAR
54+1 stars
55+A fire-and-forget approach will fail. To succeed and continually gain traction, both documentation (updated content) and marketing (new outreach/engagement/materials) must be sustained efforts.
56+
57+
58+### Sustained Documentation + Marketing: APR
59+1 stars
60+A fire-and-forget approach will fail. To succeed and continually gain traction, both documentation (updated content) and marketing (new outreach/engagement/materials) must be sustained efforts.
61+
62+
63+### Sustained Documentation+Marketing: MAY
64+1 stars
65+A fire-and-forget approach will fail. To succeed and continually gain traction, both documentation (updated content) and marketing (new outreach/engagement/materials) must be sustained efforts.
66+
67+
68+### Sustained Documentation + Marketing: JUN
69+1 stars
70+A fire-and-forget approach will fail. To succeed and continually gain traction, both documentation (updated content) and marketing (new outreach/engagement/materials) must be sustained efforts.
71+
72+
73+### Sustained Documentation + Marketing: JUL
74+1 stars
75+A fire-and-forget approach will fail. To succeed and continually gain traction, both documentation (updated content) and marketing (new outreach/engagement/materials) must be sustained efforts.
76+
77+
78+### Sustained Documentation + Marketing: AUG
79+1 stars
80+A fire-and-forget approach will fail. To succeed and continually gain traction, both documentation (updated content) and marketing (new outreach/engagement/materials) must be sustained efforts.
81+
82+
83+### Sustained Documentation + Marketing: SEP
84+1 stars
85+A fire-and-forget approach will fail. To succeed and continually gain traction, both documentation (updated content) and marketing (new outreach/engagement/materials) must be sustained efforts.
86+
87+
88+### Sustained Documentation + Marketing: OCT
89+1 stars
90+A fire-and-forget approach will fail. To succeed and continually gain traction, both documentation (updated content) and marketing (new outreach/engagement/materials) must be sustained efforts.
91+
92+
content/grants/_index.mdnew file+7
@@ -0,0 +1,7 @@
1++++
2+title = "Grants"
3+sort_by = "date"
4+template = "grants/list.html"
5+page_template = "grants/grant.html"
6+aliases = ["/community/grants"]
7++++
content/grants/a-book-about-urbit.mdnew file+85
@@ -0,0 +1,85 @@
1++++
2+title = "A book about Urbit"
3+date = 2020-07-23
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "A short book about Urbit, on Urbit, including Urbit-centric sections about the wider world of computing"
10+reward = 12
11+assignee = "librex-dozryc"
12+id = "1590647060"
13+completed = false
14+link = ""
15++++
16+
17+I'm writing a book-length history of Urbit. I'll also write, in an Urbit-centric way, about the the wider world of computing. Chapters will be posted on Urbit, beginning October 21st, in the Notebooks section of the group ~librex-dozryc/AUC . Right now I see the piece as going something like this:
18+
19+1. Preface. A short story about the year 2050. Introduction to the concept of Urbit.
20+2. Laundry list of the things wrong with the current internet, only more dramatic than a laundry list
21+3. Laundry list of the things wrong with the current internet, only more dramatic than a laundry list, continued.
22+4. Social history of computers
23+5. Social history of computers, continued
24+6. Technical explanation of Urbit, only more dramatic than a technical explanation
25+7. Technical explanation of Urbit, only more dramatic than a technical explanation, continued
26+8. Social history of Urbit
27+9. Social history of Urbit, continued
28+10. Summing up
29+
30+I'm a novelist and essayist who has written about tech, politics, and literature. My plan, so far, for any received stars, is to spawn planets for interesting individuals and communities who might like Urbit, and to research what might go into creating a hosted star-based community.
31+
32+
33+## Milestones
34+
35+
36+### First Chapter
37+1 stars
38+Ch1. Actually completed 10/21, not 10/29
39+
40+
41+### Second Chapter
42+1 stars
43+Ch2
44+
45+
46+### Third Chapter
47+1 stars
48+Ch3
49+
50+
51+### Fourth Chapter
52+1 stars
53+Ch4
54+
55+
56+### Fifth Chapter
57+1 stars
58+Ch5
59+
60+
61+### Sixth Chapter
62+1 stars
63+Ch6
64+
65+
66+### Seventh Chapter
67+1 stars
68+Ch7
69+
70+
71+### Eighth Chapter
72+1 stars
73+Ch8
74+
75+
76+### Ninth Chapter
77+1 stars
78+Ch9
79+
80+
81+### Tenth Chapter
82+3 stars
83+Ch10. Contract is for disbursal of 12 stars at 1 star per chapter until completion; if projected is completed in fewer than 12 chapters, then remaining stars (12 - x) are to be disbursed at completion
84+
85+
content/grants/a-collaborative-web-mapping-system-for-urbit.mdnew file+99
@@ -0,0 +1,99 @@
1++++
2+title = "A Collaborative Web Mapping System for Urbit"
3+date = 2020-09-03
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "Allow small scale spatial data to be stored and retrieved in Urbit, for use in landscape and external applications, and shared across ships."
10+reward = 4
11+assignee = "Lumphead"
12+id = "634393623"
13+completed = false
14+link = ""
15++++
16+
17+A Collaborative Web Mapping System for Urbit
18+==================
19+
20+##### Goal
21+
22+
23+Allow small scale spatial data to be stored and retrieved in Urbit, for use in landscape and external applications, and shared across ships.
24+
25+##### Background/Motivation
26+
27+
28+This proposal has grown out of a previous bounty which called for Open Street Map data to be ingested into Urbit. Through discussion it was decided that as OSM already provides a free, open and widely available base map and street network, a more useful system for Urbit would provide a method of storing spatial documents, which can overlay upon existing spatial data such as Open Street Map tiles, be collected together for use in landscape apps, and combined, shared and collaboratively edited with other ships as 'Portals'. A spatial document, for the purpose of this proposal, is a single valid GeoJSON[^1] document. A spatial document could contain a single geometry, a feature (geometry with associated properties), or a collection of features (a GeoJSON 'featurecollection'). A Portal is a collection of spatial documents, with associated metadata and can include spatial documents from multiple ships, whose owners can collaboratively edit or construct maps.
29+
30+##### Overview
31+
32+
33+ * The proposed system will follow the Urbit store-hook-view pattern as described here https://docs.google.com/document/d/1hS_UuResG1S4j49_H-aSshoTOROKBnGoJAaRgOipf54/edit?ts=5d533e42
34+
35+ * The system will be implemented in two stages. The first stage will implement simple spatial types and a spatial document store, demonstrate input and output of spatial data, and provide a minimal landscape app for creating and editing spatial documents, but limited to the local ship. The second stage will build on the first and provide Portals; collections of spatial documents and associated metadata, which can be shared across ships - similar to the 'canvas' landscape app (https://github.com/yosoyubik/canvas).
36+
37+#### Stage 1 - A spatial store, spatial types, simple demo app
38+
39+
40+##### Spatial Document Store and Tools
41+
42+ * A storage system for the GeoJSON[^1] format and following the GeoJSON feature model.
43+ * The store will accept GeoJSON, validate and store, my intention is to use 'enjs' and/or 'de-json:html' existing hoon libraries to parse JSON. It will not perform any spatial indexing[^2]
44+ * Implement spatial types/structures - geometry, position, point, polygon, linestring, multipoint, multipolygon, geometrycollection upon which can be built the geojson geometry and feature model.
45+ * Implement a generator which can read a GeoJSON document in to the store, and can write a constructed document out of the store.
46+ * Implement a test suite based around GeoJSON specification and the above generator.
47+
48+##### Hook, View and Landscape App
49+
50+ * Implement the hook and view components of store-hook-view pattern atop the spatial data store.
51+ * In this stage the system will only allow data to be viewed/edited on the local ship.
52+ * Integrating spatial information with Landscape apps (which can render vector features using available javascript libraries/clients such as Openlayers and Leaflet).
53+ * Overall, somewhat like 'urlayers' hackathon project (github.com/gusmacaulay/urlayers), but with a sane data store and following the store-hook-view pattern.
54+
55+#### Stage 2 - A Portal Store and Collaboration System
56+
57+##### Store (Metadata, Portals)
58+
59+ * Expands on the Stage 1 architecture with additional store
60+ * The additional store which will house Portals. Portals consists of a map document with metadata (area of interest bounds, styling[^3], author/s etc.), and which may contain many spatial documents, which may be stored locally or on other ships.
61+ * It may be that the Urbit graph store is the appropriate place for this information, exploring using graph store vs a custom Portal store will be undertaken as part of Stage 2.
62+
63+##### Hook/View/App
64+
65+* A hook/view/landscape app which allows for displaying and interacting with Portals;
66+ * Editing of individual Portals
67+ * Sharing of Portals. As a resource owned by a ship, a Portal is somewhat analogous to a chat channel. Individual spatial documents within the Portal can come from local or foreign ship. The owner of the Portal will be able to set permissions on spatial documents within the portal.
68+ * The overall concept of the Portal app can be likened to the 'canvas' landscape app, but for maps and cartography. The key feature is to present a Portal map with spatial data from different ships and collaborative editing.
69+
70+##### Footnotes
71+
72+[^1]: The very readable spec for geojson can be found here http://geojson.org. An overview of GeoJSON summarizing
73+it's advantages and limitations can be found here https://macwright.com/2015/03/23/geojson-second-bite.html
74+
75+[^2]: A mature spatial store would include spatial indexes and provide spatial queries, however for the objectives of this proposal basic spatial spatial documents storage and retrieval can be achieved without spatial indexing. Each spatial document is treated as its own entity, and has limited querying beyond fetching and inspecting the data structure. However this is enough that it can easily be splatted on a map. Spatial indexing of geometries (or parent features/feature collections), is a sensible next step, which would allow many more use cases but is not in scope for this proposal.
76+
77+[^3]: It may be possible to store styling info within the spatial documents, there are at least two GeoJSON style storage conventions, but nothing standardised (see discussion here https://gis.stackexchange.com/questions/22474/geojson-styling-information). Neither of these are part of the GeoJSON standard and appear to be not used much in the wild. There are formats such as KML and GeoPackage which have styling support, but these are also more complex formats.
78+
79+##### About Me
80+
81+I am a beef farmer and software engineer (geospatial web applications). I work with tools/frameworks such as Openlayers, Leaflet, Geoserver, Postgresql/PostGIS etc. and I code predominantly in Java, Javascript, SQL, Clojure, and Python. I have completed the original Hoon 101 course, half the 201 course, and the recent hackathon. My hackathon entry was a very primitive geojson editor gall/landscape app (https://github.com/gusmacaulay/urlayers).
82+
83+
84+~lomped-firser
85+
86+
87+## Milestones
88+
89+
90+### Stage 1
91+2 stars
92+A spatial store, spatial types, simple demo landscape app
93+
94+
95+### Stage 2
96+2 stars
97+A Portal Store and Collaboration System
98+
99+
content/grants/analytics-script.mdnew file+54
@@ -0,0 +1,54 @@
1++++
2+title = "Analytics Script"
3+date = 2021-03-12
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "Write a generator that exports chat data into a CSV."
10+reward = 1
11+assignee = "moop"
12+id = "1421596040"
13+completed = false
14+link = ""
15++++
16+
17+## Overview
18+
19+In order to understand the growth of the network, it's important that we be able to measure the amount of activity within groups at any given point. Your task is to build an open-source script (a [generator](https://urbit.org/docs/tutorials/hoon/hoon-school/generators/)) that exports group activity into a format that can be analyzed.
20+
21+## Implementation
22+
23+The generator will read data from `graph-store` (and other requisite agents) and extract it into a CSV file.
24+
25+### Output
26+
27+The output of the generator is a CSV file with the following format: `timestamp,ship,group,channel,channel-type,content`. Each row of data represents a single post of some type; either a chat message, notebook post, or collection post.
28+
29+The result of running the CSV should output the clay path to the file.
30+
31+### Inputs
32+
33+The generator should accept a few parameters:
34+
35+- `path` (required): path to write the CSV to.
36+- `from` (required): absolute date (`@da`) from which data should be pulled.
37+- `to` (optional): absolute date (`@da`) up until which point data should be pulled. Default is the current time.
38+- `groups` (optional): list of groups to read data from. Default is to pull data from all groups that the running ship is a member of.
39+- `content` (optional): boolean of whether or not to include content in the CSV. Defaults to `false`.
40+
41+## Requirements & Resources
42+
43+- The Urbit Foundation will connect you with Tlon engineers for 1:1 support, should you need it
44+- Code should be submitted as a pull request against https://github.com/urbit/urbit
45+- The generator shall be called `crunch` (we're open to better ideas)
46+
47+## Milestones
48+
49+
50+### Work is complete
51+1 stars
52+The generator is submitted as a pull request to the Urbit repository, reviewed, and merged.
53+
54+
content/grants/antechamber.mdnew file+103
@@ -0,0 +1,103 @@
1++++
2+title = "Antechamber"
3+date = 2020-11-17
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "Antechamber is an initiative to provide a group within Landscape that is restricted to only galaxies and delegates of galaxies."
10+reward = 4
11+assignee = "xiphiness"
12+id = "523261174"
13+completed = false
14+link = ""
15++++
16+
17+## Background
18+
19+Galaxy owners have an important place within the Urbit ecosystem: they're expected to [vote on important matters](https://urbit.org/docs/glossary/senate/) related to Urbit's future. We think that galaxies should both a) be able to assemble and communicate with one another, and b) that communication should be undertaken through Urbit itselth. Urbit galaxies, like stars, predominantly fulfill an infrastructural capacity, meaning that galaxy owners will likely interact with Urbit through their personal planet (further, due to the high value of galaxies, it is often the case that their ownership is shared by multiple individuals or a firm).
20+
21+This bounty proposes the use of a *delegate* system, whereby a galaxy can designate another, lower-value ship (*e.g.* a planet) as their delegate in such a way that the designation can be freely given and taken away, as well as be publicly verifiable. This enables ships that represent individuals, like planets, to speak on behalf of galaxies.
22+
23+This use-case is exactly what the [Azimuth Claims contract](https://github.com/urbit/azimuth#overview) is meant to enable. Using claims, our workflow would work like this:
24+
25+- galaxy G makes a claim that planet P is their delegate
26+- planet P makes a claim that they are the delegate for galaxy G (this gives the delegation "acceptance" semantics)
27+
28+Going forward, we'll refer to this pair of claims as a **senate delegate claim**.
29+
30+Assuming such a claim can be made, the next step would be to read/watch them from within Urbit, and then use them to restrict membership in a specified group to just those ships that serve as galactic delegates.
31+
32+## Proposed Architecture
33+
34+### Part 1: Extend Bridge to Support Claims
35+
36+The claims contract is one of the few Azimuth contracts that has not yet been given any form of interface within Bridge. This part of the implementation involves providing a comprehensive interface within Bridge for managing claims.
37+
38+Bridge makes use of the [azimuth-js](https://github.com/urbit/azimuth-js) library for interacting with Azimuth contracts. Initial support for the claims contract was added in [this pull request](https://github.com/urbit/azimuth-js/pull/58/files), although key features are missing—your first task will be to extend the `azimuth-js` library with additional operations:
39+
40+- [`removeClaim`](https://github.com/urbit/azimuth/blob/27ab0845779f7beba2376a82b0320c3efb39e03e/contracts/Claims.sol#L104): remove the specified claim.
41+- [`clearClaims`](https://github.com/urbit/azimuth/blob/27ab0845779f7beba2376a82b0320c3efb39e03e/contracts/Claims.sol#L129): remove all claims.
42+- `getAllClaims`: Produce all claims. *NOTE: There is no contract function for this operation—it'll need to be implemented in terms of `getClaim` per [this comment](https://github.com/urbit/azimuth-js/pull/58#pullrequestreview-369698854).*
43+
44+With the above operations defined, your next task will be to extend Bridge to satisfy the following user stories:
45+
46+#### User Stories
47+
48+(All stories are from the perspective of a point owner, and can be read: "As a point owner, ...")
49+
50+- I can manage Claims by navigating to *ID -> Advanced -> Manage Claims*
51+- I can view all of my claims and their attributes ([`protocol`, `claim` and `dossier`](https://github.com/urbit/azimuth/blob/27ab0845779f7beba2376a82b0320c3efb39e03e/contracts/Claims.sol#L42))
52+- I can remove an existing claim
53+- I can see how many claims I have made of the [maximum number allowed (16)](https://github.com/urbit/azimuth/blob/27ab0845779f7beba2376a82b0320c3efb39e03e/contracts/Claims.sol#L14)
54+- I can understand what claims are for by reading help text in the claims management interface
55+- I can add a new claim
56+- I can add a senate delegate claim using a purpose-built UI
57+ - As a galaxy, I can set my delegate as a planet
58+ - As a planet, I can indicate that I am the delegate of a galaxy
59+
60+### Part 2: Create the `senate-group-hook`
61+
62+This gall agent will make use of the [`eth-watcher` agent](https://github.com/urbit/urbit/blob/master/pkg/arvo/app/eth-watcher.hoon) to watch for [`ClaimAdded`](https://github.com/urbit/azimuth/blob/27ab0845779f7beba2376a82b0320c3efb39e03e/contracts/Claims.sol#L27) and [`ClaimRemoved`](https://github.com/urbit/azimuth/blob/27ab0845779f7beba2376a82b0320c3efb39e03e/contracts/Claims.sol#L34) events, filter just the claim events that reference delegate claims, and translate those events into invites to or kicks from a specified group.
63+
64+#### User Stories
65+
66+All stories that refer to a "group admin" below refer to a group admin that is running the `senate-group-hook`.
67+
68+- As a ship, I can point a locally-running `senate-group-hook` to a group I am the admin/owner of, and it will invite all galactic delegates, becoming a group admin with a senate-hooked group (wordy, I know)
69+- As a group admin, new delegates will be added when senate delegate claims are added
70+- As a group admin, new delegates will be removed when senate delegate claims are removed
71+- As a group admin, all galaxies can also be invited to the group
72+
73+#### Implementation Notes
74+- `eth-watcher` accepts a [`config`](https://github.com/urbit/urbit/blob/6621661460c3073195ac2500df46df67af722cb2/pkg/arvo/sur/eth-watcher.hoon#L5-L21) that tells it which events to watch, among other configuration parameters. An example of its usage can be found [here](https://github.com/urbit/urbit/blob/6621661460c3073195ac2500df46df67af722cb2/pkg/arvo/app/azimuth-tracker.hoon#L86-L97).
75+- Azimuth's events can be found [here](https://github.com/urbit/urbit/blob/6621661460c3073195ac2500df46df67af722cb2/pkg/arvo/sys/zuse.hoon#L7943-L8016) in `zuse.hoon`. It's suggested that you represent the Claims contract and events in a similar fashion in a `/lib` file.
76+- There should be a way to monitor only claim events that originate from galaxies
77+
78+## Deliverables
79+Your solution to this bounty should include pull requests against these repositories:
80+
81+* [azimuth-js](https://github.com/urbit/azimuth-js)
82+* [bridge](https://github.com/urbit/bridge/)
83+* [antechamber](https://github.com/urbit/antechamber): The `senate-delegate-hook`-related files should go here.
84+
85+## Expectations
86+
87+You will work closely with the director of urbit.org on this project. This means that regular check-in calls will be held to discuss the project's progress. Additionally, the you are expected to provide regular status updates on the project to the Urbit community via twice-monthly updates on this bounty.
88+
89+The director will ensure that you have access to the necessary resources to complete this project. All prior work done on this project will be explained and made available to you, and should questions arise that require the expertise of engineers at Tlon, time will be made (schedules permitting) for your questions to be answered either in writing or over a call.
90+
91+## Milestones
92+
93+
94+### Part 1: Extend Bridge to Support Claims
95+2 stars
96+Pull requests to azimuth-js and bridge, as specified above, have been merged.
97+
98+
99+### Part 2: Create the senate-group-hook
100+2 stars
101+Pull requests against the antechamber repo mentioned above have been merged.
102+
103+
content/grants/apprenticeships/_index.mdnew file+4
@@ -0,0 +1,4 @@
1++++
2+title = "Apprenticeships"
3+template = "grant_type/apprenticeships.html"
4++++
content/grants/art-by-urbit.mdnew file+32
@@ -0,0 +1,32 @@
1++++
2+title = "Art by Urbit"
3+date = 2020-08-27
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Art by Urbit will provide a monthly digest of art produced by & for Urbit, on a publicly available website & social media presence."
10+reward = 1
11+assignee = "nartes-fasrum"
12+id = "636838408"
13+completed = false
14+link = ""
15++++
16+
17+With the deployment of Art by Urbit, a central platform & location for the dissemination of Urbit art & propaganda will be available for users of the traditional internet. Regular digests of Urbit art will be collected from willing Urbit users & published on the Art by Urbit website & social media to provide visual inspiration for anyone interested, from those who are taking their first steps on the Martian frontier to those who've been sailing their ship for years.
18+
19+For those already homesteading Urbit, part of the regular digest will be a pair of featured artworks to use with the new Landscape background image feature - one for light-themed browsers, and one for dark-themed. For the curious or the new, art promoting a public group, chat, or notebook will be included to help connect them with Urbit's best communities. A potential longer-term goal would be the production of a physical calendar, with a different Urbit themed art piece for each month and various interesting facts, informational tidbits, or helpful tips scattered throughout. Once Urbit ships can host their own content on the open internet, I aim to host the Art by Urbit site from its own ship.
20+
21+I'm qualified to carry out this proposal as I have built a portfolio of prior Urbit-related art (available [here](https://twitter.com/nartesfasrum) ) and have prior experience building & deploying websites & social media promotional campaigns.
22+
23+
24+
25+## Milestones
26+
27+
28+### Six months of regular digests
29+1 stars
30+As described - six months of regular monthly Art by Urbit digests, posted to the Art by Urbit website & promoted on social media.
31+
32+
content/grants/bart-train-tracker-landscape-tile.mdnew file+49
@@ -0,0 +1,49 @@
1++++
2+title = "BART Train Tracker Landscape Tile"
3+date = 2020-03-05
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "A backend for a BART client on Urbit."
10+reward = 3
11+assignee = "~ronreg-ribdev"
12+id = "1026701722"
13+completed = false
14+link = ""
15++++
16+
17+### Bounty Description
18+
19+Create a backend for importing BART (Bay Area Rapid Transit) arrival and departure data and service alerts via the BART public API to Urbit, and design a Landscape tile which will serve as a route planner app inside Urbit.
20+
21+We would like to create a BART information Landscape tile. The backend should access real-time departure and arrival information for the complete list of stations via the BART API, as well as the data feeds for schedule tables, elevator outages, system advisories, and train counts. The tile interface should encompass:
22+
23+- A real-time trip planner using the BART data, similar to the one on the official BART website.
24+- Links for schedule tables for weekday, weekend, holiday service.
25+- The open-source BART map linked below.
26+- A place (possibly a scrolling feed?) for BART service alerts.
27+- A place for BART elevator closure status (this is a separate data channel).
28+
29+Resources:
30+
31+- [BART API Documentation](http://api.bart.gov/docs/overview/index.aspx)
32+- [BART API Developer License Agreement](https://www.bart.gov/schedules/developers/developer-license-agreement)
33+
34+### Contribution Guidelines:
35+- Do not begin work until your request to claim this bounty is accepted.
36+- Submit your work as a pull request to the [urbit/urbit repo](https://github.com/urbit/urbit/pulls)
37+- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
38+- You have 90 days from the time of approval to complete this bounty.
39+- Successful completion of this bounty may result in an invitation to complete other API integration bounties.
40+
41+
42+## Milestones
43+
44+
45+### Your PR is merged
46+3 stars
47+Your code is accepted and merged.
48+
49+
content/grants/bitcoin-full-node-provider-and-wallet.mdnew file+92
@@ -0,0 +1,92 @@
1++++
2+title = "Bitcoin Full Node Provider and Wallet"
3+date = 2020-09-23
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "This bounty covers the creation of infrastructure (gall agents) required to enable a Bitcoin-based payments system from within Landscape."
10+reward = 6
11+assignee = "~timluc-miptev"
12+id = "2056919898"
13+completed = true
14+link = ""
15++++
16+
17+## Introduction
18+Creation of a wallet that supports various currencies is the basis for building an economy in Urbit. Bitcoin is a natural starting point due to both 1) the philosophical alignment with the project, 2) the prior art already done towards this end, and 3) its ubiquity.
19+
20+This bounty covers the creation of a wallet that supports the use of Bitcoin and the infrastructure required to connect ships to the Bitcoin network. You will have the support of the Urbit Foundation in the development of this project, and will work closely with its director to refine requirements and test the resulting system.
21+
22+## Background
23+Starting last year, several bounties were released to implement the Bitcoin JSON RPC API. Later another bounty was released to build a Bitcoin wallet. The RPC API work is now (nearly) complete, but the wallet work is not. The first iteration of the wallet ultimately failed due to lack of clear scope, but provided many valuable ideas that can still be leveraged.
24+
25+The Bitcoin RPC API was a huge lift and provides the foundation needed to complete this bounty. There are still ongoing performance issues with a handful of RPC calls, but they're close to completion—most of the RPC API works fine and shouldn't block this project from getting started.
26+
27+### Resources
28+* [Bitcoin RPC API Pull Request](https://github.com/urbit/urbit/pull/1892)
29+* [Bitcoin RPC API Documentation](https://developer.bitcoin.org/reference/rpc/index.html)
30+* [Original Bitcoin Wallet work](https://github.com/urbit/urbit/tree/mp/bitcoin)
31+
32+## Overview
33+The ultimate goal is to have a wallet application within Landscape that ships can use to send payments to one another using a variety of digital currencies, starting with Bitcoin.
34+
35+In order to make our wallet useful, a bridge from Urbit to the Bitcoin network will need to be built that uses the RPC API to communicate with a full node. In an ideal world each ship would run their own full node—practically, this is unrealistic due to the high technical and resource requirements of running a full node. For this reason, the solution to this bounty should provide a mechanism for ships that do not run a full node to connect to the Bitcoin network via other ships that choose to provide access to their node. Care must be taken to minimize the required amount of trust in this instance.
36+
37+The wallet should be able to represent an "account," which correspond to public/private keypairs (representation of multiple Bitcoin accounts would be nice as well). A Bitcoin account can come from a variety of places: a mnemonic seed, hardware wallet, or from an Urbit master ticket, which is possible due to [Urbit's Hierarchical Deterministic wallet](https://github.com/urbit/fora-posts/blob/master/proposals/posts/~2018.11.8..19.31.59..ba77~.md) structure, which is based on BIP32. Regardless of the source of a keypair, Urbit will store only the public half (the extended public key to be specific—more detail is provided below). Transaction signing, which requires a private key, will be handled outside of Urbit to maintain security best practices.
38+
39+From the wallet application, ships should be able to do payments and check the balance and transaction history for each account. The implementation should respect security best-practices by keeping private keys safe and identity secret to the highest extent as is reasonably possible.
40+
41+### Project Requirements
42+* Ships can send payment in Bitcoin to other ships.
43+* Ships can send payment in Bitcoin to addresses.
44+* Ships can connect to full nodes that they run on their own.
45+* Ships can connect to full nodes operated by other ships.
46+* Private keys are never entrusted to any other entity.
47+* Ships can view the transaction history for any Bitcoin account they own.
48+* Ships can view the balance of any Bitcoin account they own.
49+
50+### User Stories
51+The bridge to the Bitcoin network should satisfy the following stories.
52+* As a ship, I can connect to a full node that I control, becoming a host.
53+* As a ship, I can connect to a full node via another ship, becoming a client.
54+* As a host, I can control which other ships can access my full node.
55+* As a host or client, I can check the balance of my Bitcoin addresses.
56+* As a host or client, I can broadcast a signed transaction to the Bitcoin network.
57+* As a host or client, I can obtain a list of transactions for my Bitcoin account(s).
58+
59+The wallet should satisfy these stories:
60+* As a ship, I can see my overall balance for an account.
61+* As a ship, I can see all transactions for a specific account.
62+* As a ship, I can construct an unsigned transaction.
63+* As a ship, I can send Bitcoin to other ships, becoming a payer.
64+* As a payer, I can tell when my payment has succeeded.
65+* As a ship, I can receive bitcoin from other ships, becoming a payee.
66+* As a payee, I can provide a unique address for each transaction.
67+* As a payee, I can tell when I have received payment.
68+
69+### Proposed Architecture
70+A design for a system that satisfies the above requirements has been outlined [here](https://gist.github.com/jalehman/e0c91071427ca4c349c0673f376945cb). It's not a requirement to use this architecture, but it's probably a good starting place, as it's been vetted by a few people within the community. Ideally the architecture will be further refined collaboratively with you, the claimant.
71+
72+### Expectations
73+You will work closely with the director of urbit.org on this project. This means that, at a minimum, weekly check-in calls will be held to discuss the project's progress. Additionally, the worker is expected to provide regular status updates on the project to the Urbit community via twice-monthly updates on this bounty.
74+
75+The director will ensure that you have access to the necessary resources to complete this project. All prior work done on this project will be explained and made available to you, and should questions arise that require the expertise of engineers at Tlon, time will be made (schedules permitting) for your questions to be answered either in writing or over a call.
76+
77+The worker should have a background that either demonstrates experience building Gall agents, or developing on Bitcoin (or similar crypto systems)--both would be even better.
78+
79+
80+## Milestones
81+
82+
83+### Implement the full node bridge/provider
84+3 stars
85+Create a set of gall agents to interface with a Bitcoin full node, access to which can be provided to other ships.
86+
87+
88+### Implement the wallet
89+3 stars
90+Create a set of gall agents to handle extended public keys, address derivation, and facilitate payments between ships.
91+
92+
content/grants/bitcoin-key-derivation.mdnew file+61
@@ -0,0 +1,61 @@
1++++
2+title = "Bitcoin Key Derivation"
3+date = 2020-10-02
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "The Urbit HD Wallet allows for many different keys to be generated from a single master ticket. Your task is to use this mechanism to generate Bitcoin keys and expose ways of interacting with them."
10+reward = 2
11+assignee = "pkova"
12+id = "794126751"
13+completed = true
14+link = ""
15++++
16+
17+## Overview
18+Our goal is to build a Bitcoin payment experience that allows any ship to use their Urbit ID additionally as an address that can send and receive Bitcoin. Ideally a new ship needs nothing more than Landscape for interacting with the Bitcoin network (see [the Bitcoin Full Node Provider and Wallet bounty](https://grants.urbit.org/bounties/2056919898-bitcoin-full-node-provider-and-wallet)) and their Urbit ID for receiving Bitcoin and signing transactions (this bounty). This provides an easy onramp to working with Bitcoin without compromising on security or privacy.
19+
20+Interacting with Bitcoin private keys, like your Urbit master ticket, requires a secure environment. As long as Urbit remains unaudited, it’s best to not use a master ticket to directly access your Urbit—this is why we built Bridge. [Bridge](https://bridge.urbit.org) is designed to be a secure environment, making it an ideal candidate for handling our sensitive Bitcoin keys.
21+
22+## User Stories
23+This bounty should provide extensions to Bridge that satisfy the following user stories:
24+
25+* As an user, I can obtain my Bitcoin extended public key (xpub).
26+* As an user, I can copy my xpub to the clipboard.
27+* As an user, I can sign a constructed transaction.
28+* As an user, I can copy a signed transaction to the clipboard.
29+
30+For the purposes of this bounty, obtaining an extended public key would consist of copying it to the clipboard for input into Landscape, where the Bitcoin wallet will need it for performing address derivation. Signing a transaction will go in the other direction; a “constructed” transaction (consisting of everything but the signature) will be generated from within Landscape, input into Bridge for signing, and then the signed transaction will be input back to Landscape for broadcasting over the Bitcoin network.
31+
32+While this flow isn’t the most user-friendly, the functionality will ultimately be possible to port into Landscape a) once it runs in a more secure environment (e.g. Electron), and b) once Urbit is receives a thorough security audit.
33+
34+## Deliverables
35+Your solution to this bounty should include pull requests against these repositories:
36+
37+* [urbit-key-generation](https://github.com/urbit/urbit-key-generation): This library is responsible for deriving keys from a master ticket—this is where Bitcoin key generation should occur.
38+* [bridge](https://github.com/urbit/bridge/): Bridge should be extended to include a new top-level “Bitcoin” section, which should provide access to the xpub key and a place for signing transactions.
39+
40+Design mockups will be provided to the worker upon claiming this bounty.
41+
42+## Expectations
43+You will work closely with the director of urbit.org on this project. This means that, at a minimum, weekly check-in calls will be held to discuss the project's progress. Additionally, the worker is expected to provide regular status updates on the project to the Urbit community via twice-monthly updates on this bounty.
44+
45+The director will ensure that you have access to the necessary resources to complete this project. All prior work done on this project will be explained and made available to you, and should questions arise that require the expertise of engineers at Tlon, time will be made (schedules permitting) for your questions to be answered either in writing or over a call.
46+
47+The worker should have a background that demonstrates proficiency with building client-side Javascript applications. Experience working with Bitcoin development is preferred, but not required.
48+
49+### Resources
50+
51+* [Urbit HD Wallet design](https://github.com/urbit/fora-posts/blob/master/proposals/posts/~2018.11.8..19.31.59..ba77~.md)
52+* [BIP-32 re: extended public keys](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#Extended_keys)
53+
54+## Milestones
55+
56+
57+### Work is Complete
58+2 stars
59+Pull requests to each repository have been submitted, reviewed and merged.
60+
61+
content/grants/bitcoin-node-json-rpc-api-part-1.mdnew file+48
@@ -0,0 +1,48 @@
1++++
2+title = "Bitcoin Node JSON RPC API (Part 1)"
3+date = 2019-11-15
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "Write a Remote Procedure Call library for a Bitcoin Gall app -- part one."
10+reward = 1
11+assignee = "yosoyubik"
12+id = "649469235"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+To expand Urbit’s Bitcoin-related capabilities, we are building a Gall app which can comprehensively control a Bitcoin Core full node via the JSON RPC API. The app is contained in [this branch](https://github.com/urbit/urbit/tree/btc-node-grant) of the Urbit repo, and the original conception of this idea is discussed [here](https://github.com/urbit/arvo/pull/1052). Our ultimate goal is to create Bitcoin libraries for Urbit, enabling Bitcoin to serve as a "money primitive" for future Gall apps.
19+
20+Bitcoin Core is the reference implementation for Bitcoin nodes, which can be run as _bitcoind_ or _bitcoin-qt_.
21+
22+#### Bounty Description
23+This bounty is to create a portion of the Gall app library for Remote Procedure Calls to a Bitcoin Core full node, written in Hoon. The other portions are covered in these grants: [Two](https://grants.urbit.org/bounties/1577544668-bitcoin-node-json-rpc-api-part-2), [Three](https://grants.urbit.org/bounties/312452925-bitcoin-node-json-rpc-api-part-3), [Four](https://grants.urbit.org/bounties/87854308-bitcoin-node-json-rpc-api-part-4).
24+* Specifically, this bounty is to create types and JSON conversions for commands and responses of the first section of the [Bitcoin Core API reference](https://bitcoincore.org/en/doc/0.18.0/ ), titled “Blockchain”:
25+* Create type definitions in Hoon for structuring commands and responses. Specify poke-action types that map to each command. Use logic specified in Bitcoin Core API resource and the template contained in the guidelines, and fill in this code where appropriate in [`pkg/arvo/lib/btc-node-json.hoon`](https://github.com/urbit/urbit/blob/9bb9b20c71a0a46edc6c52dd869017d3a51ede30/pkg/arvo/lib/btc-node-json.hoon).
26+* The application will be structured as two Gall agents: one “Store” and one “Hook”. The store should act as a data store for data received from the Bitcoin full node, and the Hook should send commands to the node as well as parsing the responses and poking them into the Store. A [template branch](https://github.com/urbit/urbit/tree/btc-node-grant) has been created to set up skeletons of these files to make your work easier.
27+
28+#### Resources
29+* [Store/Hook proposal for userspace architecture](https://docs.google.com/document/d/1hS_UuResG1S4j49_H-aSshoTOROKBnGoJAaRgOipf54/edit?usp=sharing)
30+* [Urbit Gall App documentation](https://urbit.org/docs/learn/arvo/gall/)
31+* Bitcoin Core API reference documentation: [Here](https://bitcoincore.org/en/doc/0.18.0/), [here](https://en.bitcoin.it/wiki/API_reference_(JSON-RPC), and [here](https://bitcoin.org/en/developer-reference#remote-procedure-calls-rpcs).
32+* Distinctions between _bitcoind_ and _bitcoin-qt_: Differences between them discussed [here](https://bitcoin.stackexchange.com/questions/13368/whats-the-difference-between-bitcoind-and-bitcoin-qt-different-commands)
33+* [JSON RPC API standards](https://www.jsonrpc.org/specification)
34+
35+#### Contribution Guidelines
36+* Do not begin work until your request to claim this bounty is accepted. We will assign a designer to work with you on the interface.
37+* Base your work off of the [btc-node-grant branch](https://github.com/urbit/urbit/tree/btc-node-grant). Follow Boilerplate. Look for `TODO`s.
38+* Submit your code as a PR to the [btc-node-grant](https://github.com/urbit/urbit/tree/btc-node-grant) branch of the `urbit` repo in form of a `.hoon` file.
39+* You have 45 days from the time of approval to complete this bounty.
40+
41+## Milestones
42+
43+
44+### Your PR is merged
45+1 stars
46+Your PR containing all the relevant code updates is accepted and merged.
47+
48+
content/grants/bitcoin-node-json-rpc-api-part-2.mdnew file+48
@@ -0,0 +1,48 @@
1++++
2+title = "Bitcoin Node JSON RPC API (Part 2)"
3+date = 2019-10-01
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "Write a Remote Procedure Call library for a Bitcoin Gall app -- part two."
10+reward = 1
11+assignee = "pkova"
12+id = "1577544668"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+To expand Urbit’s Bitcoin-related capabilities, we are building a Gall app which can comprehensively control a Bitcoin Core full node via the JSON RPC API. The app is contained in [this branch](https://github.com/urbit/urbit/tree/btc-node-grant) of the Urbit repo, and the original conception of this idea is discussed [here](https://github.com/urbit/arvo/pull/1052). Our ultimate goal is to create Bitcoin libraries for Urbit, enabling Bitcoin to serve as a "money primitive" for future Gall apps.
19+
20+Bitcoin Core is the reference implementation for Bitcoin nodes, which can be run as _bitcoind_ or _bitcoin-qt_.
21+
22+#### Bounty Description
23+This bounty is to create a portion of the Gall app library for Remote Procedure Calls to a Bitcoin Core full node, written in Hoon. The other portions are covered in these grants: [One](https://grants.urbit.org/bounties/1507085808-bitcoin-node-json-rpc-api-part-1), [Three](https://grants.urbit.org/bounties/312452925-bitcoin-node-json-rpc-api-part-3), [Four](https://grants.urbit.org/bounties/87854308-bitcoin-node-json-rpc-api-part-4).
24+* Specifically, this bounty is to create types and JSON conversions for commands and responses of the sections of the [Bitcoin Core API reference](https://bitcoincore.org/en/doc/0.18.0/ ), titled **“Control”**, **“Generating”**, **“Mining”**, and **“Network”**:
25+* Create type definitions in Hoon for structuring commands and responses. Specify poke-action types that map to each command. Use logic specified in Bitcoin Core API resource and the template contained in the guidelines, and fill in this code where appropriate in [`pkg/arvo/lib/btc-node-json.hoon`](https://github.com/urbit/urbit/blob/9bb9b20c71a0a46edc6c52dd869017d3a51ede30/pkg/arvo/lib/btc-node-json.hoon).
26+* The application will be structured as two Gall agents: one “Store” and one “Hook”. The store should act as a data store for data received from the Bitcoin full node, and the Hook should send commands to the node as well as parsing the responses and poking them into the Store. A [template branch](https://github.com/urbit/urbit/tree/btc-node-grant) has been created to set up skeletons of these files to make your work easier.
27+
28+#### Resources
29+* [Store/Hook proposal for userspace architecture](https://docs.google.com/document/d/1hS_UuResG1S4j49_H-aSshoTOROKBnGoJAaRgOipf54/edit?usp=sharing)
30+* [Urbit Gall App documentation](https://urbit.org/docs/learn/arvo/gall/)
31+* Bitcoin Core API reference documentation: [Here](https://bitcoincore.org/en/doc/0.18.0/), [here](https://en.bitcoin.it/wiki/API_reference_(JSON-RPC), and [here](https://bitcoin.org/en/developer-reference#remote-procedure-calls-rpcs).
32+* Distinctions between _bitcoind_ and _bitcoin-qt_: Differences between them discussed [here](https://bitcoin.stackexchange.com/questions/13368/whats-the-difference-between-bitcoind-and-bitcoin-qt-different-commands)
33+* [JSON RPC API standards](https://www.jsonrpc.org/specification)
34+
35+#### Contribution Guidelines
36+* Do not begin work until your request to claim this bounty is accepted. We will assign a designer to work with you on the interface.
37+* Base your work off of the [btc-node-grant branch](https://github.com/urbit/urbit/tree/btc-node-grant). Follow Boilerplate. Look for `TODO`s.
38+* Submit your code as a PR to the [btc-node-grant](https://github.com/urbit/urbit/tree/btc-node-grant) branch of the `urbit` repo in form of a `.hoon` file.
39+* You have 45 days from the time of approval to complete this bounty.
40+
41+## Milestones
42+
43+
44+### Your PR is merged
45+1 stars
46+Your PR containing all the relevant code updates is accepted and merged.
47+
48+
content/grants/bitcoin-node-json-rpc-api-part-3.mdnew file+49
@@ -0,0 +1,49 @@
1++++
2+title = "Bitcoin Node JSON RPC API (Part 3)"
3+date = 2019-10-01
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "Write a Remote Procedure Call library for a Bitcoin Gall app -- part three."
10+reward = 1
11+assignee = "yosoyubik"
12+id = "312452925"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+To expand Urbit’s Bitcoin-related capabilities, we are building a Gall app which can comprehensively control a Bitcoin Core full node via the JSON RPC API. The app is contained in [this branch](https://github.com/urbit/urbit/tree/btc-node-grant) of the Urbit repo, and the original conception of this idea is discussed [here](https://github.com/urbit/arvo/pull/1052). Our ultimate goal is to create Bitcoin libraries for Urbit, enabling Bitcoin to serve as a "money primitive" for future Gall apps.
19+
20+Bitcoin Core is the reference implementation for Bitcoin nodes, which can be run as _bitcoind_ or _bitcoin-qt_.
21+
22+#### Bounty Description
23+This bounty is to create a portion of the Gall app library for Remote Procedure Calls to a Bitcoin Core full node, written in Hoon. The other portions are covered in these grants: [One](https://grants.urbit.org/bounties/1507085808-bitcoin-node-json-rpc-api-part-1), [Two](https://grants.urbit.org/bounties/1577544668-bitcoin-node-json-rpc-api-part-2), [Four](https://grants.urbit.org/bounties/87854308-bitcoin-node-json-rpc-api-part-4).
24+* Specifically, this bounty is to create types and JSON conversions for commands and responses of the sections of the [Bitcoin Core API reference](https://bitcoincore.org/en/doc/0.18.0/ ) titled **"Raw Transactions"** and **"Util"**
25+* Create type definitions in Hoon for structuring commands and responses. Specify poke-action types that map to each command. Use logic specified in Bitcoin Core API resource and the template contained in the guidelines, and fill in this code where appropriate in [`pkg/arvo/lib/btc-node-json.hoon`](https://github.com/urbit/urbit/blob/9bb9b20c71a0a46edc6c52dd869017d3a51ede30/pkg/arvo/lib/btc-node-json.hoon).
26+* The application will be structured as two Gall agents: one “Store” and one “Hook”. The store should act as a data store for data received from the Bitcoin full node, and the Hook should send commands to the node as well as parsing the responses and poking them into the Store. A [template branch](https://github.com/urbit/urbit/tree/btc-node-grant) has been created to set up skeletons of these files to make your work easier.
27+
28+#### Resources
29+* [Store/Hook proposal for userspace architecture](https://docs.google.com/document/d/1hS_UuResG1S4j49_H-aSshoTOROKBnGoJAaRgOipf54/edit?usp=sharing)
30+* [Urbit Gall App documentation](https://urbit.org/docs/learn/arvo/gall/)
31+* Bitcoin Core API reference documentation: [Here](https://bitcoincore.org/en/doc/0.18.0/), [here](https://bitcoin.org/en/developer-reference#remote-procedure-calls-rpcs).
32+* Distinctions between _bitcoind_ and _bitcoin-qt_: Differences between them discussed [here](https://bitcoin.stackexchange.com/questions/13368/whats-the-difference-between-bitcoind-and-bitcoin-qt-different-commands)
33+* [JSON RPC API standards](https://www.jsonrpc.org/specification)
34+
35+#### Contribution Guidelines
36+* Do not begin work until your request to claim this bounty is accepted. We will assign a designer to work with you on the interface.
37+* Base your work off of the [btc-node-grant branch](https://github.com/urbit/urbit/tree/btc-node-grant). Follow Boilerplate. Look for `TODO`s.
38+* Submit your code as a PR to the [btc-node-grant](https://github.com/urbit/urbit/tree/btc-node-grant) branch of the `urbit` repo in form of a `.hoon` file.
39+* You have 45 days from the time of approval to complete this bounty.
40+
41+
42+## Milestones
43+
44+
45+### Your PR is merged
46+1 stars
47+Your PR containing all the relevant code updates is accepted and merged.
48+
49+
content/grants/bitcoin-node-json-rpc-api-part-4.mdnew file+48
@@ -0,0 +1,48 @@
1++++
2+title = "Bitcoin Node JSON RPC API (Part 4)"
3+date = 2019-10-01
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "Write a Remote Procedure Call library for a Bitcoin Gall app -- part four."
10+reward = 2
11+assignee = "yosoyubik"
12+id = "87854308"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+To expand Urbit’s Bitcoin-related capabilities, we are building a Gall app which can comprehensively control a Bitcoin Core full node via the JSON RPC API. The app is contained in [this branch](https://github.com/urbit/urbit/tree/btc-node-grant) of the Urbit repo, and the original conception of this idea is discussed [here](https://github.com/urbit/arvo/pull/1052). Our ultimate goal is to create Bitcoin libraries for Urbit, enabling Bitcoin to serve as a "money primitive" for future Gall apps.
19+
20+Bitcoin Core is the reference implementation for Bitcoin nodes, which can be run as _bitcoind_ or _bitcoin-qt_.
21+
22+#### Bounty Description
23+This bounty is to create a portion of the Gall app library for Remote Procedure Calls to a Bitcoin Core full node, written in Hoon. The other portions are covered in these grants: [One](https://grants.urbit.org/bounties/1507085808-bitcoin-node-json-rpc-api-part-1), [Two](https://grants.urbit.org/bounties/1577544668-bitcoin-node-json-rpc-api-part-2), [Three](https://grants.urbit.org/bounties/312452925-bitcoin-node-json-rpc-api-part-3).
24+* Specifically, this bounty is to create types and JSON conversions for commands and responses of the sections of the [Bitcoin Core API reference](https://bitcoincore.org/en/doc/0.18.0/ ) titled **"Wallet"** and **"ZMQ"**.
25+* Create type definitions in Hoon for structuring commands and responses. Specify poke-action types that map to each command. Use logic specified in Bitcoin Core API resource and the template contained in the guidelines, and fill in this code where appropriate in [`pkg/arvo/lib/btc-node-json.hoon`](https://github.com/urbit/urbit/blob/9bb9b20c71a0a46edc6c52dd869017d3a51ede30/pkg/arvo/lib/btc-node-json.hoon).
26+* The application will be structured as two Gall agents: one “Store” and one “Hook”. The store should act as a data store for data received from the Bitcoin full node, and the Hook should send commands to the node as well as parsing the responses and poking them into the Store. A [template branch](https://github.com/urbit/urbit/tree/btc-node-grant) has been created to set up skeletons of these files to make your work easier.
27+
28+#### Resources
29+* [Store/Hook proposal for userspace architecture](https://docs.google.com/document/d/1hS_UuResG1S4j49_H-aSshoTOROKBnGoJAaRgOipf54/edit?usp=sharing)
30+* [Urbit Gall App documentation](https://urbit.org/docs/learn/arvo/gall/)
31+* Bitcoin Core API reference documentation: [Here](https://bitcoincore.org/en/doc/0.18.0/), [here](https://bitcoin.org/en/developer-reference#remote-procedure-calls-rpcs).
32+* Distinctions between _bitcoind_ and _bitcoin-qt_: Differences between them discussed [here](https://bitcoin.stackexchange.com/questions/13368/whats-the-difference-between-bitcoind-and-bitcoin-qt-different-commands)
33+* [JSON RPC API standards](https://www.jsonrpc.org/specification)
34+
35+#### Contribution Guidelines
36+* Do not begin work until your request to claim this bounty is accepted. We will assign a designer to work with you on the interface.
37+* Base your work off of the [btc-node-grant branch](https://github.com/urbit/urbit/tree/btc-node-grant). Follow Boilerplate. Look for `TODO`s.
38+* Submit your code as a PR to the [btc-node-grant](https://github.com/urbit/urbit/tree/btc-node-grant) branch of the `urbit` repo in form of a `.hoon` file.
39+* You have 90 days from the time of approval to complete this bounty.
40+
41+## Milestones
42+
43+
44+### Your PR is merged
45+2 stars
46+Your PR containing all the relevant code updates is accepted and merged.
47+
48+
content/grants/bitcoin-wallet-on-bridge.mdnew file+58
@@ -0,0 +1,58 @@
1++++
2+title = "Bitcoin Wallet on Bridge"
3+date = 2019-12-09
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Azimuth"]
7+[extra]
8+image = ""
9+description = "Add Bitcoin support to the Bridge interface. "
10+reward = 1
11+assignee = "yosoyubik"
12+id = "273059635"
13+completed = false
14+link = ""
15++++
16+
17+### Background
18+
19+To expand Urbit’s Bitcoin-related capabilities, this bounty is to add Bitcoin support to the Urbit wallet on bridge.urbit.org. Our ultimate goal is to create Bitcoin libraries for Urbit, enabling Bitcoin to serve as a ‘money primitive’ for future Gall apps.
20+
21+### Bounty Description
22+
23+Create an SPV (simple payment verification) Bitcoin wallet within [Bridge](https://bridge.urbit.org). Bridge is written in React; please conform to the code style Bridge has thus far been written in.
24+
25+A completed wallet should:
26+- Use the bitcoinjs-lib library for generating transactions and interfacing with Bitcoin
27+- Display Bitcoin balance (display as individual UTXOs)
28+- Generate new addresses to receive Bitcoin
29+- Support transaction signing and ability to broadcast to a full node specified by the node’s domain name
30+- Reuse login credentials to generate Bitcoin wallets / derivation path
31+- When logged in with a master ticket, use the ownership mnemonic.
32+- When logged in with a BIP 39 mnemonic, use that as-is.
33+- Then, proceed as per BIP32
34+
35+### Resources
36+
37+- [Bitcoin Core SPV wallet reference](https://bitcoin.org/en/operating-modes-guide#simplified-payment-verification-spv)
38+- [JS Library to interact with SPV wallet](https://github.com/bitcoinjs/bitcoinjs-lib)
39+- [The Bridge repository](https://github.com/urbit/bridge)
40+- [Urbit Wallet Reference](https://github.com/urbit/fora-posts/blob/master/proposals/posts/~2018.11.8..19.31.59..ba77~.md)
41+- [Urbit Wallet Key Generation](https://github.com/urbit/urbit-key-generation]
42+- [BIP 32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)
43+- [BIP 39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki)
44+
45+### Contribution Guidelines
46+- Do not begin work until your request to claim this bounty is accepted. We will assign a designer to work with you on the interface.
47+- Bounty claimant should have a good working knowledge of React and Bitcoin transactions.
48+- Submit your code as a PR to the [Bridge](https://github.com/urbit/bridge) repository.
49+- You have 45 days from the time of approval to complete this bounty.
50+
51+## Milestones
52+
53+
54+### Pull request is accepted
55+1 stars
56+Your pull request containing all of the relevant code has been merged.
57+
58+
content/grants/boston-t-train-tracker-landscape-tile.mdnew file+54
@@ -0,0 +1,54 @@
1++++
2+title = "Boston T Train Tracker Landscape Tile"
3+date = 2020-03-24
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "Create a landscape tile that tracks the Boston T train."
10+reward = 3
11+assignee = "nforbes6"
12+id = "2039941382"
13+completed = false
14+link = ""
15++++
16+
17+### Bounty Description
18+
19+Create a backend for importing MBTA (Massachusetts Bay Transportation Authority) T Train arrival and departure data and service alerts via the MBTA public API to Urbit, and design a Landscape tile which will serve as a route planner app inside Urbit.
20+
21+We would like to create a T Train information Landscape tile. The backend should access real-time departure and arrival information for the complete list of stations via the MBTA API, as well as the data feeds for schedule tables, elevator outages, and customer alerts. The tile interface should encompass:
22+
23+- A real-time trip planner using the MBTA data, similar to the one on the official MBTA website.
24+- Links for schedule tables for weekday, weekend, and holiday service.
25+- A link to the official MBTA L Train map linked below, or an open-source workaround.
26+- A place (possibly a scrolling feed?) for MBTA alerts, using the ‘Alerts’ API stream.
27+- A place for MBTA station facilities closure status information.
28+
29+### Resources:
30+
31+- [MBTA V3 API Feeds](https://www.mbta.com/developers/v3-api)
32+- [MBTA Developer Resources](https://www.mbta.com/developers/resources)
33+- [MDOT API Developer License Agreement](https://www.mass.gov/files/documents/2017/10/27/develop_license_agree_0.pdf)
34+
35+## Contribution Guidelines:
36+
37+- Do not begin work until your request to claim this bounty is accepted.
38+- Do not use copyrighted images, including the MBTA logo or the official route map. Instead, always refer to MBTA in plaintext. You should include an external link to the T Train route map; do not host this map locally (we are open to an open-source, good quality route map which does not include the MBTA logo or other trademarks, however).
39+- Please read the Developer License Agreement carefully and obey their guidelines for application naming and presentation of API data.
40+- Submit your work as a pull request to the [urbit/urbit](https://github.com/urbit/urbit/pulls) repo
41+- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
42+- You have 90 days from the time of approval to complete this bounty.
43+- Successful completion of this bounty may result in an invitation to complete other API integration bounties.
44+
45+
46+
47+## Milestones
48+
49+
50+### Your PR is merged
51+3 stars
52+Your code is accepted and merged.
53+
54+
content/grants/bounties/_index.mdnew file+4
@@ -0,0 +1,4 @@
1++++
2+title = "Bounties"
3+template = "grant_type/bounties.html"
4++++
content/grants/calendar-ui.mdnew file+53
@@ -0,0 +1,53 @@
1++++
2+title = "Calendar UI"
3+date = 2020-07-16
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "Build a Landscape-native calendar UI"
10+reward = 2
11+assignee = "finled-bansel"
12+id = "1555464949"
13+completed = false
14+link = ""
15++++
16+
17+# Purpose
18+
19+A calendar is an indispensible personal tool to many people. A [previous proposal](https://grants.urbit.org/proposals/1851255517) has started work on an Urbit-native calendar. This previous proposal seeks to create a parser and a Gall agent to manage the data layer of a calendar app.
20+
21+The current proposal aims to create a Landscape tile and app to improve the accessibility of a Calendar Gall app. The Calendar UI will provide several screens to interact with the calendar. These are a monthly view, a daily view and a page to create new events.
22+
23+# Implementation and deliverables
24+
25+The UI will be backed by the calendar app implementation described in the aforementioned previous proposal. In order to allow the parallel implementation of a UI and the Gall app, this proposal will be executed in two stages.
26+
27+The first stage is the development of working prototypes of the screens that the calendar will initially support. These include:
28+ - a monthly view with clickable dates to daily views;
29+ - a daily view that lists the events in chronological order with a short description
30+ - a form to create new events with fields for the required properties per RFC 5545.
31+
32+The deliverables will be functional web pages that can be integrated with Landscape. The screens will be built entirely with components from the [Indigo-react](https://github.com/urbit/indigo-react) library.
33+The UI will be built with the assumption that event participants are ships.
34+
35+The second stage is to integrate the screens with the Gall agent implemented as part of the first proposal. This takes a dependency on a correctly functioning calendar Gall app. The requisite
36+
37+# Basis for future integration
38+
39+These pages can provide the basis for UX experiments and integrations with other parts of Landscape. One possibility is to integrate notebook posts with the timeline of a calendar, allowing a temporal exploration of the notebook posts a ship has seen.
40+
41+## Milestones
42+
43+
44+### Functional pages
45+1 stars
46+Build the necessary pages that will allow Landscape to interact with a Calendar Gall app
47+
48+
49+### Working integration with Gall app
50+1 stars
51+Fully capable of importing an .ics calendar, creating new events, looking through existing events in the calendar of a ship.
52+
53+
content/grants/calendar.mdnew file+115
@@ -0,0 +1,115 @@
1++++
2+title = "Calendar"
3+date = 2020-05-19
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "An Arvo calendar agent based on the iCalendar spec."
10+reward = 5
11+assignee = "Josh Lehman, ~wolref-podlex, sovmep-ripsum"
12+id = "1851255517"
13+completed = false
14+link = ""
15++++
16+
17+## Purpose
18+
19+Urbit provides a growing set of tools for communication with groups of people, but is sorely missing a native calendar. For those of us looking to get away from big G for managing our schedules (i.e. everyone reading this) a calendar is an indispensable tool to have in Urbit.
20+
21+Calendars are a sizable undertaking both in terms of data management (modeling & persistence) and user interface, so the authors have decided to limit the scope of this proposal to the data layer, leaving a polished user interface for a future proposal.
22+
23+## Deliverables
24+
25+The goal of this proposal is to create a gall agent that can be used to store a calendar of events on a ship, and to expose calendars as an additional pubsub channel in the same vein as chats, links and notebooks. Additionally, we'll provide accompanying generators for creator, importing events from `.ics` files and direct creation of events.
26+
27+## Team
28+
29+Josh Lehman (~wolref-podlex), has been following Urbit since ~2014 when it first began appearing on Hacker News. In the interim he's been working on Starcity, where he leads the software arm of the business. While new(ish) to Hoon, Josh is no stranger to functional programming, having worked in Clojure for the better part of the last six years.
30+
31+Raghu Nimmagadda (~sovmep-ripsum), is a software engineer with a fair amount of FP experience (Racket, Ocaml, some Haskell). While he's fairly new to Urbit, he's interested in learning and building his hoon skills (recently graduated hoon school 101 and is working on a gall app in his free time).
32+
33+## iCalendar
34+
35+### Rationale
36+
37+The goal is to allow import from iCalendar, but not export to it. There's no reason this couldn't be done, but we're trying to drive towards "calendaring within Urbit" moreso than "calendaring between Urbit and Earth tech." We believe this is more in line with an apparent guiding philosophy behind other applications built so far.
38+
39+So, why base anything on iCalendar at all? Two reasons:
40+
41+1. It's prior art on how a calendaring system should work, which by all appearances works pretty well. As neither of us have experience with building a calendar (and wouldn't exactly call ourselves "calendar researchers"), this seems like a good starting point that should provide ample guidance on the domain-specific components.
42+2. A way to import an existing calendar into Urbit would be a cool feature anyways, since many of us (...or at least some people we know) have personal calendars that should really be on a personal server.
43+
44+We expect to create and maintain a useful degree of iCalendar compatibility, and to also make Urbit-specific deviations on an as-needed basis.
45+
46+### Parser Overview
47+
48+The parser will parse `.ics` files containg VEVENTs into hoon data structures. This will not support top level calendar properties, i.e. properties that apply to the entire calendar, but will support the following required component properties for `VEVENT` as per RFC 5545.
49+
50+```
51+UID
52+DTSTAMP
53+DTSTART
54+DTEND
55+DURATION
56+```
57+
58+The following optional component properties will also be supported.
59+
60+```
61+CATEGORIES
62+CLASS
63+COMMENT
64+DESCRIPTION
65+SUMMARY
66+ORGANIZER
67+GEO
68+LOCATION
69+STATUS
70+RRULE
71+RDATE
72+EXDATE
73+```
74+
75+The goal of this step is to have something that can parse a `.ics` like this (example taken from RFC 5545). A full list of component properties can be found [here](https://tools.ietf.org/html/rfc5545#section-3.1).
76+
77+```
78+BEGIN:VCALENDAR
79+VERSION:2.0
80+PRODID:-//hacksw/handcal//NONSGML v1.0//EN
81+BEGIN:VEVENT
82+UID:19970610T172345Z-AF23B2@example.com
83+DTSTAMP:19970610T172345Z
84+DTSTART:19970714T170000Z
85+DTEND:19970715T040000Z
86+SUMMARY:Bastille Day Party
87+END:VEVENT
88+END:VCALENDAR
89+```
90+
91+If time permits, we'd also want to support parsing VALARM components, which correspond to alarms/reminders about events. These components can be nested within VEVENTs, and have three flavors - audio, display, and email (each representing the kind of reminder the component can give you). We aim to support parsing display alarms (displaying some text) initially, as audio is only useful once a UI is built and we don't have email on mars. While handling the alarms is outside the scope of this proposal, by parsing them we hope to make it easy for future proposals to build on them.
92+
93+## Milestones
94+
95+
96+### VEVENT Parser
97+1 stars
98+A generator that can parse `.ics` files from the dojo containing VEVENTs into hoon data structures. This milestone will NOT support top-level calendar properties.
99+
100+
101+### Calendar Gall Agent
102+1 stars
103+Creation of a gall agent that can be used to persist and read events from `.ics` files into a "calendar" on the running ship.
104+
105+
106+### Gall Agent Enrichment
107+1 stars
108+Extend the gall agent to support queries (e.g. within a range), updates and deletes of events, and a generator to create events without use of `.ics` files.
109+
110+
111+### Pubsub/Channel Support
112+2 stars
113+Extend the gall agent to allow pubsub with other ships and integration with Groups to ultimately allow calendars to exist as an additional channel.
114+
115+
content/grants/comprehensive-local-server-and-mum-explanation-video.mdnew file+41
@@ -0,0 +1,41 @@
1++++
2+title = "Comprehensive local, server and mum explanation video"
3+date = 2021-01-31
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Series of three videos:1) Purchase planet, install and run on a local machine2) nginx setup3) Explaining Urbit to my tech illiterate mum "
10+reward = 1
11+assignee = "mislyr-midnyt"
12+id = "2020133197"
13+completed = false
14+link = ""
15++++
16+
17+# Scope
18+
19+## First video
20+Create a comprehensive video describing how to purchase (or obtain) and run an Urbit planet. Brief overview on how to use Urbit. Mention hosting providers (Tlon) for those who don't want to do this.
21+
22+## Second Video
23+Instruct on how to register a domain name, provision a VPS, setup DNS and create an nginx reverse proxy to create a publicly accessible Let's Encrypt secured public facing Urbit.
24+
25+## Third Video
26+Explain Urbit in a simple way to my sister and technologically illiterate mum. It can be somewhat difficult to explain Urbit to people, so this video should provide an overview for people with no technical knowledge.
27+
28+# Additional Info
29+
30+Videos will be entertaining and engaging, not entirely dissimilar to voice messages posted on urbit-community. Reckon this will be a good way to allow people to very easily onboard onto the network.
31+
32+Granted star would be used to onboard friends, family and people from the easypeasymethod.org community (currently Discord server).
33+
34+## Milestones
35+
36+
37+### Record, edit and upload all videos
38+1 stars
39+Upload all three videos to Youtube, post links in proposal updates.
40+
41+
content/grants/content-saver.mdnew file+44
@@ -0,0 +1,44 @@
1++++
2+title = "Content Saver"
3+date = 2020-03-20
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "Extract and save content from HTML."
10+reward = 2
11+assignee = "lurodrigo (~tirdyr-lagrum)"
12+id = "1163181298"
13+completed = false
14+link = ""
15++++
16+
17+Build an endpoint that enables the extraction of a web-pages content from HTML. The backend functionality of the [Instapaper](https://www.instapaper.com/) app should be the model here, as should the [Reader from Firefox](https://github.com/mozilla/readability).
18+
19+This app should be able to: Copy both a given highlighted block of text, or a discrete page in Urbit’s blog/Publish application, give the user the option of renaming it, and save it in Markdown to the user’s Urbit planet or ship.
20+
21+If you have a web scraper that can go out and fetch web pages for you, like the one indicated in [this bounty](https://grants.urbit.org/bounties/1967189374-web-scraper), you can just poke the Publish app to save it and be able to read it in Publish. (Note: this bounty is not to build a web scraper, but simply the content-extraction component)
22+The file should strip the content out of HTML and save it into the Markdown format.
23+
24+### Resources:
25+
26+- [The Instapaper API](https://www.instapaper.com/api)
27+- [Firefox Readability](https://github.com/mozilla/readability); this implementation can be copied to the extent that you desire.
28+
29+### Contribution Guidelines:
30+
31+- Do not begin work until your request to claim this bounty is accepted. We will assign a designer to work with you on the interface.
32+- Do not begin work until your request to claim this bounty is accepted. We will assign a designer to work with you on the interface.
33+- Submit your code as a PR to the [urbit](github.com/urbit/urbit] repository.
34+- You have 90 days from the time of approval to complete this bounty.
35+
36+
37+## Milestones
38+
39+
40+### PR is merged
41+2 stars
42+Your code is accepted and merged.
43+
44+
content/grants/cross-platform-desktop-urbit-app.mdnew file+85
@@ -0,0 +1,85 @@
1++++
2+title = "Cross-Platform Desktop Urbit App"
3+date = 2021-02-23
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "A native app that makes running Urbit near friction-less for everyone."
10+reward = 10
11+assignee = "nocsyx-lassul"
12+id = "740109059"
13+completed = false
14+link = ""
15++++
16+
17+# Taisho, A native cross-platform desktop Urbit app
18+
19+## Introduction
20+Urbit is gaining momentum, and soon we'll have apps that people really want to use. Currently people from outside Urbit see joining as something of a hassle or time investment that they may not want to make. Taisho will help alleviate those fears and ease people into the process of joining Urbit by running it for them.
21+
22+## Features
23+The main feature of Taisho is that it runs Urbit for you, offering a simple interface without need for explanation to get running.
24+
25+- Ease of install, simply download and run
26+- Boots and runs new and existing planets, moons and comets (maybe stars in the future)
27+- **Ship management**: keeps track of ships, auto-resumes ships when launching, giving them a user selected name, place them in a folder of your choosing, one-click ejection for moving to hosting
28+- **Azimuth integration**: operates locally for greater security
29+ - generate arvo keyfile for booting planets
30+ - handles keyfiles for user making first time booting less complicated
31+ - ensures keyfiles get deleted after use
32+
33+## Potential Future Paths Unlocked
34+- **Plugin/Marketplace system**: would open pathways for easy transitions to hosting, planet buying, downloading and managing Urbit apps/plugins
35+- **Native integration**: if we were to integrate Landscape, Taisho could provide a bridge to OS operations that might be currently difficult to accomplish with the Urbit binary.
36+- **Education**: operations being run could be exposed through the UI so that people could learn what's going on behind the scenes in context.
37+
38+## App Architecture
39+The current architecture is an Electron app which wraps the Urbit binary. This gets packaged into a simple zip or package installer which can be run immediately.
40+
41+### Electron
42+The app uses principles based on this article by James Long, [The Secret of Good Electron Apps](https://archive.jlongster.com/secret-of-good-electron-apps). It is split into a main, renderer, and background process which keeps performance high. Urbit itself is spawned as a separate process which also helps keep things performant.
43+
44+### Front-end
45+The renderer or front-end of the app is built with React, Typescript, and TailwindCSS. This should allow people who have worked on Landscape to have familiarity, and give an easier path if we were to incorporate Landscape itself in the future.
46+
47+## Current Progress
48+Currently, Taisho is able to run on both MacOS and Linux. It can boot new comets, keep record of comets booted with it, and resume the Urbit process of the comet if it gets killed. It is code-signed with Apple so that it can be distributed easily and not require special permissions.
49+
50+## Star Usage
51+If awarded stars, most of them would go towards offering the ability to purchase planets and immediately host them from a service I plan to build in the future, after reaching a stable point in Taisho.
52+
53+## Final Thoughts
54+People like to jump in and experiment with things first. I think this app provides an extremely easy way to do that before committing to spending time on the network, getting hosting or buying a dedicated device, because it provides a no-knowledge way of running Urbit. It also opens a lot of avenues for Urbit. For one, it can be a kind of hub for different services, plugins, apps etc. Another possibility is embedding Landscape, to bring features that wouldn't be possible in a plain web app. I think Taisho can act as a helpful guide for many people's first trek into Urbit.
55+
56+---
57+
58+## About Me
59+My name is Hunter Miller, and I've been building on the web for 7 years. I currently work as a Senior Software Engineer for This Dot building websites and web apps for our clients. I'm focused on delivering the best user experience, which takes delicate coordination between back-end and front-end architecture to really achieve near-perfection. Throughout my time as a developer I've gained a variety of experience starting at an advertising and design agency, moving to a half a billion dollar e-commerce website, and then on to a high-level contracting and consulting firm.
60+
61+You can checkout [my website](https://hmiller.dev/), [LinkedIn](https://www.linkedin.com/in/hunter-miller-dev/), and [Twitter](https://twitter.com/hmillerdev) to see more about me.
62+
63+## Milestones
64+
65+
66+### Ability to run basic ship features
67+1 stars
68+Includes start/stop/restart ship, show status, eject ship for hosting, boot new planets, moons, and comets, boot existing planets and comets, act as browser for hosted ships, and ship removal.
69+
70+
71+### (Timeboxed) Proof of Concept for Windows
72+1 stars
73+To include the Windows' user base, the PoC should enable running on Windows either through WSL or some other means. Two week timebox to make sure we don't spend too much time here.
74+
75+
76+### Urbit Client Beta Release
77+4 stars
78+Significant testing during this time. Cross-platform, include all basic ship features, with no major bugs. Renamed to Urbit Client and added to urbit.org as an easy download.
79+
80+
81+### Azimuth Integration and Official Release
82+4 stars
83+Integrating Urbit key generation for easy booting of new planets. Adding further refinements to UI, all moderate issues resolved, and documentation for users and contributors.
84+
85+
content/grants/cta-train-tracker-landscape-tile.mdnew file+49
@@ -0,0 +1,49 @@
1++++
2+title = "CTA Train Tracker Landscape Tile"
3+date = 2020-03-18
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "Build an app to track the schedule of the Chicago Transit Authority."
10+reward = 3
11+assignee = "tomnash"
12+id = "1262889675"
13+completed = false
14+link = ""
15++++
16+
17+### Bounty Description
18+
19+Create a backend for importing CTA (Chicago Transit Authority) L Train arrival and departure data and service alerts via the CTA public API to Urbit, and design a Landscape tile which will serve as a route planner app inside Urbit.
20+
21+We would like to create a L Train information Landscape tile. The backend should access real-time departure and arrival information for the complete list of stations via the CTA API, as well as the data feeds for schedule tables, elevator outages, and customer alerts.
22+
23+The tile interface should encompass:
24+
25+- A real-time trip planner using the CTA data, similar to the one on the official CTA website.
26+- Links for schedule tables for weekday, weekend, and holiday service.
27+- A link to the official CTA L Train map linked below, or an open-source workaround.
28+- A place (possibly a scrolling feed?) for CTA alerts, using the ‘Customer Alerts’ API.
29+- A place for CTA station elevator closure status information.
30+
31+### Resources
32+- [CTA Developer Center](https://www.transitchicago.com/developers/)
33+- [CTA Branding Guide for Open API Apps](https://www.transitchicago.com/developers/branding/)
34+- [CTA Developer License Agreement](https://www.transitchicago.com/developers/terms/C)
35+
36+### Contribution Guidelines
37+- Do not begin work until your request to claim this bounty is accepted.
38+- Please note that this bounty is for the CTA Train API and not for the CTA Bus API.
39+- Do not use copyrighted images, including the CTA logo or the official route map. Instead, always refer to CTA in plaintext, and use the provided train image which is detailed in the above Developer License Agreement link. You should include an external link to the CTA L Train route map; do not host this map locally (we are open to an open-source, good quality route map which does not include the CTA logo or other trademarks, however).
40+- Please read the Developer License Agreement and Branding Guide carefully and obey their guidelines for application naming and presentation of API data.
41+
42+## Milestones
43+
44+
45+### Your PR is merged
46+3 stars
47+Your code is accepted and merged.
48+
49+
content/grants/display-eth-data.mdnew file+56
@@ -0,0 +1,56 @@
1++++
2+title = "Display ETH Data"
3+date = 2020-01-31
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "The Urbit identity system uses a suite of Ethereum contracts as its PKI. As such, a lot of Ethereum-related functionality is available within the system."
10+reward = 1
11+assignee = "dominic22"
12+id = "831044524"
13+completed = false
14+link = ""
15++++
16+
17+### Bounty Description
18+
19+Create a gall application, and a user interface for that application, that are used to view events on any given Ethereum contract. Both components must meet the specifications enumerated below.
20+
21+##### Gall application
22+
23+- Depends upon /app/eth-watcher
24+- Based on contract address and ABI (json), subscribes to all contract events.
25+- Based on contract address, ABI, and event names/parameters, subscribe to specific events.
26+- Set up with just contract address, retrieving ABI from etherscan.io API.
27+- Stores lists of events and relevant details per contract and config, and make them available to the user interface.
28+
29+##### User interface
30+
31+- Allows adding/removing watched contracts per the above app interface.
32+- Displays events, per contract+config or for all watched, in readable format (ie, "Transfer: from: 0xabc, to: 0xdef, value: 123", with block number or timestamp, link to transaction on Etherscan.")
33+- Allows visual filtering of listed events.
34+
35+### Resources
36+
37+- The [eth-watcher](https://github.com/urbit/urbit/blob/master/pkg/arvo/app/eth-watcher.hoon) code.
38+- [Ethereum ABI value decoding stdlib](https://github.com/urbit/urbit/blob/4915ceb96bdd56f5b1f25504d1c68f8d41161540/pkg/arvo/sys/zuse.hoon#L8317)
39+- [Ethereum Contract APIs](https://etherscan.io/apis#contracts)
40+
41+### Contribution Guidelines
42+
43+- Do not begin work until your request to claim this bounty is accepted.
44+- Email your work to grants@urbit.org.
45+- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
46+- You have 90 days from the time of approval to complete this bounty.
47+
48+
49+## Milestones
50+
51+
52+### Work is finished
53+1 stars
54+Your work has been finished and accepted.
55+
56+
content/grants/docker-image-for-cloud-container-orchestration.mdnew file+46
@@ -0,0 +1,46 @@
1++++
2+title = "Docker image for cloud container orchestration"
3+date = 2020-12-21
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Dev Tool"]
7+[extra]
8+image = ""
9+description = "Nix infrastructure to generate Docker images for Urbit releases. Images would be suitable for cloud orchestration in e.g. Amazon ECS"
10+reward = 1
11+assignee = "Edward Amsden ~ritpub-sipsyl"
12+id = "626138244"
13+completed = false
14+link = ""
15++++
16+
17+Many cloud providers offer container orchestration services that abstract away from managing servers or compute instances (e.g. Amazon ECS, Azure Container Instances). A docker image tagged for the latest version of Urbit would drastically simplify the process of deploying urbits to the cloud, which is preferable for planets, stars, and galaxies.
18+
19+# Deliverables
20+- A merged pull request to the urbit/urbit repository, with nix code to generate a docker image
21+ * With a volume-mountable path for a ship
22+ * With a volume-mountable path for a keyfile
23+- CI integration to release the docker image as a GitHub artifact when version releases of Urbit are cut
24+- CI integration to publish the image on Docker Hub when version releases of Urbit are cut
25+- Documentation:
26+ - Reference for volume mounts and controlling the behavior of Urbit in a container
27+ * Volume mount points for keyfiles or existing ships
28+ * Ports to publish for Landscape and external API access.
29+ - Quickstarts for deploying an Urbit ship to
30+ - Amazon ECS
31+ - Azure Container Instances
32+
33+# Team
34+Edward Amsden ~ritpub-sipsyl is a veteran developer with several years experience using Nix to manage production builds and deployments. He is the principal of Black River Software LLC
35+
36+## Milestones
37+
38+
39+### Merged PR: Nix docker integration
40+1 stars
41+- Nix code to generate an Urbit docker image
42+- CI integration to release docker images on GitHub
43+- CI integration to publish docker images on Docker Hub
44+- Documentation
45+
46+
content/grants/educational-guide-todomvc-urbit-edition.mdnew file+331
@@ -0,0 +1,331 @@
1++++
2+title = "Educational Guide: TodoMVC, Urbit Edition"
3+date = 2021-01-05
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Documentation"]
7+[extra]
8+image = ""
9+description = "The goal of this bounty is to create a series of guides that can instruct a newcomer to Urbit as to how to go about creating a full-stack application from scratch."
10+reward = 10
11+assignee = "~rabsef-bicrym"
12+id = "1372696624"
13+completed = false
14+link = ""
15++++
16+
17+## Overview
18+
19+The goal of this bounty is to create a series of guides that can instruct a
20+newcomer to Urbit as to how to go about creating a full-stack application from
21+scratch. Together, they'll form a an introductory course to development on
22+Urbit.
23+
24+The application we'll demonstrate is the classic [TodoMVC](http://todomvc.com/examples/react/#/) app, which many
25+developers will be immediately familiar with. Even if a newcomer isn't familiar
26+with TodoMVC, it's quite easy to get a handle on it because it's a todo
27+list--surely *everyone* at this point has experience with todo lists.
28+
29+The classic TodoMVC example is a simple, functional and aesthetically pleasing
30+web-based todo list. What it lacks, however, is any form of persistence or
31+collaborative qualities; both of which are complex undertakings with traditional
32+web development. Our guide will demonstrate just how simple it is to give an
33+application these capabilities on Urbit, leading to a production-ready application.
34+
35+## Part 1: Serving Static Content
36+
37+Urbit ships with a web server called `eyre` which can do most of the things that
38+any other web server can, including serving static content, like a single page
39+application.
40+
41+By default, your Urbit is configured to serve Landscape at the `/` and
42+`/~landscape` URIs. Landscape is a single-page application that performs its own
43+client-side routing, but it's also possible to serve other applications as well.
44+For reference, see the
45+[debug](https://github.com/urbit/urbit/blob/959b585b384f66e54421f70f95d6d152077907bb/pkg/arvo/app/dbug.hoon)
46+application, which is a standalone application served from the `/~debug` URI.
47+
48+Our goal is to serve a pre-built `TodoMVC` application at the route `/~todo`.
49+It's important to note that this process could be applied to serve *any* HTML
50+file, whether it's a single-page application or not. With very little
51+imagination, it becomes easy to see how one could serve their personal blog at
52+`/~blog`, or a static "About Me" page at `/~about`.
53+
54+Urbit as a personal *file* server is useful in and of itself, but it will
55+require a basic understanding of Hoon, Clay, Gall, and the development
56+environment more generally. We'll break this guide into two sections: one
57+focused on getting a development environment set up, and another on actually
58+using it.
59+
60+### Part 1a: Setting up your Development Environment
61+
62+This section is fairly straightforward, as it has been covered many times
63+before. ~timluc-miptev's gall guide has a [great
64+overview](https://github.com/timlucmiptev/gall-guide/blob/master/workflow.md#three-workflow-options)
65+of how to work with fake ships efficiently, and the existing documentation has
66+plenty of material material.
67+
68+After the basic process of getting started, we'll want to cover how to develop
69+against a separate project repo, why you'd want to do that, how files are synced
70+with development ships (this is essentially the "deployment process"), and how
71+to use some basic generators.
72+
73+This guide should satisfy the following user stories, each of which start with
74+*As a new developer reading this guide, ...*:
75+
76+- I can install the Urbit binary.
77+- I can boot a fake ship for development.
78+- I can mount a pier.
79+- I can create new fake ships quickly.
80+- I have set up a project repository for my code.
81+- I understand the relationship between my project repository and my ship.
82+- I can copy files from my project repository to my ship.
83+- I can use a generator to inspect the contents of copied files.
84+
85+### Interlude: Hoon, Clay and Generators
86+
87+At this point it's probably worth digging a little deeper into some of the
88+things that were skimmed over in the last part. For starters, we did a good
89+amount of work with `clay` in the last lesson without really digging into what
90+it is or how it works.
91+
92+To start, let's talk a bit about what a pier is and its relation to the unix
93+filesystem, the way files are represented and how to navigate our pier from
94+within Urbit (*e.g.* `+ls %`, `+cat %/gen/cat`), and what `|mount` and `|commit`
95+are doing (at a high level).
96+
97+That might be a good segue into some basic Hoon via a super simple
98+generator--just enough to explain important syntax rules (*e.g.* ace v. gap),
99+the concept of runes, and provide links to places where you can learn more about
100+all of these things.
101+
102+### Part 1b: Serving the TodoMVC Application
103+
104+This section covers the process of serving static content to a URI within your
105+Urbit.
106+
107+First, you'll need to select a version of TodoMVC to use. For a modern and
108+widely understood version, I'd recommend the
109+[react-hooks](https://github.com/tastejs/todomvc/tree/master/examples/react-hooks)
110+version.
111+
112+The meat of this section is really in creating a simple gall agent that can be
113+used to serve the TodoMVC app directory. There are two ways you could go about
114+this: a) use the `file-server` agent, or b) use `eyre` directly, as is done with
115+the
116+[`dbug`](https://github.com/urbit/urbit/blob/959b585b384f66e54421f70f95d6d152077907bb/pkg/arvo/app/dbug.hoon)
117+application. Regardless of which option is chosen, a demonstration of the
118+conversion from one to the other would be an informative bonus lesson.
119+
120+By the end of this lesson:
121+
122+- I understand what Gall is at a high level.
123+- I know what an *agent* is.
124+- I know how to start a gall agent.
125+- I can serve a static file (or directory of files) from a URI on my ship.
126+
127+## Part 2: Data Modeling
128+
129+Now that we can serve a TodoMVC client, our next goal is to get it to actually
130+persist its data. In order to accomplish that we'll first have to spend some
131+time thinking about what our data actually looks like.
132+
133+There are two broad areas of our data model that we'll want to think about:
134+
135+1. What kind of data will represent our state, and
136+2. What kinds of actions we'll take to modify our state.
137+
138+After working through what we'll want to store and how we'll make changes to the
139+items in that store, we should then segue into how to represent our data as Hoon
140+types. The natural language description of our data model should lend itself to
141+a corresponding representation in Hoon, allowing the reader to mmediately ground
142+the Hoon in an understood domain.
143+
144+Through the course of discussing how to represent todos and the actions to take
145+upon them, the concepts of molds, standard library types and Hoon's type system
146+can be gently introduced.
147+
148+By the end of this lesson:
149+
150+- I know how to define my own structures.
151+- I know how to interpret the contents of my `/sur` directory.
152+- I have a basic understanding of Hoon's built-in types and structures.
153+- I know how to work with types in the Dojo.
154+
155+## Part 3: Taking action
156+
157+In the last lesson we defined our data model and the actions that will be taken
158+upon it. In this lesson we'll extend our original gall agent to be aware of our
159+data model.
160+
161+First, we'll cover the concept of a `poke` by handling the actions we defined in
162+the previous lesson. Along the way we'll need to set up our agent's state using
163+the types we defined previously. This portion will be an ideal time to introduce
164+the way a running agent can be poked from the dojo.
165+
166+After using `~&` to print our state upon various actions for a while, we'll
167+demonstrate the purpose of `scry` and extend our agent's `on-peek` arm to expose
168+ways of reading our state through direct, explicitly written scrys.
169+
170+By the end of this lesson:
171+
172+- I know how my application store its state.
173+- I know how to modify my application's state.
174+- I know how what a `poke` is, what it's for, and how to respond to one.
175+- I can poke my agent from the dojo.
176+- I know what `scry` is.
177+- I know how to expose scry paths in `on-peek`.
178+- I can `scry` my agent.
179+
180+## Part 4: Client Integration
181+
182+There's a lot to cover in this section, so it'll probably be best to break it up
183+into multiple sections. When integrating with a client we need to take care of
184+writing to our urbit and receiving data from it when things change, which means
185+we need to understand a) how to work with JSON data coming and going from our
186+ship to the browser, b) the architecture of how Urbit interacts with the outside
187+world over HTTP, and c) how to combine this knowledge into a React application.
188+
189+### Part 4a: Working with JSON in Hoon
190+
191+Most of the outside world speaks in JSON, which means that our Urbit, at least
192+for now, also needs to understand how to parse and serialize its data into this
193+structure.
194+
195+Parsing JSON in JavaScript is fairly straightforward, because JS is dynamically
196+typed; Hoon however, is statically typed, which makes our task a bit more
197+challenging.
198+
199+This guide should cover the process of both parsing JSON into Hoon data
200+structures and going the other way; turning Hoon data structures back into JSON
201+for sending to a client.
202+
203+By the end of this lesson:
204+
205+- I understand how to parse JSON in Hoon.
206+- I understand how to serialize Hoon into JSON.
207+- I understand how Hoon's type system relates to JSON parsing.
208+
209+### Part 4b: Client-server architecture & subscriptions
210+
211+Urbit makes heavy use of [Command Query Responsibility
212+Segregation](https://www.martinfowler.com/bliki/CQRS.html), or CQRS, which means
213+that our application can either issue *commands* or *queries*, but not both
214+simultaneously. This is contrasted with the more common Create Read Update
215+Delete (CRUD) model, in which our client is performing more direct manipulation
216+of records in a datastore. In Urbit, CQRS is paired with an [Event
217+Sourcing](https://www.martinfowler.com/eaaDev/EventSourcing.html) approach,
218+which means that our model for receiving information on the client is as a
219+stream of events.
220+
221+In a CRUD-style model, a Todo client would work as follows:
222+
223+1. Client queries (Read) for all todos to load into the page.
224+2. Client creates (Create) a new todo, which produces a response with the new
225+ todo.
226+3. The returned todo is added to the list.
227+
228+To contrast that with a CQRS + Event Sourcing model, we'd have the following:
229+
230+1. Client queries for all todos to load into the page.
231+2. Client sets up a subscription to receive any new todos that are created as
232+ events.
233+3. Client issues a command to create a new todo, which produces *no response,*
234+ since these responsibilities are separated.
235+4. After the new todo is created by the server, it emits an event which is
236+ picked up by the subscription in step (2), which is then added to the list.
237+
238+In practice, step (1) above is actually unnecessary, because the subscription in
239+step (2) can be configured to produce all todos as an initial event upon
240+instantiation.
241+
242+This pattern is implemented in Urbit with `poke`, `scry`, (covered in the last
243+section) and `watch`. A `poke` is our terminology for a command, a `scry` is for
244+querying, and `watch` is for subscribing to updates to our data when they
245+happen. We've already seen commands (`poke` and queries (`scry`), but
246+subscriptions (`watch`) are new, and much more commonly used than queries for
247+the same reason as our query above could be eliminated.
248+
249+Most web developers are much more familiar with the CRUD approach than they are
250+with the model that Urbit uses, so it's worth explaining why this more complex
251+approach is employed.
252+
253+The answer becomes clear when you consider Urbit's primary purpose, which is for
254+building distributed systems. In a distributed system, each agent is interacting
255+with many others through message passing. Imagine a chat application, in which
256+many agents are sending messages at once: creating a message and then adding the
257+returned message into your UI would work for messages *you* send, but would miss
258+any messages sent to you by other agents. In Urbit's approach, messages sent by
259+other agents are no different than those sent by your agent, meaning the same
260+implementation that handles one agent also handles *n* other agents.
261+
262+After explaining the rationale behind the approach, we'll want to demonstrate
263+how to extend `on-watch` to expose our todos, how to publish events to
264+subscribers, and how to get those events to a client. This lesson should focus
265+on making the mechanics of getting information from client to server and back
266+again clear--actually wiring up the TodoMVC frontend can wait until the next
267+lesson.
268+
269+By the end of this section:
270+
271+- I understand why a client sets up subscriptions instead of receiving direct
272+ data responses.
273+- I know how to expose data to subscribers via `on-watch`.
274+- I know how to publish state changes to subscribers.
275+- I understand how data travels from my client to my ship.
276+- I understand how data travels from my ship to my client.
277+
278+## Part 5: Collaboration
279+
280+The final phase of this guide should demonstrate the ways in which applications built on Urbit can communicate with one another. TodoMVC has no built-in interface mechanic for this, so you'll have to be a bit creative and think through what "multiplayer mode" looks like for TodoMVC. It's okay for this to be fairly simple, as our goal is to demonstrate how to extend an agent to work with others—not to build a great collaborative todo list.
281+
282+It's likely (and desirable) that the addition of this feature introduces the need to update our data model to handle todo lists belonging to multiple different ships (since before we were only dealing with our own todos). That makes this an ideal time to demonstrate how to upgrade our application's state to a new version, as one would do in the real-world with a major feature addition.
283+
284+By the end of this section:
285+
286+- I understand how to set up a subscription on a foreign ship.
287+- I understand how to tear down subscriptions.
288+- I understand how to store and represent data belonging to multiple ships.
289+- I understand how to upgrade my application's state.
290+
291+
292+## Deliverables
293+Your solution to this bounty should include:
294+
295+* A standalone repository with gall agent(s) that demonstrate each working part.
296+* A pull request against the [urbit/docs](https://github.com/urbit/docs) repository that adds guided tutorials for each section.
297+
298+## Expectations
299+
300+You will work closely with the director of urbit.org on this project. This means that regular check-in calls will be held to discuss the project's progress. Additionally, the you are expected to provide regular status updates on the project to the Urbit community via twice-monthly updates on this bounty.
301+
302+The director will ensure that you have access to the necessary resources to complete this project. All prior work done on this project will be explained and made available to you, and should questions arise that require the expertise of engineers at Tlon, time will be made (schedules permitting) for your questions to be answered either in writing or over a call.
303+
304+## Milestones
305+
306+
307+### Part 1: Serving Static Content
308+2 stars
309+Sample code and guide are completed and ready for merge against urbit/docs.
310+
311+
312+### Part 2: Data Modeling
313+1 stars
314+Sample code and guide are completed and ready for merge against urbit/docs.
315+
316+
317+### Part 3: Taking Action
318+1 stars
319+Sample code and guide are completed and ready for merge against urbit/docs.
320+
321+
322+### Part 4: Client Integration
323+3 stars
324+Sample code and guide are completed and ready for merge against urbit/docs.
325+
326+
327+### Part 5: Collaboration
328+3 stars
329+Sample code and guide are completed and ready for merge against urbit/docs.
330+
331+
content/grants/escape.mdnew file+45
@@ -0,0 +1,45 @@
1++++
2+title = "Escape"
3+date = 2019-12-04
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "A reputation agent for Stars."
10+reward = 4
11+assignee = "yosoyubik"
12+id = "1146667285"
13+completed = false
14+link = ""
15++++
16+
17+"How much *Escape* does `~marzod` have?"
18+
19+When a planet is newly booted into the Urbit Network there is a fundamental service that its sponsor needs to provide: peer discovery. In order to do this the sponsor needs to be up and running, with a stable internet connection. The Urbit Network is still young but there has been several instances where planets discovered that, right after a first boot, they can't communicate with anybody in the network due to their sponsor not been active.
20+
21+These planets need to quickly escape, that is, leave their sponsor star and find a new one that provides a good service. A simple way to assess the likelihood of the sponsor being a good actor in the network is to look at on-chain data from the Azimuth contract, in particular, *Escapes*. If a sponsor has a low Escape score (planets that leave), one could use this as a proxy and say that the sponsor will keep behaving in the same way as the past data indicates. More over, if a planet attracts more planets, that signals more strongly the good quality of the provided service.
22+
23+This proposal addresses this problem by using the Beta Reputation to create a Landscape app that will show the score of a planet's sponsor based on data from Azimuth, in particular the number of planets spawned, and the number of planets that have escaped. [The Beta Reputation](https://www.csee.umbc.edu/~msmith27/readings/public/josang-2002a.pdf) uses the Beta Distribution to calculate the score (e.g. successful/unsuccessful events over the total number of interactions) as the expected value of a probability distribution. More data available (high number of booted planets) will narrow down the confidence of the probability (if a star has only booted a planet that didn't escape, the confidence of that score `(1-0.67=33%)` is smaller than the one of a star that has booted 200 planets and only two have escaped `(1-0.87=13%)`)
24+
25+A full reputation system for stars is out of scope for this proposal, but some ideas would be to include network uptime or other, more subjective metrics, ideally agreed by the children of each star.
26+
27+The aim of this proposal is not to create a perfect reputation system but rather, to introduce in the minds of the users that there is a sponsor that they need to pay attention to, that is providing a service, not only to them but to others in the network, and that the likelihood of that operator's behavior can be attested since the data is publicly available and in a blockchain.
28+
29+The Beta Reputation is a system that is very easy to understand to non-technical users but has a statistical background behind it. Nevertheless this is just one of the many reputation systems that are out there like [Regret](https://dl.acm.org/doi/pdf/10.1145/375735.376110), [Fire](https://eprints.soton.ac.uk/259559/1/dong-ecai2004.pdf) or [Travos](https://idp.springer.com/authorize/casa?redirect_uri=https://link.springer.com/content/pdf/10.1007/s10458-006-5952-x.pdf&casa_token=M38itGxqsu0AAAAA:lAUgQUvbc4dZFhrNs4SSPWrQ9PzUj05pzmU5zkvPkytDOfgFOIxVP0a8Tzk_VkRi37J1bRHPJ2IhTD8C). I envision this work as a starting point for introducing reputation systems in Urbit as libraries that can be used by the community for experimentation.
30+
31+With this is mind the Beta library (`/lib/beta.hoon`) can be used with any app that has a well defined data structure that comprises a list of timestamped events with a certain score, weighted, if desired, for a specific dimension. The ability to tag each event with a weighted dimension allows for complex reputations where different data points can be aggregated together.
32+
33+## Milestones
34+
35+
36+### Gall Agent and Beta Reputation Library
37+2 stars
38+Delivery of the agent and library for the Beta reputation that's able to poke Azimuth for the Blockchain data, calculate the reputation score, and store it on the agent.
39+
40+
41+### Escape UI
42+2 stars
43+Delivery of the UI interface that will show the Reputation Score to the user, with the ability to search for specific sponsors and filter the results accordingly.
44+
45+
content/grants/ethereum-abi-parser.mdnew file+55
@@ -0,0 +1,55 @@
1++++
2+title = "Ethereum ABI Parser"
3+date = 2020-03-10
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "Create a Gall app that takes the bytecode for a contract ABI."
10+reward = 2
11+assignee = "xiphiness"
12+id = "1241532070"
13+completed = false
14+link = ""
15++++
16+
17+### Background
18+
19+The Contract Application Binary Interface (ABI) is the standard way to interact with contracts in the Ethereum ecosystem, both from outside the blockchain and for contract-to-contract interaction. Data is encoded according to its type, as described in this specification. The encoding is not self-describing and thus requires a schema in order to decode.
20+
21+###Bounty Description
22+
23+Create a Gall app that can output the byte code for a contract ABI.
24+
25+#### Gall application:
26+
27+- Parse ABI into valid byte code
28+
29+##### User interface:
30+
31+- Allow for a user to upload arbitrary ABI
32+- Create a form field based on the ABI
33+- Parse user input into appropriate data types
34+- Return bytecode
35+
36+### Resources:
37+
38+- [ABI Spec](https://solidity.readthedocs.io/en/v0.5.3/abi-spec.html)
39+
40+### Contribution Guidelines:
41+- Do not begin work until your request to claim this bounty is accepted.
42+- Email your work to grants@urbit.org.
43+- Submit your work as a pull request on to the [urbit/urbit github repository](https://github.com/urbit/urbit).
44+- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
45+- You have 90 days from the time of approval to complete this bounty.
46+
47+
48+## Milestones
49+
50+
51+### PR is merged
52+2 stars
53+Your code is accepted and merged.
54+
55+
content/grants/gall-api-documentation.mdnew file+54
@@ -0,0 +1,54 @@
1++++
2+title = "Gall API documentation"
3+date = 2019-07-22
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Documentation"]
7+[extra]
8+image = ""
9+description = "Write reference documentation for using the API for developing Gall apps."
10+reward = 1
11+assignee = "Liam Fitzgerald, borlyt-salnus"
12+id = "1251133389"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Gall is the Arvo kernel module that controls userspace applications. Understanding its API is required for developing applications on Arvo.
20+
21+#### Bounty Description
22+
23+Write a reference-style document that lists each arm name that could be used in a Gall app and describes what those arms are for. Each arm should also have a short example.
24+
25+Developers should be able to use this document as a template for writing their Gall app. Arms documented should include: `+poke`, `+coup`, `+peer`, `+reap`, `+quit`, `+peek`, `+prep`,`+scry`, and `+wake`.
26+
27+#### Resources
28+
29+* Read the existing [Gall documentation](https://urbit.org/docs/learn/arvo/gall/).
30+* Familiarize yourself with `gall.hoon`, which is in the `/sys/vane` directory.
31+* Familiarize yourself with the style of [reference documentation](https://urbit.org/docs/reference/).
32+
33+#### Contribution Guidelines
34+
35+* You have 30 days from the time of approval to complete this bounty.
36+* Do not begin work until your request to claim this bounty is accepted.
37+* Your document should be written in Markdown.
38+* Submit your document in the form of a pull-request to the [Docs repo](https://github.com/urbit/docs). This file should live under the reference directory.
39+* Expect to receive requests for changes to your document.
40+
41+
42+## Milestones
43+
44+
45+### First draft is submitted
46+0 stars
47+Your first draft is submitted as a pull request to the Docs repository.
48+
49+
50+### Final draft is merged
51+1 stars
52+Your edits are satisfactory, and your PR is merged to master.
53+
54+
content/grants/gifts/_index.mdnew file+4
@@ -0,0 +1,4 @@
1++++
2+title = "Gifts"
3+template = "grant_type/gifts.html"
4++++
content/grants/go-airlock-library.mdnew file+45
@@ -0,0 +1,45 @@
1++++
2+title = "Go Airlock Library"
3+date = 2020-06-25
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Core Dev"]
7+[extra]
8+image = ""
9+description = "Create a library for the Go language to be used for Airlock, the protocols for interfacing with Urbit."
10+reward = 3
11+assignee = "Caio"
12+id = "764093285"
13+completed = false
14+link = ""
15++++
16+
17+Create an Airlock library for the Go (aka Golang) programming language. Airlock is the set of HTTP APIs for communicating with an Urbit. This bounty will involve creating a Go library wrapper for the server side event and HTTP API.
18+
19+Additionally, write a one-page explanation for the design choices for this library in the readme. If you have ideas for what Urbit applications would be useful for this library, please also include those suggestions in the readme.
20+
21+### Resources:
22+
23+- https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/vane/eyre.hoon#L493
24+- https://github.com/baudtack/urlock-py
25+- [UrlockPy as an example of an Airlock integration](https://github.com/urbit/docs/pull/892)
26+
27+
28+###Contribution Guidelines:
29+
30+-Do not begin work until your request to claim this bounty is accepted.
31+- Submit your work as a separate github repo, and include a link to it in your submission. Email grants@urbit.org if you have trouble.
32+- Your library should be uploaded and available in a format compatible with the package manager you feel most comfortable maintaining.
33+- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
34+- You have 90 days from the time of approval to complete this bounty.
35+- Successful completion of this bounty may result in an invitation to complete other Airlock library bounties. If you are interested in creating an Airlock library for a language other than the ones currently presented, please contact us at grants@urbit.org ; it’s likely we’ll approve this as a proposal.
36+
37+
38+## Milestones
39+
40+
41+### Work is finished
42+3 stars
43+You have completed your work and pushed it to a Github repo.
44+
45+
content/grants/graph-store-documenation-guide.mdnew file+100
@@ -0,0 +1,100 @@
1++++
2+title = "Graph Store Documenation Guide"
3+date = 2021-02-13
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Documentation"]
7+[extra]
8+image = ""
9+description = "Explainer, tutorial, and cookbook for `graph-store`"
10+reward = 4
11+assignee = "~sipfyn-pidmex"
12+id = "1888977136"
13+completed = false
14+link = ""
15++++
16+
17+## Overview
18+Motivation: `graph-store` is an extremely well-designed and powerful system for creating social and business applications, that should unlock myriad novel applications on Urbit. Unfortunately, it is currently nearly completely unused outside of Tlon, mainly due to inadequate documentation materials.
19+
20+This project will change that, by fully familiarizing developers with `graph-store` and how to build software using it, and by providing a reference assist during subsequent development process.
21+
22+Every aspect of `graph-store` will be covered: designing schemas, interacting with them inside the CLI or from Urbit apps, and accessing them from frontends.
23+
24+## Scope & Intended Audience
25+### Scope
26+The target audience is an experienced developer in any outside programming language. We assume Hoon knowledge, and refer recommended hoon resources whenever necessary, covering the bare minimum in-line.
27+
28+We cover the process involved in creating a new social app from scratch. We do not cover interacting with `graph-store` on the server-side, i.e. from other `gall` agents, although we may refer to several outside examples of that, since they should be comprehensible to the user after working through this.
29+
30+### Audience 1: Developers Learning `graph-store`
31+The explainer and tutorial below are intended for learners, users who want to build a strong mental model of the store from scratch. They should be doable in either order (to accommodate different learning styles)
32+
33+### Audience 2: Developers Working on Social Applications
34+The cookbook/how-to and API reference are for developers who understand `graph-store` and need reference materials for common patterns and syntax while building applications.
35+
36+## Sections
37+### Explainer
38+
39+This includes a high-level description of what `graph-store` is and why it exists, a technical overview of `graph-store`, and a walkthrough of the implementations of the Chat and Publish apps and how they are built using `graph-store`.
40+
41+Includes explanations of:
42+* full walkthrough of `graph-store` and `post` sur files
43+* how the indexes work
44+* how validation marks are used in the code to enforce schemas
45+* scry examples
46+* how mutations to `graph-store` happen
47+* how the frontend queries, receives updates from, and sends messages to the backend
48+* where JSON parsing is used and for what
49+* key differences in schema design for Chat vs Publish
50+* what would be needed to extend Chat and Publish in various ways
51+
52+### Tutorial
53+* implementation of a simplified chan-style imageboard
54+* demonstrates threading and basic pagination
55+* simple `graph-store` reference embedding
56+
57+### Cookbooks
58+* common social data patterns, and how to do each one
59+* how to make a schema
60+* poking from the frontend
61+* updating graph nodes
62+* deleting & archiving graphs
63+* querying data from any graph
64+* embedding references to other graph content
65+* simple algorithms to rank results, a la HN/Reddit
66+
67+### Reference
68+Update https://urbit.org/docs/tutorials/hoon/graph/ to be more useful:
69+* links to relevant source files
70+* exact scrys available, with examples
71+
72+## User Stories
73+As a developer without prior `graph-store` knowledge, I can:
74+* Build a mental model of all aspects of the system with detailed explanations of actual production code
75+* Develop intuitions for how applications are built with it by designing and building my own social application
76+
77+As a developer who already understands `graph-store` I can:
78+* think of the pattern my social app will follow, and then refer to similar design how-tos to create my schema
79+* look up API information
80+* maintain existing `graph-store` applications on the backend
81+* maintain existing `graph-store` applications on the frontend in the frontend stack of my choice
82+
83+## Milestones
84+
85+
86+### Explainer
87+1 stars
88+Full written explainer posted online
89+
90+
91+### Tutorial
92+1 stars
93+Full written tutorial with tested code samples
94+
95+
96+### Cookbooks & Reference, Finalization
97+2 stars
98+Full written cookbook document, updated reference, and finalization of the content
99+
100+
content/grants/haskell-airlock-library.mdnew file+45
@@ -0,0 +1,45 @@
1++++
2+title = "Haskell Airlock Library"
3+date = 2020-06-25
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Core Dev"]
7+[extra]
8+image = ""
9+description = "Create a library for the Haskell language to be used for Airlock, the API suite for outside communication with Urbit."
10+reward = 3
11+assignee = "bsima"
12+id = "688875191"
13+completed = true
14+link = ""
15++++
16+
17+Create an Airlock library for the Haskell programming language. Airlock is the set of HTTP APIs for communicating with an Urbit. This bounty will involve creating a Haskell library wrapper for the server side event and HTTP API.
18+
19+Additionally, write a one-page explanation for the design choices for this library in the readme. If you have ideas for what Urbit applications would be useful for this library, please also include those suggestions in the readme.
20+
21+### Resources:
22+
23+- https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/vane/eyre.hoon#L493
24+- https://github.com/baudtack/urlock-py
25+- [UrlockPy as an example of an Airlock integration](https://github.com/urbit/docs/pull/892)
26+
27+
28+### Contribution Guidelines:
29+
30+- Do not begin work until your request to claim this bounty is accepted.
31+- Submit your work as a separate github repo, and include a link to it in your submission. Email grants@urbit.org if you have trouble.
32+- Your library should be uploaded and available in a format compatible with the package manager you feel most comfortable maintaining.
33+- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
34+- You have 90 days from the time of approval to complete this bounty.
35+- Successful completion of this bounty may result in an invitation to complete other Airlock library bounties. If you are interested in creating an Airlock library for a language other than the ones currently presented, please contact us at grants@urbit.org ; it’s likely we’ll approve this as a proposal.
36+
37+
38+## Milestones
39+
40+
41+### Your work is finished
42+3 stars
43+You have completed your work and pushed it to a Github repo.
44+
45+
content/grants/hoon-001-learner-efficiency-and-early-learner-resources.mdnew file+81
@@ -0,0 +1,81 @@
1++++
2+title = "Hoon 001: Learner efficiency and early-learner resources"
3+date = 2020-02-10
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Documentation"]
7+[extra]
8+image = ""
9+description = "Create Hoon learning resources catered to learner efficiency, with orienting materials for Hoon & coding, learning examples, videos."
10+reward = 3
11+assignee = "som, ~risruc-habteb, ~rabsef-bicrym"
12+id = "471015542"
13+completed = false
14+link = ""
15++++
16+
17+Hoon 001: A focus on learner experience efficiency and early-learner resources
18+
19+(please note a full-format PDF of this proposal has been provided to Erik Newton)
20+
21+Introduction
22+
23+The problem:
24+
25+We perceive a need for an onboarding/educational experience into Hoon which is particularly tailored to the individual who has little to no experience coding, or for the individual who has a serious interest in learning and using Hoon, but has a heightened need for the educational efficiency (i.e. as much learning possible per amount of time and brainpower spent). This comment, and indeed this project proposal is in no way a dig on the current Tlon educational efforts. In fact, we would like to state outright that the current resources represent a solid work effort and are extraordinarily useful for many types of learners.
26+
27+For these two groups mentioned above, Hoon presents particular learning challenges, including:
28+
29+Extensive and new vocabulary, with no clear distinction between which terms map to general computer science, which are Urbit/Hoon particular, and where the boundaries of definition lie in each case.
30+Sheer volume of new concepts for the beginning programmer, which, when presented at a pace faster than an efficient learning pace, might lead to confusion and less efficient learning.
31+It may be that the new coder or early learner has little mastery of similar concepts. References to introduce new concepts should make use of common prior knowledge, for example, by mapping comparisons to Excel, everyday thinking and, where necessary, mathematical functions.
32+In particular, the new student starts out “lost” by definition and requires many more references as to where one is, where one is going and what lies at the end of each lesson.
33+Additionally, they will benefit from larger-scope references as to where lessons fit into the landscape of Hoon mastery.
34+The non-coder or coder who is learning in order to realize a particular idea with Hoon code might not appreciate purely cerebral exercises. To keep peak interest and engagement, work products should be tangible and feel useful to cultivate enthusiasm to keep learning, even with basic material.
35+
36+Our solution:
37+
38+We aim to create a set of Hoon education modules that are specifically catered to people who have minimal to no coding skills. Our current working title is “Hoon 001.” We envision the product will be a textbook-esque website-based set of content. To achieve this as an excellent-quality & effective work product we plan to utilize the following elements:
39+
40+An appropriately high-level introduction to coding generally, and to Hoon specifically, focusing on the broadest concepts, which a learner should focus on understanding first
41+Definitions of terms which are not open-ended, and which as clearly as possible establish boundaries between what something is and is not and, where possible, include references to readily accessible external concepts
42+Visualization using color, white space and annotations to convey program flow and highlighting key points.
43+Pacing of new and abstract concepts, that is deliberate and steady, ordered as sequentially as possible, with a limited number of new concepts under focus per unit effort/time
44+Linear progression/accumulation of skill with a steady advancement of themes, concepts, knowledge
45+Consistent teaching methodology - Break down complex programs into readily intelligible sections (thereby aiding the user in understanding how the interpreter ‘thinks’), discuss tools required to program these subsections, walk line by line through the resultant code and finally explain how the work can be stitched together to form the complete program.
46+Multi-sensory learning experience - The use of multiple tools to cater to different learning styles, such as text-based walkthrough, annotations (as already indicated) and a video walkthrough for each generator analyzed.
47+
48+
49+Proposed work product/deliverable:
50+
51+We will deliver web page appropriate content format that includes:
52+Introduction to coding in general for the non-coder
53+Why code?
54+Introduction to concepts in programming
55+Assumptions about their skillset (the interface with computers, are quite familiar with Excel, and know some basic skills about working with Unix terminals, have set up a ship that is running and spawned a moon to use for coding - with links to such information in case they do not)
56+Some basics: what is a program, what is computer naivety, how-to programs begin and end
57+A clear description of goals: preemptively answering “what will we learn here?”
58+A few of Hoon’s challenges for the new learner, in-depth and in plain English
59+Auras
60+Types of values
61+Cells
62+Discreteness (the importance of considering data, whenever presented, down to the atom level, as well as the idea that, in subject-oriented programming, given that everything is part of the subject, it is increasing (a) difficult and (b) necessary to exactingly specify 'on what' your program intends to operate)
63+How Hoon programs terminate
64+Two of the types of Hoon programs
65+The naked generator
66+The say generator
67+Some tools we will need (some runes explained)
68+Let’s create! Five generators, from fairly trivial (1-2) to stretching the learner’s skill set with each next generator project. Tasks presented, breaking down the task to what conceptual tools are needed, to going through the code line by line and character by character, again in-depth and in plain English to explain how those elements are written in Hoon and how the computer manages it
69+
70+
71+Expected hours: 125
72+
73+
74+## Milestones
75+
76+
77+### Full Project
78+3 stars
79+Full project delivery, including content, learning materials, generators, walkthroughs, video walkthroughs
80+
81+
content/grants/host-three-college-university-urbit-meetups-1.mdnew file+60
@@ -0,0 +1,60 @@
1++++
2+title = "Host Three College/University Urbit Meetups (1)"
3+date = 2020-03-02
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Hold a meetup and presentation about Urbit."
10+reward = 1
11+assignee = "P. Paramo"
12+id = "901396717"
13+completed = false
14+link = ""
15++++
16+
17+### Background
18+
19+Urbit is a canvas for learning, building, experiments and collaboration. We believe this makes it a natural fit for students and teachers of many disciplines. We encourage faculty, staff, and students at any college or university to conduct meetups to explain Urbit and help new users join.
20+
21+### Bounty Description
22+
23+This bounty is to host an Urbit meetup at your college/university. The meetup should meet the following criteria:
24+- The meetup must be open to all students and faculty, and there must be a public web link for joining (like meetup.com)
25+- You do not need to be a Computer Science student, but we request that you specifically make sure to invite and notify the CS department at your school about the meetups.
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least three meetups.
30+
31+Presentations don't have to be technical, but consider some of these topics to choose from for technical talks:
32+- Nock (Virtual Machines)
33+- Kelvin versioning
34+- Deterministic computing
35+- Binary tree data structures
36+- Azimuth (Urbit identities)
37+- The Ames protocol
38+
39+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your university’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
40+
41+### Resources
42+
43+Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
44+
45+### Contribution Guidelines
46+
47+- Do not begin work until your request to claim this bounty is accepted.
48+- When applying to work on the bounty, tell us a little about yourself and mention which university and location you'd be hosting the meetups in.
49+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
50+- You have 100 days from the time of approval to complete this bounty.
51+
52+
53+## Milestones
54+
55+
56+### Three meetups are held
57+1 stars
58+Your three meetups are held, and links to the presentations have been posted and sent to grants@urbit.org.
59+
60+
content/grants/host-three-college-university-urbit-meetups-2.mdnew file+60
@@ -0,0 +1,60 @@
1++++
2+title = "Host Three College/University Urbit Meetups (2)"
3+date = 2020-03-03
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Hold a meetup and presentation about Urbit."
10+reward = 1
11+assignee = "kirk-hutchison"
12+id = "167729270"
13+completed = false
14+link = ""
15++++
16+
17+### Background
18+
19+Urbit is a canvas for learning, building, experiments and collaboration. We believe this makes it a natural fit for students and teachers of many disciplines. We encourage faculty, staff, and students at any college or university to conduct meetups to explain Urbit and help new users join.
20+
21+### Bounty Description
22+
23+This bounty is to host an Urbit meetup at your college/university. The meetup should meet the following criteria:
24+- The meetup must be open to all students and faculty, and there must be a public web link for joining (like meetup.com)
25+- You do not need to be a Computer Science student, but we request that you specifically make sure to invite and notify the CS department at your school about the meetups.
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least three meetups.
30+
31+Presentations don't have to be technical, but consider some of these topics to choose from for technical talks:
32+- Nock (Virtual Machines)
33+- Kelvin versioning
34+- Deterministic computing
35+- Binary tree data structures
36+- Azimuth (Urbit identities)
37+- The Ames protocol
38+
39+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your university’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
40+
41+### Resources
42+
43+Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
44+
45+### Contribution Guidelines
46+
47+- Do not begin work until your request to claim this bounty is accepted.
48+- When applying to work on the bounty, tell us a little about yourself and mention which university and location you'd be hosting the meetups in.
49+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
50+- You have 100 days from the time of approval to complete this bounty.
51+
52+
53+## Milestones
54+
55+
56+### Three meetups are held
57+1 stars
58+Your three meetups are held, and links to the presentations have been posted and sent to grants@urbit.org.
59+
60+
content/grants/host-three-college-university-urbit-meetups-3.mdnew file+59
@@ -0,0 +1,59 @@
1++++
2+title = "Host Three College/University Urbit Meetups (3)"
3+date = 2020-03-03
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "Hold a meetup and presentation about Urbit."
10+reward = 1
11+assignee = "~sanlyt-modbyt"
12+id = "372504274"
13+completed = false
14+link = ""
15++++
16+
17+### Background
18+
19+Urbit is a canvas for learning, building, experiments and collaboration. We believe this makes it a natural fit for students and teachers of many disciplines. We encourage faculty, staff, and students at any college or university to conduct meetups to explain Urbit and help new users join.
20+
21+### Bounty Description
22+
23+This bounty is to host an Urbit meetup at your college/university. The meetup should meet the following criteria:
24+- The meetup must be open to all students and faculty, and there must be a public web link for joining (like meetup.com)
25+- You do not need to be a Computer Science student, but we request that you specifically make sure to invite and notify the CS department at your school about the meetups.
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least three meetups.
30+
31+Presentations don't have to be technical, but consider some of these topics to choose from for technical talks:
32+- Nock (Virtual Machines)
33+- Kelvin versioning
34+- Deterministic computing
35+- Binary tree data structures
36+- Azimuth (Urbit identities)
37+- The Ames protocol
38+
39+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your university’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
40+
41+### Resources
42+
43+Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
44+
45+### Contribution Guidelines
46+
47+- Do not begin work until your request to claim this bounty is accepted.
48+- When applying to work on the bounty, tell us a little about yourself and mention which university and location you'd be hosting the meetups in.
49+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
50+- You have 100 days from the time of approval to complete this bounty.
51+
52+## Milestones
53+
54+
55+### Three meetups are held
56+1 stars
57+Your three meetups are held, and links to the presentations have been posted and sent to grants@urbit.org.
58+
59+
content/grants/host-three-virtual-urbit-meetups.mdnew file+51
@@ -0,0 +1,51 @@
1++++
2+title = "Host Three Virtual Urbit Meetups"
3+date = 2020-03-27
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing."
10+reward = 1
11+assignee = "~naltyc-wornes (dasfeb.industries)"
12+id = "542719422"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
20+
21+#### Bounty Description
22+
23+It's the time of the Coronavirus, and so everyone is switching to meeting online. Urbit meetups can do this, too! This bounty is to host an Urbit meetup virtually. The meetup should meet the following criteria:
24+
25+- The meetup must be publicly joinable, and there must be a public web link for signing up (like meetup.com)
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least three virtual meetups.
30+
31+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of a participatory online Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
32+
33+#### Resources
34+
35+Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
36+
37+#### Contribution Guidelines
38+
39+- Do not begin work until your request to claim this bounty is accepted.
40+- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
41+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
42+- You have 100 days from the time of approval to complete this bounty.
43+
44+## Milestones
45+
46+
47+### The third meetup is help
48+1 stars
49+The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
50+
51+
content/grants/host-two-urbit-meetups-1.mdnew file+55
@@ -0,0 +1,55 @@
1++++
2+title = "Host Two Urbit Meetups (1)"
3+date = 2019-11-19
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Host two Urbit meetups in your city."
10+reward = 1
11+assignee = "sitful-hatred"
12+id = "2020814292"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
20+
21+#### Bounty Description
22+
23+This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
24+
25+- The meetup must be public, and there must be a public web link for joining (like meetup.com
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least two meetups.
30+
31+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
32+
33+#### Resources
34+
35+Check it out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
36+
37+#### Contribution Guidelines
38+- Do not begin work until your request to claim this bounty is accepted.
39+- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
40+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@tlon.io.
41+- You have 100 days from the time of approval to complete this bounty.
42+
43+## Milestones
44+
45+
46+### The first meetup is held
47+0 stars
48+The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
49+
50+
51+### The second meetup is held
52+1 stars
53+The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
54+
55+
content/grants/host-two-urbit-meetups-10.mdnew file+55
@@ -0,0 +1,55 @@
1++++
2+title = "Host Two Urbit Meetups (10)"
3+date = 2019-11-26
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing."
10+reward = 1
11+assignee = "jpt4"
12+id = "278361497"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
20+
21+#### Bounty Description
22+
23+This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
24+
25+- The meetup must be public, and there must be a public web link for joining (like meetup.com)
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least two meetups.
30+
31+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
32+
33+#### Resources
34+
35+Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
36+
37+#### Contribution Guidelines
38+- Do not begin work until your request to claim this bounty is accepted.
39+- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
40+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
41+- You have 100 days from the time of approval to complete this bounty.
42+
43+## Milestones
44+
45+
46+### The first meetup is help
47+0 stars
48+The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
49+
50+
51+### The second meetup is help
52+1 stars
53+The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
54+
55+
content/grants/host-two-urbit-meetups-11.mdnew file+55
@@ -0,0 +1,55 @@
1++++
2+title = "Host Two Urbit Meetups (11)"
3+date = 2021-02-07
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Urbit needs champions! The Urbit Foundation is looking for community members to host local or online meetups to spread the word."
10+reward = 1
11+assignee = "Thomas"
12+id = "1314014268"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Urbit needs champions! The Urbit Foundation is looking for community members to host local or online meetups to spread the word.
20+
21+#### Bounty Description
22+
23+This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
24+
25+- The meetup must be public, and there must be a public web link for joining (like meetup.com)
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least two meetups.
30+
31+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city's Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
32+
33+#### Resources
34+
35+Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
36+
37+#### Contribution Guidelines
38+- Do not begin work until your request to claim this bounty is accepted.
39+- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
40+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
41+- You have 100 days from the time of approval to complete this bounty.
42+
43+## Milestones
44+
45+
46+### The first meetup is held
47+0 stars
48+The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
49+
50+
51+### The second meetup is held
52+1 stars
53+The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
54+
55+
content/grants/host-two-urbit-meetups-2.mdnew file+55
@@ -0,0 +1,55 @@
1++++
2+title = "Host Two Urbit Meetups (2)"
3+date = 2019-11-19
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Host two Urbit meetups in your city."
10+reward = 1
11+assignee = "Matthew Levan, nforbes6"
12+id = "1252614745"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
20+
21+#### Bounty Description
22+
23+This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
24+
25+- The meetup must be public, and there must be a public web link for joining (like meetup.com
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least two meetups.
30+
31+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
32+
33+#### Resources
34+
35+Check it out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
36+
37+#### Contribution Guidelines
38+- Do not begin work until your request to claim this bounty is accepted.
39+- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
40+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@tlon.io.
41+- You have 100 days from the time of approval to complete this bounty.
42+
43+## Milestones
44+
45+
46+### The first meetup is held
47+0 stars
48+The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
49+
50+
51+### The second meetup is held
52+1 stars
53+The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
54+
55+
content/grants/host-two-urbit-meetups-3.mdnew file+55
@@ -0,0 +1,55 @@
1++++
2+title = "Host Two Urbit Meetups (3)"
3+date = 2019-11-19
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Host two Urbit meetups in your city."
10+reward = 1
11+assignee = "yosoyubik"
12+id = "1574784178"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
20+
21+#### Bounty Description
22+
23+This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
24+
25+- The meetup must be public, and there must be a public web link for joining (like meetup.com
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least two meetups.
30+
31+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
32+
33+#### Resources
34+
35+Check it out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
36+
37+#### Contribution Guidelines
38+- Do not begin work until your request to claim this bounty is accepted.
39+- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
40+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@tlon.io.
41+- You have 100 days from the time of approval to complete this bounty.
42+
43+## Milestones
44+
45+
46+### The first meetup is held
47+0 stars
48+The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
49+
50+
51+### The first meetup is held
52+1 stars
53+The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
54+
55+
content/grants/host-two-urbit-meetups-4.mdnew file+55
@@ -0,0 +1,55 @@
1++++
2+title = "Host Two Urbit Meetups (4)"
3+date = 2019-11-19
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Host two Urbit meetups in your city."
10+reward = 1
11+assignee = "~forfel-norfel"
12+id = "1872089827"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
20+
21+#### Bounty Description
22+
23+This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
24+
25+- The meetup must be public, and there must be a public web link for joining (like meetup.com
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least two meetups.
30+
31+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
32+
33+#### Resources
34+
35+Check it out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
36+
37+#### Contribution Guidelines
38+- Do not begin work until your request to claim this bounty is accepted.
39+- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
40+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@tlon.io.
41+- You have 100 days from the time of approval to complete this bounty.
42+
43+## Milestones
44+
45+
46+### The first meetup is held
47+0 stars
48+The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
49+
50+
51+### The second meetup is held
52+1 stars
53+The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
54+
55+
content/grants/host-two-urbit-meetups-5.mdnew file+55
@@ -0,0 +1,55 @@
1++++
2+title = "Host Two Urbit Meetups (5)"
3+date = 2019-11-19
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Host two Urbit meetups in your city."
10+reward = 1
11+assignee = "NHL"
12+id = "180695644"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
20+
21+#### Bounty Description
22+
23+This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
24+
25+- The meetup must be public, and there must be a public web link for joining (like meetup.com
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least two meetups.
30+
31+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
32+
33+#### Resources
34+
35+Check it out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
36+
37+#### Contribution Guidelines
38+- Do not begin work until your request to claim this bounty is accepted.
39+- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
40+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@tlon.io.
41+- You have 100 days from the time of approval to complete this bounty.
42+
43+## Milestones
44+
45+
46+### The first meetup is held
47+0 stars
48+The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
49+
50+
51+### The second meetup is held
52+1 stars
53+The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
54+
55+
content/grants/host-two-urbit-meetups-6.mdnew file+55
@@ -0,0 +1,55 @@
1++++
2+title = "Host Two Urbit Meetups (6)"
3+date = 2019-11-21
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Host two Urbit meetups in your city."
10+reward = 1
11+assignee = "~dilled-fastyd"
12+id = "675590864"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
20+
21+#### Bounty Description
22+
23+This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
24+
25+- The meetup must be public, and there must be a public web link for joining (like meetup.com
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least two meetups.
30+
31+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
32+
33+#### Resources
34+
35+Check it out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
36+
37+#### Contribution Guidelines
38+- Do not begin work until your request to claim this bounty is accepted.
39+- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
40+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@tlon.io.
41+- You have 100 days from the time of approval to complete this bounty.
42+
43+## Milestones
44+
45+
46+### The first meetup is held
47+0 stars
48+The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
49+
50+
51+### The second meetup is held
52+1 stars
53+The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
54+
55+
content/grants/host-two-urbit-meetups-7.mdnew file+55
@@ -0,0 +1,55 @@
1++++
2+title = "Host Two Urbit Meetups (7)"
3+date = 2019-11-21
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Host two Urbit meetups in your city."
10+reward = 1
11+assignee = "nrhtr, ~hocdep-labtel, sunmaid, jackw"
12+id = "1098941980"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
20+
21+#### Bounty Description
22+
23+This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
24+
25+- The meetup must be public, and there must be a public web link for joining (like meetup.com
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least two meetups.
30+
31+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
32+
33+#### Resources
34+
35+Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
36+
37+#### Contribution Guidelines
38+- Do not begin work until your request to claim this bounty is accepted.
39+- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
40+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
41+- You have 100 days from the time of approval to complete this bounty.
42+
43+## Milestones
44+
45+
46+### The first meetup is held
47+0 stars
48+The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
49+
50+
51+### The second meetup is held
52+1 stars
53+The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
54+
55+
content/grants/host-two-urbit-meetups-8.mdnew file+55
@@ -0,0 +1,55 @@
1++++
2+title = "Host Two Urbit Meetups (8)"
3+date = 2019-11-22
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing."
10+reward = 1
11+assignee = "~winter-paches, ~fonnyx-nopmer"
12+id = "1740918704"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
20+
21+#### Bounty Description
22+
23+This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
24+
25+- The meetup must be public, and there must be a public web link for joining (like meetup.com)
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least two meetups.
30+
31+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
32+
33+#### Resources
34+
35+Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
36+
37+#### Contribution Guidelines
38+- Do not begin work until your request to claim this bounty is accepted.
39+- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
40+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
41+- You have 100 days from the time of approval to complete this bounty.
42+
43+## Milestones
44+
45+
46+### The first meetup is held
47+0 stars
48+The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
49+
50+
51+### The second meetup is held
52+1 stars
53+The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
54+
55+
content/grants/host-two-urbit-meetups-9.mdnew file+55
@@ -0,0 +1,55 @@
1++++
2+title = "Host Two Urbit Meetups (9)"
3+date = 2019-11-26
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing."
10+reward = 1
11+assignee = "juaningan"
12+id = "1128452733"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
20+
21+#### Bounty Description
22+
23+This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
24+
25+- The meetup must be public, and there must be a public web link for joining (like meetup.com)
26+- The meetup must have a presentation or talk about Urbit.
27+- The presentation or talk must be recorded and posted publicly online.
28+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
29+- You must host at least two meetups.
30+
31+You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
32+
33+#### Resources
34+
35+Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
36+
37+#### Contribution Guidelines
38+- Do not begin work until your request to claim this bounty is accepted.
39+- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
40+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@tlon.io.
41+- You have 100 days from the time of approval to complete this bounty.
42+
43+## Milestones
44+
45+
46+### The first meetup is help
47+0 stars
48+The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
49+
50+
51+### The second meetup is help
52+1 stars
53+The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
54+
55+
content/grants/links-in-urbit-reference-docs.mdnew file+30
@@ -0,0 +1,30 @@
1++++
2+title = "Links in Urbit Reference Docs"
3+date = 2020-06-16
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Documentation"]
7+[extra]
8+image = ""
9+description = "Add links to our reference doc pages so that people can easily discover new concepts"
10+reward = 1
11+assignee = "alecbrick"
12+id = "45608361"
13+completed = false
14+link = ""
15++++
16+
17+The goal of this proposal is to add links to the Urbit Reference docs (that is, Hoon Expressions, Standard Library, and Vane APIs).
18+
19+Suppose you're browsing [section 2a](https://urbit.org/docs/reference/library/2a/) of the Hoon standard library. You see the word "unit" a bunch of times, but you're not actually sure what it means. You try to click on one of the instances, hoping it'll take you to a page with more information, but nothing happens! That's because the library (and a fair amount of Urbit documentation) lacks links between pages.
20+
21+Consider, for contrast, a [random Python doc page](https://docs.python.org/3/library/os.html). Every concept that has documentation has a link to said documentation. By adding links to the Urbit docs, we'll make the documentation easier to use, and from there make Hoon and Urbit easier to learn.
22+
23+## Milestones
24+
25+
26+### Links added to Reference documentation
27+1 stars
28+Concepts that refer to pages with documentation have links to said documentation.
29+
30+
content/grants/llelogram.mdnew file+55
@@ -0,0 +1,55 @@
1++++
2+title = "Llelogram"
3+date = 2020-07-29
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "Towards creating a political-econometric of federal legislation people can read as easily as a stock ticker: Llelogram"
10+reward = 5
11+assignee = "Dotty"
12+id = "821310723"
13+completed = false
14+link = ""
15++++
16+
17+This is a grant proposal to build a Gall application, we are calling Llelogram*
18+
19+For the past few years we have been working on a legislative analysis tool we call Prism that interprets actionable legislation in federal congress and renders a basic, static typed value reflecting the partisan displacement of the text, then transposes that over roll call voting data. The inherent structure of Gall applications, with vases and cages seems for us an ideal way to take the concept one step deeper by creating an index of relevant factors to run contravariant to the state:(actionable legislation). Put another way, we want to be able to interpolate more complex factors like fiscal displacement and popular discourse into our data, creating a political-econometric. By translating the static displacement of partisan divergence into a material quantity through Prism rendering a typed value, we have been waiting to interpolate abstract textual facets of predeterminate factors (like the intellectual justifications of empirical affect) into a value dynamic enough to be logged cleanly and actionably. Needless to say, we are very excited about Gall.
20+ The concept of scoring legislation at all–let alone determining how divergent it may be–is somewhat controversial, however we believe that our process of scoring legislation is well developed yet simple enough to be conceptualized casually, to the point that is credible in the way that stock tickers are referenced to interpret market developments in real time. Ideally, Llelogram should take advantage of the Gall application structure to provide economic and philosophic context to active federal legislation in real time through logs of atomic transactions.
21+Nothing happens in a vacuum. For however complicated and impenetrable legislation can be, there are very clear and consistent textual markers that do translate into material displacement. The idea then, is to create a Gall application that renders an illustration* of this displacement so that we could easily conceptualize how legislation affects our society.
22+
23+Technically, Llelogram is a set of tables to run contravariant to legislation. Technically illiterate as I am, from what I could gather on the Urbit Gall App tutorial, the unary function would help to illustrate the fiscal dynamic, while the binary function would translate the more abstract philosophical displacement of the text. The unary table would be made up of contemporary econometrics having to do with wealth portfolios; i.e. income/tax[liabilities] across demographics such as public sector employees (eg. teachers and janitors)/elected representatives, to private sector employees/capitalists (eg. tycoons). The binary function would be comprised of diametrica that reflect the spectrum of modern* discourse/experience. The unary table is a little more straightforward in that it’s parameters are neatly class/quantified through a currency which is universally accepted/desired. On the other hand, the binary table would be something like a literary collage made up of seminal sociological texts spanning the entire spectrum of (actionable)pop discourse that resonates variably between partisan positions to illustrate displacement.
24+
25+2020 has been a scary year, but for all the sound and fury I can see light in our eyes. If we can create what I have been conceptualizing since 2015, Llelogram will be a tool for people to see how well legislation written in their names reflects the light in their eyes. Thank you so much for reading, I hope I can be part of utilizing Urbit and bringing it into the real world with you folks!
26+
27+
28+## Milestones
29+
30+
31+### Build the CLI
32+1 stars
33+At this point we should have a basic CLI that imports actionable* federal legislation, and provides a basic way for us to flag language/numbers and score it according to how generally displaced is.
34+
35+
36+### Compiling the tables
37+1 stars
38+Having worked in parallel with the engineers as they put together the CLI, I'll be compiling a basic list of tax liabilities issued by tax code; also a literary collage of seminal sociology
39+
40+
41+### Interpret the stimulus package
42+1 stars
43+Given the gravity of the stimulus package congress is working on, we should apply our project to it as a way of testing how well our agent illustrates the content and resonates with our control
44+
45+
46+### Write a paper
47+1 stars
48+The paper should stand as a kind of thesis which would be tested as the election happens and we can see how these developments were interpreted through the constituents.
49+
50+
51+### Create a kind of graphic rendition
52+1 stars
53+Given that the ultimate goal of Llelogram is to be something like a stock ticker, I want to create a coherent design language that would reflect the State we are managing.
54+
55+
content/grants/matrices-in-hoon.mdnew file+57
@@ -0,0 +1,57 @@
1++++
2+title = "Matrices in Hoon"
3+date = 2020-02-21
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Core Dev"]
7+[extra]
8+image = ""
9+description = "Add array types to Hoon."
10+reward = 5
11+assignee = "N E Davis"
12+id = "611660914"
13+completed = false
14+link = ""
15++++
16+
17+### Background
18+
19+Hoon currently does not have vector or array types.
20+
21+### Bounty Description
22+
23+You must:
24+- Define a Hoon data structure for n-dimensional arrays
25+- Spec out Hoon type signatures for basic array functions, with an informal but coherent plan for jetting
26+- Implement basic array functions
27+- Write corresponding jets
28+
29+You approach could follow one of many paradigms, but below are some good ideas:
30+- BLAS-style matrix math
31+- Tensorflow
32+- Futhark
33+
34+Any paradigm is acceptable as long as it results in code whose performance is at least close to on-par with NumPy.
35+
36+### Resources
37+
38+- [The NumPy documentation](https://docs.scipy.org/doc/)
39+- [BLAS](http://www.netlib.org/blas/)
40+- [Tensorflow](https://www.tensorflow.org/js/guide/tensors_operations)
41+- [Futhark](https://futhark-lang.org/examples/arrays.html)
42+
43+### Contribution Guidelines
44+
45+- Do not begin work until your request to claim this bounty is accepted.
46+- Submit your code as a PR to the [urbit Github repo](https://github.com/urbit/urbit)
47+- You have 180 days from the time of approval to complete this bounty.
48+
49+
50+## Milestones
51+
52+
53+### Your PR is merged
54+5 stars
55+Your PR is accepted and merged.
56+
57+
content/grants/matrixriotim-bridge-bot.mdnew file+38
@@ -0,0 +1,38 @@
1++++
2+title = "Matrix(Riot.im) bridge/bot"
3+date = 2020-11-05
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "This would be a python bot to connect urbit to any Matrix server. It would act as a bridge, mirroring messages between the two platforms."
10+reward = 2
11+assignee = "modmes-livheb"
12+id = "1496457780"
13+completed = false
14+link = ""
15++++
16+
17+## How
18+Looking over the airlock documentation this seems to be a pretty simple endeavor. Preliminary testing shows it should be more than possible to connect a matrix server and urbit channel. Both systems have well built python based API's and transfer message's via a json query, very manipulation looks needed.
19+## Why
20+I'm currently apart of a group split between the two platforms, us Martians pushing for the new internet and the old souls resistant to change. Building something like this then open sourcing it for other groups experiencing similar issues could bring a entry point for plethora of future Martians.
21+## Stars
22+I'm a close friend of ~nartes-fasrum, a prominent member of the community. They've gotten me addicted to this new age internet and gave me the idea for this project. I'm seeking a single star to cement my place in the galaxy, helping grow the community. I've actively recruited people in the real world under ~sorwet on behalf of ~nart but would like to start sponsoring them myself. I'm an AWS certified engineer with a burning passion for bleeding edge tech, this is my newest and most burning passion. The second milestone is more of a stretch goal of mine, I'm not sure I'm able to complete that alone, but I think it would be a really nice addition to lower the entry bar for fellow martians.
23+
24+
25+
26+## Milestones
27+
28+
29+### Working base client
30+1 stars
31+At this point I'd like to have the base client working, subscribing and emitting messages between systems. I'd plan on this running via a separate cli-based client.
32+
33+
34+### Web Client
35+1 stars
36+A self hosted administration portal for the bot, able to add matrix channels/ships seamlessly. This is something that I'd like to complete but not sure on an ETA.
37+
38+
content/grants/minimal-urbit-os.mdnew file+56
@@ -0,0 +1,56 @@
1++++
2+title = "Minimal Urbit OS"
3+date = 2021-01-20
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Core Dev"]
7+[extra]
8+image = ""
9+description = "A Linux based host OS with only the essentials needed to run Urbit, designed to help the process of getting Urbit running on bare metal"
10+reward = 6
11+assignee = "~forfel-norfel"
12+id = "1935638429"
13+completed = false
14+link = ""
15++++
16+
17+This will be a minimal Linux-based operating system designed for running Urbit. It will include only components essential to keeping a ship running smoothly in a specific but reasonably obtainable x86 environment (UEFI, Ethernet with DHCP, generic Intel or VMware hardware, etc).
18+
19+It will be designed and built with the larger goal of identifying and isolating all functionality that is missing from Urbit so that those features can be added and Urbit will gradually move closer to running directly on hardware.
20+
21+This OS is intended to be a foundation for most of the different environments where people will want to run Urbit. It will be simple for future projects to combine this OS with an overlay that includes software specific to the target environment.
22+
23+Possible environments:
24+- local server
25+- single cloud server
26+- planet hosting provider
27+- laptop running Urbit with a native interface for Landscape
28+- one click Windows app that runs everything in WSL or a VM
29+
30+All management functionality that will be essential regardless of environment will be included and exposed through a basic API. This API will most likely be a command line program, and it will simplify tasks like breaching by combining multiple steps into a single, reliable command. While there are most likely existing scripts to handle some of these tasks, it will be necessary to adapt those processes to this new OS since some things will be missing or work differently.
31+
32+Qualifications: I recently installed Gentoo on a 20 year old ThinkPad for fun.
33+
34+## Milestones
35+
36+
37+### Proof of concept
38+1 stars
39+A minimal VM that supports booting and running a comet for several hours with a small amount of manual setup
40+
41+
42+### System architecture plan
43+1 stars
44+A diagram and written overview of all components and their dependencies, explaining how the system works and why those components were chosen. I will seek input from Tlon.
45+
46+
47+### Usable OS image
48+2 stars
49+A reasonably stable and complete OS image that testers can use for hosting their planets
50+
51+
52+### Documentation and fixes
53+2 stars
54+Documentation for the entire system and build process, including specs for each component and ideas for replacements within Urbit. The OS will be updated to address known problems.
55+
56+
content/grants/network-explorer-data-pipeline-http-api.mdnew file+229
@@ -0,0 +1,229 @@
1++++
2+title = "Network Explorer: Data Pipeline & HTTP API"
3+date = 2021-03-12
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "Build a public, open HTTP API for exploring metrics about the Urbit network."
10+reward = 5
11+assignee = "Christopher King"
12+id = "1101665172"
13+completed = false
14+link = ""
15++++
16+
17+## Overview
18+
19+![network explorer screenshot](https://wolref-podlex.s3.us-west-2.amazonaws.com/wolref-podlex/2021.2.23..20.58.30-Screen%20Shot%202021-02-23%20at%209%2C01%2C03%20AM.png)
20+
21+### Goal
22+
23+Build a public, open HTTP API for exploring metrics about the Urbit network.
24+
25+### Background
26+
27+The project known as the **Network Explorer** has been in the works at Tlon for
28+quite some time. The idea is to build a publicly-accessible tool (hosted on
29+https://network.urbit.org) that provides key metrics and insights into the state
30+of the Urbit network. A series of high-fidelity designs have been produced.
31+
32+### Scope
33+
34+This bounty covers the creation of the:
35+
36+- **data pipeline**: we're concerned with data from the PKI (Azimuth) and
37+ the Urbit network itself. These two datasets will need to be aggregated and
38+ indexed for efficient querying.
39+- **HTTP API**: the interface for querying data from a client, like the Network
40+ Explorer.
41+
42+The Network Explorer interface will be covered in a separate bounty.
43+
44+## Implementation
45+
46+### Data Model
47+
48+Let's start with the data model. There are two sources of data that we need:
49+
50+- **PKI (Azimuth)**: The public-key infrastructure, currently known as Azimuth,
51+ is our primary source of data. This information is currently found on Ethereum
52+- **Radar output**: [`radar`](https://github.com/urbit/urbit/blob/2c412d658a74dca3b3f584b92f8b390f38a05ba1/pkg/arvo/app/radar.hoon) is a program run from within an Urbit
53+ ship that pings (`|hi`) every Urbit ship and records the results. This data is exposed in a single JSON file that is added to over time as the script runs.
54+
55+Most of the required information in the Network Explorer will come from Azimuth.
56+It's important to know though that the source of PKI information will likely
57+change in the near future in light of [ongoing work to reduce the
58+cost](https://groups.google.com/a/urbit.org/g/dev/c/p6rP_WsxLS0) of bringing
59+nodes onto the network.
60+
61+The below [entity-relationship
62+diagram](https://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model)
63+defines a data model in terms of a relational database:
64+
65+![erd diagram](https://wolref-podlex.s3.us-west-2.amazonaws.com/wolref-podlex/2021.2.23..20.58.39-Network%20Explorer%20ERD.png)
66+
67+Some notes about the above diagram:
68+
69+* The data model should be *agnostic to any particular PKI storage
70+ infrastructure* to future-proof it against PKI changes.
71+* For non-`ping` data, it should be possible to compute the table of `node` from
72+ a time-ordered traversal of `pki_event` (kind of like Arvo!). This means that
73+ many fields listed on the `node` table could instead be derived from analysis
74+ of the `pki_event` table. The implementer will be responsible for determining
75+ which fields should be represented on the `node` directly and which should be
76+ determined from `pki_event` for performance purposes.
77+* We don't have data for comets or moons, because they're not registered on
78+ Azimuth and `radar` only checks for activity from ships with keys that have
79+ been set on Azimuth. There will likely be a future in which we'll have a way
80+ to provide data about these ship types though.
81+
82+### Data Ingestion
83+
84+Data from Azimuth and `radar` will need to be regularly extracted, parsed, and
85+persisted to the local database for querying.
86+
87+For Azimuth, using a tool like [infura](https://infura.io) should be used.. Tlon
88+currently uses infura, so it should be possible to use a free account for
89+development and Tlon's pre-existing service in production.
90+
91+The output of the `radar` script is saved to a JSON file that can be found
92+[here](http://35.247.74.19:8080/~radar.json). This file is updated as new ping
93+information is obtained, so data ingestion from this service should happen on
94+some regular schedule.
95+
96+### API
97+
98+The following are are necessary API endpoints for the Network Explorer UI to
99+function properly. It's likely that some details have been missed, so apply your
100+own judgement when designing the API.
101+
102+This interface is meant to be agnostic to the API mechanism you choose, which
103+could be either REST or GraphQL.
104+
105+#### get-node
106+
107+Produce the details for a single node.
108+
109+**Parameters**
110+- `urbit_id`: `@p`
111+
112+**Returns**
113+- `urbit_id`: `@p`
114+- `node_type`: `#{galaxy,star,planet,moon,comet}`
115+- `status`: `#{locked,unlocked,spawned,activated,online}`
116+- `continuity`: `int`, current continuity
117+- `key_revision`: `int`, current revision of keys
118+- `num_owners`: `int`, number of owners
119+- `sponsors`: `[node]` (sponsor and sponsor's sponsor, if applicable)
120+- `kids`: `[node]` (nodes sponsored by this one)
121+- `proxy_addresses`:
122+ - `ownership`
123+ - `spawn`
124+ - `transfer`
125+ - `voting`
126+ - `management`
127+
128+#### get-nodes
129+
130+Produce a list of nodes, optionally with parameters. Absence of parameters queries all nodes.
131+
132+**Parameters**
133+- `q`: `string` (optional: query term to search for)
134+- `node_types`: `[node_type]` (optional: produce just events for specific node types)
135+- `limit`: `int` (number of results to return)
136+- `offset`: `int` (number of results to offset by)
137+
138+**Returns**
139+An array of `node` in ascending order by `point`.
140+
141+#### get-pki-events
142+
143+Produce the stream of PKI events for a specific Urbit ID, or globally in descending order of `time`.
144+
145+**Parameters**
146+- `urbit_id`: `@p` (optional: unspecified implies global)
147+- `since`: `timestamp` (optional: unspecified implies all events)
148+- `node_types`: `[node_type]` (optional: produce just events for specific node types)
149+- `limit`: `int` (number of results to return)
150+- `offset`: `int` (number of results to offset by**
151+
152+**Returns**
153+An array of `pki_event` in descending order of `time`.
154+
155+#### get-activity
156+
157+Produce the network activity of a node or nodes.
158+
159+**Parameters**
160+- `urbit_id`: `@p` (optional: specific ship to pull activity for)
161+- `since`: `timestamp` (optional: activity since provided time)
162+- `until`: `timestamp` (optional: activity up until the provided time)
163+
164+If `urbit_id` is unspecified, implies all ships.
165+
166+If `since` and `until` are unspecified, produces all activity for all time. If
167+only `since` is provided, produces activity from `since` to the present. If only
168+`until` is provided, produces activity for all of time up until `until`. If both
169+are provided, queries activity within a range.
170+
171+**Returns**
172+Array of:
173+- `urbit_id`: `@p`
174+- `date`: `date` (no time)
175+- `active`: `boolean` (active or inactive)
176+
177+### Technology Requirements/Guidelines
178+
179+That which is not explicitly specified here is up to the choice of the
180+implementer.
181+
182+* **Database**: PostgreSQL
183+* **Ethereum Interaction**: Infura
184+* **HTTP API methodology**: GraphQL or REST
185+* **ORM**: None. Implementer should be sufficiently familiar with SQL.
186+* **API Hosting**: The API will be hosted on `api.network.urbit.org` or
187+ `network.urbit.org/api`.
188+
189+## Requirements
190+
191+- 2+ years of experience with developing HTTP APIs
192+- 2+ years of experience working with relational databases
193+- Code hosted at https://github.com/urbit/network-api
194+- Attend regular (weekly or bi-weekly) checkin meetings with the director of
195+ urbit.org to provide status updates
196+
197+## Resources
198+
199+- A complete set of high-fidelity designs in Figma will be made available to the
200+ worker.
201+- The director of urbit.org will ensure access to other resources or personnel
202+ as needed.
203+
204+## Milestones
205+
206+
207+### Data ETL
208+2 stars
209+The database has been designed and data from both sources is ingested
210+(extracted, transformed and loaded) on a regular schedule. Analysis can be
211+performed at the database layer.
212+
213+
214+
215+### HTTP API
216+2 stars
217+An HTTP API is written per the above specification and deployed to
218+`https://api.network.urbit.org`.
219+
220+
221+
222+### UI Integration
223+1 stars
224+The Network Explorer UI will be a separate proposal, but integration with an
225+interface inevitably surfaces oversights in the original design. An additional
226+star will be awarded for providing ongoing maintenance as-needed during
227+front-end integration.
228+
229+
content/grants/open-street-maps-data-importation.mdnew file+52
@@ -0,0 +1,52 @@
1++++
2+title = "Open Street Maps Data Importation"
3+date = 2020-07-09
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Core Dev"]
7+[extra]
8+image = ""
9+description = "reate a mapping tool which allows Open Street Maps data to be imported into Urbit."
10+reward = 2
11+assignee = ""
12+id = "1072822195"
13+completed = false
14+link = ""
15++++
16+
17+Create a mapping tool which allows Open Street Maps data to be imported into Urbit from the OSM API, stored and queried locally, and exported to be rendered by existing map rendering Javascript libraries.
18+
19+This grant should involve 2 major steps:
20+
21+1: Create a client which makes it possible for OSM data in multiple formats to be serialized into Urbit and converted into a Hoon data structure.
22+
23+2: Create methods by which this data can be stored and queried in Urbit, then exported and rendered by at least two different common Javascript map rendering libraries.
24+
25+Additionally, write a one-page explanation for your design choices in the readme. Also in the readme, write an explanation of you you might expect a user-facing app to take advantage of your backend.
26+
27+### Resources:
28+
29+- [OSM Copyright and License Details](https://www.openstreetmap.org/copyright)
30+- [OSM API Usage Policy](https://operations.osmfoundation.org/policies/api/)
31+- [Rendering](https://wiki.openstreetmap.org/wiki/Rendering)
32+- [OSM File Formats](https://wiki.openstreetmap.org/wiki/OSM_file_formats)
33+
34+### Contribution Guidelines:
35+
36+- Do not begin work until your request to claim this bounty is accepted.
37+- Submit your work as a separate github repo, and email grants@urbit.org.
38+- Storage concerns: The entire OSM dataset is 40GB, so this client should be constructed so as to allow the manipulation of smaller sectors (corresponding to geographic regions) of data at any given time. The Urbit system has a memory + storage limit of 2GB.
39+- License: Make sure to read the above link carefully and credit OSM for the relevant data on any user-facing interface.
40+- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
41+- You have 90 days from the time of approval to complete this bounty.
42+- Successful completion of this bounty may result in an invitation to complete other API bounties.
43+
44+
45+## Milestones
46+
47+
48+### You are finished
49+2 stars
50+Your work has been approved.
51+
52+
content/grants/overhaul-the-urbitorg-website.mdnew file+73
@@ -0,0 +1,73 @@
1++++
2+title = "Overhaul the urbit.org website"
3+date = 2021-02-19
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Design"]
7+[extra]
8+image = ""
9+description = "Rework urbit.org to encourage participation with the project."
10+reward = 6
11+assignee = "~radbur-sivmus"
12+id = "246698762"
13+completed = false
14+link = ""
15++++
16+
17+## Overview
18+
19+The urbit.org site used to be focused almost solely on informing its readers about the project and its progress. This was due to Urbit's being "not ready" for general use. Now it is, but urbit.org doesn't reflect this. Our goal is to change this image to better demonstrate Urbit's utility through narratives that reflect different paths to participation with the project.
20+
21+## Scope
22+
23+The content of urbit.org can be broken into two components:
24+
25+1. The part concerned with explaining what Urbit is, why you should care, and what you can do with it, and
26+2. the part that documents its usage and implementation.
27+
28+This bounty is concerned only with the first part.
29+
30+## Phases
31+
32+We'll break the project into two phases—**design** and **implementation**.
33+
34+### Design
35+
36+Reworking urbit.org is a substantial undertaking and requires thoughtful planning to execute. A coherent design is key to ensuring that the site fits together.
37+
38+1. Definition of the different **personas** that arrive on urbit.org, and the **stories** that they'll follow.
39+2. An **information architecture** that maps the flow of content such that the stories can be fulfilled.
40+3. A set of **wireframes** that capture the navigational elements and content requirements in terms of the information architecture.
41+
42+It's expected that the design phase is completed within four weeks: one week for parts (1) and (2), two weeks for part (3), and an extra week for buffer.
43+
44+### Implementation
45+
46+The path to implementation is necessarily dependent on the outcomes of the design phase, but we can make the following assumptions:
47+
48+- The implementation should be time-boxed to 3-4 weeks, which includes a week of QA.
49+- The visual design should remain largely consistent with the current site. Modifications are permissible within the bounds of the [indigo](https://github.com/urbit/indigo-react) design system.
50+
51+## Other Requirements
52+
53+- You will be expected to attend our regular Monday morning design meetings with work prepared for feedback (10AM PT, usually).
54+- Frequent communication with a group of stakeholders on the project
55+
56+## Resources
57+
58+- A vision document from the Urbit Foundation will be made available.
59+- The Urbit Foundation and Tlon design team will be available for assistance and will provide feedback and design review throughout the process.
60+
61+## Milestones
62+
63+
64+### Designs are complete
65+2 stars
66+Completion of the contents of the Design section above.
67+
68+
69+### Implementation is complete
70+4 stars
71+Completion of the contents of the Implementation section above.
72+
73+
content/grants/proposals/_index.mdnew file+4
@@ -0,0 +1,4 @@
1++++
2+title = "Proposals"
3+template = "grant_type/proposals.html"
4++++
content/grants/ragnarok-online-on-urbit.mdnew file+53
@@ -0,0 +1,53 @@
1++++
2+title = "Ragnarok Online on Urbit"
3+date = 2019-08-30
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "Landscape app that supports registering an urbit ID with an RO server, exposing various account management actions and guild / channel chats"
10+reward = 3
11+assignee = "~littel-wolfur"
12+id = "2084005955"
13+completed = false
14+link = ""
15++++
16+
17+# Ragnarok Online on Urbit
18+
19+
20+This is a Landscape / Gall app proposal for registering an urbit ID with an account in an MMORPG, with initial support for Ragnarok Online and exposing various actions like inventory management, friend lists, guild / main chat, and in-game market tools. Most importantly, account state will be persisted on your ship and can be transferred between supported servers.
21+
22+RO has a large but fragmented private server community. Both the server and game clients are heavily customizable, and there are open source tools that can manipulate the server state through the browser (create accounts, browse in-game player shops, etc).
23+
24+Since these servers are usually run by individuals, there is a very high turnover rate, with some servers not even lasting a couple months. This is very frustrating for players and is one of the main reasons people stick with the official servers, even though they are plagued with gold sellers and bots.
25+
26+But if your character state is linked to your urbit, this frustration is mitigated - you can just move to another server that will accept you. You could even register that character with another game, provided that there is some sort of mapping for acceptable character states.
27+
28+I see this as an ideal test bed for demonstrating the practical value of urbit ideals like persistence (never regret the grind again!), digital ownership (virtual items tied to your urbit id), and networked computing (automatic guild <-> group mappings, persisted friend lists). It could also be a way to get a sizeable and dedicated gaming community onto urbit. Custom quests / areas where players can learn about urbit could easily be implemented.
29+
30+Other potential outcomes:
31+
32+- In game chat channels can be mapped to urbit chats, or to urbit itself, meaning you can get in-game code evaluation. Ad-hoc addons for boss fights, guild events, and market trading maybe?
33+- An emergent reputation system - players won't want to join servers that have corrupt GMs or excessive botting, since those servers will likely be blacklisted and your character won't be transferable. Servers might also identify stars that sell planets to gold sellers and ban planets under them.
34+- Patreon-esque donation system when we get bitcoin wallet support.
35+
36+## Milestones
37+
38+
39+### Gall app
40+1 stars
41+A gall app that handles updates to all linked character states and relevant game state. The data model should be constructed with an eye towards supporting multiple games and permissioning
42+
43+
44+### Frontend UI
45+1 stars
46+Character and game state display. Should be able to view various server and character stats as well as read chat channels. Character creation and account deletion as well.
47+
48+
49+### Working connection to RO server
50+1 stars
51+A customized urbit RO server that only accepts @p logins and a documented communication pattern with the gall app.
52+
53+
content/grants/search-in-groups.mdnew file+41
@@ -0,0 +1,41 @@
1++++
2+title = "Search in groups"
3+date = 2021-02-25
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "Implement a basic text search in groups channels"
10+reward = 2
11+assignee = "@nrtxrmnd"
12+id = "835369230"
13+completed = false
14+link = ""
15++++
16+
17+I saw this post in u-c feature requests channel [~bitbet-bolbel/urbit-community/resource/publish/ship/~bitpyx-dildus/feature-requests/note/170141184504903337445158066480138420224](http://localhost:8080/~landscape/ship/~bitbet-bolbel/urbit-community/resource/publish/ship/~bitpyx-dildus/feature-requests/note/170141184504903337445158066480138420224)
18+> Even the sort of thing that could be thrown together in an afternoon would be 1000x better than nothing.
19+
20+and I likewise thought even a basic search function would be immediately useful
21+
22+## Design
23+
24+The user-facing interface would be a shoe app where you enter your search word into prompt and then select from which group you would like to search from. There are additional (optional) parameters: search from a specific @p, search from before, after or specific timeframe, search from specific channel, nr. of posts to search (from latest). The app then returns the posts that contained the search word, going back as far as was specified in the nr. of nodes parameter (e.g. last 200 posts). If there is more (older) posts to search from, prompt asks if you want to search more posts.
25+This basic version of search only searches for exact word from post, when limited between whitespace and contains English characters. Later iterations will bring more improvements.
26+
27+There will also be a generator with nearly same functionality but it's stateless so could only search specified fixed nr. of posts.
28+
29+## Milestones
30+
31+
32+### search generator done
33+1 stars
34+↑
35+
36+
37+### shoe app done
38+1 stars
39+↑
40+
41+
content/grants/staff-the-urbit-help-desk-1.mdnew file+61
@@ -0,0 +1,61 @@
1++++
2+title = "Staff the Urbit Help Desk (1)"
3+date = 2020-02-19
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Help Urbit users with their various problems."
10+reward = 1
11+assignee = "nartes-fasrum"
12+id = "1395801018"
13+completed = true
14+link = ""
15++++
16+
17+### Background
18+
19+Urbit is live. Users frequently need help. Technical issues need to be reported. This feedback process is the primary vector for refining and improving Urbit. This bounty commissions its claimant to observe and attend to these issues presently, as they arise.
20+
21+### Bounty Description
22+
23+The claimant of this bounty will be “staffed” to the three primary Urbit chatrooms: Discord, Urbit-Help on Dopzod, and Urbit.Live’s Telegram group. They are expected to be online at least 4 hours per day to perform the following duties:
24+- Help users boot ships
25+- Recommend relevant resources
26+- Troubleshoot errors users encounter using Urbit
27+- Observe and document bugs
28+- File issues to the relevant Github repo
29+
30+Once per week, staff should send a weekly digest email to support@urbit.org, with a report of key events and hours worked.
31+
32+Staff should periodically identify themselves and announce their presence to encourage feedback.
33+
34+The bounty claimant should have competency in the following areas: Booting Urbit in terminal, Troubleshooting, Operating Urbit via the Dojo, Chat CLI, and General Urbit terminology.
35+
36+### Resources
37+Chatrooms to Monitor:
38+- [Urbit.live Telegram](https://t.me/UrbitLiveGroup)
39+- [Urbit Discord](https://discord.gg/Mae2bk7)
40+- `~dopzod/urbit-help`
41+
42+Repos to file issues:
43+
44+- [Bridge Issues on Github](https://github.com/urbit/bridge/issues)
45+- [Urbit Issues on Github](https://github.com/urbit/urbit/issues)
46+
47+### Contribution Guidelines
48+- Do not begin work until your request to claim this bounty is accepted.
49+- Claimant will be online and responsive in the chatrooms, 4 hours daily, for 30 days
50+- It may be requested that staffers modify their hours to improve coverage of issues.
51+- Estimated work: 2 - 4 hours per day
52+
53+
54+## Milestones
55+
56+
57+### You have been staffing a help desk for 30 days
58+1 stars
59+You have been responsive daily for 30 days.
60+
61+
content/grants/staff-the-urbit-help-desk-2.mdnew file+61
@@ -0,0 +1,61 @@
1++++
2+title = "Staff the Urbit Help Desk (2)"
3+date = 2020-02-21
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Help Urbit users with their various problems."
10+reward = 1
11+assignee = "sicbud (and i cannot stress this enough) hathes"
12+id = "612547183"
13+completed = true
14+link = ""
15++++
16+
17+### Background
18+
19+Urbit is live. Users frequently need help. Technical issues need to be reported. This feedback process is the primary vector for refining and improving Urbit. This bounty commissions its claimant to observe and attend to these issues presently, as they arise.
20+
21+### Bounty Description
22+
23+The claimant of this bounty will be “staffed” to the three primary Urbit chatrooms: Discord, Urbit-Help on Dopzod, and Urbit.Live’s Telegram group. They are expected to be online at least 4 hours per day to perform the following duties:
24+- Help users boot ships
25+- Recommend relevant resources
26+- Troubleshoot errors users encounter using Urbit
27+- Observe and document bugs
28+- File issues to the relevant Github repo
29+
30+Once per week, staff should send a weekly digest email to support@urbit.org, with a report of key events and hours worked.
31+
32+Staff should periodically identify themselves and announce their presence to encourage feedback.
33+
34+The bounty claimant should have competency in the following areas: Booting Urbit in terminal, Troubleshooting, Operating Urbit via the Dojo, Chat CLI, and General Urbit terminology.
35+
36+### Resources
37+Chatrooms to Monitor:
38+- [Urbit.live Telegram](https://t.me/UrbitLiveGroup)
39+- [Urbit Discord](https://discord.gg/Mae2bk7)
40+- `~dopzod/urbit-help`
41+
42+Repos to file issues:
43+
44+- [Bridge Issues on Github](https://github.com/urbit/bridge/issues)
45+- [Urbit Issues on Github](https://github.com/urbit/urbit/issues)
46+
47+### Contribution Guidelines
48+- Do not begin work until your request to claim this bounty is accepted.
49+- Claimant will be online and responsive in the chatrooms, 4 hours daily, for 30 days
50+- It may be requested that staffers modify their hours to improve coverage of issues.
51+- Estimated work: 2 - 4 hours per day
52+
53+
54+## Milestones
55+
56+
57+### You have been staffing a help desk for 30 days
58+1 stars
59+You have been responsive daily for 30 days.
60+
61+
content/grants/staff-the-urbit-helpdesk-east.mdnew file+60
@@ -0,0 +1,60 @@
1++++
2+title = "Staff the Urbit Helpdesk, East"
3+date = 2021-01-25
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Help guide newcomers onto the network."
10+reward = 1
11+assignee = "~libmud-bonted"
12+id = "1140084926"
13+completed = true
14+link = ""
15++++
16+
17+### Overview
18+
19+Urbit is pretty novel, and newcomers are often confused by the many new concepts they’re confronted with early on. As someone who’s been there before, you can help guide aspiring new Martians into the community by supporting them with their technical issues.
20+
21+### Details
22+
23+You will “staff the help desk,” which means watching our [Discord server](https://discord.gg/Mae2bk7) and the Help channel within Urbit Community for support requests. You’re expected to be online for at least **four hours** within the hours of 0000-0800 UTC (4pm - 12am PST), for five days a week over the course of a month.
24+
25+You’re expected to:
26+- Help users boot ships
27+- Recommend relevant resources
28+- Troubleshoot errors users encounter using Urbit
29+- Observe and document bugs
30+- File issues to the relevant Github repo
31+- Issue pull requests to the documentation should inaccuracies present themselves
32+
33+Once per week, staff should send a weekly digest email to support@urbit.org, with a report of key events and hours worked.
34+
35+It will help if you identify yourself periodically as a support resource so that users know they can ask questions of you. Using a nickname could be helpful here.
36+
37+### Resources
38+
39+- [Bridge Issues](https://github.com/urbit/bridge/issues)
40+- [Urbit Issues](https://github.com/urbit/urbit/issues)
41+- [Docs issues](https://github.com/urbit/docs)
42+
43+### Contribution Guidelines
44+
45+- Do not begin work until your request to claim this bounty is accepted.
46+- Claimant will be online and responsive, 4 hours daily, for 30 days
47+- It may be requested that staffers modify their hours to improve coverage of issues.
48+- Estimated work: 2 - 4 hours per day
49+
50+
51+
52+
53+## Milestones
54+
55+
56+### Work Complete
57+1 stars
58+You've spent the last month helping out newcomers.
59+
60+
content/grants/staff-the-urbit-helpdesk-west.mdnew file+57
@@ -0,0 +1,57 @@
1++++
2+title = "Staff the Urbit Helpdesk, West"
3+date = 2020-12-03
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Help guide newcomers onto the network."
10+reward = 1
11+assignee = "Conrad"
12+id = "123890561"
13+completed = true
14+link = ""
15++++
16+
17+### Overview
18+
19+Urbit is pretty novel, and newcomers are often confused by the many new concepts they’re confronted with early on. As someone who’s been there before, you can help guide aspiring new Martians into the community by supporting them with their technical issues.
20+
21+### Details
22+
23+You will “staff the help desk,” which means watching our [Discord server](https://discord.gg/Mae2bk7) and the Help channel within Urbit Community for support requests. You’re expected to be online for at least **four hours** within the hours of 1600-0000 UTC (8am - 4pm PT), for five days a week over the course of a month.
24+
25+You’re expected to:
26+- Help users boot ships
27+- Recommend relevant resources
28+- Troubleshoot errors users encounter using Urbit
29+- Observe and document bugs
30+- File issues to the relevant Github repo
31+- Issue pull requests to the documentation should inaccuracies present themselves
32+
33+Once per week, staff should send a weekly digest email to support@urbit.org, with a report of key events and hours worked.
34+
35+It will help if you identify yourself periodically as a support resource so that users know they can ask questions of you. Using a nickname could be helpful here.
36+
37+### Resources
38+
39+- [Bridge Issues](https://github.com/urbit/bridge/issues)
40+- [Urbit Issues](https://github.com/urbit/urbit/issues)
41+- [Docs issues](https://github.com/urbit/docs)
42+
43+### Contribution Guidelines
44+
45+- Do not begin work until your request to claim this bounty is accepted.
46+- Claimant will be online and responsive, 4 hours daily, for 30 days
47+- It may be requested that staffers modify their hours to improve coverage of issues.
48+- Estimated work: 2 - 4 hours per day
49+
50+## Milestones
51+
52+
53+### Work Complete
54+1 stars
55+You've spent the last month helping out newcomers.
56+
57+
content/grants/the-complete-guide-to-gall-and-landscape.mdnew file+77
@@ -0,0 +1,77 @@
1++++
2+title = "The Complete Guide to Gall and Landscape"
3+date = 2020-06-22
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Documentation"]
7+[extra]
8+image = ""
9+description = "A full text and video course on every aspect of creating Gall and Landscape apps. Students will create their own full application to finish."
10+reward = 4
11+assignee = "~timluc-miptev"
12+id = "2061597290"
13+completed = true
14+link = ""
15++++
16+
17+# Gall Guide Deliverables
18+
19+## PoC and Prior Work
20+The first 5 chapters of the course are complete in late draft form and can be found [here](https://github.com/timlucmiptev/gall-guide/blob/master/guide-docs/overview.md)
21+
22+My ["Nock for Everyday Coders" Guide](https://blog.timlucmiptev.space/part1.html) was the result of my exploring Nock on my own, and is probably the most detailed Nock reference available currently.
23+
24+## Overview and Goals
25+
26+Develop a Hooniversity module for teaching Gall and creating and modifying Gall applications.
27+
28+The final product will contain all lessons (which incrementally build on each other), example code and reference items needed to transfer this knowledge with no gaps or unanswered questions.
29+
30+The student who completes this course will not only be able to author their own Landscape app, but the learning program associated with these materials will mandate that accomplishment in order for a student to be considered to have passed Hooniversity Gall training.
31+
32+## Table of Contents
33+
34+### Basic Backend
35+* Workflow Setup(2 hours)
36+* The 10 Arms of Gaal: App Structure(4 hours)
37+* App Lifecycle and State(5 hours)
38+* Importing Code and Static Resources(5 hours)
39+* Poke and Watch(6 hours)
40+
41+(From this point onward in the course, all lessons will be in the context of building up a full-featured application)
42+* Communicating with the Outside World (HTTP)(2 hours)
43+* Setting up Data Structures(3 hours)
44+
45+### Frontend
46+* Landscape: GUI for Gall](3 hours)
47+* Walkthrough: Landscape Skeleton](4 hours)
48+* Communicating with Landscape (Subscriptions)](3 hours)
49+* Everything about React for Landscape](6 hours)
50+
51+### More Backend
52+* Calling the OS (Arvo)](3 hours)
53+* Communicating with Other Ships](3 hours)
54+* Store/Hook/View](4 hours)
55+
56+### Appendix
57+* Troubleshooting & FAQ](1 hour)
58+* Types Used in Gall Apps](2 hours)
59+* Common Hoon Idioms Used in Gall](1 hour)
60+
61+## Video Materials
62+* 5 Lessons of 2-3 hours in length each, taught on a weekly basis to help students through the material who are more interactive learners.
63+
64+## Milestones
65+
66+
67+### Written Guide
68+1 stars
69+Full written guide (table of contents in proposal) posted online.
70+
71+
72+### Videos Courses & Full Sample Application
73+1 stars
74+* Videos made for the course
75+* Full sample application finished and polished with extensive commenting, integrated into the lessons
76+
77+
content/grants/thread-documentation.mdnew file+75
@@ -0,0 +1,75 @@
1++++
2+title = "Thread Documentation"
3+date = 2021-02-18
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Documentation"]
7+[extra]
8+image = ""
9+description = "Document, explain, and give simple howtos for the usage patterns of threads in the Dojo and Gall agents."
10+reward = 1
11+assignee = "~tinnus-napbus"
12+id = "4948904"
13+completed = true
14+link = ""
15++++
16+
17+# Thread Documentation Bounty
18+The [official thread documentation](https://urbit.org/docs/tutorials/arvo/gall/#threads) is accurate and helpful, but it's a very thin combination of explainer (production code), how-to, and reference. It's a nice starting point, but it's not sufficient to let a typical Urbit autodidact enthusiast get fully comfortable with threads. As a result, they are often an uncomfortable/unused part of the Urbit system, even though they are useful and robust.
19+
20+Fortunately, the amount of implicit knowledge needed to build a strong mental model of threads and begin using them in Urbit applications. By expanding the explainer/tutorial/howto/reference and delineating them more clearly, we can expose this part of Urbit to devs.
21+
22+This bounty is detailed for clarity, but the individual sections shouldn't take too long to write and don't need to be extremely long.
23+
24+## scope
25+* `ted` directory
26+* `spider` usage in Gall
27+* calling from the dojo with `-`
28+* the `bind`/`;<` chaining model
29+* how `spider` manages its threads
30+
31+### not in scope
32+* aqua
33+
34+## sections
35+### tutorial
36+* Walk through building a thread that composes multiple threads
37+* Will be all from the Dojo using `-`, no Gall
38+* Should include the following calls
39+ - setting a timeout
40+ - pass cards to Arvo/Gall
41+ - HTTP call
42+ - read a file from Clay
43+
44+### explainer
45+* use `lib/strand.hoon` code to explain `bind` and the `%wait` etc. objects
46+* explain how all threads MUST take `strand-input` as an argument
47+* explain how `spider` sends `strand-input` to threads and how it determines which threads to send to.
48+
49+### how-to
50+* Call out to outside web services, chaining calls in the manner of promises/async in other languages
51+* make system calls to Arvo
52+* receive/handle responses from Arvo
53+* use `spider` to integrate with Gall
54+* use `retry` and `backoff` for calls that may fail
55+
56+### reference
57+This can be thin for now, because most necessary thread functions are in `lib/strandio.hoon`, and we don't need to just cut-and-paste that. Just make a quick list of functionality in `lib/strandio` or edit the one in the current thread docs
58+
59+## user stories
60+* as a learner with Hoon knowledge, I will be able to build a mental model of how `spider` manages threads, sends input to them, and chains them together. `bind` and `;<` will be demystified and explained in very simple, mechanical ways.
61+* as a Hoon learner with prior monad experience, I should be able to get a feel for the similarities of IO monads and Urbit threads, and develop strong intuitions for the more mechanical nature of Urbit ones.
62+* as a moderately motivated autodidact with Hoon knowledge I should be able to start writing `ted` threads for Dojo usage immediately, with no other outside materials or informal help needed
63+* as a Gall app developer or maintainer, I should be able to integrate threads into my Gall apps
64+
65+## resources available
66+`~timluc-miptev` will be available to whomever does the bounty to explain things, work through any tough spots, and connect to useful people if necessary.
67+
68+## Milestones
69+
70+
71+### Complete the bounty
72+1 stars
73+Everything in "sections" is done.
74+
75+
content/grants/tor-nodes-relay-search-tile.mdnew file+46
@@ -0,0 +1,46 @@
1++++
2+title = "Tor Nodes Relay Search Tile"
3+date = 2020-03-31
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "An Urbit-native Tor search-tool."
10+reward = 3
11+assignee = "pilwex-migsun"
12+id = "872371692"
13+completed = false
14+link = ""
15++++
16+
17+### Bounty Description
18+
19+Create a backend for importing Tor network node relay search data into Urbit, and design a Landscape tile which will serve as a functional search tool for Tor relay node information inside Urbit.
20+
21+We would like to create an Urbit-native Tor node relay search tool which replicates the same functions as the search tool linked below.
22+
23+### Resources
24+
25+- [Tor Metrics Relay Search Tool](https://metrics.torproject.org/rs.html#simple)
26+- [Tor Metrics Relay Developer Resources](https://metrics.torproject.org/development.html)
27+
28+### Contribution Guidelines:
29+
30+- Do not begin work until your request to claim this bounty is accepted.
31+- Please abide by the rules of the Creative Commons 1.0 Universal License in working with this data.
32+- Submit your work as a pull request to the [urbit/urbit](https://github.com/urbit/urbit) repo
33+- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
34+- You have 90 days from the time of approval to complete this bounty.
35+- Successful completion of this bounty may result in an invitation to complete other API integration bounties.
36+
37+
38+
39+## Milestones
40+
41+
42+### Your PR is merged
43+3 stars
44+Your code is accepted and merged.
45+
46+
content/grants/translate-key-parts-of-urbitorg-into-german.mdnew file+30
@@ -0,0 +1,30 @@
1++++
2+title = "Translate key parts of Urbit.org into German"
3+date = 2021-01-19
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Documentation"]
7+[extra]
8+image = ""
9+description = "Introduction, Urbit OS, Urbit ID, Interface, Roadmap: OS1-> OS N, People + History, and Install + Setup (analog to Korean translation)"
10+reward = 1
11+assignee = "~hocdep-labtel"
12+id = "1163466965"
13+completed = false
14+link = ""
15++++
16+
17+Analog to https://grants.urbit.org/proposals/1921641407-translate-key-parts-of-urbit-org-into-korean this would provide the core parts of the Documentation in German language, in order to make it more accessible to a wider audience.
18+
19+Files could be sent in Markdown as PR to the urbit/docs repository or be transmitted via Email.
20+
21+I am a native German speaker with a long history of speaking and writing English and currently assisting in the translation team of a worldwide operating education and development enterprise, doing both written translation as well as live interpretation.
22+
23+## Milestones
24+
25+
26+### Translation of Key Website Content
27+1 stars
28+Introduction, Urbit OS, Urbit ID, Interface, Roadmap: OS1-> OS N, People + History, and Install + Setup
29+
30+
content/grants/translate-key-parts-of-urbitorg-into-korean.mdnew file+31
@@ -0,0 +1,31 @@
1++++
2+title = "Translate key parts of Urbit.org into Korean"
3+date = 2021-01-30
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Documentation"]
7+[extra]
8+image = ""
9+description = "The content found on urbit.org/understanding-urbit/ and urbit.org/using/install/ is only in English. Translation will be helpful to Koreans."
10+reward = 1
11+assignee = "~sibped-dabdul, 홍송이"
12+id = "1921641407"
13+completed = false
14+link = ""
15++++
16+
17+Currently, Urbit's documentation is almost exclusively in English. In an effort to make Urbit more google-able and accessible to a Korean audience, we propose translating key parts of Urbit.org into Korean. Translated content can either be hosted on another blog/website or the HTML files can be turned over to Urbit.org.
18+
19+I am a native English speaker with a high level of competence in written Korean. I am currently assisting a small Korean game studio with localizing their game into English. I am proficient with OmegaT (CAT). Song-i Hong is a native Korean and fluent English speaker with ten years of experience working closely with foreigners. Together, we translated the Urbit Wikipedia article: https://ko.wikipedia.org/wiki/%EC%96%B4%EB%B9%97
20+
21+At the current pace we are translating a little under 1000 words per week. The total amount to be translated is a little over 9000 words.
22+
23+
24+## Milestones
25+
26+
27+### Translation of Key Website Content
28+1 stars
29+Introduction, Urbit OS, Urbit ID, Interface, Roadmap: OS1-> OS N, People + History, and Install + Setup
30+
31+
content/grants/translate-key-parts-of-urbitorg-into-norwegian.mdnew file+31
@@ -0,0 +1,31 @@
1++++
2+title = "Translate key parts of Urbit.org into Norwegian"
3+date = 2021-04-07
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Help the Urbit community grow internationally by translating key resources, guides, and documentation to Norwegian."
10+reward = 1
11+assignee = "Andreas Atakan"
12+id = "1227012285"
13+completed = false
14+link = ""
15++++
16+
17+Similar to other translation proposals for German, Korean and Spanish, I would provide the core parts of the Documentation in Norwegian, in order to improve accessibility of the Urbit project.
18+Translations can for example be provided as pull requests to the urbit.org repo.
19+
20+I am a native speaker of Norwegian and have lived in Norway my whole life. I also speak English fluently.
21+I have extensive technical experience working as a full-stack web-developer, and specialized experience from several years working as a GIS consultant in the off-shore sector in Norway. I also have experience working with blockchain technologies, and I'm currently hosting a bitcoin- and lightning-node on a hobby basis.
22+In addition to contributing with my translation work, I can also contribute to the Urbit community with my experience of integrating dynamic web-maps into web-applications (like for example React-based apps).
23+
24+## Milestones
25+
26+
27+### Translation of key site content
28+1 stars
29+Introduction, Urbit OS, Urbit ID, Interface, Roadmap: OS1-> OS N, People + History, and Install + Setup
30+
31+
content/grants/translate-key-parts-of-urbitorg-into-spanish.mdnew file+30
@@ -0,0 +1,30 @@
1++++
2+title = "Translate key parts of Urbit.org into Spanish"
3+date = 2021-03-20
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Documentation"]
7+[extra]
8+image = ""
9+description = "Help the Urbit community grow internationally by translating key resources, guides, and documentation to Spanish."
10+reward = 1
11+assignee = "Tom Holford"
12+id = "446864346"
13+completed = false
14+link = ""
15++++
16+
17+Similar to other translation proposals for German and Korean, this would provide the core parts of the Documentation in the Spanish language, in order to improve accessibility and accelerate the growth of Urbit.
18+
19+Translations can be provided as pull requests to the urbit.org repo, or whatever is convenient for the team managing the resource.
20+
21+I am a fluent speaker with 20+ years of experience with the language and have lived in a handful of Spanish-speaking locales for several years. With professional experience as a programmer and teacher, I am skilled at breaking down complex technical concepts to new learners.
22+
23+## Milestones
24+
25+
26+### Translation of key site content
27+1 stars
28+Introduction, Urbit OS, Urbit ID, Interface, Roadmap: OS1-> OS N, People + History, and Install + Setup
29+
30+
content/grants/try-urbit-website.mdnew file+32
@@ -0,0 +1,32 @@
1++++
2+title = "Try Urbit Website"
3+date = 2021-02-14
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "A website where prospective Martians can experience the Landscape interface without any technical chops."
10+reward = 2
11+assignee = "mikeosborne"
12+id = "1413934727"
13+completed = false
14+link = ""
15++++
16+
17+Landing page of website collects minimal information from visitor: Name, email, optional opt-in to foundation newsletter. They are then redirected to a live Landscape interface to "kick the tires" on Urbit as a comet. There will be instruction about how the interface works, what activities to do, etc.
18+
19+The server will run a script that "pre-mines" comets to create a pool of IDs and "+code" secrets. It will monitor activity to ensure enough comets are mined to keep up with demand.
20+
21+The server will also maintain a database of users, status, comet ID, process ID and timestamp when assigned to user. After a predetermined time (1 day?), the server will send an email asking if the user still wants to keep their comet, then stops the process if they reply no or don't reply after some time.
22+
23+The website will have an admin interface with performance stats. It will also allow admins to set up email alerts on usage, processes, comet pool, etc.
24+
25+## Milestones
26+
27+
28+### Project complete
29+2 stars
30+Website and sever side scripts complete and deployed.
31+
32+
content/grants/typescript-airlock-library.mdnew file+44
@@ -0,0 +1,44 @@
1++++
2+title = "Typescript Airlock Library"
3+date = 2020-06-26
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Core Dev"]
7+[extra]
8+image = ""
9+description = "Create a library for the Typescript language to be used for Airlock, the API suite for outside communication with Urbit."
10+reward = 3
11+assignee = "~radbur-sivmus"
12+id = "1845001687"
13+completed = true
14+link = ""
15++++
16+
17+Create an Airlock library for the Typescript programming language. Airlock is the set of HTTP APIs for communicating with an Urbit. This bounty will involve creating a Typescript library wrapper for the server side event and HTTP API.
18+
19+Additionally, write a one-page explanation for the design choices for this library in the readme. If you have ideas for what Urbit applications would be useful for this library, please also include those suggestions in the readme.
20+
21+### Resources:
22+
23+- https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/vane/eyre.hoon#L493
24+- https://github.com/baudtack/urlock-py
25+- [UrlockPy as an example of an Airlock integration](https://github.com/urbit/docs/pull/892)
26+
27+
28+### Contribution Guidelines:
29+
30+- Do not begin work until your request to claim this bounty is accepted.
31+- Submit your work as a separate github repo, and include a link to it in your submission. Email grants@urbit.org if you have trouble.
32+- Your library should be uploaded and available in a format compatible with the package manager you feel most comfortable maintaining.
33+- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
34+- You have 90 days from the time of approval to complete this bounty.
35+- Successful completion of this bounty may result in an invitation to complete other Airlock library bounties. If you are interested in creating an Airlock library for a language other than the ones currently presented, please contact us at grants@urbit.org; it’s likely we’ll approve this as a proposal.
36+
37+## Milestones
38+
39+
40+### Your work is finished
41+3 stars
42+You have completed your work and pushed it to a Github repo.
43+
44+
content/grants/udon-syntax-highlighter.mdnew file+42
@@ -0,0 +1,42 @@
1++++
2+title = "Udon syntax highlighter"
3+date = 2019-07-19
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Dev Tool"]
7+[extra]
8+image = ""
9+description = "Write a syntax highlighter for the Udon markup language."
10+reward = 1
11+assignee = "~dirwex-dosrev"
12+id = "981084186"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Udon is a minimalist markup language for creating and rendering text documents, with a Markdown-inspired syntax. It’s used as the native language for publishing on Modulo, Urbit’s web interface.
20+
21+#### Bounty Description
22+
23+Write a CodeMirror language-mode file that results in correct syntax highlighting for the Udon markup language. Use Markdown syntax highlighting as inspiration, and follow it closely.
24+
25+#### Resources
26+
27+* Read the [Udon guide](https://urbit.org/docs/using/sail-and-udon/)
28+* Familiarize yourself with the Udon parser under the `+cram` arm, at lines 15,310 through 15,538 in `hoon.hoon`.
29+* Familiarize yourself with the Udon compiler in the `cram.hoon` file under `/lib`.
30+
31+#### Contribution Guidelines
32+
33+* Your submission should come in the form of a single JavaScript file. Email the submission to grants@urbit.org
34+
35+## Milestones
36+
37+
38+### The highlighter is complete
39+1 stars
40+The highlighter has been finished and tested, and the language-mode file is finished.
41+
42+
content/grants/unit-tests-for-json-parsing.mdnew file+49
@@ -0,0 +1,49 @@
1++++
2+title = "Unit tests for JSON parsing"
3+date = 2019-11-15
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Core Dev"]
7+[extra]
8+image = ""
9+description = "Write unit tests for JSON-parsing arms of the zuse.hoon standard library."
10+reward = 2
11+assignee = "courajs"
12+id = "905205498"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Zuse is a part of the Hoon standard library. We want to make sure the JSON-parsing functions contained in Zuse do what they are supposed to do.
20+
21+#### Bounty Description
22+
23+Write unit tests which confirm that **every** function under the `+format` ([lines 5644 to 6113](https://github.com/urbit/urbit/blob/0b0766b32b82a294b81f8f405548eb9f16d8c318/pkg/arvo/sys/zuse.hoon#L5644-L6113)) arm behaves as intended. These functions include, but are not limited to, `+enjs`, `+dejs`, and `+dejs-soft`. They turn nouns into JSON, and vice-versa. `+format` is located in `/sys/zuse.hoon`.
24+
25+Also write unit tests which confirm that the functions `+en-json` ([lines 6351 to 6403](https://github.com/urbit/urbit/blob/0b0766b32b82a294b81f8f405548eb9f16d8c318/pkg/arvo/sys/zuse.hoon#L6351-L6403)) and `+de-json` ([lines 6404 to 6422](https://github.com/urbit/urbit/blob/0b0766b32b82a294b81f8f405548eb9f16d8c318/pkg/arvo/sys/zuse.hoon#L6404-L6422)) behave as intended. These functions turn JSON text into JSON noun and back. They are located under the `+html` arm in `/sys/zuse.hoon.`
26+
27+Save the test files in the `/tests/sys/hoon` directory in Arvo. Use the same framework as the files that already exist in `/tests`.
28+
29+#### Resources
30+
31+* Read the [guide](https://github.com/urbit/urbit/blob/master/pkg/arvo/TESTING.udon) to writing unit tests in Hoon.
32+* [Here](https://github.com/urbit/urbit/blob/alef2/pkg/arvo/tests/sys/zuse/ordered-map.hoon) is an example test file for the new Ames. Your tests should be similar to it.
33+
34+#### Contribution Guidelines
35+
36+* You have 45 days from the time of approval to complete this bounty.
37+* Do not begin work until your request to claim this bounty is accepted.
38+* Your tests should be written as two files: one file for `+format` functions and one file for `+html` functions.
39+* Write the appropriate number of unit tests per function. Some arms will only need one test, but some arms may or may not require more. An insufficient number of tests for arms may result in your submission being rejected.
40+* Submit your tests as a PR to the [“urbit” repository](https://github.com/urbit/urbit). Your test file should be under `pkg/arvo/tests/sys/hoon` within the repository. Link this bounty in the PR’s description.
41+
42+## Milestones
43+
44+
45+### Test files are merged
46+2 stars
47+Your test files are accepted and merged on GitHub.
48+
49+
content/grants/unit-tests-for-pure-algorithms.mdnew file+61
@@ -0,0 +1,61 @@
1++++
2+title = "Unit tests for pure algorithms"
3+date = 2019-07-25
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Core Dev"]
7+[extra]
8+image = ""
9+description = "Write unit tests for +in, +by, +to, and +diff."
10+reward = 1
11+assignee = "yosoyubik"
12+id = "1322185260"
13+completed = false
14+link = ""
15++++
16+
17+#### Bounty Description
18+
19+Write unit tests which confirm that every function under the `+in` (sets), `by` (maps), and `+to` (queues) arms behaves as intended. These functions can be found in sections [2h](https://github.com/urbit/urbit/blob/0b0766b32b82a294b81f8f405548eb9f16d8c318/pkg/arvo/sys/hoon.hoon#L1142-L1368), [2i](https://github.com/urbit/urbit/blob/0b0766b32b82a294b81f8f405548eb9f16d8c318/pkg/arvo/sys/hoon.hoon#L1370-L1679), and [2k](https://github.com/urbit/urbit/blob/0b0766b32b82a294b81f8f405548eb9f16d8c318/pkg/arvo/sys/hoon.hoon#L1734-L1813) of the Hoon standard library, respectively. They are located in `/sys/hoon.hoon`.
20+
21+Also write unit tests for the functions under the `+differ` arm [in `/sys/zuse.hoon`](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/zuse.hoon#L6117-L6271). These functions are a suite of Hunt-McIlroy `diff` and `merge` algorithms.
22+
23+Save the test files in the `/tests/sys/hoon` directory in Arvo. Use the same framework as the files that already exist in `/tests`.
24+
25+#### Resources
26+
27+* Read the [guide](https://github.com/urbit/urbit/blob/master/pkg/arvo/TESTING.udon) to writing unit tests in Hoon.
28+* Read the documentation on [sets](https://urbit.org/docs/reference/library/2h/), [maps](https://urbit.org/docs/reference/library/2i/), and [queues](https://urbit.org/docs/reference/library/2k/).
29+* [Here](https://github.com/urbit/urbit/blob/alef2/pkg/arvo/tests/sys/zuse/ordered-map.hoon) is an example test file for the new Ames. Your tests should be similar to it.
30+
31+#### Contribution Guidelines
32+
33+* Do not begin work until your request to claim this bounty is accepted.
34+* Your tests should be written as four files, with one for each core (`+in`, `+by`, `+to`, and `+differ`).
35+* Write the appropriate number of unit tests per function. Some arms will only need one test, but some arms may or may not require more. An insufficient number of tests for arms may result in your submission being rejected.
36+* Submit your tests as a PR to the [“urbit” repository](https://github.com/urbit/urbit). Your test file should be under `pkg/arvo/tests/sys/hoon` within the repository. Link this bounty in the PR’s description.
37+* You have 30 days from the time of approval to complete this bounty.
38+
39+#### Resources
40+
41+* Read the [guide](https://github.com/urbit/urbit/blob/master/pkg/arvo/TESTING.udon) to writing unit tests in Hoon.
42+* Read the documentation on [sets](https://urbit.org/docs/reference/library/2h/), [maps](https://urbit.org/docs/reference/library/2i/), and [queues](https://urbit.org/docs/reference/library/2k/).
43+* [Here](https://github.com/urbit/urbit/blob/alef2/pkg/arvo/tests/sys/zuse/ordered-map.hoon) is an example test file for the new Ames. Your tests should be similar to it.
44+
45+#### Contribution Guidelines
46+
47+* Do not begin work until your request to claim this bounty is accepted.
48+* Your tests should be written as four files, with one for each arm (`+in`, `+by`, `+to`, and `+differ`).
49+* Write the appropriate number of unit tests per function. Some arms will only need one test, but some arms may or may not require more. An insufficient number of tests for arms may result in your submission being rejected.
50+* Submit your tests as a PR to the [“urbit” repository](https://github.com/urbit/urbit). Your test file should be under `pkg/arvo/tests/sys/hoon` within the repository. Link this bounty in the PR’s description.
51+* You have 30 days from the time of approval to complete this bounty.
52+
53+
54+## Milestones
55+
56+
57+### Test files are merged
58+1 stars
59+Your test files are accepted and merged on GitHub.
60+
61+
content/grants/unit-tests-for-sha-functions.mdnew file+50
@@ -0,0 +1,50 @@
1++++
2+title = "Unit tests for SHA functions"
3+date = 2019-07-25
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Core Dev"]
7+[extra]
8+image = ""
9+description = "Write unit tests for SHA cryptographic functions of the Hoon standard library."
10+reward = 1
11+assignee = "Ken Meier"
12+id = "179152973"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Urbit relies on Hoon cryptographic functions. We want to make sure that these functions are correct.
20+
21+#### Bounty Description
22+
23+Write unit tests which confirm that the functions in section 3d of `hoon.hoon` ([lines 3245 to 3665)](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/hoon.hoon#L3245-L3665) behave as intended.
24+
25+For each function, pull a list of standard input-output pairs from an authoritative source on the algorithm. Look at specifications requests for comment for the relevant algorithms. Other testing functionality is welcome.
26+
27+Save the test file in the `/tests/sys/hoon` directory in Arvo. Use the same framework as the files that already exist in `/tests`.
28+
29+#### Resources
30+
31+* Read the [guide](https://github.com/urbit/urbit/blob/master/pkg/arvo/TESTING.udon) to writing unit tests in Hoon.
32+* Read the [documentation](https://urbit.org/docs/reference/library/3d/) for section 3d.
33+* [Here](https://github.com/urbit/urbit/blob/alef2/pkg/arvo/tests/sys/zuse/ordered-map.hoon) is an example test file for the new Ames. Your tests should be similar to it.
34+
35+#### Contribution Guidelines
36+
37+* Do not begin work until your request to claim this bounty is accepted.
38+* You have 45 days from approval to complete the bounty.
39+* Your tests should be written as one file.
40+* Write the appropriate number of unit tests per function. Some arms will only need one test, but some arms may or may not require more. An insufficient number of tests for arms may result in your submission being rejected.
41+* Submit your tests as a PR to the [“urbit” repository](https://github.com/urbit/urbit). Your test file should be under `pkg/arvo/tests/sys/hoon` within the repository. Link this bounty in the PR’s description.
42+
43+## Milestones
44+
45+
46+### Your test file is merged
47+1 stars
48+Your test file for all the relevant functions is accepted and merged.
49+
50+
content/grants/unit-tests-for-zuse-cryptographic-functions.mdnew file+52
@@ -0,0 +1,52 @@
1++++
2+title = "Unit tests for Zuse cryptographic functions"
3+date = 2019-07-25
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Dev Tool"]
7+[extra]
8+image = ""
9+description = "Write unit tests for cryptographic functions of the Zuse library."
10+reward = 1
11+assignee = "lukechampine"
12+id = "1097913361"
13+completed = false
14+link = ""
15++++
16+
17+#### Background
18+
19+Urbit relies on Hoon cryptographic functions for its security. We want to take steps towards being confident that these functions are reliable.
20+
21+#### Bounty Description
22+
23+Write unit tests which assert that every function under the `+crypto` ([lines 2819 to 6113 of `zuse.hoon`](https://github.com/urbit/urbit/blob/0b0766b32b82a294b81f8f405548eb9f16d8c318/pkg/arvo/sys/zuse.hoon#L5644-L6113)) arm behaves as intended. These functions include, but are not limited to, `+enjs`, `+dejs`, and `+dejs-soft`. `+crypto` is located in `/sys/zuse.hoon`, in section 2b.
24+
25+These tests should:
26+
27+Confirm that Zuse functions match output from industry-standard implementations. For example, NaCl, secp256k1, openssl, and so on.
28+Use recommended test vectors where appropriate. For example, [RFC 231](https://tools.ietf.org/html/rfc4231) provides recommended test vectors for the HMAC SHA family.
29+
30+Save the test files in the `tests/sys/zuse/crypto` directory in Arvo. Use the same framework as the files that already exist in `/tests`.
31+
32+#### Resources
33+
34+* Read the [guide](https://github.com/urbit/urbit/blob/master/pkg/arvo/TESTING.udon) to writing unit tests in Hoon.
35+* Read the guide to [contributing](https://github.com/urbit/urbit/blob/master/CONTRIBUTING.md).
36+* [Here](https://github.com/urbit/urbit/blob/alef2/pkg/arvo/tests/sys/zuse/ordered-map.hoon) is an example test file for the new Ames. Your tests should be similar to it.
37+
38+#### Contribution Guidelines
39+
40+* Do not begin work until your request to claim this bounty is accepted.
41+* You have 60 days from acceptance to complete this bounty.
42+* Write the appropriate number of unit tests per function. Some arms will only need one test, but some arms may or may not require more. An insufficient number of tests for arms may result in your submission being rejected.
43+* Submit your tests as a PR to the [“urbit” repository](https://github.com/urbit/urbit). Your test file should be under `pkg/arvo/tests/sys/hoon` within the repository. Link this bounty in the PR’s description.
44+
45+## Milestones
46+
47+
48+### Your test file is merged
49+1 stars
50+Your test file for all the relevant functions is accepted and merged.
51+
52+
content/grants/up-to-date-hoon-reference-card.mdnew file+30
@@ -0,0 +1,30 @@
1++++
2+title = "Up-to-date Hoon reference card"
3+date = 2020-03-15
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Documentation"]
7+[extra]
8+image = ""
9+description = "I have made an up-to-date version of the Urbit Hoon reference card and will maintain it.https://github.com/natareo/hooncard"
10+reward = 1
11+assignee = "N E Davis"
12+id = "607772785"
13+completed = true
14+link = ""
15++++
16+
17+I have made and will maintain an up-to-date Urbit Hoon reference card. (I am segregating my course-related work very carefully from my Urbit-hobbyist work—although I will use this should my grad course be approved by the dept I am putting it forward as a public resource.)
18+
19+You can see the current version here: https://github.com/natareo/hooncard/blob/master/hooncard.pdf
20+
21+I put 1 star, but, whatever, I don't really think this is worth a whole star—I was encouraged to put this up as a proposal, which has the added benefit of making Tlon aware that this now exists. But if not, a Nock shirt or the like would be nice.
22+
23+## Milestones
24+
25+
26+### Make card public
27+1 stars
28+Make an accurate, up-to-date Hoon reference card available.
29+
30+
content/grants/urbian-a-customized-linux-distribution-for-urbit-appliances.mdnew file+86
@@ -0,0 +1,86 @@
1++++
2+title = "Urbian: a customized Linux distribution for Urbit appliances"
3+date = 2020-10-06
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Dev Tool"]
7+[extra]
8+image = ""
9+description = "A package for the generation of custom Linux images with Urbit running as service, for the backend of a turnkey Urbit appliance or IoT hub."
10+reward = 2
11+assignee = "~botter-nidnul"
12+id = "337545546"
13+completed = false
14+link = ""
15++++
16+
17+### Purpose
18+
19+This is meant to serve as a backend for future turnkey Urbit appliances or IoT hubs by providing a collection of scripts, config files, and supporting infrastructure to enable the generation of custom Armbian Linux images with Urbit ready to run as service out of the box.
20+
21+### Background & Motivation
22+
23+![Bromeliaceae on a tree, Costa Rica (Atlantic area)](https://upload.wikimedia.org/wikipedia/commons/thumb/4/4d/Bromeliaceae20020312.JPG/640px-Bromeliaceae20020312.JPG)
24+
25+*“An epiphyte uses a tree for physical support but does not drawn nourishment from it.”*
26+
27+I’ve been running Urbit on various ARM powered devices since November 2019 and have seen Urbit on ARM evolve from a curious toy into a viable platform for daily Urbit usage, ready to be used on the cloud or a credit card sized microserver hidden in the corner of a room.
28+
29+As Urbit has matured, the flaws with some of those credit card sized devices have become increasingly apparent. On the dominant platform, the Raspberry Pi, the default 32-bit software and limited storage interfaces have made running Urbit on them sometimes difficult even for the hardy explorers that Urbit attracts.
30+
31+Urbit is often explained as an “overlay OS” but this term encourages an idealism that neglects the importance of what is underneath Urbit. A more complete term might be “epiphyte OS”, which prompts thoughts about what is supporting Urbit and allowing it to reach its heights.
32+
33+In order for Urbit to thrive on small, cheap, and locally hosted devices a more solid foundation needs to be built, one that will allow for flexible experimentation with devices bought for the purpose of running Urbit - not just some neglected Raspberry Pi pressed into service on a whim.
34+
35+This is a first attempt at building such a base.
36+
37+### Implementation
38+
39+This is a package of scripts and configuration files intended to be used in a userpatches overlay for Armbian. Though deliverables include an image intended for a particular device (the NanoPi M4V2) the advantage of Armbian over other methods of creating an embedded Linux image is the ease of targeting a diverse set of devices without time consuming setup.
40+
41+It should be possible to take this overlay and use it with the [Armbian build tool](https://github.com/armbian/build) to create Urbit ready images for about [38 different platforms](https://docs.google.com/document/d/e/2PACX-1vRo8VKU4oUQQN9Z94vu2lYP2iSb75MRwKLtLGnfTkShmUw7kupjg1cYOryT1Tw1lwczw2Eu8nyIlfKQ/pub) with little or no modification.
42+The scripts and configuration files that provide the turnkey Urbit functionality should be universally applicable to most Linux distributions with udev and systemd, and can be installed separately or integrated into other embedded Linux images.
43+
44+Core functionality will be handled by a service which runs at boot:
45+- It waits for the insertion of a USB drive, and when one is automatically mounted checks for the presence of an Urbit keyfile and an extremely basic wifi configuration file (for users who don’t want to use the bluetooth setup method for wifi).
46+- The script will configure the wifi device if a wifi file was found
47+- On finding a keyfile it will check for the presence of an already booted Urbit and will not proceed if one is found.
48+- If there’s no pre-existing Urbit, it will check for a more recent version of both Urbit binaries and its own script and system configuration packages, updating if necessary.
49+- Handoff to a monitor script, start the boot of the Urbit, and also pipe the output to a tty device for low level debug.
50+- Monitor script watches the boot process, reporting on progress to a file which can be used by a higher level frontend to display basic status and common errors (e.g. failed to contact ethereum node, failed to download boot pill, keyfile invalid).
51+- Upon successful completion of the boot process, run the Urbit service.
52+
53+Outside infrastructure for this is an APT repository to hold the most up-to-date AArch64 versions of Urbit and other packages required to enable turnkey functionality.
54+
55+Armbian image to additionally include:
56+- [RPi-Monitor](https://github.com/XavierBerger/RPi-Monitor) for real time monitoring
57+- nymea-networkmanager for [wifi configuration over bluetooth](https://berrylan.org)
58+
59+### Deliverables
60+
61+An image file ready to flash to a device (I’ve chosen the NanoPi M4V2) and the files used to generate it, published in a [github repository](https://github.com/botter-nidnul/userpatches). Service and script files will be published in a [separate repository](https://github.com/botter-nidnul/urbit-scripts), with additional repositories for the deb package control files and scripts for building the [urbit](https://github.com/botter-nidnul/urbit.deb) and [urbit-scripts](https://github.com/botter-nidnul/urbit-scripts.deb) .deb packages.
62+
63+Finally, a rough example of a rudimentary frontend will be demonstrated in a blog post style write-up with screenshots/pictures/videos as necessary to illustrate: the process of creating an image with the Armbian build tool, flashing it to a device, and the device giving information to the user about the process of starting Urbit and where to access landscape after the boot finishes.
64+
65+### Basis for future integration
66+
67+This is meant to be the start of a Linux distribution designed for self-hosted Urbit devices, but which provides more than just Urbit.
68+
69+It has the potential to evolve into a system that makes it easier for users to self host their own S3 buckets with MinIO, run IoT gateways on the device which can communicate with Urbit, and help with the setup of a local bitcoin node.
70+
71+The development of this backend will support UX experiments with a frontend meant to create a user friendly, turnkey-style Urbit device.
72+
73+
74+## Milestones
75+
76+
77+### An Armbian userpatches overlay for Urbit
78+1 stars
79+Overlay with scripts and services integrated, used to create an image for installation to a device, which will setup Urbit upon being booted.
80+
81+
82+### Demo of image generation and boot
83+1 stars
84+Blog style write-up of how to create an image with the Armbian build tool, flashing it to a device, and how it might work with a simple frontend to communicate with the user.
85+
86+
content/grants/urbit-api-for-elixir.mdnew file+38
@@ -0,0 +1,38 @@
1++++
2+title = "Urbit API for Elixir"
3+date = 2021-02-11
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "A proposal to build an Urbit HTTP Api for the Elixir language, bringing to Urbit its state of the art concurrency capabilities."
10+reward = 3
11+assignee = "mirtyl-wacdec"
12+id = "2126792953"
13+completed = false
14+link = ""
15++++
16+
17+Elixir is an increasingly popular language with state of the art concurrency, based on the Erlang BEAM VM, and it's also a functional language with one of the most attractive syntaxes out there.
18+
19+I am a web developer fluent in Ruby, JS, and working mainly with elixir for the last 5 years. I am also an Urbit user since 2019, and have already built small apps using the Urbit HTTP API to automate some tasks on my groups. I am very excited to build a full API and bring the whole functionality of the BEAM to the Urbit community.
20+
21+## Milestones
22+
23+
24+### Basic HTTP Interface
25+1 stars
26+Enabling a basic interface to send/receive json to a running Urbit ship.
27+
28+
29+### Graph Store
30+1 stars
31+Enabling full interactivity with the graph-store HTTP endpoints.
32+
33+
34+### Other Gall Apps
35+1 stars
36+Reach all available endpoints for other Gall apps such as hark-store, metadata-store, etc.
37+
38+
content/grants/urbit-community-concierge-east-coast-2q2021.mdnew file+35
@@ -0,0 +1,35 @@
1++++
2+title = "Urbit Community Concierge - East Coast - 2Q2021"
3+date = 2021-04-27
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Provide concierge service assisting new users in the Urbit Community Group"
10+reward = 1
11+assignee = "tocrex"
12+id = "427340266"
13+completed = false
14+link = ""
15++++
16+
17+Provide concierge service assisting new users in the Urbit Community Group, particularly the General, Watercooler, Help, and Community Formation channels. Identify yourself periodically as a support resource on these channels so that users know they can ask questions of you. Using a nickname could be helpful here.
18+
19+Applicants should:
20+
21+- know the "big picture" of Urbit well.
22+- be able to answer general questions about the structure and purpose of Urbit and Landscape.
23+- keep up with community and be able to recommend public groups, events, people to connect with, etc.
24+- have general information available (FAQ, Eth/gas prices, Urbit documentation, etc.)
25+- encourage and help new members to start a new group and publicize it in the Directory
26+- send a weekly digest email to mike@urbit.org, with a report of key events, most frequently asked questions, and hours worked
27+
28+## Milestones
29+
30+
31+### Complete 240 hours of concierge service
32+1 stars
33+Complete 12 weeks, 5 days/week, 4 hours/day of concierge service in the UC group
34+
35+
content/grants/urbit-community-concierge-east-coast.mdnew file+34
@@ -0,0 +1,34 @@
1++++
2+title = "Urbit Community Concierge - East Coast"
3+date = 2021-02-10
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Provide concierge service assisting new users in the Urbit Community Group"
10+reward = 1
11+assignee = "tocrex"
12+id = "928966814"
13+completed = false
14+link = ""
15++++
16+
17+Provide concierge service assisting new users in the Urbit Community Group, particularly the General, Watercooler, Help, and Community Formation channels. Identify yourself periodically as a support resource on these channels so that users know they can ask questions of you. Using a nickname could be helpful here.
18+
19+Applicants should:
20+- know the "big picture" of Urbit well.
21+- be able to answer general questions about the structure and purpose of Urbit and Landscape.
22+- keep up with community and be able to recommend public groups, events, people to connect with, etc.
23+- have general information available (FAQ, Eth/gas prices, Urbit documentation, etc.)
24+- encourage and help new members to start a new group and publicize it in the Directory
25+- send a weekly digest email to support@urbit.org, with a report of key events, most frequently asked questions, and hours worked
26+
27+## Milestones
28+
29+
30+### 80 hours of concierge service
31+1 stars
32+Provide concierge service for 4 hours/day, 5 days/week, for 4 weeks during prime East Coast hours
33+
34+
content/grants/urbit-community-concierge-west-coast-2q2021.mdnew file+35
@@ -0,0 +1,35 @@
1++++
2+title = "Urbit Community Concierge - West Coast - 2Q2021"
3+date = 2021-04-27
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Provide concierge service assisting new users in the Urbit Community Group"
10+reward = 1
11+assignee = "~sibhul-soctul"
12+id = "1693084001"
13+completed = false
14+link = ""
15++++
16+
17+Provide concierge service assisting new users in the Urbit Community Group, particularly the General, Watercooler, Help, and Community Formation channels. Identify yourself periodically as a support resource on these channels so that users know they can ask questions of you. Using a nickname could be helpful here.
18+
19+Applicants should:
20+
21+- know the "big picture" of Urbit well.
22+- be able to answer general questions about the structure and purpose of Urbit and Landscape.
23+- keep up with community and be able to recommend public groups, events, people to connect with, etc.
24+- have general information available (FAQ, Eth/gas prices, Urbit documentation, etc.)
25+- encourage and help new members to start a new group and publicize it in the Directory
26+- send a weekly digest email to mike@urbit.org, with a report of key events, most frequently asked questions, and hours worked
27+
28+## Milestones
29+
30+
31+### Complete 240 hours concierge service
32+1 stars
33+Complete 12 weeks, 5 days/week, 4 hours/day concierge service during west coast hours
34+
35+
content/grants/urbit-community-concierge-west-coast.mdnew file+34
@@ -0,0 +1,34 @@
1++++
2+title = "Urbit Community Concierge - West Coast"
3+date = 2021-02-10
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Provide concierge service assisting new users in the Urbit Community Group"
10+reward = 1
11+assignee = "~sibhul-soctul, mikeosborne"
12+id = "669964979"
13+completed = false
14+link = ""
15++++
16+
17+Provide concierge service assisting new users in the Urbit Community Group, particularly the General, Watercooler, Help, and Community Formation channels. Identify yourself periodically as a support resource on these channels so that users know they can ask questions of you. Using a nickname could be helpful here.
18+
19+Applicants should:
20+- know the "big picture" of Urbit well.
21+- be able to answer general questions about the structure and purpose of Urbit and Landscape.
22+- keep up with community and be able to recommend public groups, events, people to connect with, etc.
23+- have general information available (FAQ, Eth/gas prices, Urbit documentation, etc.)
24+- encourage and help new members to start a new group and publicize it in the Directory
25+- send a weekly digest email to support@urbit.org, with a report of key events, most frequently asked questions, and hours worked
26+
27+## Milestones
28+
29+
30+### 80 hours of concierge service
31+1 stars
32+Provide concierge service for 4 hours/day, 5 days/week, for 4 weeks during prime West Coast hours
33+
34+
content/grants/urbit-event-series.mdnew file+90
@@ -0,0 +1,90 @@
1++++
2+title = "Urbit Event Series"
3+date = 2020-10-11
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "A series of community-focused events to create a new knowledge base for urbit.org, and help new community members learn about Urbit"
10+reward = 6
11+assignee = "~naplet-hildec"
12+id = "1751024973"
13+completed = false
14+link = ""
15++++
16+
17+Note: this project is incremental and intended to be delivered in multiple phases, as follows.
18+
19+**Phase I**
20+
21+Description: Kick off developer calls
22+
23+Timeframe: November-December 2020
24+
25+Grant requested: one star
26+
27+Additional required budget: None
28+
29+Deliverable: an introductory series of 3-4 developer calls for the Urbit community. Calls will happen weekly or biweekly and be hosted on Zoom or a similar platform. They can also be streamed to an Urbit channel, where community members can watch and post questions in real time. Each call will feature a different developer, invited to discuss a different part of the Urbit application stack, such as:
30+- Building apps using store/hook/view
31+- Graph store (Logan)
32+- Lib hook
33+- Ford Fusion (Ted)
34+- Dojo and the Urbit stack, “how does a keystroke get from the keyboard to Dojo and what protocols are involved?”
35+- Clay, core merge code
36+- Runtime, IPC protocol (Joe)
37+- APIs and building apps on Urbit
38+- Other fairly specific topics that aren’t already well-documented
39+
40+Note: the goal is to kick off an ongoing, self-sustaining event series. To that end, one of my goals will be sustainability: ensuring that everything is documented, that accounts/credentials are shared, and that others know how to organize and host these calls going forward. Another goal is that the calls result in a series of well-produced, high quality videos that can form the cornerstone of a new, community-contributed knowledge base to be hosted on the new Urbit.org.
41+
42+Scope of work: In consultation with Tlon and other community members, develop messaging for the event and finalize a list of topics and developers to speak at each call. Speak to stakeholders to understand what did and did not work with the previous round of developer calls. Announce the calls to the community, and request community feedback on topics/developers/questions. Prepare a list of questions for each call. Communicate with developers ahead of each call to prepare for the event, share a preliminary list of questions, etc. Host (emcee) each call, introducing the developer, asking questions, and relaying questions from community members. Record each call and post/share the recordings after.
43+
44+**Phase II**
45+
46+Description: Town hall
47+
48+Timeframe: December 2020
49+
50+Grant requested: two stars
51+
52+Additional required budget: 0-$2,500 (depending on software used, and whether we can send gifts to attendees)
53+Deliverable: a one-off, 2-3 hour “town hall” event that will be appropriate for both a technical and a non-technical audience. It will feature a keynote (topic to be determined, but perhaps something along the lines of “State of the Network”), a panel discussion, and two other brief talks, one of a more technical nature, one of a less technical nature (community or design). It may be hosted on Zoom, or it may be a good opportunity to test more sophisticated conference software such as Hopin. It will be more interactive than the developer calls, with a format that allows community members to chat with one another.
54+
55+Scope of work: In consultation with Tlon and other community members, finalize a list of speakers and topics. Work with the speakers to review their presentations and decks. Test and manage conferencing software, and host a “dry run” event for speakers. Host the event itself, introducing speakers, and moderating a panel discussion. Record the event, and share recordings of each talk after. Write a 2-3 page blog post recap of the event, including audio/video highlights.
56+
57+**Phase III**
58+
59+Description: UrbitCon
60+
61+Timeframe: Q1 2020
62+
63+Grant requested: three stars
64+
65+Additional required budget: $10,000-25,000, additional address space to grant to other community members who help organize and execute the event
66+
67+Deliverable: A one day virtual summit, this will be the first public Urbit conference, and we’ll aim for participation on the part of all core contributors and a large portion of the global community. It will take place over ~8 hrs, scheduled so that people in different timezones can participate live in at least a portion of the event. In addition to opening and closing keynotes, there will be 8-12 additional talks covering topics including tech, design, community, hosting, building a business on Urbit, mission + vision + values, and governance. The entire community will be invited to submit applications for a speaking slot. We’ll invite one or two guests from outside the community to deliver a keynote (examples: Riva, Balaji, E. Glen Weyl, Douglas Rushkoff, Richard Stallman, Niall Ferguson, John Gilmore, Stewart Brand). There will also be an art component, to be determined. We’ll recruit sponsors to cover as much of the cost of the event as possible.
68+
69+Scope of work: Act as project manager for the event. Consult with Tlon, community members, event staff/volunteers, and speakers to finalize event schedule and budget, and plan event logistics. Review applications for speaking slots and develop process to allocate speaking slots. Recruit guest speakers. Work with speakers to review and prepare talks and decks. Design the event agenda. Design sponsorship packages and recruit sponsors. Host and emcee event itself. Work with production company to record all talks in high definition, edit recordings, and share them after the event. Ensure that the event produces a high-quality, on-brand knowledge base of material on “all things Urbit.” Work with artist to plan the artistic component of the event. Post event recap, along with recordings.
70+
71+**Who am I?** I work full time for a blockchain project called Spacemesh in a hybrid role as a core developer, and as an evangelist/community organizer. I previously worked as an Ethereum core developer 2017-2019, and during my time working on Ethereum, I helped organize a number of community events, online and offline, around the world. I've attended dozens of technical conferences and hackathons. I also co-founded a blockchain co-working space and community based in New York and have hosted dozens of events as part of that community.
72+
73+## Milestones
74+
75+
76+### Phase I: Developer calls
77+1 stars
78+An introductory series of 3-4 developer calls for the Urbit community. See Details for more information and scope of work.
79+
80+
81+### Phase II: Town Hall
82+2 stars
83+A one-off, 2-3 hour “town hall” event that will be appropriate for both a technical and a non-technical audience. See Details for more information and scope of work.
84+
85+
86+### Phase III: UrbitCon
87+3 stars
88+A daylong virtual summit, the first public Urbit conference. See Details for more information and scope of work.
89+
90+
content/grants/urbit-explainer-video.mdnew file+34
@@ -0,0 +1,34 @@
1++++
2+title = "Urbit Explainer Video"
3+date = 2020-09-13
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "We want to make a short animated video that introduces Urbit to a wider audience."
10+reward = 2
11+assignee = "~rivpyl-sidfyl, ~minder-folden"
12+id = "1350087489"
13+completed = false
14+link = ""
15++++
16+
17+Our intention is to make a short video that can introduce Urbit to new people.
18+
19+Contrasting the original [Tlon-produced explainer](https://www.youtube.com/watch?v=M04AKTCDavc), we'd like to express a more subjective and personal side to using Urbit, making it understandable to less tech-inclined people in a concise and aesthetically attractive way.
20+
21+~minder-folden: My work leans heavily on custom scripting for my own creative projects as well as my commissioned work for clients so I'm excited to bring that skillset to Urbit. As a primarily non-technical member of the community, I want to help communicate the value I've seen first hand on the network beyond the boundaries of the tech world. Feel free to check out [my portfolio site](https://www.jonathanpritchard.me/).
22+
23+~rivpyl-sidfyl: I am experienced in video, audio and animation work.
24+I'll try my best in translating and adapting our idea to the audiovisual medium.
25+Here's a short video [reel](https://streamable.com/lpzh4s) showcasing some of my recent work.
26+
27+## Milestones
28+
29+
30+### It's Done
31+2 stars
32+We publish the finalized video, after developing a working storyboard that has been reviewed and shared with people that might add relevant perspectives to the project.
33+
34+
content/grants/urbit-http-api-for-emacs-elisp.mdnew file+38
@@ -0,0 +1,38 @@
1++++
2+title = "Urbit HTTP API for Emacs (elisp)"
3+date = 2021-01-18
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Dev Tool"]
7+[extra]
8+image = ""
9+description = "Connecting Urbit with Emacs would enable all sorts of cool and creative apps. I'd love to be able to chat without leaving my editor."
10+reward = 3
11+assignee = "~winduc-dozser"
12+id = "1206158911"
13+completed = false
14+link = ""
15++++
16+
17+I've been poking around in Emacs to test the feasibility of this project, and I think it will work out pretty well. The biggest obstacle I found was the lack of SSE client library, but I already have a solution.
18+
19+ Milestones have been adapted from this google doc: https://docs.google.com/document/d/1no5oos_NE8LrUWz7iG9SKZMTIzruZVevZQ75nD5OHmI/edit
20+
21+## Milestones
22+
23+
24+### Basic HTTP Interface
25+1 stars
26+Implementation of the HTTP interface to send JSON to/from an Urbit ship.
27+
28+
29+### Graph Store Interface
30+1 stars
31+Implementation of graph-store interface.
32+
33+
34+### Additional Agent Interfaces
35+1 stars
36+Implementation of at least two of the following interfaces: contact-store, invite-store, group-store, and metadata-store.
37+
38+
content/grants/urbit-http-api-for-kotlin.mdnew file+37
@@ -0,0 +1,37 @@
1++++
2+title = "Urbit HTTP API for Kotlin"
3+date = 2020-10-27
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "Write an urbit HTTP API (aka Airlock) for Kotlin."
10+reward = 3
11+assignee = "@nrtxrmnd"
12+id = "865786150"
13+completed = false
14+link = ""
15++++
16+
17+This proposal project will produce urbit HTTP API in Kotlin language with [these requirements](https://docs.google.com/document/d/1no5oos_NE8LrUWz7iG9SKZMTIzruZVevZQ75nD5OHmI/edit) in mind.
18+
19+
20+## Milestones
21+
22+
23+### HTTP interface
24+1 stars
25+HTTP interface for sending and receiving JSON from Kotlin programs
26+
27+
28+### graph-store interface
29+1 stars
30+graph-store interface for interacting with urbit's general purpose data storage model
31+
32+
33+### agents interfaces
34+1 stars
35+metadata-store and group-store agents interfaces
36+
37+
content/grants/urbit-http-api-for-rust.mdnew file+56
@@ -0,0 +1,56 @@
1++++
2+title = "Urbit HTTP API for Rust"
3+date = 2020-12-16
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "This proposal seeks to create an API to interact with an Urbit ship over HTTP written in Rust."
10+reward = 3
11+assignee = "~mocrux-nomdep"
12+id = "1120978319"
13+completed = false
14+link = ""
15++++
16+
17+This proposal seeks to create an API to interact with an Urbit ship over HTTP written in Rust.
18+
19+Rust is becoming a very popular language due to it's speed, safety, and portability.
20+
21+**Outline**
22+
23+This proposal comprises of the three milestones as defined in this doc: https://docs.google.com/document/d/1no5oos_NE8LrUWz7iG9SKZMTIzruZVevZQ75nD5OHmI/edit
24+
25+1. Basic HTTP Interface - Responsible for sending and receiving JSON to/from an Urbit ship
26+
27+2. Graph Store Interface - Interface to the graph-store Urbit API on top of the HTTP Interface
28+
29+3. Additional Agent Interfaces - Interface to the group-store and metadata-store Gall agents
30+
31+
32+**Plan**
33+
34+While doing research/testing into the complexity of building out such a http api library, I've ended up 90% completing milestone 1. This milestone should be publicly released by the end of the week that this proposal is posted on.
35+
36+From a quick look-over, milestones 2/3 do not seem too complex either, however I am also working full-time in tandem, and so my spare dev time is limited. As such the 2nd/3rd milestones are pushed out a bit further to provide some lee-way to ensure they're delivered on time.
37+
38+
39+## Milestones
40+
41+
42+### Basic HTTP Interface
43+1 stars
44+Implementation of the HTTP Interface responsible for sending and receiving JSON to/from an Urbit ship
45+
46+
47+### Graph Store Interface
48+1 stars
49+Implementation of the interface to `graph-store`, which sits on top of the HTTP Interface
50+
51+
52+### Additional Agent Interfaces
53+1 stars
54+Implementation of the `group-store` and `metadata-store` Gall agents.
55+
56+
content/grants/urbit-http-interface-java-edition.mdnew file+69
@@ -0,0 +1,69 @@
1++++
2+title = "Urbit HTTP Interface — Java Edition"
3+date = 2020-10-20
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Core Dev"]
7+[extra]
8+image = ""
9+description = "This proposal seeks to implement an HTTP interface to an Urbit instance in Java, and also seeks to build various related tooling."
10+reward = 3
11+assignee = "~sipfyn-pidmex"
12+id = "288224550"
13+completed = false
14+link = ""
15++++
16+
17+# Urbit Interface — Java Edition
18+
19+This proposal seeks to create an API to interact with an Urbit ship over HTTP written in Java.
20+
21+One benefit of a Java implementation would be that any JVM languages (Clojure, Kotlin, etc.) that support the use of Java libraries can also make use of it.
22+
23+
24+## Outline
25+
26+This comprises three parts:
27+1. **Basic HTTP Interface** - Responsible for sending and receiving JSON to/from an Urbit ship
28+
29+2. **Graph Store Interface** - Interface to the `graph-store` Urbit API on top of the HTTP Interface
30+
31+3. **Additional Agent Interfaces** - Interface to the `group-store` and `metadata-store` Gall agents
32+
33+
34+In addition, we will seek to document the code throughout the evolution of the proposal, providing READMEs along the way.
35+
36+
37+## Plan
38+
39+1. Study existing implementations and documentation
40+2. Create smallest initial working product for each milestone
41+3. Test it out with more experienced Urbit developers
42+4. Finalize and write documentation
43+
44+
45+Qualifications:
46+
47+I'm qualified to implement this because I am experienced with Java. I have used Java for 3+ years, written robotics code using Java, and have experience using the Gradle build system.
48+
49+ My github profile is at https://github.com/ynx0, where I have written software projects in other languages, such as a parser/interpreter combo for a fantasy assembly language.
50+
51+
52+## Milestones
53+
54+
55+### Basic HTTP Interface
56+1 stars
57+Implementation of the HTTP Interface responsible for sending and receiving JSON to/from an Urbit ship
58+
59+
60+### Graph Store Interface
61+1 stars
62+Implementation of the interface to `graph-store`, which sits on top of the HTTP Interface
63+
64+
65+### Additional Agent Interfaces
66+1 stars
67+Implementation of the `group-store` and `metadata-store` Gall agents
68+
69+
content/grants/urbit-http-library-for-ruby.mdnew file+39
@@ -0,0 +1,39 @@
1++++
2+title = "Urbit HTTP Library for Ruby"
3+date = 2020-11-05
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Dev Tool"]
7+[extra]
8+image = ""
9+description = "Create a Ruby language HTTP library to connect to Urbit."
10+reward = 3
11+assignee = "~winter-paches"
12+id = "227255220"
13+completed = false
14+link = ""
15++++
16+
17+Patterned per document:
18+https://docs.google.com/document/d/1no5oos_NE8LrUWz7iG9SKZMTIzruZVevZQ75nD5OHmI/edit.
19+
20+I am a long-time (20+ years) ruby coder and would love to take this on. I tried my best to ballpark the timeframe off the code I have seen as well as the fact that I still have an pretty full day job. ;) I am open to discussion on the timeframe(s) if it is too long.
21+
22+## Milestones
23+
24+
25+### Basic HTTP Interface
26+1 stars
27+This involves building a mechanism for sending and receiving JSON to/from an Urbit ship.
28+
29+
30+### Graph Store Interface
31+1 stars
32+Using the basic HTTP interface referenced above, create an interface to graph-store.
33+
34+
35+### Additional Agent Interfaces
36+1 stars
37+Landscape gall agents that can be interfaced with over the HTTP interface. I will implement at least group-store and contact-store. Time permitting I will also try invite-store and/or metadata-store.
38+
39+
content/grants/urbit-lfs-filehosting.mdnew file+68
@@ -0,0 +1,68 @@
1++++
2+title = "Urbit LFS - filehosting"
3+date = 2021-03-11
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "Share large files"
10+reward = 4
11+assignee = "tabnus-fondeg"
12+id = "1736585775"
13+completed = false
14+link = ""
15++++
16+
17+## Vision
18+
19+Allow Urbit to be a personal cloud storage interface. Upload files/images to a provider and share links with chats. A technical user can be their own provider.
20+
21+
22+## Design
23+
24+A provider is a ship running the lfs-provider gall app that is paired with an http fileserver. A client is a ship running the lfs-client gall app.
25+
26+A provider can limit clients to %kids, specific groups, or manual lists of authorized ships. A client can subscribe to multiple providers.
27+
28+When a client requests an upload, the provider verifies permissions and file storage limits, and returns a one-time upload url to the fileserver.
29+
30+When the uploading is finished, the fileserver notifies the provider to update client storage usage.
31+
32+## Me
33+
34+I'm an experienced functional programmer, but amateur hooner. I've read through the Urbit hoon docs, and the GitHub Gall Guide, and I'm starting to appreciate the odd martian soil. I want to try building something real and practical on the platform. I want to run a personal fileserver with my Urbit instead of emailing files and moving USBs.
35+
36+After completing an exploratory proof-of-concept, this proposal replaces https://grants.urbit.org/proposals/1760204192 with more detailed project milestones.
37+
38+## Milestones
39+
40+
41+### Proof of concept
42+1 stars
43+Client – Proivder – Fileserver
44+
45+Client subscribes to a provider, and pokes to request an upload. Provider creates an upload url on the fileserver, and passes it to the client.
46+
47+
48+### Upload limits
49+1 stars
50+Provider tracks uploaded files per client and enforces filesize limits based on groups, %kids, list of ships. Clients store limits locally as well.
51+
52+Fileserver confirms upload to provider
53+
54+
55+### Handle Errors
56+1 stars
57+When any of the servers shutdown, a transaction is either canceled or can be resumed from a checkpoint.
58+
59+Provider can import/export the map from ship to uploaded files to prevent data loss.
60+
61+
62+### Permissions and demo UI
63+1 stars
64+The fileid gives permission to delete the file on the fileserver. Create and manage share-links using fileid. Provider can throttle file requests.
65+
66+Demo html/javascript UI for client to manage files.
67+
68+
content/grants/urbit-online-meetup.mdnew file+30
@@ -0,0 +1,30 @@
1++++
2+title = "Urbit online meetup."
3+date = 2020-06-08
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "I teach a Python class online. Many students would be interested in learning about Urbit too. I'd give a lecture and help them host planets."
10+reward = 1
11+assignee = "~fonnyx-nopmer"
12+id = "1672069956"
13+completed = false
14+link = ""
15++++
16+
17+I teach a Python class over Discord to a few friends of mine. Many of them are in unfortunate financial circumstances, and I feel like a programming job is a good way to escape that (much as it helped me). A few of them have asked me about Urbit already, so I think that there is a good amount of interest.
18+
19+I would give a lecture or two on Urbit, specifically what it is about the platform that appeals to me. I would then help them though the process of spawning and booting a planet. I would perhaps also even host the planets on a VPS. I would follow up with them afterwards to see that they are not having any issues.
20+
21+Ultimately, it might be nice to move the community over to an Urbit group. The text chat and class transcripts could be hosted there. I would model this closely on Hooniverse, as I think they do that sort of thing very well.
22+
23+## Milestones
24+
25+
26+### Urbit Lecture
27+1 stars
28+The Urbit lecture, given by me, as described.
29+
30+
content/grants/urbit-react-cookbook.mdnew file+46
@@ -0,0 +1,46 @@
1++++
2+title = "Urbit React Cookbook"
3+date = 2021-04-10
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "Provide concrete examples of React UI driven by @urbit/http-api to quickly start building on top of Urbit"
10+reward = 3
11+assignee = "~witfyl-ravped"
12+id = "1312404336"
13+completed = false
14+link = ""
15++++
16+
17+The React Cookbook will create a single source of best practices for Urbit development in React through a series of simple examples. The guide will focus on implementing the new @urbit/http-api library to interface with custom Gall apps as well as common calls to backend foundations, particularly graph-store.
18+
19+The goal is to demonstrate the ease with which React can be used for the frontend of Urbit applications. While these tools are publicly available there isn’t a single source of concrete examples demonstrating their implementation. A common result is that developers spend a lot of time reading through Landscape code to reverse engineer the calls they want to make.
20+
21+Surfacing the contact points between @urbit/http-api and Hoon reveals the simple mechanics of creating frontend applications that leverage Urbit’s abilities. Work on this proposal has already proved helpful by exposing bugs in @urbit/http-api when removed from its context in Landscape. Fixing these bugs has helped streamline the process of interacting with Hoon directly from React.
22+
23+The first deliverable is a simple application demonstrating basic subscriptions, pokes, and threads to create groups, chats, add/remove users, and send and receive messages directly from a React interface. In doing so it teaches the fundamental skills required to build on top of Urbit as well as familiarizing the reader with the API’s structure, thereby helping them understand how to make other calls and leverage other data types the library offers. The second deliverable will be an example app that utilizes other social functions such as notebooks and collections.
24+
25+The first two apps will be very simple and each contained in a single file to keep basic documentation in one place. As such, there will be opportunities for additional instructions such as setting up a React environment, a deeper dive into Hooks, and leveraging things like functional components and Context Provider to help with larger, more complex apps. The third deliverable is aimed to cover these points and address supplementary needs that Tlon identifies while reviewing the first two examples.
26+
27+This guide is robust enough for a JavaScript beginner and of course more advanced developers can read from a more general perspective to grok the structure of these development techniques. While this serves Urbit by making it easy for general web developers to start building on Urbit without having to write Hoon, ideologically this guide is aligned and written with Hoon developers in mind.
28+
29+## Milestones
30+
31+
32+### First Example App: Groups and Channels
33+1 stars
34+Covering Subscriptions, Pokes, Threads, and Scries to create groups/channels, manage members, and send messages. Delivered as a merged PR into the urbit.org documentation.
35+
36+
37+### Second Example App: Advanced Functions
38+1 stars
39+Notebooks, Collections, and advanced functions not covered in the first app such as parsing mentions and code snippets from channels. Delivered as a merged PR into the urbit.org documentation.
40+
41+
42+### Breakout Lessons
43+1 stars
44+React topics for more complex apps i.e. Context Provider and advanced Hooks. Adding examples Tlon would like to see documented. Delivered as a merged PR into the urbit.org documentation.
45+
46+
content/grants/urbit-ship-and-star-hosting-and-troubleshooting-docs.mdnew file+37
@@ -0,0 +1,37 @@
1++++
2+title = "Urbit Ship and Star Hosting and Troubleshooting Docs"
3+date = 2020-08-19
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["Documentation"]
7+[extra]
8+image = ""
9+description = "Update to: https://grants.urbit.org/proposals/30964804 (post phone call)User docs for ship/star owners around best practices for hosting"
10+reward = 2
11+assignee = "~dovsem-bornyl"
12+id = "1452740478"
13+completed = false
14+link = ""
15++++
16+
17+See: https://zalberico.com/essay/2020/06/06/urbit-on-the-cloud.html
18+
19+This proposal is for getting the above docs into the official Urbit install documentation for recommended best practices to host your own Urbit ship on digital ocean. This part should be quick since the documentation above is already written (it's just hosted on my own blog).
20+
21+Then when that's merged, to use the star from that milestone to similarly document the best practices for hosting a star and common star workflows (escaping, bridge, OTAs). This will include relevant troubleshooting commands that are helpful for someone hosting a star to debug common issues.
22+
23+All of this will be done with an eye towards maintainability of the docs along with explicit steps that make it easy for users to understand what they're doing (similar in form to the docs on blog linked above). This will also lay the ground work for potential tooling around alerting, debugging, and automation which could be described and scoped more explicitly in a future proposal once the manual processes are documented.
24+
25+## Milestones
26+
27+
28+### Add Ship Hosting To Official Urbit Docs
29+1 stars
30+The docs for running your Urbit ship in the cloud with best practices: (https://zalberico.com/essay/2020/06/06/urbit-on-the-cloud.html) will be added to the core Urbit.org documentation for users
31+
32+
33+### Star Hosting/Troubleshooting Docs
34+1 stars
35+Write up docs about the best way to host a star and ways to debug common issues/workflows. End result should be a document that explains how to go from star ownership to hosting and supporting planets
36+
37+
content/grants/verifying-urbit-id-on-keybase.mdnew file+74
@@ -0,0 +1,74 @@
1++++
2+title = "Verifying Urbit ID on Keybase"
3+date = 2020-02-19
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "Create a Gall app that links Urbit identities with Keybase."
10+reward = 2
11+assignee = "yosoyubik"
12+id = "550468262"
13+completed = false
14+link = ""
15++++
16+
17+Keybase is a service to aggregate multiple web2 identities and offers secure p2p messaging and file storage. Keybase assumes each ID service has multiple users.
18+In the Urbit paradigm, each Uribt ID is a self-sovereign host (personal server). Each Urbit ID is one service and one user.
19+
20+### Bounty Description
21+
22+Create a Gall app and that creates a Urbit ID based identity service and hosts an identity proof of the Urbit ID. Keybase offers a guide for creating these proofs and can be found at keybase guide for adding new services.
23+
24+##### Gall application:
25+
26+- Create an identity service for a Urbit ID
27+ - Check that the config is valid
28+- Keybase needs to check the proof periodically on the Identity Service
29+- Link on the Identity Service to the corresponding verified Keybase profile
30+- Use Urbit ID sigil as a badge (badge: a small SVG image)
31+
32+-Suggested prefilled fields:
33+- 'display_name': 'Urbit'
34+- 'Username': 'ship-name'
35+- Logo 32px black&white sigil and 16px black&white sigil
36+- 'Description': 'A clean-slate OS and network for the 21st century'
37+
38+##### User interface:
39+- Create valid `validate_proof_config.json` using form fields
40+- Binary authorization
41+ - I am ship-name on urbit [yes or no]
42+
43+### Resources:
44+- [Proof Creation](https://keybase.io/docs/proof_integration_guide#2-2-proof-creation)
45+- [Proof Checking](https://keybase.io/docs/proof_integration_guide#2-3-proof-checking)
46+- [Linking](https://keybase.io/docs/proof_integration_guide#3-linking-user-profiles)
47+
48+
49+### Prerequisites:
50+- Map your Urbit ID with a DNS domain
51+- Load an SSL certificate using acme
52+ - `:acme &path /top-level-domain/second-level-domain/optional-subdomain`
53+ - Example: `https://zod.urbit.org` --> `:acme &path /org/urbit/zod`
54+
55+### Contribution Guidelines:
56+
57+- Do not begin work until your request to claim this bounty is accepted.
58+
59+- Submit your work as a pull request to [the urbit/urbit repo](https://github.com/urbit/urbit/pulls)
60+
61+- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
62+
63+- You have 90 days from the time of approval to complete this bounty.
64+
65+
66+
67+## Milestones
68+
69+
70+### PR is merged
71+2 stars
72+Your work is accepted, and your PR is merged.
73+
74+
content/grants/video-content-manager.mdnew file+59
@@ -0,0 +1,59 @@
1++++
2+title = "Video Content Manager"
3+date = 2021-02-10
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Keep your finger on the pulse of video content produced by the community, and ensure that it's made visible."
10+reward = 3
11+assignee = "~libmud-bonted"
12+id = "790269488"
13+completed = false
14+link = ""
15++++
16+
17+## Overview
18+
19+A wealth of Urbit-centric content has been produced in the past several months, and we could use help with ensuring that it's aggregated and broadcasted to the greater community.
20+
21+## Responsibilities
22+
23+- Upload video content provided by Urbit Foundation and Tlon employees to the Urbit Community YouTube channel and urbit.org Media page ("channels").
24+- Organize content by type on YouTube, and possibly the Media page as well.
25+- Regularly search for Urbit-related video content and rebroadcast it from Urbit channels (with explicit permission from creators/owners).
26+- Upload audio-only content and add Urbit-related images as instructed by Tlon Design team.
27+- Keep Tlon Comms team updated when new video content is uploaded, so they can signal-boost.
28+- Coordinate (or even produce) video content creation from the community.
29+- Use Youtube as a social network to promote Urbit; link Urbit videos in the comments of video content elsewhere on YT that talks about decentralized web/web3.0, data ownership, platform failures etc.
30+
31+## Requirements
32+- Good familiarity with video recording and editing software.
33+- Previous record of participation in/knowledge of Urbit Community is a plus.
34+- Scrupulous about checking permissions/ownership of content.
35+
36+## Resources
37+
38+- [Urbit YouTube Channel](https://www.youtube.com/channel/UCNYIS9_SktINCC9yqO4CFZw/featured)
39+- [urbit.org Media Page](https://urbit.org/media/)
40+- The Tlon Comms team and Urbit Foundation will be available as resources for content direction, questions and feedback.
41+
42+## Milestones
43+
44+
45+### Bring channels up-to-date
46+1 stars
47+Wrangle content from around the web (with creators' permission) and upload it to both channels. Provide organizational structure to content—on YouTube that's creating channels/playlists, on urbit.org it's up to you.
48+
49+
50+### Ongoing maintenance
51+1 stars
52+In the three months following the first month of work, keep an eye out for additional content and upload it as needed.
53+
54+
55+### Optional: Content creation/facilitation
56+1 stars
57+Either create or directly facilitate the creation of new video/audio content (and, of course, upload it).
58+
59+
content/grants/volt-lightning-on-urbit.mdnew file+233
@@ -0,0 +1,233 @@
1++++
2+title = "volt: Lightning on Urbit"
3+date = 2021-04-02
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "An Urbit-native Lightning client and integration with `lnd` on 'provider' ships."
10+reward = 7
11+assignee = ""
12+id = "845229227"
13+completed = false
14+link = ""
15++++
16+
17+## Introduction
18+With the coming integration of the Bitcoin wallet, Urbit ships can now send money between each other and associate payments with other ships (and soon applications/access rights). This building block will let us feel out the possibilities of inter-ship payments, but it's a time-buying measure at most: as BTC's price increases, fees will also rise, making Bitcoin impractical for payments less than around $500.
19+
20+However, the Lightning Network, built on top of Bitcoin, is rapidly advancing in functionality. It presents a unique, non-custodial solution to the high fees problem, although usability is still an issue. Urbit is perfectly positioned to take advantage of Lightning's strong points while drastically improving its useability.
21+
22+Once Lightning is integrated into Urbit, and maintained over time, Urbit will be a complete solution for building applications and receiving money for them through native payment rails.
23+
24+## Lightning Primer
25+The implementer is not expected to understand Lightning prior, but will have to do significant work to get up to speed on the protocol. What follows is a quick overview of what that entails.
26+
27+Lightning is a p2p network of nodes, which maintain "channels" between each other. Payments can then be routed from one peer to another by finding a path of channels with sufficient liquidity.
28+
29+### channels
30+A channel consists of:
31+1. an on-chain Bitcoin transaction allocating funds to one side of the channel.
32+2. subsequent signed off-chain transactions re-allocating those initial funds, that can be posted to the blockchain in the event of unresponsiveness or malfeasance of the other party.
33+
34+Peers open channels between each other in order to make payments in the network. Channels do require an on-chain transaction, but the cost of that can be mitigated as long as the side that initially doesn't have funds in the channel is willing to trust the other party. In that case, the channel can be used starting when it has zero confs, submitted to the mempool with a low fee, and becomes final once it's accepted.
35+
36+Each channel maintains a set of commitment transactions over time, which are signed IOUs that can be enforced on-chain if necessary. These must be maintained and backed up in order to secure the channel.
37+
38+### routing/payments
39+Lightning payments follow a set sequence:
40+1. payee creates an invoice
41+ - optionally with route hints ("take this path to reach me, because maybe I'm not publicly listed")
42+ - contains the hash of a secret (the "preimage")
43+2. payee sends invoice to payer
44+3. payer uses its channel graph to construct a route to payee that it thinks will work, using route hints if provided
45+4. payer tries to send payment along that route. If it fails, payer updates its channel graph and retries
46+5. all hops along the route update their commitments to the new state
47+
48+### HTLCs
49+When we say "sending payments" above, what we really mean is each hop constructing a commitment to pay the next hop if the next hop provides it the secret to the hash from the invoice in step 1.
50+
51+The contracts implementing this are called "hashed timelock contracts", or HTLCs. For more background, [this resource is recommended](https://github.com/lnbook/lnbook/blob/develop/routing.asciidoc). The basic concept is that once the final destination receives payment, it sends the secret to the prior hop, who uses it to get paid from the hop prior, and so on back to the original payer.
52+
53+### interceptors
54+Because Lightning uses onion routing, every hop along a payment path must use onion routing. In order to avoid implementing this for the last (inside Urbit) hop, we can use the [HTLC Interceptor](https://api.lightning.community/#htlcinterceptor) feature in the `lnd` RPC. This allows an `lnd` node to intercept an incoming payment request and inject its data into a new context, from which it can be handled.
55+
56+### additional resources
57+Additional background will be provided to the implementer by the Foundation as needed, and we can also arrange meetings with Lightning Labs for help as the project progresses. [Mastering the Lightning Network](https://github.com/lnbook/lnbook) is another good place to get up to speed.
58+
59+## Lightning in Urbit
60+To speed and simplify implementation, we can use Urbit networking to provide full Lightning features without needing a full Lightning node (BOLT) implementation. In effect, we bridge "outside" Lightning to "inside Urbit", "interior" Lightning.
61+
62+Throughout the architecture, we refer to "interior" nodes: Urbit nodes running a Lightning implementation that do not network with the outside Lightning world.
63+
64+### wins of this approach
65+
66+#### non-custodial *and* easy to use *and* powerful
67+Current Lightning implementations force users to pick 2 of 3: non-custodial, easy, rich/powerful. Wallets like Breez are non-custodial and easy to use, but can only do payments. Sphinx chat is more powerful, but you are forced to choose between ease and custody--if you want control over your money, you need to configure your own Lightning node.
68+
69+Lightning on Urbit is able to achieve all 3 of these properties. The key is that we implement Lightning features inside an Urbit environment, which gives full access to Urbit's programmable ids and OS. We also can use Urbit's networking to link interior ships to providers running `lnd` and connecting to the outside Lightning network. As a result, `volt` will enable much richer Lightning experiences, across a full range of applications.
70+
71+#### leverages existing Urbit features
72+Lightning has some complex networking to implement, but because Urbit already has secure routing to named destinations in Ames, we can use that. This lets the work focus on implementing payment channels in Urbit.
73+
74+#### clear upgrade paths
75+The initial architecture does make one tradeoff: interior nodes are always one hop away from their providers, and so the provider knows how much money nodes are sending and receiving. There are two ways to handle that, one immediately possible, and the other doable after an upgrade:
76+1. (ok, doable now) Nodes can upgrade to running their own providers. A busy node can configure its own `lnd` provider and connect to the Lightning network directly, while maintaining all of `volt`'s benefits in terms of integration of payments with Urbit. This is similar to the upgrade path that Sphinx chat provides, but still with non-custodial properties for users who don't take this path.
77+2. (better, doable in the future) We can implement Lightning's onion routing (not networking) in Urbit, allowing multi-hop paths within the Urbit network, with private payments *even for nodes not running lnd*.
78+
79+### blockers
80+Private key/hot wallet management inside Urbit. This is needed to sign commitment transactions. We can use dummy versions of this in development, and then figure out the best way to handle it when the rest is in place. We can't use cold wallet or external wallet signing, because commitment transactions need to be signed on demand, without manual user interaction.
81+
82+## architecture
83+`volt` consists of a “dumb” provider that bridges between `lnd` RPC calls and Urbit, and the “volt” agent that runs the Lightning protocol between interior Urbits.
84+
85+### system diagram
86+![system](https://s3.timlucmiptev.space/timluc/timluc-miptev/volt_arch.png)
87+
88+### payment flows diagram
89+![payments](https://s3.timlucmiptev.space/timluc/timluc-miptev/volt_payment_flow.png)
90+
91+### RFCs implemented
92+We implement everything related to channels, HTLCs, and invoices. We leave out all the Lightning networking and routing elements.
93+[RFCs located here](https://github.com/lightningnetwork/lightning-rfc/blob/master/00-introduction.md)
94+* RFC 02: channel opening, closing, HTLCs
95+* RFC 03: commitment transactions
96+* RFC 05: on-chain transaction handling
97+* RFC 11: invoices
98+
99+### volt-provider lib
100+Bridge between `lnd` or similar Lightning server running on the same machine as a Urbit. This could be implemented as a separate agent or as a library that `volt` uses. My recommendation would be to implement first as the latter, and split out to an agent if other agents could potentially be using it.
101+* Communicates with lnd over rpc
102+* passes HTLCs in and out
103+* accepts Hoon commands to open/close channels with outside nodes
104+
105+#### heartbeat
106+* checks for connectivity with lnd every N seconds
107+* updates local agent and subscribers with status
108+
109+#### incoming payments
110+* intercepts the HTLC
111+* injects the HTLC and metadata (next hop) into `volt`, where it's handled
112+* receives a pre-image back and sends it back to the Lightning network (which RPC call?)
113+
114+#### outgoing payments
115+* receives outgoing-payment request from itself
116+* finds an outgoing route, if one exists
117+* constructs an HTLC with the interior node
118+* sends the outgoing payment using RPC `SendPaymentV2` with params:
119+ - invoice
120+ - route hints
121+ - fee
122+* when the preimage is received, inject back into `volt` to settle the HTLC
123+
124+### volt
125+Manager for interior Lightning in Urbit. `volt` handles everything related to channel management, HTLC creation and updating, and payment recording between ships.
126+* connects to provider
127+* provides Lightning pubkey to provider
128+* maintains pubkey->Urbit ship mappings
129+* maintains channel and commitment data
130+* maintains HTLCs
131+
132+#### channels
133+* open/close channels between provider nodes and others
134+* monitor for fraud
135+* serialize and encrypt commitments for backup
136+*note on backup*: commitments are critical for maintaining a channel's security, so we need functionality to back up that state to other Urbit ships whenever it changes, to avoid issues on breaches etc.
137+
138+#### receive payment
139+* build invoice (with routing hints)
140+* send invoice to payer (can be interior or exterior)
141+* accept incoming HTLC from provider
142+* settle the HTLC if it's for us, fail otherwise
143+* update channel commitments
144+* update payment history, optionally with ship metadata
145+
146+#### send payment
147+* parse invoice from payee
148+* make sure that either
149+ - our node is our provider
150+ - we have enough capacity to our provider
151+* make a new HTLC commitment with provider (if remote provider)
152+* send payment request to provider
153+* get result from provider and settle the HTLC
154+
155+## user stories
156+### provider
157+As a provider, I can
158+* open/close channels with outside lightning nodes through the `lnd` RPC
159+* accept Urbit ships as clients and open/close channels with them
160+* intercept incoming HTLC payments for interior Lightning on my ship to handle
161+* receive settled HTLCs from the interior and inject them back into lnd to settle my exterior
162+
163+### Urbit ship
164+As an Urbit ship I can
165+* select a provider and connect to it
166+* open/close channels with my provider
167+* receive payments from Urbit users
168+* make payments to other Urbit ships
169+* make and receive payments with outside Lightning nodes
170+* view my transaction history
171+
172+## weaknesses and future upgrades
173+### weaknesses
174+As designed, the provider will see incoming and outgoing transaction flow. The best solution for that is to run your own local Lightning node. Some of upgrades below would address this flaw.
175+
176+### upgrades
177+#### multi-provider support
178+Allowing a ship to maintain channels with multiple providers would stop one provider from knowing all your transactions. This isn't super-complicated; it's just extra Hoon work that should probably be started soon after v1 is complete.
179+
180+#### Urbit-native onion routing
181+It would be great for privacy if Urbit nodes could construct paths with multiple hops from the interior that could reach the exterior. The reverse is already doable (exterior payments reach multi-hop interior Urbit nodes).
182+
183+The multi-hops going out can’t be done until lnd implements ability to forward onion blobs to the wider network and inject the received preimage back in the RPC. This would also require us to be able to build onion routing (not terribly hard, but definitely adds scope).
184+
185+#### submarine swaps
186+It is possible to re-balance channel liquidity (shifting more of the balance to one side of the channel or the other) by combining a Lightning payment with an on-chain transaction. This is outside the scope of this project, but could potentially be extremely valuable for merchants running businesses on Urbit.
187+
188+## Resources
189+* The libraries and full node interface provided by the `btc-wallet` project will be useful for parsing formats like `bech32` and for querying the state of the blockchain to monitor for cheating.
190+* [Urbit Bitcoin Wallet](https://github.com/timlucmiptev/btc-agents)
191+* [Lightning RFC](https://github.com/lightningnetwork/lightning-rfc/blob/master/00-introduction.md)
192+* [lnd RPC API](https://api.lightning.community/)
193+
194+## contributor requirements
195+* 4+ years of experience as a backend developer
196+* Full-time availablity is ideal
197+* Some familiarity with Hoon a strong positive
198+* Some programming familiarity with Bitcoin a strong positive
199+* Attend regular (weekly or bi-weekly) checkin meetings with an urbit.org director to provide status updates
200+
201+### working process
202+* The contributor will work with the Foundation coordinator to on-board fully to Lightning and Bitcoin within Urbit.
203+* After initial onboarding, the contributor will do a weekly check-in call with the coordinator, more frequently if needed/desired.
204+* The contributor will fork [this Github repo](https://github.com/urbit/volt) and submit PRs to it to get feedback.
205+
206+## Milestones
207+
208+
209+### transaction/invoice RFCs
210+2 stars
211+* Implement RFCs 2, 3 and 11 from BOLT.
212+* Create the libs and types that further stages will depend on
213+
214+
215+### on-chain transaction RFC
216+2 stars
217+* implement RFC 5, on-chain transaction handling
218+* test that channels can be opened and closed in the manner described there
219+
220+
221+### provider libraries
222+1 stars
223+* implement the `volt` provider that will talk to `lnd`
224+* create any configuration files needed to start `lnd` locally
225+
226+
227+### `volt` agent and cleanup
228+2 stars
229+* create the Gall agent to manage transactions
230+* connect it to the provider libs
231+* use the RFC libs to wire up all on-chain transactions
232+
233+
content/grants/web-scraper.mdnew file+44
@@ -0,0 +1,44 @@
1++++
2+title = "Web Scraper"
3+date = 2020-02-07
4+[taxonomies]
5+grant_type = ["bounties"]
6+grant_category = ["App Dev: Arvo"]
7+[extra]
8+image = ""
9+description = "It is often useful for archival purposes to pull down an entire website, however many sites have a complex network of pages that would be difficult to download one at a time."
10+reward = 1
11+assignee = "tug"
12+id = "1967189374"
13+completed = false
14+link = ""
15++++
16+
17+Build a web crawler that given a url will walk through all the links for that given domain and download each page, rewriting the links to be local as it goes. This web crawler should be written as a thread that writes to Clay.
18+
19+A completed app should:
20+
21+Take a url or set or urls, connect to the given url over HTTP and download each page, following links on the same domain and rewriting the links to be local as it goes. This should function like wget with the `--mirror`, `--convert-links`, and `--page-requisites` options.
22+
23+### Resources
24+
25+[wget](https://www.gnu.org/software/wget/)
26+
27+### Contribution Guidelines
28+
29+Do not begin work until your request to claim this bounty is accepted. We will assign a designer to work with you on the interface.
30+
31+### Submit your code as a PR to the Urbit repository.
32+
33+- Do not begin work until your request to claim this bounty is accepted. We will assign a designer to work with you on the interface.
34+- Submit your code as a PR to the [urbit](https://github.com/urbit/urbit) repository.
35+- You have 45 days from the time of approval to complete this bounty.
36+
37+## Milestones
38+
39+
40+### PR is merged
41+1 stars
42+Your pull request is merged.
43+
44+
content/grants/webrtc-gall-agent-and-external-app.mdnew file+77
@@ -0,0 +1,77 @@
1++++
2+title = "WebRTC Gall Agent and external app"
3+date = 2021-01-08
4+[taxonomies]
5+grant_type = ["proposals"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "Add WebRTC support to Urbit, including call/stream setup and teardown messaging and ICE/STUN/TURN advertisement and authentication."
10+reward = 8
11+assignee = "Edward Amsden ~ritpub-sipsyl"
12+id = "21131866"
13+completed = false
14+link = ""
15++++
16+
17+## Overview
18+
19+Adding the ability to make encrypted media calls between Urbit ships, using only Urbit as a signalling channel, without a centralized intermediary, would provide real utility and an immediate boost in the excitement in the end user interface.
20+
21+WebRTC provides media device (camera/speaker/microphone) discovery and peer-to-peer encrypted transit of media. It is supported by all major browsers as well as libraries for many major programming languages.
22+
23+WebRTC relies on external signalling, implemented by the application developer, to handle connection negotiation and call setup and teardown.
24+
25+This creates a natural synergy with URbit, as Urbit provides a hierarchical peer-communication system between known addresses with reputation. A WebRTC Gall agent would provide a solution for coordinating real-time media communications between Urbit ships.
26+
27+## Deliverables
28+
29+### WebRTC Gall Agent
30+This will serve as the _signalling_ channel for Urbit WebRTC applications. WebRTC requires an out-of-band channel (in standard usage usually implemented as an HTTP REST API) which can receive connectivity information from peers and distribute it to peers.
31+
32+### WebRTC calling app
33+This would be an external (probably in-browser) app which would provide the initial end-user interface for
34+ - making two-way media calls
35+ - making n-way media conference calls
36+ - streaming media from one peer to many
37+
38+### ICE/STUN/Turn advertising
39+A separate Gall agent would initially allow stars to advertise ICE and STUN servers for use by sponsored planets and their moons. WebRTC depends on ICE and STUN to allow NATed and firewalled peers to negotiate peer-to-peer connections.
40+
41+The last milestone would be to add TURN advertising with authentication to this agent. TURN servers provide relay services for peers which cannot directly connect, thus they are much more expensive, especially in terms of bandwidth, than ICE and and STUN. This should permit stars to specify which planets are authorized to use the TURN server, and, in the planet instantiation of the agent, seamlessly offer this information to WebRTC and other applications using the agent.
42+
43+## Beyond
44+
45+The proposer would eventually like to see media streas themselves propagated via Urbit. To achieve this, however,
46+it would be necessary to:
47+- Create a performant method (likely a vane) for passing network messages which are not retained in the event log
48+- Significantly improve Urbit's NAT traversal and firewall hole-punching abilities to match the state of the art.
49+ (this has been discussed with, among others, ~ritfed-tabrg and ~wolref-podlex).
50+
51+## Team
52+
53+Edward Amsden ~ritpub-sipsyl is a vertan software developer and principal of Black River Software. He has spent the last 5+ years working on industrial IoT solutions in Haskell as a contractor for Plow Technologies.
54+
55+## References
56+[Mozilla Developer Network WebRTC walkthrough](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Signaling_and_video_calling)
57+[Dealing with connectivity](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Connectivity)
58+
59+## Milestones
60+
61+
62+### Gall agents (WebRTC, ICE/STUN)
63+2 stars
64+A Gall agent which handles exchanging SDP messages for WebRTC applications
65+Another Gall agent which handles advertising ICE and STUN servers from stars to planets
66+
67+
68+### Standalone WebRTC-via-Urbit app
69+4 stars
70+Urbit app running in browser and hosted/interfaced via Eyre which provides the three categories of calling functionality described in the body of the proposal
71+
72+
73+### Authenticated TURN advertising
74+2 stars
75+Extension of the ICE/STUN Gall agent to allow stars to advertise an authenticated TURN server to some or all of their sponsored planets. Extension of the WebRTC application to use TURN servers.
76+
77+
content/updates/2018-2-17-update.md+2
@@ -3,6 +3,8 @@ title = "~2018.2.17 Update"
3date = 2018-02-17
3date = 2018-02-17
4description = "A short update from the Tlon team for the week of ~2018.2.17."
4description = "A short update from the Tlon team for the week of ~2018.2.17."
5aliases = ["/posts/2018-2-17-update/"]
5aliases = ["/posts/2018-2-17-update/"]
6+[taxonomies]
7+post_type = ["gifts"]
6[extra]
8[extra]
7ship = "~tonlur-sarret"
9ship = "~tonlur-sarret"
8author = ""
10author = ""
templates/grant_category/list.htmlnew file+1
@@ -0,0 +1 @@
1+{% extends "taxonomy/list.html" %}
templates/grant_category/single.htmlnew file+36
@@ -0,0 +1,36 @@
1+{% extends "base.html" %}
2+{% import "macros/macros.html" as macros %}
3+
4+{% block title %}
5+ <meta name="og:title" content="Grants - {{ config.title }}">
6+ <title>Grants - {{ config.title }}</title>
7+{% endblock title %}
8+
9+{% block description %}
10+ <meta name="og:description" content="Grants facilitated by the Urbit Foundation.">
11+ <meta name="description" content="Grants facilitated by the Urbit Foundation.">
12+{% endblock description %}
13+
14+{% block content %}
15+<!-- header -->
16+<nav class="mt4 full fourth-1-lg mb3 mb0-m mb0-l mb0-xl fixed-xl">
17+ <a class="gray3" href="/">Urbit</a>
18+ <span class="gray3"> / </span>
19+ <a class="gray3" href="/grants/">Grants</a>
20+ <span class="gray3"> / </span>
21+ <a href="{{ current_url }}">{{ term.name | capitalize }}</a>
22+
23+ {% include "partials/navigation-search.html" %}
24+
25+</nav>
26+<section class="full c4-12-lg pt4">
27+
28+ <h1 class="mb4">{{ term.name | capitalize }} Grants</h1>
29+
30+ {% for page in term.pages %}
31+ {{ macros::grant(page=page, classes="full c1-10-lg mv5")}}
32+ {% endfor %}
33+
34+</section>
35+{% include "partials/footer.html" %}
36+{% endblock content %}
templates/grant_type/apprenticeships.htmlnew file+41
@@ -0,0 +1,41 @@
1+{% extends "base.html" %}
2+
3+{% import "macros/macros.html" as macros %}
4+
5+{% block title %}
6+<meta name="og:title" content="Apprenticeships Archive - {{ config.title }}">
7+<title>Apprenticeships - {{ config.title }}</title>
8+{% endblock title %}
9+
10+{% block description %}
11+<meta name="og:description" content="Urbit Apprenticeships Archive">
12+<meta name="description" content="Urbit Apprenticeships Archive">
13+{% endblock description %}
14+
15+{% block image %}
16+<meta name="twitter:image" content="https://media.urbit.org/logo/urbit-logo-card.png">
17+{% endblock image %}
18+
19+{% block content %}
20+
21+<!-- header -->
22+<nav class="mt4 full fourth-1-lg mb3 mb0-m mb0-l mb0-xl">
23+ <a class="gray3" href="/">Urbit</a>
24+ <span class="gray3"> / </span>
25+ <a class="gray3" href="/grants">Grants</a>
26+ <span class="gray3"> / </span>
27+ <a href="{{ current_url }}">Apprenticeships</a>
28+ {% include "partials/navigation-search.html" %}
29+</nav>
30+<!-- content -->
31+<section class="full c4-10-lg pt4 lh-copy">
32+ <h1>Apprenticeships</h1>
33+ <p>Apprenticeships pair a community member with an Urbit core developer. The apprentice works on a specific scope of work under the tutelage of the core developer. The developer offers guidance and review of the project, and the apprentice contributes directly to the Urbit project. The apprentice also receives compensation in the form of address space.</p>
34+ <p>Apprenticeships are offered on a limited basis. Email <a href="mailto:josh@urbit.org">josh@urbit.org</a> to register your interest.</p>
35+ <br />
36+ <br />
37+ <br />
38+ <br />
39+</section>
40+{% include "partials/footer.html" %}
41+{% endblock content %}
templates/grant_type/bounties.htmlnew file+44
@@ -0,0 +1,44 @@
1+{% extends "base.html" %}
2+
3+{% import "macros/macros.html" as macros %}
4+
5+{% block title %}
6+<meta name="og:title" content="Bounties Archive - {{ config.title }}">
7+<title>Bounties - {{ config.title }}</title>
8+{% endblock title %}
9+
10+{% block description %}
11+<meta name="og:description" content="Urbit Bounties Archive">
12+<meta name="description" content="Urbit Bounties Archive">
13+{% endblock description %}
14+
15+{% block image %}
16+<meta name="twitter:image" content="https://media.urbit.org/logo/urbit-logo-card.png">
17+{% endblock image %}
18+
19+{% block content %}
20+ {% set taxonomy = get_taxonomy(kind="grant_type") %}
21+ {% for t in taxonomy.items %}
22+ {% if t.name == 'bounties' %}
23+ {% set_global term = t %}
24+ {% endif %}
25+ {% endfor %}
26+<!-- header -->
27+<nav class="mt4 full fourth-1-lg mb3 mb0-m mb0-l mb0-xl">
28+ <a class="gray3" href="/">Urbit</a>
29+ <span class="gray3"> / </span>
30+ <a class="gray3" href="/grants">Grants</a>
31+ <span class="gray3"> / </span>
32+ <a href="{{ current_url }}">Bounties</a>
33+ {% include "partials/navigation-search.html" %}
34+</nav>
35+<!-- content -->
36+<section class="full c4-10-lg pt4 lh-copy">
37+ <h1>Bounties</h1>
38+ <p>The Urbit foundation creates bounties to build out specific features or undertake various projects, which community members may apply to work on in exchange for address space.</p>
39+ {% for page in term.pages %}
40+ {{ macros::grant(page=page, classes="full c1-10-lg mv5")}}
41+ {% endfor %}
42+</section>
43+{% include "partials/footer.html" %}
44+{% endblock content %}
templates/grant_type/gifts.htmlnew file+56
@@ -0,0 +1,56 @@
1+{% extends "base.html" %}
2+
3+{% import "macros/macros.html" as macros %}
4+
5+{% block title %}
6+<meta name="og:title" content="Gifts Archive - {{ config.title }}">
7+<title>Gifts - {{ config.title }}</title>
8+{% endblock title %}
9+
10+{% block description %}
11+<meta name="og:description" content="Urbit Gifts Archive">
12+<meta name="description" content="Urbit Gifts Archive">
13+{% endblock description %}
14+
15+{% block image %}
16+<meta name="twitter:image" content="https://media.urbit.org/logo/urbit-logo-card.png">
17+{% endblock image %}
18+
19+{% block content %}
20+ {% set taxonomy = get_taxonomy(kind="post_type") %}
21+ {% for t in taxonomy.items %}
22+ {% if t.name == 'gifts' %}
23+ {% set_global term = t %}
24+ {% endif %}
25+ {% endfor %}
26+<!-- header -->
27+<nav class="mt4 full fourth-1-lg mb3 mb0-m mb0-l mb0-xl">
28+ <a class="gray3" href="/">Urbit</a>
29+ <span class="gray3"> / </span>
30+ <a class="gray3" href="/grants">Grants</a>
31+ <span class="gray3"> / </span>
32+ <a href="{{ current_url }}">Gifts</a>
33+ {% include "partials/navigation-search.html" %}
34+</nav>
35+<!-- content -->
36+<section class="full c4-10-lg pt4 lh-copy">
37+ <h1>Gifts</h1>
38+ <ul class="posts measure-wide">
39+ {% for page in term.pages %}
40+ <a class="bb-0" href="{{ page.permalink }}">
41+ <li class="mb4">
42+ <h2 class="f5 fw6 mt0 mb1">{{ page.title }}</h2>
43+ <p class="mt0">{{ page.description }}</p>
44+ {% if page.extra.image %}
45+ <img class="pv2 obj-cover h5 w-100" src="{{ page.extra.image }}"/>
46+ {% endif %}
47+ <time class="mono f6">{{ page.date | date(format="~%Y.%-m.%-d") }}</time>
48+ <span class="mono f6">
49+ {% if page.extra.ship %}<address class="mono f6 ml2">{{ page.extra.ship }}</address> {% endif %}
50+ </span>
51+ </li>
52+ </a>
53+ {% endfor %}
54+ </ul>
55+{% include "partials/footer.html" %}
56+{% endblock content %}
templates/grant_type/list.htmlnew file+1
@@ -0,0 +1 @@
1+{% extends "grants/list.html" %}
templates/grant_type/proposals.htmlnew file+44
@@ -0,0 +1,44 @@
1+{% extends "base.html" %}
2+
3+{% import "macros/macros.html" as macros %}
4+
5+{% block title %}
6+<meta name="og:title" content="Proposals Archive - {{ config.title }}">
7+<title>Proposals - {{ config.title }}</title>
8+{% endblock title %}
9+
10+{% block description %}
11+<meta name="og:description" content="Urbit Proposals Archive">
12+<meta name="description" content="Urbit Proposals Archive">
13+{% endblock description %}
14+
15+{% block image %}
16+<meta name="twitter:image" content="https://media.urbit.org/logo/urbit-logo-card.png">
17+{% endblock image %}
18+
19+{% block content %}
20+ {% set taxonomy = get_taxonomy(kind="grant_type") %}
21+ {% for t in taxonomy.items %}
22+ {% if t.name == 'proposals' %}
23+ {% set_global term = t %}
24+ {% endif %}
25+ {% endfor %}
26+<!-- header -->
27+<nav class="mt4 full fourth-1-lg mb3 mb0-m mb0-l mb0-xl">
28+ <a class="gray3" href="/">Urbit</a>
29+ <span class="gray3"> / </span>
30+ <a class="gray3" href="/grants">Grants</a>
31+ <span class="gray3"> / </span>
32+ <a href="{{ current_url }}">Proposals</a>
33+ {% include "partials/navigation-search.html" %}
34+</nav>
35+<!-- content -->
36+<section class="full c4-10-lg pt4 lh-copy">
37+ <h1>Proposals</h1>
38+ <p>Community members may submit proposals to develop a specific feature or work in a particular area. Once approved by the Urbit Foundation, they may complete them in exchange for address space.</p>
39+ {% for page in term.pages %}
40+ {{ macros::grant(page=page, classes="full c1-10-lg mv5")}}
41+ {% endfor %}
42+</section>
43+{% include "partials/footer.html" %}
44+{% endblock content %}
templates/grant_type/single.htmlnew file+23
@@ -0,0 +1,23 @@
1+{% extends "taxonomy/single.html" %}
2+
3+{% import "macros/macros.html" as macros %}
4+
5+{% block content %}
6+<!-- header -->
7+<nav class="mt4 full fourth-1-lg mb3 mb0-m mb0-l mb0-xl">
8+ <a class="gray3" href="/">Urbit</a>
9+ <span class="gray3"> / </span>
10+ <a class="gray3" href="/grants">Grants</a>
11+ <span class="gray3"> / </span>
12+ <a href="{{ current_url }}">{{ term.name | capitalize }}</a>
13+ {% include "partials/navigation-search.html" %}
14+</nav>
15+<!-- content -->
16+<section class="full c4-10-lg pt4 lh-copy">
17+ <h1>Grant Type: {{ term.name | capitalize}}</h1>
18+ {% for page in term.pages %}
19+ {{ macros::grant(page=page, classes="full c1-10-lg mv5")}}
20+ {% endfor %}
21+</section>
22+{% include "partials/footer.html" %}
23+{% endblock content %}
templates/grants/grant.htmlnew file+60
@@ -0,0 +1,60 @@
1+{% extends "page.html" %}
2+
3+{% block content %}
4+
5+<!-- header -->
6+<!-- content -->
7+{%- set lowercasetitle = page.title | lower | split(pat=" ") | join(sep="") -%}
8+{% if section or lowercasetitle == page.components[0] %}
9+<nav class="mt4 pb4 fixed-xl full fourth-1-md fourth-1-lg page-indiced mb3 mb0-m mb0-l mb0-xl">
10+ <a class="gray3" href="/">Urbit</a>
11+ <span class="gray3"> / </span>
12+ <a href="/{{ page.components[0] }}">
13+ {{ page.title }}
14+ </a>
15+
16+ {% include "partials/navigation-search.html" %}
17+</nav>
18+{% else %}
19+<nav class="mt4 fixed-xl full fourth-1-md fourth-1-lg page-indiced mb3 mb0-m mb0-l mb0-xl">
20+ <a class="gray3" href="/">Urbit</a>
21+ <span class="gray3"> / </span>
22+ <a href="/grants">Grants</a>
23+
24+ {% include "partials/navigation-search.html" %}
25+
26+</nav>
27+
28+{% endif %}
29+
30+<article class="mt4 mb4 c1-13 c4-12-lg measure-wide">
31+ {% if page.extra.hidetitle %} {% else %}<h1>{{ page.title }}</h1>{% endif %}
32+
33+ {% if page.extra.image %}
34+ <img class="db mv2 obj-cover w-100 ba" src="{{ page.extra.image }}" />
35+ {% endif %}
36+
37+ {% if page.extra.assignee %}
38+ <span class="db mb1">{{ page.extra.assignee }}</span>
39+ {% endif %}
40+
41+ {% if page.extra.completed %}
42+ <span class="db mb1">Completed</span>
43+ {% else %}
44+ <span class="db mb1">WIP</span>
45+ {% endif %}
46+
47+ {% if page.extra.reward %}
48+ <span class="db mb1">Reward: {{ page.extra.reward }} Stars</span>
49+ {% endif %}
50+
51+
52+ {% if page.date %}
53+ <time class="mono db mv1 gray2 f5">{{ page.date | date(format="~%Y.%-m.%-d") }}</time>
54+ {% endif %}
55+
56+ <!-- body -->
57+ {{ page.content | safe }}
58+</article>
59+
60+{% endblock content %}
templates/grants/list.htmlnew file+96
@@ -0,0 +1,96 @@
1+{% extends "base.html" %}
2+{% import "macros/macros.html" as macros %}
3+
4+{% block title %}
5+ <meta name="og:title" content="Grants - {{ config.title }}">
6+ <title>Grants - {{ config.title }}</title>
7+{% endblock title %}
8+
9+{% block description %}
10+ <meta name="og:description" content="Grants facilitated by the Urbit Foundation.">
11+ <meta name="description" content="Grants facilitated by the Urbit Foundation.">
12+{% endblock description %}
13+
14+{% block content %}
15+{% set posts = get_section(path="grants/_index.md") %}
16+<!-- header -->
17+<nav class="mt4 full fourth-1-lg mb3 mb0-m mb0-l mb0-xl fixed-xl">
18+ <a class="gray3" href="/">Urbit</a>
19+ <span class="gray3"> / </span>
20+ <a href="/grants/">Grants</a>
21+
22+ {% include "partials/navigation-search.html" %}
23+
24+</nav>
25+<section class="full c4-10-lg pt4 lh-copy">
26+
27+ <h1>Urbit Grants Program</h1>
28+
29+ <p>Urbit is a community project. While anyone can contribute, we help focus development and reward exceptional contribution through our grants program.</p>
30+
31+ <p>We reward contributors in four different ways:</p>
32+ <ul class='list'>
33+ <li class="mb2"><a class="b bb" href="/grants/proposals">Proposals</a> from community members</li>
34+ <li class="mb2"><a class="b bb" href="/grants/bounties">Bounties</a> for specific features</li>
35+ <li class="mb2"><a class="b bb" href="/grants/apprenticeships">Apprenticeships</a> undertaken with a mentor</li>
36+ <li class="mb2"><a class="b bb" href="/grants/gifts">Gifts</a> given post facto for exceptional contributions</li>
37+ </ul>
38+
39+ <div class="flex tc mv5 flex-wrap">
40+ <figure class="flex-auto">
41+ <span class="f2">&gt;200</span>
42+ <figcaption class="f5">Stars Awarded</figcaption>
43+ </figure>
44+ <figure class="flex-auto">
45+ <span class="f2" id="worth">$1,000,000</span>
46+ <figcaption class="f5">Approximate USD Worth</figcaption>
47+ </figure>
48+ <figure class="flex-auto">
49+ <span class="f2">&gt;90</span>
50+ <figcaption class="f5">Current Projects</figcaption>
51+ </figure>
52+ </div>
53+
54+ <p>Contributors of all types have access to a wide variety of resources while working on projects, including a supportive team at urbit.org, Tlon developers, and community mentors.</p>
55+
56+ <blockquote class="pa4 ba">&ldquo;I paid off my student loans through the Urbit grants program, and had fun doing it!&rdquo;<br /><cite class="mono">~radbur-sivmus</cite></blockquote>
57+
58+ <h2 class="mt5">Featured grants</h2>
59+
60+ <p>These grants should give you a general idea of what kind of work we reward:</p>
61+
62+ <div class="grid12">
63+
64+ <div class="c1-13 c1-6-md c1-5-lg flex items-stretch pv3">
65+ {% set page = get_page(path="grants/bitcoin-full-node-provider-and-wallet.md") %}
66+ {{ macros::grant(page=page, mode="mini") }}
67+ </div>
68+
69+ <div class="c1-13 c6-13-md c5-9-lg flex items-stretch pv3">
70+ {% set page = get_page(path="grants/webrtc-gall-agent-and-external-app.md") %}
71+ {{ macros::grant(page=page, mode="mini") }}
72+ </div>
73+
74+ <div class="c1-13 c1-13-md c9-13-lg flex items-stretch pv3">
75+ {% set page = get_page(path="grants/urbian-a-customized-linux-distribution-for-urbit-appliances.md") %}
76+ {{ macros::grant(page=page, mode="mini") }}
77+ </div>
78+
79+ </div>
80+
81+ <h2 class="mt5">Available and Closed Grants</h2>
82+
83+ <ul class="flex flex-wrap mv5">
84+ {% set categories = get_taxonomy(kind="grant_category") %}
85+ {% for category in categories.items %}
86+ <li style="flex: 0 1 15rem;" class="f5 flex items-center"><a href="{{ category.permalink }}" class="bb">{{ category.name }}</a></li>
87+ {% endfor %}
88+ </ul>
89+
90+ {% for page in posts.pages %}
91+ {{ macros::grant(page=page, classes="full c1-10-lg mv5")}}
92+ {% endfor %}
93+
94+</section>
95+{% include "partials/footer.html" %}
96+{% endblock content %}
templates/macros/macros.html+53−1
@@ -8,4 +8,56 @@
8 {% endif %}
8 {% endif %}
9 <time class="mono f6 gray2 fr">{{ page.date | date(format="~%Y.%-m.%-d") }} {{ page.extra.time }} </time>
9 <time class="mono f6 gray2 fr">{{ page.date | date(format="~%Y.%-m.%-d") }} {{ page.extra.time }} </time>
10 </span>
10 </span>
11−{% endmacro event_metadata %}
11+{% endmacro event_metadata %}
12+
13+{% macro reward(page) %}
14+ {{ page.extra.reward }} star{% if page.extra.reward > 1 %}s{% endif %} {% if not page.extra.assignee %}reward{% else %}{% if page.extra.completed %}awarded{% else %}pending{% endif %}{% endif %}
15+{% endmacro reward %}
16+
17+{% macro grant(page, mode="full", classes="") %}
18+ {% if mode == "mini" %}
19+ <article data-date="{{ page.date }}" id="grant-{{ page.slug }}" class="grant flex items-stretch {{ classes }}">
20+ <a href="{{ page.permalink }}" class="no-underline bb-0 flex flex flex-column justify-between">
21+ <h1>{{ page.title }}</h1>
22+ <div class="lh-copy">
23+ {% if page.extra.description %}
24+ <p>{{ page.extra.description }}</p>
25+ {% endif %}
26+ </div>
27+ <div class="gray3">
28+ {% if page.extra.reward %}
29+ <span>{{ macros::reward(page=page) }}</span>
30+ {% endif %}
31+ </div>
32+ </a>
33+ </article>
34+ {% else %}
35+ <article data-date="{{ page.date }}" id="grant-{{ page.slug }}" class="grant {{ classes }} {% if page.extra.pinned %}bg-gray4 na3 pa3{% endif %}">
36+ <div class="grid12">
37+ <h1 class="full"><a href="{{ page.permalink }}" class="no-underline bb-0">{{ page.title }}</a></h1>
38+ <div class="full c1-8-lg lh-copy">
39+ {% if page.extra.description %}
40+ <p>{{ page.extra.description }}</p>
41+ {% endif %}
42+ </div>
43+ {% if page.extra.image %}
44+ <img class="db mv2 h4 ba obj-cover full c8-13-lg" src="{{ page.extra.image }}" />
45+ {% endif %}
46+ <div class="full flex flex-wrap">
47+ {% for category in page.taxonomies.grant_category %}
48+ <a href="{{ get_taxonomy_url(kind="grant_category", name=category, lang=page.lang) }}" class="mr3 gray1">{{ category }}</a>
49+ {% endfor %}
50+ {% if page.extra.reward %}
51+ <span class="mr3 gray1">{{ macros::reward(page=page) }}</span>
52+ {% endif %}
53+ {% if page.extra.assignee %}
54+ <span class="mr3 gray1 mono">{{ page.extra.assignee }}</span>
55+ {% endif %}
56+ {% if page.extra.id and not page.extra.assignee %}
57+ <a href="https://grants.urbit.org/{% if 'bounty' in page.taxonomies.grant_type %}bounties{% else %}proposals{% endif %}/{{ page.extra.id }}" target="_blank">Apply for this grant</a>
58+ {% endif %}
59+ </div>
60+ </div>
61+ </article>
62+ {% endif %}
63+{% endmacro grant %}
templates/partials/footer.html+1−1
@@ -54,7 +54,7 @@
54 <a class="gray6 fw6" href="https://github.com/urbit/urbit/issues">Issue Tracker</a>
54 <a class="gray6 fw6" href="https://github.com/urbit/urbit/issues">Issue Tracker</a>
55 </li>
55 </li>
56 <li class="mt2 f3">
56 <li class="mt2 f3">
57− <a class="gray6 fw6" href="https://grants.urbit.org">Urbit Grants</a>
57+ <a class="gray6 fw6" href="/grants">Urbit Grants</a>
58 </li>
58 </li>
59 </nav>
59 </nav>
60 <nav class="c9-13-lg c9-13-md half-1 mt5 mb6">
60 <nav class="c9-13-lg c9-13-md half-1 mt5 mb6">
templates/post_type/list.htmlnew file+1
@@ -0,0 +1 @@
1+{% extends "taxonomy/list.html" %}
templates/post_type/single.htmlnew file+1
@@ -0,0 +1 @@
1+{% extends "taxonomy/single.html" %}
templates/taxonomy/list.htmlnew file+33
@@ -0,0 +1,33 @@
1+{% extends "base.html" %}
2+
3+{% block title %}
4+<meta name="og:title" content="{{ taxonomy.name | capitalize }} - {{ config.title }}">
5+<title>{{ taxonomy.name | capitalize }} - {{ config.title }}</title>
6+{% endblock title %}
7+
8+{% block description %}
9+<meta name="og:description" content="{{ taxonomy.name | capitalize }} archive">
10+<meta name="description" content="{{ taxonomy.name | capitalize }} archive">
11+{% endblock description %}
12+
13+{% block image %}
14+<meta name="twitter:image" content="https://media.urbit.org/logo/urbit-logo-card.png">
15+{% endblock image %}
16+
17+{% block content %}
18+<!-- header -->
19+<nav class="mt4 full fourth-1-lg mb3 mb0-m mb0-l mb0-xl">
20+ <a class="gray3" href="/">Urbit</a>
21+ {% include "partials/navigation-search.html" %}
22+</nav>
23+<!-- content -->
24+<article class="mt4 mb4 c1-13 c4-12-lg">
25+ <h1>Grant Type: {{ taxonomy.name | capitalize }}</h1>
26+ <ul class="posts measure-wide">
27+ {% for term in terms %}
28+ <li><a href="{{ term.permalink }}">{{ term.name }}</a> ({{ term.pages | length }} posts)</li>
29+ {% endfor %}
30+ </ul>
31+</article>
32+{% include "partials/footer.html" %}
33+{% endblock content %}
templates/taxonomy/single.htmlnew file+44
@@ -0,0 +1,44 @@
1+{% extends "base.html" %}
2+
3+{% block title %}
4+<meta name="og:title" content="{{ term.name | capitalize }} Archive - {{ config.title }}">
5+<title>{{ term.name | capitalize }} - {{ config.title }}</title>
6+{% endblock title %}
7+
8+{% block description %}
9+<meta name="og:description" content="Urbit {{ term.name | capitalize }} Archive">
10+<meta name="description" content="Urbit {{ term.name | capitalize }} Archive">
11+{% endblock description %}
12+
13+{% block image %}
14+<meta name="twitter:image" content="https://media.urbit.org/logo/urbit-logo-card.png">
15+{% endblock image %}
16+
17+{% block content %}
18+<!-- header -->
19+<nav class="mt4 full fourth-1-lg mb3 mb0-m mb0-l mb0-xl">
20+ <a class="gray3" href="/">Urbit</a>
21+ {% include "partials/navigation-search.html" %}
22+</nav>
23+<!-- content -->
24+<article class="mt4 mb4 c1-13 c4-12-lg">
25+ <ul class="posts measure-wide">
26+ {% for page in term.pages %}
27+ <a class="bb-0" href="{{ page.permalink }}">
28+ <li class="mb4">
29+ <h2 class="f5 fw6 mt0 mb1">{{ page.title }}</h2>
30+ <p class="mt0">{{ page.description }}</p>
31+ {% if page.extra.image %}
32+ <img class="pv2 obj-cover h5 w-100" src="{{ page.extra.image }}"/>
33+ {% endif %}
34+ <time class="mono f6">{{ page.date | date(format="~%Y.%-m.%-d") }}</time>
35+ <span class="mono f6">
36+ {% if page.extra.ship %}<address class="mono f6 ml2">{{ page.extra.ship }}</address> {% endif %}
37+ </span>
38+ </li>
39+ </a>
40+ {% endfor %}
41+ </ul>
42+</article>
43+{% include "partials/footer.html" %}
44+{% endblock content %}