We are a small dev team working as a web agency for clients, mostly to fuel our own projects. In every cases, storing and sharing secrets is a pain and like most teams we use ways that we should not, like sharing secrets over Slack or emails. Because of this and sometimes lack of communication, we encounter issues where one or more of our developers miss secrets and spend time understanding what's going on. Even worst, you could crash a production app by forgetting some secrets.
What it does
Keystone let developers stores secrets in their private data locker thanks to Blockstack auth and their storage system called Gaia. A bit like Git for code source, Keystone is a versioning system for secrets so different users can share and edit the same files. There is a web platform and a super useful CLI that makes it easy to use the product : create a project, add files, invite someone, fetch files and so on.
How I built it
Keystone is built with React Hooks and Tailwind for the web platform. We also use the Google Cloud functions to send emails on behalf the user to create a nice invite workflow while sharing the least data of our users For the CLI we used Node.js
Challenges I ran into
Actually we ran into a lot of challenges: how to use the library blockstack.js in the CLI. How to make it easy for people to send invite and join projects. How to create a versioning system that can work in a decentralized design. We're still pre-alpha but very confident to create a reliable platform super easy to use for developers and easy to integrate with CI/CD tools.
Accomplishments that I'm proud of
1) Super fast login on the CLI:
$ ks login your-blockstack-id --> open a web page where you can login with your blockstack account --> on login create a special file encrypted with a pub key generated by the cli at the login command time. The CLI looks for the file and saves what blockstack needs to authenticate and to make a valid userSession.
2) A fully working CLI leveraging Blockstack Thanks to 1) we are able to work with the full blockstack.js library with nodejs. Our CLI is fully operational and can use the same features that a client in a browser.
3) Invitation system through email for great multiplayer experience We let users invite people on their projects. Email is a good way to handle this as users are already used to this kind of mechanism. Each time ,we send a special link with the project name and the sender blockstack_id so they can look for each other.
What I learned
There's work to think in a decentralized way. Most of the thinking we do every day as a developer is always with a single point of truth.
What's next for Keystone
Get to a stable version, find a reliable business model and we'll likely release the source code to open source