A stack for the apocalypse

Or Afristack, as I call it. I was approached by a wonderful person recently who wants to end death from hunger. What I liked in his approach, besides the fact that it mirrors my own philosophies about helping neglected communities, is that it does not give handouts to the poor. Instead it educates them on a path to a form of mini-capitalism.

For a person like me, who loves distributed projects, financial engines, gamification, and mass deployments, this sounds like an awesome beast to design and play with.

The idea is to create self-healing, self-establishing smart network infrastructure in remote areas, and provide some basic services to those remote communities, such as:

  • Tracking the progress of people, the courses they took, their health (mental and physical), their income and assets, their trends (personal and social), and more.
  • Messaging services, both real-time and non-real time. Chat and Email for example. Except servers should queue messages and hold them even if there’s no internet connectivity. In other words, mail should be MX’d by regional nodes, until they obtain internet connectivity, to deliver to real mail servers.
  • Wallet services. This services allows people to run local economies, and track their currencies and assets. It should also allow them to pay each other, but in a decentralized manner. Think Bitcoin.
  • Alerts, News, etc. for example the ability to detect outbreaks (malaria and the likes), dangerous weather phenomena, low water reservoirs or bad water quality that could endanger lives. And on the other hand, generate news that those remote communities might find useful, such as weather reports, general news, weddings, new regulations, and anything else of interest.
  • General access to the internet, but especially to resources such as Wikipedia, Khan Academy, and so on. The regional and local server nodes should cache as much as possible, so as not to tax the internet gateways at the edges of the mesh.
  • Eventually, add more services, such as package tracking and routing, to allow some sort of “post office” to exist, complete with reputation systems for participants, and a reward system based on speed of delivery and quality of service.

So after much thinking (24 hours), I came up with the following software stack and approach. Tell me what you think about my choices:

  • Node.JS as a lightweight application server
  • Meteor.JS + Angular.JS for web apps
  • MongoDB for data storage and replication
  • Byzantium for mesh networking (takes care of DNS and Routing)
  • ZeroMQ for fast, efficient messaging between mesh nodes
  • Squid or Nginx for web proxying
  • node-rules as a lightweight rule engine, to automate as much as possible based on generated events that flow, and are captured, over ZeroMQ.
  • Open-Transactions to issue currencies, and manage cryptographic wallets