→ Kalibrr
PostgreSQL is our main datastore, and we make judicious use of its fantastic features: JSON columns, recursive CTEs, streaming binary replication, triggers, and constraints, among others.
→ Kalibrr
We make sure that our site is indexable by bots and spiders (such as GoogleBot and Facebook's fetcher) using Prerender, which runs our JS and render and serves the final page to bots that typically don't have JS capabilities.
→ Kalibrr
Most of our backend code is in Python. We use TypeScript for frontend code, and we use Ruby for our build system (Guard).
→ Kalibrr
We use nginx to serve all of our static files, and to load balance our multiple backends. Our nginx frontend servers are themselves load-balanced using a Linode NodeBalancer.
→ Kalibrr
All of our pull requests are automatically tested using Jenkins' integration with GitHub, and we provision and deploy our servers using Jenkins' interface. This is integrated with HipChat, immediately notifying us if anything goes wrong with a deployment.
→ Kalibrr
We use ElasticSearch to index and query items that need to be searched full-text (such as jobs and candidates). We mirror changes to our main datastore (PostgreSQL) onto ElasticSearch using SQLAlchemy's events, denormalizing as needed.
→ Kalibrr
We cherry-pick the parts of Bootstrap that we want to use using SCSS. We mainly use the typographical and layout-related parts of Bootstrap.
→ Kalibrr
We use Jade when writing HTML, which is much easier to read and maintain. We compile it to HTML before deploying it though, and don't use Jade's client-side rendering features.
→ Kalibrr
All of our CSS is written in SCSS, Sass's CSS-like syntax. Variables, functions, mixins, and nesting are simply heaven compared to plain CSS.
→ Kalibrr
All of our background jobs (e.g., image resizing, file uploading, email and SMS sending) are done through Celery (using Redis as its broker). Celery's scheduling and retrying features are especially useful for error-prone tasks, such as email and SMS sending.
→ Kalibrr
We use Google's geocoding and place services to figure out the geographical location of jobs and candidates, to best match them.
→ Kalibrr
We have our own special Hubot instance named kbot, that does everything from reminding us what to do, showing cat and corgi images, and notifying us of system errors.
→ Kalibrr
We monitor and troubleshoot our app's performance using New Relic, which gives us a great view into each type of request that hits our servers. It also gives us a nice weekly summary of error rates and response times so that we know how well we've done in the past week.
→ Kalibrr
All of our external emails are sent using SendGrid. SendGrid's statistics dashboards help us figure out whether our emails are reaching people, and how much attention is paid to them.
→ Kalibrr
All file uploads go straight to Amazon S3 (with maybe some preprocessing). Amazon S3's cheap and easy-to-use, with no need to worry about disk space limits.
→ Kalibrr
Our internal emails (such as exception notifications) are sent via Amazon SES, since it's cheaper than using Sendgrid. We also use Amazon SES as a fallback in case we have deliverability issues with Sendgrid.
→ Kalibrr
PostGIS makes it easy (and fast) to do geographic queries, such as nearest-neighbor and bounding box queries.
→ Kalibrr
We use Redis as a key-value store, a cache, and a message queue. It's a ridiculously fast and simple-to-maintain jack-of-all-trades.
→ Kalibrr
jQuery's pretty useful for DOM manipulations within Angular directives. We're considering switching to a lighter-weight alternative though, such as Zepto.
→ Kalibrr
We fall back to Nexmo when Chikka (https://api.chikka.com) and Semaphore (http://semaphore.co) have downtime or deliverability problems. Chikka and Semaphore are local (Philippine) SMS APIs handled by SMART and Globe, respectively, and report higher deliverability rates than Nexmo (at lower cost).