Project Page: https://www.notion.so/bankless/Bounty-Board-318dc164cc5640cca17e0fb5f484fd90
For full details on running the project locally, please see the 'getting started' section below.
Currently, Bankless DAO bounties are not in a centralized location causing confusion and makes it challenging for members, new and old, to contribute. Also Level 0's do not have intuitive ways to get involved and earn $BANK other than buying in the secondary markets.
For the DAO to grow, we need a way to attract, retain and coordinate talent. The bounty board, accessible to members and non-members will connect the DAO to a continually expanding talent pool.
In addition, we need a way to codify meaningful units of work. Given the diversity of jobs to be done in a DAO, the bounty board allows bounty creators to define and specify the scope of tasks along with expected deliverables.
Finally, we need a way to formalize the flow of capital, beyond an informal, organic tipping culture that exists to formally recognize contributors for their knowledge, skills and abilities.
The bounty board will be a key mechanism for coordinating talent, tasks and capital.
For the MVP, we are focusing on the bare requirements for a Bounty Card to be created by a user via DEGEN and/or Frontend UI, with the following key fields:
- Title: Bounty Titles should be like headlines
- Description: Provides space to flesh out the scope, deliverables and timeline for the bounty.
- Criteria: When is a task considered "done" or "complete"?
- Reward: Bounty creator indicates
amount
(i.e., 10000) andcurrency
(i.e., $BANK) to be paid for completing the work. - HashId: Auto-generated ID for each bounty.
- CreatedBy / RequestedBy: Bot automatically enters bounty creator's
discordHandle
. - ClaimedBy: Bot automatially notes
discordHandle
claiming the bounty. - SubmittedBy: Bot automatically notes
discordHandle
submitting the bounty.
The follow description is of Serendipity in the Bankless Bot Garage, but is intended to mirror how DEGEN works in production.
-
Create: Bounty creator creates new bounty with
/bounty create
, inputingtitle
andreward
. DEGEN will dm you to input a description, requirements for completion and a due date (yyyy-mm-dd
). DEGEN takes your input and returns a card with three options: 👍 publish, 📝 edit or ❌ delete -
Create Multiple Bounties: Bounty creator creates new bounty with
/bounty create
, inputingtitle
andreward
. Then, hit tab to see an optionalcopies
feature to create multiple bounties at once. -
Edit: Select 📝 to edit. DEGEN provides a link to the frontend to edit any field. DEGEN then re-shows a newly edited card (and automatically publishes to #🧀-bounty-board channel)
-
Publish/Open: Bounty creator clicks thumbs up emoji 👍 or
/bounty publish
in Discord, bounty published to #🧀-bounty-board channel and website (url provided); status is now Open on website. -
Claim/In Progress: Within #🧀-bounty-board Bounty claimer click black flag 🏴 or
/bounty claim
, entering theHashID
to 'start', card changes color in Discord, Bounty creator receives message that bounty has been claimed; Bounty card on website now has Claimed By; card status is now "In Progress". -
Submit/In Review: Bounty claimer hits red mail box emoji 📮 in Discord, receives auto-generated message from DEGEN notifying the bounty is ready for review. They should reach out to the person who submitted the bounty. Alternatively, user can submit directly through a new bot command
/bounty submit
, enteringHashId
; card status is now "In Review". -
Complete/Completed: Bounty claimer can signal completion ✅ on the post in the #🧀-bounty-board channel or directly through a new bot command
/bounty complete true
; card status is now "Completed".
- NOTE: DEGEN is available for use on any channel within the Bankless DAO discord (08/31/2021)
- Enter
/
and see a list of commands pop up.
The following commands (and input fields) are available for DEGEN:
/bounty claim (bounty-id) /bounty complete (bounty-id) /bounty create (title)(reward) /bounty publish (bounty-id) /bounty list (list-type) /bounty delete (bounty-id) /bounty submit (bounty-id) /help bounty
Refer to the Bounty Board Commands and Workflow Notion Page for in-depth details.
Note: Currently, the frontend mirrors the interaction with DEGEN in discord and displays changes in card status. Frontend interactions are suited for those wishing to claim bounties.
-
Claim: Click on any card that says
Open
. To claim, click theClaim it
button. You will be re-directed to #🧀-bounty-board channel. Within #🧀-bounty-board Bounty click black flag 🏴 emoji. DEGEN present a link back to the frontend and a prompt to reach out to the Bounty Creator. -
Frontend Status: In Progress: A link back to the frontend shows card status as "In Progress" and "Claimed By" claimer's discord handle.
-
Discord/Bot: Submit: Bounty claimer hits red mail box emoji 📮 in Discord to submit, receives auto-generated message from DEGEN indicating "bounty in review" and a link back to the frontend where status is now "In Review".
-
Discord/Bot: Complete: Bounty claimer can signal completion ✅ on the post in the #🧀-bounty-board channel. Bounty creator receives message to tip bounty completer.
-
Frontend Status: Completed: Back at the frontend, the bounty card status is now "Completed".
-
Discord/Bot: Draft: Bounty creator creates new bounty with
/bounty create new
; status is now "Draft" and not shown in Discord. Bounty creator must publish the bounty before it is available on the frontend. -
Frontend Status: Open: Bounty creator clicks thumbs up emoji 👍 or
/bounty create publish
in Discord, bounty published to #🧀-bounty-board channel and website (url provided); status is now Open on the frontend. -
Discord/Bot: Claim: Now that a bounty card is Open, we can click "Claim It".
-
Frontend Status: In Progress: Within #🧀-bounty-board Bounty click black flag 🏴 or
/bounty claim
to 'claim'. A link back to the frontend shows card status as "In Progress" and "Claimed By" claimer's discord handle. -
Discord/Bot: Submit: Bounty claimer hits red mail box emoji 📮 in Discord, receives auto-generated message from Bot indicating "bounty in review".
-
Frontend Status: In Review: Card status on the frontend is "In Review".
-
Discord/Bot: Complete: Bounty claimer can signal completion ✅ on the post in the #🧀-bounty-board channel. Bounty creator receives message to tip bounty completer.
-
Frontend Status: Completed: Work is done.
In order to run a local instance of the application you will need to configure a few things.
You can either run the application from this top-level monorepo, or change into the packages/react-app
directory. You will need the yarn package manager installed then run
$ yarn
$ yarn dev
Which will install packages and run the application on port 3000. The package.json
file in the respective repo gives a full list of commands.
The react application looks for an environment variables file named .env.local
on starting. You can copy the .env.qa
file for most of the variables. You will need to add the MONGODB_URI
and DISCORD_BOUNTY_BOARD_WEBHOOK
as covered below.
Connection to MongoDB is handled through the Mongoose DRM. You can either connect to a hosted instance of MongoDB, or run a local development copy.
If running locally, your .env.local
will contain something like:
MONGODB_URI=mongodb://localhost:27017/bountyboard
If connecting to a remote mongo server, your connection string will be in the format:
MONGODB_URI=mongodb://username:password@host:port/bountyboard
Please refer to the Mongoose docs for more information.
The app expects a MongoDB db bountyboard
with the collection bounties
, as specified in the json files within mongo/bounties
(note: these might need some slight tweaking to fit with the app).
If you're firing up a fresh instance of Mongo, you will need to seed the database from the command line or discord, as the board does not currently have an 'add bounty` functionality.
If you're adding from command line, you can use the mongoimport utility to import one of the JSON files in the mongo/bounties
folder.
$ mongoimport\
--db bountyboard\
--collection bounties\
--file path/to/mongo/bounties/file.json\
--jsonArray # only needed if loading an array
If you've made it this far, the application should run and should be showing a bounty on the main screen. You can directly query the API backend through the app at localhost:3000/api/bounties
The DISCORD_BOUNTY_BOARD_WEBHOOK
is not required to start the app, but can be fetched from a member of the bounty board development team. Add it to your .env.local
file once you have it.