Coldreader is a web application which lets the user build customized dashboards to track any sort of information they might be interested in. It uses an abstracted data model I called CRPS to persist, mutate, and update data: CRPS is designed to be a databasing system for when you don’t know in advance what kind of information you want to store. It implements a data model where you have a bunch of arbitrary subjects, each of which has an arbitrary number of Aspects.

Aspects can be thought of as some kind of fact or content that is relevant to its Subject. Aspect data is stored in the database as text, in the broad sense. JSON counts as text, for instance, as do hyperlinks, markup, etc. In addition to storing data, Aspects can be purely functional–a call to an external API, a web scraper to grab a bit of content from elsewhere, and so forth. Each type of Aspect has a display method that produces the markup for use in templates. Additionally, each type of Aspect also has a parse() function which can be called automatically by scheduled jobs. From this function, an Aspect may perform actions on the data model; fetching new data from an external source, updating its own value, or creating/updating other Subjects or Aspects.
This storage system is then implemented in the Coldreader application, which provides an interface which might be described as something halfway between a mind map and a private wiki.
Use cases may include:
- Project management system
- Personal CRM system
- Build custom dashboards to track subjects of interest
- Manage your collection of media
- Track your notes and references as you research new things
- Create a knowledge base of problems you have previously solved
- Keep a library of your favorite recipes
- API test bed – quickly add new features by implementing an API and using your existing data
- Organize your data however you like