Source code open for viewing or using, but is not public domain.
- PostgreSQL database
- Projects only use PostgreSQL. Databases are strict, with foreign keys and constraints in the schema itself.
- Central database of all people
- Instead of duplicating someone’s info for each project, people are kept in one central database, and all other projects just refer to the person_id.
- REST Server + dumb client
- I’m much more interested in being the back-end than front-end. Each project is meant to be used by other sites/apps/interfaces. So each project should have a fully-featured REST server, and the website is just a client using its REST API, as described here. Ensures that all outside clients can do everything our website can do, and separates UI from back-end functionality.
- Twitter is the best role model for this. Just like most people don’t use twitter.com, but use another tool that uses the Twitter API, I’m not expecting any of my sites to be big destination websites, but rather good strong back-ends that other people can write great front-ends for.
- REST server should have very strict authentication and validations for every action, so client can be dumb. Anyone should be able to write their own fully-functional front-end in Rails, Node, Android, iPhone, etc.
- Most sites are fully multi-lingual. See musicthoughts.com or sivers.org for two live examples. Nothing should be hard-coded in English. The techniques for language setting/switching are common throughout these sites. (Professional translators are hired to do the translations.)
- All sites that deal with money are multi-currency. Money is always saved as a currency code and millicents. This lets the database deal only in integers to avoid floating point errors. A shared Money class knows how to display each currency correctly or convert it into others.