Raindrop/SoftwareArchitecture
Raindrop Software Architecture
The software components for Raindrop are still evolving, but this picture shows the current state of them:
You give raindrop credentials to fetch messages from different sources. This picture above shows it reaching out to Gmail and Twitter, but we really want it to work with any message source on the internet: other imap email accounts, feeds, instant messages, and other social networks.
run-raindrop fetches messages from the message sources and stores the raw data received in couch documents. An extensible work queue then runs over these raw messages, creating additional "schemas" for each message, with each of these schemas also stored in couch documents. You can create new workqueue extensions to mine interesting data out of your messages and raindrop will save your schema in their own couch documents. This is described in more detail in the raindrop document model.
Along with the documents regarding the messages, all the HTML/JavaScript and CSS used by the user interface is also stored in the couch. In general, a single "application" is stored in attachments to a single couch document, making it easy to support multiple applications from the same couch. The UI is then served directly from the couch and is rendered in your favorite modern web browser (Firefox or webkit-based).
The UI fetches documents related to a message from the couch and uses those data documents to display the messages. Just like the back-end, the front-end UI code also supports extensions, so if you have a back-end extension which extracted useful information about these messages, you can write a front-end extension to take advantage of that information in the user interface.
We want Raindrop to run completely on your local box or out in the cloud, on a shared server or run by a service provider.
For more information on the different pieces:
- Back End: The run-raindrop and CouchDB parts of the system.
- Front End: The HTML/JavaScript and CSS used to render the user interface.
- Raindrop/Security: We need to put in a good security model.
- Web APIs: Thoughts on how to make the data API for the front-end to be more approachable.