From c2906e7316c2cba0cda447748900fbceab1a4a95 Mon Sep 17 00:00:00 2001
From: Eduardo Trujillo <ed@chromabits.com>
Date: Sun, 2 Oct 2016 14:57:48 -0700
Subject: [PATCH] feat(projects): Updated and new project descriptions

---
 projects/blog.md   | 38 +++++++++++++++++++++++++++++++++
 projects/craze.md  | 33 +++++++++++++++++++++++++++++
 projects/kawaii.md | 53 ++++++++++++++++++++++++++++++++++++++++++++++
 projects/shift.md  | 27 +++++++++++++++++++++++
 4 files changed, 151 insertions(+)
 create mode 100644 projects/blog.md
 create mode 100644 projects/craze.md
 create mode 100644 projects/kawaii.md
 create mode 100644 projects/shift.md

diff --git a/projects/blog.md b/projects/blog.md
new file mode 100644
index 0000000..04400e9
--- /dev/null
+++ b/projects/blog.md
@@ -0,0 +1,38 @@
+---
+title: Blog
+platform: Haskell
+github: etcinit/blog
+post: /posts/2016/02/15/serving-hakyll-site-with-warp/
+uuid: 05ba78e4-3659-4f39-9afc-ac50868f081c
+---
+
+The generator and server behind this blog.
+
+<!--more-->
+
+**About**
+
+The Chromabits blog has gone over multiple engines over time. A long time ago,
+the site was powered by a dynamic PHP CMS. After a while, it migrated to a Node
+JS server with isomorphic JS. Finally, it has recently been reborn as a static
+website generated using the Hakyll library/framework.
+
+[_Dropping everything and going static_][1] describes this in greater detail.
+
+**Architecture**
+
+The project could be subdivided into three main sections: The generator, the
+server, and the frontend.
+
+The generator uses Hakyll, which then uses Pandoc, to take many posts and
+project descriptions written in Markdown into full pages using different
+templates and some basic logic (like the random title colors).
+
+The server uses the [kawaii][2] package to define a custom web server that took
+less time to program and setup than the trial and error that setting up Apache
+through configuration files can be sometimes.
+
+The frontend is simply a Gulp task for compiling SASS into a minified CSS file.
+
+[1]: /posts/2015/08/23/going-static/
+[2]: /projects/kawaii/
diff --git a/projects/craze.md b/projects/craze.md
new file mode 100644
index 0000000..3e77456
--- /dev/null
+++ b/projects/craze.md
@@ -0,0 +1,33 @@
+---
+title: Craze
+platform: Haskell
+github: etcinit/craze
+docs: https://hackage.haskell.org/package/craze
+uuid: 427d241d-384a-4468-8b0e-11e0c71861b1
+---
+
+A micro-library for racing HTTP GET requests.
+
+<!--more-->
+
+Craze is my first open-source Haskell package. It started as a small algorithm
+for work, but as gained more features it was polished enough to open-source.
+
+**What is Craze?**
+
+Craze is a small module for performing multiple similar HTTP GET requests in
+parallel. This is performed through a function called `raceGet`, which will
+perform all the requests and pick the first successful response that passes a
+certain check, meaning that the parallel requests are essentially racing
+against each other.
+
+**What is the usefulness of this?**
+
+If you are dealing with data source or API that is very unreliable (high
+latency, random failures) and there are no limitations on performing
+significantly more requests, then performing multiple requests (through direct
+connections, proxies, VPNs) may increase the chances of getting a successful
+response faster and more reliably.
+
+However, if using a different data source or transport is a possibility, it is
+potentially a better option that this approach.
diff --git a/projects/kawaii.md b/projects/kawaii.md
new file mode 100644
index 0000000..532c208
--- /dev/null
+++ b/projects/kawaii.md
@@ -0,0 +1,53 @@
+---
+title: Kawaii
+platform: Haskell
+github: etcinit/kawaii
+docs: https://hackage.haskell.org/package/kawaii
+uuid: ea143dfb-4312-4afa-91fd-004ebd02fb3d
+---
+
+Utilities for serving static sites and blogs with Wai/Warp.
+
+<!--more-->
+
+Warp is a really performant web server for Haskell applications that follow the
+Wai interface. Kawaii is a library that encapsulates a lot of the boilerplate
+involved in setting up a Warp/Wai server for hosting static websites and blogs.
+
+The library was originally part of the source code of the Chromabits blog, but
+refactored to be more generic and work with more projects.
+
+**Features:**
+
+- Wai applications: Static website, home redirector.
+
+- Built-in HTTP and HTTPS servers.
+
+- A CLI for launching a basic server on any directory.
+
+- Middlewares:
+
+    - Logger: Logs all requests to `stdout` in Apache-like format.
+
+    - Force SSL: Redirects all visitor accessing a site from HTTP to the HTTPS
+      version.
+
+    - GZip
+
+    - Domain enforcer: Redirects visitors to a specified domain. This allows
+      authors to create redirections from a www to a non-www domain or
+      vice-versa.
+
+    - Security headers
+
+    - HSTS
+
+    - Content Security Policies: Besides adding the appropriate headers, the
+      middleware includes a mini-DSL for describing the desired rules in
+      Haskell.
+
+    - De-indexify middleware: Many static site generators use `index.html` for
+      many paths to avoid showing any extensions as part of an URL. This
+      middleware ensures that even if a visitor directly accesses a URL ending
+      in `index.html`, they get redirected and served the directory version:
+      `my.blog/index.html --> my.blog/`.
diff --git a/projects/shift.md b/projects/shift.md
new file mode 100644
index 0000000..fa8d270
--- /dev/null
+++ b/projects/shift.md
@@ -0,0 +1,27 @@
+---
+title: Shift
+platform: Haskell
+github: etcinit/shift
+uuid: 58e8fe22-59a1-462a-8a9e-c238a4fd3da5
+---
+
+A changelog generator.
+
+<!--more-->
+
+Born out of the frustration that comes out of having to manually update
+changelog files, Shift is a tool that can automatically generate a change log
+based on a project's Git history.
+
+To be ultimately useful, Shift does require that the project follows a git
+commit convention. In it's initial implementation, it solely supports the
+Angular commit convention since it is one of the most popular of these kind of
+conventions and fairly easy to parse.
+
+I chose Haskell to write this project due to its very powerful and declarative
+parsing libraries, which are use extensively to parse commit messages and
+bodies.
+
+Additionally, Shift takes advantage of projects hosted on GitHub and can
+generate richer changelogs by embedding links to commit diffs and author
+profiles.
-- 
GitLab