Browse Source

Change site to Jekyll

Ian Adam Naval 3 years ago
parent
commit
982cfeb12c
100 changed files with 904 additions and 592 deletions
  1. 3
    13
      README.md
  2. 0
    40
      conf/nginx.conf
  3. 0
    24
      conf/supervisord.conf
  4. 2
    0
      ianonavy/.gitignore
  5. 17
    0
      ianonavy/_config.yml
  6. 54
    0
      ianonavy/_includes/footer.html
  7. 12
    0
      ianonavy/_includes/head.html
  8. 34
    0
      ianonavy/_includes/header.html
  9. 20
    0
      ianonavy/_layouts/default.html
  10. 14
    0
      ianonavy/_layouts/page.html
  11. 15
    0
      ianonavy/_layouts/post.html
  12. 205
    0
      ianonavy/_sass/_base.scss
  13. 295
    0
      ianonavy/_sass/_layout.scss
  14. 60
    0
      ianonavy/_sass/_syntax-highlighting.scss
  15. 15
    0
      ianonavy/about.md
  16. 54
    0
      ianonavy/css/main.scss
  17. 30
    0
      ianonavy/feed.xml
  18. BIN
      ianonavy/img/feed-icon-14x14.png
  19. BIN
      ianonavy/img/how2pizza.png
  20. 0
    0
      ianonavy/img/mathhammer.png
  21. 0
    0
      ianonavy/img/mirrors.png
  22. 0
    0
      ianonavy/img/potatoipsum.png
  23. 0
    0
      ianonavy/img/sms-fixer.png
  24. 29
    0
      ianonavy/index.html
  25. 45
    0
      ianonavy/projects.html
  26. 0
    2
      requirements.txt
  27. 0
    0
      src/__init__.py
  28. 0
    6
      src/ianonavy.fcgi
  29. 0
    25
      src/server.py
  30. 0
    54
      src/static/css/contact.css
  31. 0
    8
      src/static/css/error.css
  32. 0
    51
      src/static/css/placeholder.css
  33. 0
    95
      src/static/css/portfolio.css
  34. 0
    131
      src/static/css/portfolio.scss
  35. 0
    108
      src/static/css/style.css
  36. 0
    34
      src/static/css/test.scss
  37. BIN
      src/static/favicon.ico
  38. 0
    1
      src/static/google9677fb7678857b96.html
  39. BIN
      src/static/img/404cat.jpg
  40. BIN
      src/static/img/acm.png
  41. BIN
      src/static/img/competition.png
  42. BIN
      src/static/img/dark_stripes.png
  43. BIN
      src/static/img/ian-280.jpg
  44. BIN
      src/static/img/ian-original.jpg
  45. BIN
      src/static/img/icons/16/500px.png
  46. BIN
      src/static/img/icons/16/aboutme.png
  47. BIN
      src/static/img/icons/16/addthis.png
  48. BIN
      src/static/img/icons/16/amazon.png
  49. BIN
      src/static/img/icons/16/aol.png
  50. BIN
      src/static/img/icons/16/app-store-2.png
  51. BIN
      src/static/img/icons/16/app-store.png
  52. BIN
      src/static/img/icons/16/apple.png
  53. BIN
      src/static/img/icons/16/bebo.png
  54. BIN
      src/static/img/icons/16/bing.png
  55. BIN
      src/static/img/icons/16/blip.png
  56. BIN
      src/static/img/icons/16/blogger.png
  57. BIN
      src/static/img/icons/16/button-blue.png
  58. BIN
      src/static/img/icons/16/button-green.png
  59. BIN
      src/static/img/icons/16/button-light-blue.png
  60. BIN
      src/static/img/icons/16/button-orange.png
  61. BIN
      src/static/img/icons/16/button-red.png
  62. BIN
      src/static/img/icons/16/button-white.png
  63. BIN
      src/static/img/icons/16/button-yellow.png
  64. BIN
      src/static/img/icons/16/coroflot.png
  65. BIN
      src/static/img/icons/16/daytum.png
  66. BIN
      src/static/img/icons/16/delicious.png
  67. BIN
      src/static/img/icons/16/design-bump.png
  68. BIN
      src/static/img/icons/16/digg.png
  69. BIN
      src/static/img/icons/16/dopplr.png
  70. BIN
      src/static/img/icons/16/dribbble.png
  71. BIN
      src/static/img/icons/16/drupal.png
  72. BIN
      src/static/img/icons/16/ebay.png
  73. BIN
      src/static/img/icons/16/ember.png
  74. BIN
      src/static/img/icons/16/etsy.png
  75. BIN
      src/static/img/icons/16/facebook.png
  76. BIN
      src/static/img/icons/16/feedburner.png
  77. BIN
      src/static/img/icons/16/flickr.png
  78. BIN
      src/static/img/icons/16/foodspotting.png
  79. BIN
      src/static/img/icons/16/forrst.png
  80. BIN
      src/static/img/icons/16/foursquare.png
  81. BIN
      src/static/img/icons/16/friendfeed.png
  82. BIN
      src/static/img/icons/16/friendster.png
  83. BIN
      src/static/img/icons/16/gdgt.png
  84. BIN
      src/static/img/icons/16/github.png
  85. BIN
      src/static/img/icons/16/google-buzz.png
  86. BIN
      src/static/img/icons/16/google-plus-black.png
  87. BIN
      src/static/img/icons/16/google-plus.png
  88. BIN
      src/static/img/icons/16/google-talk.png
  89. BIN
      src/static/img/icons/16/google.png
  90. BIN
      src/static/img/icons/16/gowalla-2.png
  91. BIN
      src/static/img/icons/16/gowalla.png
  92. BIN
      src/static/img/icons/16/grooveshark.png
  93. BIN
      src/static/img/icons/16/heart.png
  94. BIN
      src/static/img/icons/16/hyves.png
  95. BIN
      src/static/img/icons/16/icondock.png
  96. BIN
      src/static/img/icons/16/icq.png
  97. BIN
      src/static/img/icons/16/identi.png
  98. BIN
      src/static/img/icons/16/imessage.png
  99. BIN
      src/static/img/icons/16/instagram.png
  100. 0
    0
      src/static/img/icons/16/itune.png

+ 3
- 13
README.md View File

@@ -6,11 +6,7 @@ Source code for my personal website.
6 6
 Requirements
7 7
 ------------
8 8
 
9
-* python 2.6+
10
-* pip
11
-* virtualenv
12
-* nginx
13
-* supervisord
9
+* Jekyll
14 10
 
15 11
 Installing
16 12
 ----------
@@ -18,15 +14,9 @@ Installing
18 14
 Exact commands vary with OS.
19 15
 
20 16
 1. Clone git repository. 
21
-2. Create a virtual environment in the same directory, and source the `activate` script. 
22
-3. Navigate into the directory and install the required Python packages with `pip install -r requirements.txt`.
23
-4. Symlink or copy the file `conf/nginx.conf` into the nginx configuration directory (e.g. `/etc/nginx/conf.d/ianonavy.conf` for CentOS).
24
-5. Symlink or copy the file `conf/supervisord.conf` into the supervisord configuration directory.
25
-6. Reload the config files of both nginx and supervisord, and ensure that both daemons are running.
26
-
27
-Note that you probably need to edit the config files to point to the directory in which you cloned this repo as well as the `server_name` for nginx.
17
+2. Jekyll build.
28 18
 
29 19
 Updating
30 20
 --------
31 21
 
32
-To update, just run `git pull` in the repository. For the Web service, you may need to instruct supervisord to restart the daemons.
22
+To update, just run `git pull` in the repository.

+ 0
- 40
conf/nginx.conf View File

@@ -1,40 +0,0 @@
1
-server {
2
-    listen 80;
3
-    listen 443 default_server ssl;
4
-
5
-    ssl_certificate /var/sites/ianonavy.com/ssl/unified.crt;
6
-    ssl_certificate_key /var/sites/ianonavy.com/ssl/ssl-decrypted.key;
7
-
8
-    server_name *.ianonavy.com ianonavy.com www.ianonavy.com;
9
-
10
-    access_log /var/log/nginx/ianonavy.access.log;
11
-    error_log /var/log/nginx/ianonavy.error.log;
12
-
13
-    if ($host != 'ianonavy.com') {
14
-         rewrite  ^/(.*)$  https://ianonavy.com/$1  permanent;
15
-    }
16
-
17
-    root /var/sites/ianonavy.com/www;
18
-
19
-    location = /robots.txt {
20
-        alias /var/www/robots/all/robots.txt;
21
-    }
22
- 
23
-    location /static/ { # STATIC_URL
24
-        alias /var/sites/ianonavy.com/www/src/static/; # STATIC_ROOT
25
-        expires off;
26
-    }
27
-
28
-    location = /google9677fb7678857b96.html {
29
-        rewrite ^/(.*) $1;
30
-        return 200 "google-site-verification: google9677fb7678857b96.html";
31
-    }
32
-
33
-    location / { try_files $uri @ianonavy; }
34
-    location @ianonavy {
35
-        include fastcgi_params;
36
-        fastcgi_param PATH_INFO $fastcgi_script_name;
37
-        fastcgi_param SCRIPT_NAME "";
38
-        fastcgi_pass unix:/tmp/ianonavy-fcgi.sock;
39
-    }
40
-}

+ 0
- 24
conf/supervisord.conf View File

@@ -1,24 +0,0 @@
1
-[fcgi-program:ianonavy]
2
-command=/var/sites/ianonavy.com/www/src/ianonavy.fcgi
3
-socket=unix:///tmp/ianonavy-fcgi.sock
4
-process_name=%(program_name)s_%(process_num)02d
5
-directory=/var/sites/ianonavy.com/www/src
6
-environment=PATH="/var/sites/ianonavy.com/www/bin"
7
-numprocs=5
8
-priority=999
9
-autostart=true
10
-autorestart=true
11
-startsecs=1
12
-startretries=3
13
-exitcodes=0,2
14
-stopsignal=QUIT
15
-stopwaitsecs=10
16
-user=app
17
-redirect_stderr=true
18
-stdout_logfile=/tmp/ianonavy.log
19
-stdout_logfile_maxbytes=1MB
20
-stdout_logfile_backups=10
21
-stderr_logfile=/tmp/ianonavy_err.log
22
-stderr_logfile_maxbytes=1MB
23
-stderr_logfile_backups=10
24
-

+ 2
- 0
ianonavy/.gitignore View File

@@ -0,0 +1,2 @@
1
+_site
2
+.sass-cache

+ 17
- 0
ianonavy/_config.yml View File

@@ -0,0 +1,17 @@
1
+# Site settings
2
+title: Ian Adam Naval
3
+subtitle: Software engineer and sysadmin
4
+email: ianonavy@gmail.com
5
+keybase: ianonavy
6
+description: >
7
+  Software engineer and system administrator. Really big fan of potatoes.
8
+baseurl: ""
9
+url: "http://ianonavy.com"
10
+gravatar_url: "http://gravatar.com/avatar/2a59ffe419aca97636d74d0b4692dfcb"
11
+code_url: "https://git.ianonavy.com/explore"
12
+resume_url: "http://files.ianonavy.com/resume.pdf"
13
+twitter_username: ianonavy
14
+github_username:  ianonavy
15
+
16
+# Build settings
17
+markdown: kramdown

+ 54
- 0
ianonavy/_includes/footer.html View File

@@ -0,0 +1,54 @@
1
+<footer class="site-footer">
2
+
3
+  <div class="wrapper">
4
+
5
+    <div class="footer-col-wrapper">
6
+      <div class="footer-col  footer-col-1">
7
+        <ul class="contact-list">
8
+          <li>{{ site.title }}</li>
9
+          <li><a href="mailto:{{ site.email }}">{{ site.email }}</a></li>
10
+          <li><a href="https://keybase.io/{{ site.keybase }}">keybase.io/{{ site.keybase }}</a></li>
11
+        </ul>
12
+      </div>
13
+
14
+      <div class="footer-col  footer-col-2">
15
+        <ul class="social-media-list">
16
+          {% if site.github_username %}
17
+          <li>
18
+            <a href="https://github.com/{{ site.github_username }}">
19
+              <span class="icon  icon--github">
20
+                <svg viewBox="0 0 16 16">
21
+                  <path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/>
22
+                </svg>
23
+              </span>
24
+
25
+              <span class="username">{{ site.github_username }}</span>
26
+            </a>
27
+          </li>
28
+          {% endif %}
29
+
30
+          {% if site.twitter_username %}
31
+          <li>
32
+            <a href="https://twitter.com/{{ site.twitter_username }}">
33
+              <span class="icon  icon--twitter">
34
+                <svg viewBox="0 0 16 16">
35
+                  <path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809
36
+                  c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/>
37
+                </svg>
38
+              </span>
39
+
40
+              <span class="username">{{ site.twitter_username }}</span>
41
+            </a>
42
+          </li>
43
+          {% endif %}
44
+        </ul>
45
+      </div>
46
+
47
+      <div class="footer-col  footer-col-3">
48
+        <p class="text">{{ site.description }}</p>
49
+      </div>
50
+    </div>
51
+
52
+  </div>
53
+
54
+</footer>

+ 12
- 0
ianonavy/_includes/head.html View File

@@ -0,0 +1,12 @@
1
+<head>
2
+  <meta charset="utf-8">
3
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
4
+  <meta name="viewport" content="width=device-width, initial-scale=1">
5
+
6
+  <title>{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}</title>
7
+  <meta name="description" content="{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description }}{% endif %}">
8
+
9
+  <link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}">
10
+  <link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}">
11
+  <link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" />
12
+</head>

+ 34
- 0
ianonavy/_includes/header.html View File

@@ -0,0 +1,34 @@
1
+<header class="site-header">
2
+
3
+  <div class="wrapper">
4
+
5
+    <div class="site-header-title">
6
+      <a href="{{ site.baseurl }}/"><img class="site-avatar" src="{{ site.gravatar_url }}" alt="Photo of {{ site.title }}"></a>
7
+      <a class="site-title" href="{{ site.baseurl }}/">{{ site.title }}</a>
8
+    </div>
9
+
10
+    <nav class="site-nav">
11
+      <a href="#" class="menu-icon">
12
+        <svg viewBox="0 0 18 15">
13
+          <path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
14
+          <path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
15
+          <path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
16
+        </svg>
17
+      </a>
18
+
19
+      <div class="trigger">
20
+        <a class="page-link" href="{{ site.baseurl }}/">Blog</a>
21
+        {% for page in site.pages %}
22
+          {% if page.title %}
23
+          <a class="page-link" href="{{ page.url | prepend: site.baseurl }}">{{ page.title }}</a>
24
+          {% endif %}
25
+        {% endfor %}
26
+        <a class="page-link" href="{{ site.code_url }}">Code</a>
27
+        {% if site.github_username %}<a class="page-link" href="https://github.com/{{ site.github_username }}/">GitHub</a>{% endif %}
28
+        {% if site.resume_url %}<a class="page-link" href="{{ site.resume_url }}">Résumé</a>{% endif %}
29
+      </div>
30
+    </nav>
31
+
32
+  </div>
33
+
34
+</header>

+ 20
- 0
ianonavy/_layouts/default.html View File

@@ -0,0 +1,20 @@
1
+<!DOCTYPE html>
2
+<html>
3
+
4
+  {% include head.html %}
5
+
6
+  <body>
7
+
8
+    {% include header.html %}
9
+
10
+    <div class="page-content">
11
+      <div class="wrapper">
12
+        {{ content }}
13
+      </div>
14
+    </div>
15
+
16
+    {% include footer.html %}
17
+
18
+  </body>
19
+
20
+</html>

+ 14
- 0
ianonavy/_layouts/page.html View File

@@ -0,0 +1,14 @@
1
+---
2
+layout: default
3
+---
4
+<div class="post">
5
+
6
+  <header class="post-header">
7
+    <h1 class="post-title">{{ page.title }}</h1>
8
+  </header>
9
+
10
+  <article class="post-content">
11
+    {{ content }}
12
+  </article>
13
+
14
+</div>

+ 15
- 0
ianonavy/_layouts/post.html View File

@@ -0,0 +1,15 @@
1
+---
2
+layout: default
3
+---
4
+<div class="post">
5
+
6
+  <header class="post-header">
7
+    <h1 class="post-title">{{ page.title }}</h1>
8
+    <p class="post-meta">{{ page.date | date: "%b %-d, %Y" }}{% if page.author %} • {{ page.author }}{% endif %}{% if page.meta %} • {{ page.meta }}{% endif %}</p>
9
+  </header>
10
+
11
+  <article class="post-content">
12
+    {{ content }}
13
+  </article>
14
+
15
+</div>

+ 205
- 0
ianonavy/_sass/_base.scss View File

@@ -0,0 +1,205 @@
1
+/**
2
+ * Reset some basic elements
3
+ */
4
+body, h1, h2, h3, h4, h5, h6,
5
+p, blockquote, pre, hr,
6
+dl, dd, ol, ul, figure {
7
+    margin: 0;
8
+    padding: 0;
9
+}
10
+
11
+
12
+
13
+/**
14
+ * Basic styling
15
+ */
16
+body {
17
+    font-family: $base-font-family;
18
+    font-size: $base-font-size;
19
+    line-height: $base-line-height;
20
+    font-weight: 300;
21
+    color: $text-color;
22
+    background-color: $background-color;
23
+    -webkit-text-size-adjust: 100%;
24
+}
25
+
26
+
27
+
28
+/**
29
+ * Set `margin-bottom` to maintain vertical rhythm
30
+ */
31
+h1, h2, h3, h4, h5, h6,
32
+p, blockquote, pre,
33
+ul, ol, dl, figure,
34
+%vertical-rhythm {
35
+    margin-bottom: $spacing-unit / 2;
36
+}
37
+
38
+
39
+
40
+/**
41
+ * Images
42
+ */
43
+img {
44
+    max-width: 100%;
45
+    vertical-align: middle;
46
+}
47
+
48
+
49
+
50
+/**
51
+ * Figures
52
+ */
53
+figure > img {
54
+    display: block;
55
+}
56
+
57
+figcaption {
58
+    font-size: $small-font-size;
59
+}
60
+
61
+
62
+
63
+/**
64
+ * Lists
65
+ */
66
+ul, ol {
67
+    margin-left: $spacing-unit;
68
+}
69
+
70
+li {
71
+    > ul,
72
+    > ol {
73
+         margin-bottom: 0;
74
+    }
75
+}
76
+
77
+
78
+
79
+/**
80
+ * Headings
81
+ */
82
+h1, h2, h3, h4, h5, h6 {
83
+    font-weight: 300;
84
+}
85
+
86
+
87
+
88
+/**
89
+ * Links
90
+ */
91
+a {
92
+    color: $brand-color;
93
+    text-decoration: none;
94
+
95
+    &:visited {
96
+        color: darken($brand-color, 15%);
97
+    }
98
+
99
+    &:hover {
100
+        color: $text-color;
101
+        text-decoration: underline;
102
+    }
103
+}
104
+
105
+
106
+
107
+/**
108
+ * Blockquotes
109
+ */
110
+blockquote {
111
+    color: $grey-color;
112
+    border-left: 4px solid $grey-color-light;
113
+    padding-left: $spacing-unit / 2;
114
+    font-size: 18px;
115
+    letter-spacing: -1px;
116
+    font-style: italic;
117
+
118
+    > :last-child {
119
+        margin-bottom: 0;
120
+    }
121
+}
122
+
123
+
124
+
125
+/**
126
+ * Code formatting
127
+ */
128
+pre,
129
+code {
130
+    font-size: 15px;
131
+    border: 1px solid $grey-color-light;
132
+    border-radius: 3px;
133
+    background-color: #252525;
134
+    color: #f8f8f2;
135
+}
136
+
137
+code {
138
+    padding: 1px 5px;
139
+}
140
+
141
+pre {
142
+    padding: 8px 12px;
143
+    overflow-x: scroll;
144
+
145
+    > code {
146
+        border: 0;
147
+        padding-right: 0;
148
+        padding-left: 0;
149
+    }
150
+}
151
+
152
+
153
+
154
+/**
155
+ * Wrapper
156
+ */
157
+.wrapper {
158
+    max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));
159
+    max-width:         calc(#{$content-width} - (#{$spacing-unit} * 2));
160
+    margin-right: auto;
161
+    margin-left: auto;
162
+    padding-right: $spacing-unit;
163
+    padding-left: $spacing-unit;
164
+    @extend %clearfix;
165
+
166
+    @include media-query($on-laptop) {
167
+        max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));
168
+        max-width:         calc(#{$content-width} - (#{$spacing-unit}));
169
+        padding-right: $spacing-unit / 2;
170
+        padding-left: $spacing-unit / 2;
171
+    }
172
+}
173
+
174
+
175
+
176
+/**
177
+ * Clearfix
178
+ */
179
+%clearfix {
180
+
181
+    &:after {
182
+        content: "";
183
+        display: table;
184
+        clear: both;
185
+    }
186
+}
187
+
188
+
189
+
190
+/**
191
+ * Icons
192
+ */
193
+.icon {
194
+
195
+    > svg {
196
+        display: inline-block;
197
+        width: 16px;
198
+        height: 16px;
199
+        vertical-align: middle;
200
+
201
+        path {
202
+            fill: $grey-color;
203
+        }
204
+    }
205
+}

+ 295
- 0
ianonavy/_sass/_layout.scss View File

@@ -0,0 +1,295 @@
1
+/**
2
+ * Site header
3
+ */
4
+.site-header .wrapper {
5
+    display: flex;
6
+    justify-content: space-between;
7
+    align-items: center;
8
+}
9
+
10
+.site-header-title {
11
+    display: flex;
12
+    align-items: center;
13
+}
14
+
15
+.site-avatar {
16
+    float: left;
17
+    border-radius: 8px;
18
+    margin: $spacing-unit $spacing-unit $spacing-unit 0;
19
+}
20
+
21
+.site-header {
22
+    border-top: 5px solid $grey-color-dark;
23
+    min-height: 56px;
24
+
25
+    // Positioning context for the mobile navigation icon
26
+    position: relative;
27
+}
28
+
29
+.site-title {
30
+    font-size: 26px;
31
+    line-height: 56px;
32
+    letter-spacing: -1px;
33
+    margin-bottom: 0;
34
+    float: left;
35
+
36
+    &:hover {
37
+        color: $blue-color;
38
+        text-decoration: none;
39
+    }
40
+
41
+    &,
42
+    &:visited {
43
+        color: $grey-color-dark;
44
+    }
45
+}
46
+
47
+.site-nav {
48
+    float: right;
49
+    line-height: 56px;
50
+
51
+    .menu-icon {
52
+        display: none;
53
+    }
54
+
55
+    .page-link {
56
+        color: $text-color;
57
+        line-height: $base-line-height;
58
+
59
+        // Gaps between nav items, but not on the first one
60
+        &:not(:first-child) {
61
+            margin-left: 20px;
62
+        }
63
+    }
64
+
65
+    @include media-query($on-palm) {
66
+        position: absolute;
67
+        top: 9px;
68
+        right: 30px;
69
+        background-color: $background-color;
70
+        border: 1px solid $grey-color-light;
71
+        border-radius: 5px;
72
+        text-align: right;
73
+
74
+        .menu-icon {
75
+            display: block;
76
+            float: right;
77
+            width: 36px;
78
+            height: 26px;
79
+            line-height: 0;
80
+            padding-top: 10px;
81
+            text-align: center;
82
+
83
+            > svg {
84
+                width: 18px;
85
+                height: 15px;
86
+
87
+                path {
88
+                    fill: $grey-color-dark;
89
+                }
90
+            }
91
+        }
92
+
93
+        .trigger {
94
+            clear: both;
95
+            display: none;
96
+        }
97
+
98
+        &:hover .trigger {
99
+            display: block;
100
+            padding-bottom: 5px;
101
+        }
102
+
103
+        .page-link {
104
+            display: block;
105
+            padding: 5px 10px;
106
+        }
107
+    }
108
+}
109
+
110
+
111
+
112
+/**
113
+ * Site footer
114
+ */
115
+.site-footer {
116
+    border-top: 1px solid $grey-color-light;
117
+    padding: $spacing-unit 0;
118
+}
119
+
120
+.footer-heading {
121
+    font-size: 18px;
122
+    margin-bottom: $spacing-unit / 2;
123
+}
124
+
125
+.contact-list,
126
+.social-media-list {
127
+    list-style: none;
128
+    margin-left: 0;
129
+}
130
+
131
+.footer-col-wrapper {
132
+    font-size: 15px;
133
+    color: $grey-color;
134
+    margin-left: -$spacing-unit / 2;
135
+    @extend %clearfix;
136
+}
137
+
138
+.footer-col {
139
+    float: left;
140
+    margin-bottom: $spacing-unit / 2;
141
+    padding-left: $spacing-unit / 2;
142
+}
143
+
144
+.footer-col-1 {
145
+    width: -webkit-calc(35% - (#{$spacing-unit} / 2));
146
+    width:         calc(35% - (#{$spacing-unit} / 2));
147
+}
148
+
149
+.footer-col-2 {
150
+    width: -webkit-calc(20% - (#{$spacing-unit} / 2));
151
+    width:         calc(20% - (#{$spacing-unit} / 2));
152
+}
153
+
154
+.footer-col-3 {
155
+    width: -webkit-calc(45% - (#{$spacing-unit} / 2));
156
+    width:         calc(45% - (#{$spacing-unit} / 2));
157
+}
158
+
159
+@include media-query($on-laptop) {
160
+    .footer-col-1,
161
+    .footer-col-2 {
162
+        width: -webkit-calc(50% - (#{$spacing-unit} / 2));
163
+        width:         calc(50% - (#{$spacing-unit} / 2));
164
+    }
165
+
166
+    .footer-col-3 {
167
+        width: -webkit-calc(100% - (#{$spacing-unit} / 2));
168
+        width:         calc(100% - (#{$spacing-unit} / 2));
169
+    }
170
+}
171
+
172
+@include media-query($on-palm) {
173
+    .footer-col {
174
+        float: none;
175
+        width: -webkit-calc(100% - (#{$spacing-unit} / 2));
176
+        width:         calc(100% - (#{$spacing-unit} / 2));
177
+    }
178
+}
179
+
180
+
181
+
182
+/**
183
+ * Page content
184
+ */
185
+.page-content {
186
+    padding: $spacing-unit 0;
187
+}
188
+
189
+.page-heading {
190
+    font-size: 20px;
191
+}
192
+
193
+.post h2 {
194
+    margin: 0;
195
+}
196
+
197
+.post-list {
198
+    margin-left: 0;
199
+    list-style: none;
200
+
201
+    > li {
202
+        margin-bottom: $spacing-unit;
203
+    }
204
+}
205
+
206
+.post-meta {
207
+    display: block;
208
+    font-size: $small-font-size;
209
+    color: $grey-color;
210
+    margin-bottom: $spacing-unit / 2;
211
+}
212
+
213
+.post-link {
214
+    display: block;
215
+    font-size: 24px;
216
+}
217
+
218
+.post-read-more {
219
+    display: block;
220
+    margin: $spacing-unit / 2 0;
221
+}
222
+
223
+
224
+
225
+/**
226
+ * Posts
227
+ */
228
+.post-header {
229
+    margin-bottom: $spacing-unit;
230
+}
231
+
232
+.post-title {
233
+    font-size: 42px;
234
+    letter-spacing: -1px;
235
+    line-height: 1;
236
+
237
+    @include media-query($on-laptop) {
238
+        font-size: 36px;
239
+    }
240
+}
241
+
242
+.post-content {
243
+    margin-bottom: $spacing-unit;
244
+
245
+    h2 {
246
+        font-size: 32px;
247
+
248
+        @include media-query($on-laptop) {
249
+            font-size: 28px;
250
+        }
251
+    }
252
+
253
+    h3 {
254
+        font-size: 26px;
255
+
256
+        @include media-query($on-laptop) {
257
+            font-size: 22px;
258
+        }
259
+    }
260
+
261
+    h4 {
262
+        font-size: 20px;
263
+
264
+        @include media-query($on-laptop) {
265
+            font-size: 18px;
266
+        }
267
+    }
268
+}
269
+
270
+
271
+
272
+/**
273
+ * Projects
274
+ */
275
+.projects-project {
276
+    display: block;
277
+    clear: both;
278
+    border-bottom: 1px #ccc dotted;
279
+    min-height: 240px;
280
+    padding: $spacing-unit 0;
281
+
282
+    &:first-child {
283
+        padding-top: 0;
284
+    }
285
+
286
+    &:last-child {
287
+        border: none;
288
+    }
289
+}
290
+
291
+.projects-screenshot {
292
+    float: left;
293
+    margin: 0 $spacing-unit $spacing-unit 0;
294
+    border: 1px #ccc solid;
295
+}

+ 60
- 0
ianonavy/_sass/_syntax-highlighting.scss View File

@@ -0,0 +1,60 @@
1
+.highlight .hll { background-color: #49483e }
2
+.highlight  { background: #272727; color: #f8f8f2 }
3
+.highlight .c { color: #75715e } /* Comment */
4
+.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
5
+.highlight .k { color: #66d9ef } /* Keyword */
6
+.highlight .l { color: #ae81ff } /* Literal */
7
+.highlight .n { color: #f8f8f2 } /* Name */
8
+.highlight .o { color: #f92672 } /* Operator */
9
+.highlight .p { color: #f8f8f2 } /* Punctuation */
10
+.highlight .cm { color: #75715e } /* Comment.Multiline */
11
+.highlight .cp { color: #75715e } /* Comment.Preproc */
12
+.highlight .c1 { color: #75715e } /* Comment.Single */
13
+.highlight .cs { color: #75715e } /* Comment.Special */
14
+.highlight .ge { font-style: italic } /* Generic.Emph */
15
+.highlight .gs { font-weight: bold } /* Generic.Strong */
16
+.highlight .kc { color: #66d9ef } /* Keyword.Constant */
17
+.highlight .kd { color: #66d9ef } /* Keyword.Declaration */
18
+.highlight .kn { color: #f92672 } /* Keyword.Namespace */
19
+.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */
20
+.highlight .kr { color: #66d9ef } /* Keyword.Reserved */
21
+.highlight .kt { color: #66d9ef } /* Keyword.Type */
22
+.highlight .ld { color: #e6db74 } /* Literal.Date */
23
+.highlight .m { color: #ae81ff } /* Literal.Number */
24
+.highlight .s { color: #e6db74 } /* Literal.String */
25
+.highlight .na { color: #a6e22e } /* Name.Attribute */
26
+.highlight .nb { color: #f8f8f2 } /* Name.Builtin */
27
+.highlight .nc { color: #a6e22e } /* Name.Class */
28
+.highlight .no { color: #66d9ef } /* Name.Constant */
29
+.highlight .nd { color: #a6e22e } /* Name.Decorator */
30
+.highlight .ni { color: #f8f8f2 } /* Name.Entity */
31
+.highlight .ne { color: #a6e22e } /* Name.Exception */
32
+.highlight .nf { color: #a6e22e } /* Name.Function */
33
+.highlight .nl { color: #f8f8f2 } /* Name.Label */
34
+.highlight .nn { color: #f8f8f2 } /* Name.Namespace */
35
+.highlight .nx { color: #a6e22e } /* Name.Other */
36
+.highlight .py { color: #f8f8f2 } /* Name.Property */
37
+.highlight .nt { color: #f92672 } /* Name.Tag */
38
+.highlight .nv { color: #f8f8f2 } /* Name.Variable */
39
+.highlight .ow { color: #f92672 } /* Operator.Word */
40
+.highlight .w { color: #f8f8f2 } /* Text.Whitespace */
41
+.highlight .mf { color: #ae81ff } /* Literal.Number.Float */
42
+.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */
43
+.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */
44
+.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */
45
+.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */
46
+.highlight .sc { color: #e6db74 } /* Literal.String.Char */
47
+.highlight .sd { color: #e6db74 } /* Literal.String.Doc */
48
+.highlight .s2 { color: #e6db74 } /* Literal.String.Double */
49
+.highlight .se { color: #ae81ff } /* Literal.String.Escape */
50
+.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */
51
+.highlight .si { color: #e6db74 } /* Literal.String.Interpol */
52
+.highlight .sx { color: #e6db74 } /* Literal.String.Other */
53
+.highlight .sr { color: #e6db74 } /* Literal.String.Regex */
54
+.highlight .s1 { color: #e6db74 } /* Literal.String.Single */
55
+.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */
56
+.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
57
+.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */
58
+.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */
59
+.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */
60
+.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */

+ 15
- 0
ianonavy/about.md View File

@@ -0,0 +1,15 @@
1
+---
2
+layout: page
3
+title: About
4
+permalink: /about/
5
+---
6
+
7
+After studying computer science at [WPI](https://wpi.edu) and graduating in
8
+2015, I started as a Senior Quantitative Software Engineer for
9
+[EverQuote](https://everquote.com) in Cambridge, MA.
10
+
11
+I mostly build Web stuff in Python while eating potato chips, but I do [other
12
+things](https://git.ianonavy.com/explore) too! I compete in CTFs with
13
+[Ba Sing Sec](https://ctftime.org/team/12919) (and formerly with
14
+[Without Proper Instructions](https://ctftime.org/team/5573)), and I am a
15
+huge Marvel Cinematic Universe nerd.

+ 54
- 0
ianonavy/css/main.scss View File

@@ -0,0 +1,54 @@
1
+---
2
+# Only the main Sass file needs front matter (the dashes are enough)
3
+---
4
+@charset "utf-8";
5
+
6
+
7
+
8
+// Our variables
9
+$base-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
10
+$base-font-size:   16px;
11
+$small-font-size:  $base-font-size * 0.875;
12
+$base-line-height: 1.5;
13
+
14
+$spacing-unit:     30px;
15
+
16
+$text-color:       #111;
17
+$background-color: #fdfdfd;
18
+$brand-color:      #2a7ae2;
19
+
20
+$grey-color:       #828282;
21
+$grey-color-light: lighten($grey-color, 40%);
22
+$grey-color-dark:  darken($grey-color, 25%);
23
+
24
+$blue-color:       #222266;
25
+
26
+// Width of the content area
27
+$content-width:    800px;
28
+
29
+$on-palm:          600px;
30
+$on-laptop:        800px;
31
+
32
+
33
+
34
+// Using media queries with like this:
35
+// @include media-query($on-palm) {
36
+//     .wrapper {
37
+//         padding-right: $spacing-unit / 2;
38
+//         padding-left: $spacing-unit / 2;
39
+//     }
40
+// }
41
+@mixin media-query($device) {
42
+    @media screen and (max-width: $device) {
43
+        @content;
44
+    }
45
+}
46
+
47
+
48
+
49
+// Import partials from `sass_dir` (defaults to `_sass`)
50
+@import
51
+        "base",
52
+        "layout",
53
+        "syntax-highlighting"
54
+;

+ 30
- 0
ianonavy/feed.xml View File

@@ -0,0 +1,30 @@
1
+---
2
+layout: null
3
+---
4
+<?xml version="1.0" encoding="UTF-8"?>
5
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
6
+  <channel>
7
+    <title>{{ site.title | xml_escape }}</title>
8
+    <description>{{ site.description | xml_escape }}</description>
9
+    <link>{{ site.url }}{{ site.baseurl }}/</link>
10
+    <atom:link href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" rel="self" type="application/rss+xml"/>
11
+    <pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
12
+    <lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
13
+    <generator>Jekyll v{{ jekyll.version }}</generator>
14
+    {% for post in site.posts limit:10 %}
15
+      <item>
16
+        <title>{{ post.title | xml_escape }}</title>
17
+        <description>{{ post.content | xml_escape }}</description>
18
+        <pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
19
+        <link>{{ post.url | prepend: site.baseurl | prepend: site.url }}</link>
20
+        <guid isPermaLink="true">{{ post.url | prepend: site.baseurl | prepend: site.url }}</guid>
21
+        {% for tag in post.tags %}
22
+        <category>{{ tag | xml_escape }}</category>
23
+        {% endfor %}
24
+        {% for cat in post.categories %}
25
+        <category>{{ cat | xml_escape }}</category>
26
+        {% endfor %}
27
+      </item>
28
+    {% endfor %}
29
+  </channel>
30
+</rss>

BIN
ianonavy/img/feed-icon-14x14.png View File


BIN
ianonavy/img/how2pizza.png View File


src/static/img/mathhammer.png → ianonavy/img/mathhammer.png View File


src/static/img/mirrors.png → ianonavy/img/mirrors.png View File


src/static/img/potatoipsum.png → ianonavy/img/potatoipsum.png View File


src/static/img/sms-fixer.png → ianonavy/img/sms-fixer.png View File


+ 29
- 0
ianonavy/index.html View File

@@ -0,0 +1,29 @@
1
+---
2
+layout: default
3
+---
4
+
5
+<div class="home">
6
+
7
+  {% for post in site.posts %}
8
+  <div class="post">
9
+
10
+    <h2>
11
+      <a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
12
+    </h2>
13
+    <span class="post-meta">{{ post.date | date: "%b %-d, %Y" }}</span>
14
+    <div class="post-content-truncate">
15
+      {% if post.content contains "<!-- more -->" %}
16
+        {{ post.content | split:"<!-- more -->" | first % }}
17
+      {% else %}
18
+        {{ post.content | strip_html | truncatewords:100 }}
19
+      {% endif %}
20
+    </div>
21
+    <a class="post-read-more" href="{{ post.url | prepend: site.baseurl }}">Read More &rarr;</a>
22
+  </div>
23
+  {% else %}
24
+  <p>Nothing to see here! Come back later. :)</p>
25
+  {% endfor %}
26
+
27
+  <a href="{{ "/feed.xml" | prepend: site.baseurl }}"><img src="{{ "/img/feed-icon-14x14.png" | prepend: site.baseurl }}"></a>
28
+
29
+</div>

+ 45
- 0
ianonavy/projects.html View File

@@ -0,0 +1,45 @@
1
+---
2
+layout: page
3
+title: Projects
4
+permalink: /projects/
5
+
6
+projects:
7
+
8
+  - title: How2Pizza
9
+    image: how2pizza.png
10
+    description: Simple tool to help large groups of friends order pizza.
11
+    url: http://how2pizza.com
12
+
13
+  - title: Potato Ipsum
14
+    image: potatoipsum.png
15
+    description: Lorem ipsum for potato fans.
16
+    url: http://potatoipsum.com
17
+
18
+  - title: SMS Fixer
19
+    image: sms-fixer.png
20
+    description: Simple recovery script and Web service to convert Google Voice HTML logs into the Android app <a href="https://play.google.com/store/apps/details?id=com.riteshsahu.SMSBackupRestore&amp;hl=en">SMS Backup &amp; Restore</a>.
21
+    url: http://sms-fixer.ianonavy.com
22
+
23
+  - title: ACM Linux Mirrors
24
+    image: mirrors.png
25
+    description: Friends at WPI wanted to <code>apt-get upgrade</code> and <code>pacman -Syu</code> at lightning speed, so I made it happen.
26
+    url: http://mirrors.acm.wpi.edu/
27
+
28
+  - title: MathHammer 40k
29
+    image: mathhammer.png
30
+    description: Damage stats calculator app for WarHammer 40k I made in high school for my physics teacher. My first paid gig!
31
+    url: <a href="https://play.google.com/store/apps/details?id=com.mathhammer40k.mathhammer&amp;hl=en">Go to site &rarr;</a>
32
+
33
+---
34
+{% for project in page.projects %}
35
+<div class="projects-project">
36
+	<h2>{{ project.title }}</h2>
37
+
38
+	{{ project.image }}
39
+	<img class="projects-screenshot" src="{{ "/img/" | append: project.image | prepend: site.baseurl }}">
40
+
41
+	<p>{{ project.description }}</p>
42
+
43
+	<p><a href="{{ project.url }}">Go to site &rarr;</a></p>
44
+</div>
45
+{% endfor %}

+ 0
- 2
requirements.txt View File

@@ -1,2 +0,0 @@
1
-Flask
2
-flup

+ 0
- 0
src/__init__.py View File


+ 0
- 6
src/ianonavy.fcgi View File

@@ -1,6 +0,0 @@
1
-#!/usr/bin/env python
2
-from flup.server.fcgi import WSGIServer
3
-from server import app
4
-
5
-if __name__ == '__main__':
6
-    WSGIServer(app).run()

+ 0
- 25
src/server.py View File

@@ -1,25 +0,0 @@
1
-#!/usr/bin/env python
2
-
3
-from flask import Flask, render_template
4
-
5
-app = Flask(__name__)
6
-
7
-
8
-@app.route('/')
9
-def home():
10
-    return render_template('index.html')
11
-
12
-
13
-@app.route('/labs')
14
-def labs():
15
-    return render_template('labs.html')
16
-
17
-
18
-@app.route('/code')
19
-def code():
20
-    return render_template('code.html')
21
-
22
-
23
-if __name__ == '__main__':
24
-    app.run(debug=True)
25
-

+ 0
- 54
src/static/css/contact.css View File

@@ -1,54 +0,0 @@
1
-#main {
2
-    text-align: center;
3
-}
4
-
5
-#main h2 {
6
-    text-align: center;
7
-}
8
-
9
-#internet {
10
-    margin: 1em 0 0 0;
11
-    padding: 0;
12
-}
13
-
14
-#social_links {
15
-    margin: 0;
16
-    padding: 6px 0;
17
-}
18
-
19
-#main h3 {
20
-    color: #fff;
21
-}
22
-
23
-#contact_form {
24
-    min-width: 384px;
25
-    max-width: 384px;
26
-    margin: 0 auto;
27
-    padding: 0 0 1em 0;
28
-    text-align: right;
29
-}
30
-
31
-label {
32
-    float: left;
33
-    clear: left;
34
-    margin: 0 16px 0 0;
35
-    width: 102px;
36
-    text-align: right;
37
-}
38
-
39
-input[type='text'] {
40
-    float: left;
41
-    width: 260px;
42
-    margin: 0 0 16px 0;
43
-}
44
-
45
-textarea {
46
-    float: left;
47
-    width: 260px;
48
-    height: 100px;
49
-    margin: 0 0 16px 0;
50
-}
51
-
52
-input[type='submit'] {
53
-    clear: both;
54
-}

+ 0
- 8
src/static/css/error.css View File

@@ -1,8 +0,0 @@
1
-#main {
2
-    text-align: center;
3
-}
4
-
5
-#error-cat {
6
-    margin: 1em;
7
-    width: 240px;
8
-}

+ 0
- 51
src/static/css/placeholder.css View File

@@ -1,51 +0,0 @@
1
-body {
2
-    width: 960px;
3
-    margin: 0 auto;
4
-    background-color: #000;
5
-    color: #0f0;
6
-    font: 2em "Ubuntu Mono", "Bitstream Vera Sans Mono", "Inconsolata", "Courier New", monospace;
7
-}
8
- 
9
-a {
10
-    color: #ff0;
11
-    text-decoration: none;
12
-}
13
- 
14
-a:hover {
15
-    color: #ff0;
16
-    text-decoration: underline;
17
-}
18
- 
19
-a:visited {
20
-    color: #ff0;
21
-}
22
- 
23
-#header {
24
-    text-align: center;
25
-    margin-top: 1em;
26
-}
27
- 
28
-#header h1 {
29
-    display: inline;
30
-}
31
- 
32
-#logo {
33
-    width: 128px;
34
-    height: 128px;
35
-    display: inline;
36
-    vertical-align: middle;
37
-}
38
- 
39
-#main {
40
-    text-align: center;
41
-}
42
- 
43
-#footer {
44
-    position: fixed;
45
-    bottom: 0;
46
-    font-size: .5em;
47
-}
48
-
49
-.hidden {
50
-    display: none;
51
-}

+ 0
- 95
src/static/css/portfolio.css View File

@@ -1,95 +0,0 @@
1
-.center-wrapper {
2
-  display: block;
3
-  text-align: center; }
4
-  .center-wrapper .center-wrapped {
5
-    display: inline-block;
6
-    vertical-align: top; }
7
-
8
-.about-section {
9
-  display: inline-block;
10
-  margin: 0 24px 0;
11
-  width: 312px;
12
-  text-align: left;
13
-  vertical-align: top; }
14
-
15
-#me {
16
-  width: 280px; }
17
-
18
-.technology-list {
19
-  justify-content: space-around; }
20
-
21
-.technology {
22
-  max-height: 48px;
23
-  margin: 2px; }
24
-
25
-#resume {
26
-  text-align: center; }
27
-
28
-#portfolio-items {
29
-  max-width: 1320px;
30
-  margin: 0 auto; }
31
-
32
-.portfolio-item {
33
-  margin: 16px;
34
-  padding: 16px;
35
-  border-radius: 4px;
36
-  width: 296px;
37
-  text-align: center;
38
-  background-color: #e8e8e8;
39
-  color: #000;
40
-  box-shadow: 2px 2px 10px #0F0907;
41
-  flex: 1 0 auto; }
42
-  .portfolio-item p {
43
-    margin: 0;
44
-    font-size: .8em; }
45
-
46
-/* iPhone */
47
-@media only screen and (min-device-width: 320px) and (max-device-width: 568px) {
48
-  #header {
49
-    font-size: .8em; }
50
-
51
-  .section {
52
-    padding: 8px; }
53
-
54
-  .about-section {
55
-    margin: 0;
56
-    max-width: 288px; }
57
-
58
-  .about-section ul {
59
-    padding: 0;
60
-    list-style: none; }
61
-
62
-  .portfolio-items {
63
-    padding: 0; }
64
-
65
-  .portfolio-item {
66
-    margin: 8px 0 0;
67
-    width: 256px; }
68
-
69
-  .technology-list img {
70
-    width: 100%; }
71
-
72
-  #calendar, #calendar-label {
73
-    display: none; } }
74
-.screenshot {
75
-  margin: 0;
76
-  width: 100%;
77
-  border: 1px #ddd solid; }
78
-
79
-#calendar {
80
-  width: 100%;
81
-  max-width: 1320px;
82
-  height: 480px;
83
-  border: 0; }
84
-
85
-/* Force image on its own line for two-column layout */
86
-@media only screen and (min-width: 691px) and (max-width: 1054px) {
87
-  #me {
88
-    display: block;
89
-    margin: 0 auto; } }
90
-/* Fix spacing for one- and two- column layout */
91
-@media only screen and (max-width: 1054px) {
92
-  .about-section {
93
-    margin-top: 16px; } }
94
-.cheeky-aside {
95
-  font-size: .5em; }

+ 0
- 131
src/static/css/portfolio.scss View File

@@ -1,131 +0,0 @@
1
-.center-wrapper {
2
-    display: block;
3
-    text-align: center;
4
-
5
-    .center-wrapped {
6
-        display: inline-block;
7
-        vertical-align: top;
8
-    }
9
-}
10
-
11
-.about-section {
12
-    display: inline-block;
13
-    margin: 0 24px 0;
14
-    width: 312px;
15
-    text-align: left;
16
-    vertical-align: top;
17
-}
18
-
19
-#me {
20
-    width: 280px;
21
-}
22
-
23
-.technology-list {
24
-    justify-content: space-around;
25
-}
26
-
27
-.technology {
28
-    max-height: 48px;
29
-    margin: 2px;
30
-}
31
-
32
-#resume {
33
-    text-align: center;
34
-}
35
-
36
-#portfolio-items {
37
-    max-width: 1320px;
38
-    margin: 0 auto;
39
-}
40
-
41
-.portfolio-item {
42
-    margin: 16px;
43
-    padding: 16px;
44
-    border-radius: 4px;
45
-    width: 296px;
46
-    text-align: center;
47
-    background-color: #e8e8e8;
48
-    color: #000;
49
-    box-shadow: 2px 2px 10px #0F0907;
50
-    flex: 1 0 auto;
51
-
52
-    p {
53
-        margin: 0;
54
-        font-size: .8em;
55
-    }
56
-}
57
-
58
-/* iPhone */
59
-@media only screen 
60
-and (min-device-width : 320px) 
61
-and (max-device-width : 568px) { 
62
-    #header {
63
-        font-size: .8em;
64
-    }
65
-
66
-    .section {
67
-        padding: 8px;
68
-    }
69
-
70
-    .about-section {
71
-        margin: 0;
72
-        max-width: 288px;
73
-    }
74
-
75
-    .about-section ul {
76
-        padding: 0;
77
-        list-style: none;
78
-    }
79
-
80
-    .portfolio-items {
81
-        padding: 0;
82
-    }
83
-
84
-    .portfolio-item {
85
-        margin: 8px 0 0;
86
-        width: 256px;
87
-    }
88
-
89
-    .technology-list img {
90
-        width: 100%;
91
-    }
92
-
93
-    #calendar, #calendar-label {
94
-        display: none;
95
-    }
96
-}
97
-
98
-.screenshot {
99
-    margin: 0;
100
-    width: 100%;
101
-    border: 1px #ddd solid;
102
-}
103
-
104
-#calendar {
105
-    width: 100%;
106
-    max-width: 1320px;
107
-    height: 480px;
108
-    border: 0;
109
-}
110
-
111
-/* Force image on its own line for two-column layout */
112
-@media only screen 
113
-and (min-width : 691px) 
114
-and (max-width : 1054px) { 
115
-    #me {
116
-        display: block;
117
-        margin: 0 auto;
118
-    }
119
-}
120
-
121
-/* Fix spacing for one- and two- column layout */
122
-@media only screen
123
-and (max-width : 1054px) {
124
-    .about-section {
125
-        margin-top: 16px;
126
-    }
127
-}
128
-
129
-.cheeky-aside {
130
-    font-size: .5em;
131
-}

+ 0
- 108
src/static/css/style.css View File

@@ -1,108 +0,0 @@
1
-/* General styles */
2
-html, body {
3
-    height: 100%;
4
-    margin: 0 auto;
5
-}
6
-
7
-body { font-family: Arial, sans-serif; }
8
-a { text-decoration: none; }
9
-a:hover { text-decoration: underline; }
10
-
11
-h1, h2, h3, h4 {
12
-    margin: 0;
13
-    clear: both;
14
-}
15
-
16
-/* Header */
17
-#header {
18
-    margin: 0;
19
-    padding: 16px 0 0;
20
-    text-align: center;
21
-    background: #222;
22
-    color: #0f0;
23
-    font-family: Arial, sans-serif;
24
-}
25
-
26
-#name {
27
-    margin: 0;    
28
-    color: #fff;
29
-    font-size: 2.5em;
30
-}
31
-
32
-#tagline {
33
-    margin: 0 auto;
34
-    padding: 0 0 8px;
35
-    font-size: .9em;
36
-    color: #72bbfa;
37
-    border-bottom: 1px solid #fff;
38
-    width: 304px;
39
-}
40
-
41
-
42
-/* Navigation */
43
-#nav {
44
-    width: 100%;
45
-    margin: 8px 0 0;
46
-    padding: 0;
47
-    text-align: center;
48
-}
49
-
50
-#nav ul {
51
-    clear: both;
52
-    display: inline-block;
53
-    margin: 0;
54
-    padding: 0;
55
-}
56
-
57
-#nav li {
58
-    /*width: 61px;*/
59
-    margin: 0;
60
-    display: inline-block;
61
-    list-style: none;
62
-    padding: 4px 8px;
63
-    background-color: #fff;
64
-    border-radius: 2px 2px 0 0;
65
-}
66
-
67
-#nav a {
68
-    color: #428bca;
69
-}
70
-
71
-/* Main body */
72
-.section {
73
-    padding: 16px;
74
-}
75
-
76
-.section:nth-child(even) {
77
-    background-color: #222;
78
-    color: #fff;
79
-}
80
-
81
-.button {
82
-    display: inline-block;
83
-    margin: 0;
84
-    padding: 8px;
85
-
86
-    background-color: #428bca;
87
-    border-color: #285e8e;
88
-    border-radius: 2px;
89
-
90
-    color: #fff;
91
-    text-decoration: none;
92
-}
93
-
94
-.button:hover {
95
-    background-color: #3276b1;
96
-    border-color: #284e8e;
97
-    text-decoration: none;
98
-}
99
-
100
-/* Footer */
101
-#footer {
102
-    margin: 0;
103
-    padding: .5em;
104
-    clear: both;
105
-    background: #222;
106
-    color: #fff;
107
-    font-size: 1em;
108
-}

+ 0
- 34
src/static/css/test.scss View File

@@ -1,34 +0,0 @@
1
-@supports not (flex-wrap: wrap) {
2
-  .Grid--ffMultilineSupport {
3
-    display: block;
4
-    & > .Grid-cell {
5
-      display: inline-block;
6
-      vertical-align: top;
7
-    }
8
-  }
9
-  @mixin grid-sizing($name: "") {
10
-    $sep: "-";
11
-    @if $name == "" {
12
-      $sep: "";
13
-    }
14
-    .#{$name}#{$sep}Grid--full {
15
-      display: block;
16
-      & > .Grid-cell {
17
-        display: block;
18
-      }
19
-    }
20
-    .#{$name}#{$sep}Grid--fit,
21
-    .#{$name}#{$sep}Grid--1of2,
22
-    .#{$name}#{$sep}Grid--1of3,
23
-    .#{$name}#{$sep}Grid--1of4 {
24
-      display: flex;
25
-    }
26
-  }
27
-  @include grid-sizing();
28
-  @each $breakpoint in $breakpoints {
29
-    $name: nth($breakpoint, 2);
30
-    @include breakpoint($name) {
31
-      @include grid-sizing($name);
32
-    }
33
-  }
34
-}

BIN
src/static/favicon.ico View File


+ 0
- 1
src/static/google9677fb7678857b96.html View File

@@ -1 +0,0 @@
1
-google-site-verification: google9677fb7678857b96.html

BIN
src/static/img/404cat.jpg View File


BIN
src/static/img/acm.png View File


BIN
src/static/img/competition.png View File


BIN
src/static/img/dark_stripes.png View File


BIN
src/static/img/ian-280.jpg View File


BIN
src/static/img/ian-original.jpg View File


BIN
src/static/img/icons/16/500px.png View File


BIN
src/static/img/icons/16/aboutme.png View File


BIN
src/static/img/icons/16/addthis.png View File


BIN
src/static/img/icons/16/amazon.png View File


BIN
src/static/img/icons/16/aol.png View File


BIN
src/static/img/icons/16/app-store-2.png View File


BIN
src/static/img/icons/16/app-store.png View File


BIN
src/static/img/icons/16/apple.png View File


BIN
src/static/img/icons/16/bebo.png View File


BIN
src/static/img/icons/16/bing.png View File


BIN
src/static/img/icons/16/blip.png View File


BIN
src/static/img/icons/16/blogger.png View File


BIN
src/static/img/icons/16/button-blue.png View File


BIN
src/static/img/icons/16/button-green.png View File


BIN
src/static/img/icons/16/button-light-blue.png View File


BIN
src/static/img/icons/16/button-orange.png View File


BIN
src/static/img/icons/16/button-red.png View File


BIN
src/static/img/icons/16/button-white.png View File


BIN
src/static/img/icons/16/button-yellow.png View File


BIN
src/static/img/icons/16/coroflot.png View File


BIN
src/static/img/icons/16/daytum.png View File


BIN
src/static/img/icons/16/delicious.png View File


BIN
src/static/img/icons/16/design-bump.png View File


BIN
src/static/img/icons/16/digg.png View File


BIN
src/static/img/icons/16/dopplr.png View File


BIN
src/static/img/icons/16/dribbble.png View File


BIN
src/static/img/icons/16/drupal.png View File


BIN
src/static/img/icons/16/ebay.png View File


BIN
src/static/img/icons/16/ember.png View File


BIN
src/static/img/icons/16/etsy.png View File


BIN
src/static/img/icons/16/facebook.png View File


BIN
src/static/img/icons/16/feedburner.png View File


BIN
src/static/img/icons/16/flickr.png View File


BIN
src/static/img/icons/16/foodspotting.png View File


BIN
src/static/img/icons/16/forrst.png View File


BIN
src/static/img/icons/16/foursquare.png View File


BIN
src/static/img/icons/16/friendfeed.png View File


BIN
src/static/img/icons/16/friendster.png View File


BIN
src/static/img/icons/16/gdgt.png View File


BIN
src/static/img/icons/16/github.png View File


BIN
src/static/img/icons/16/google-buzz.png View File


BIN
src/static/img/icons/16/google-plus-black.png View File


BIN
src/static/img/icons/16/google-plus.png View File


BIN
src/static/img/icons/16/google-talk.png View File


BIN
src/static/img/icons/16/google.png View File


BIN
src/static/img/icons/16/gowalla-2.png View File


BIN
src/static/img/icons/16/gowalla.png View File


BIN
src/static/img/icons/16/grooveshark.png View File


BIN
src/static/img/icons/16/heart.png View File


BIN
src/static/img/icons/16/hyves.png View File


BIN
src/static/img/icons/16/icondock.png View File


BIN
src/static/img/icons/16/icq.png View File


BIN
src/static/img/icons/16/identi.png View File


BIN
src/static/img/icons/16/imessage.png View File


BIN
src/static/img/icons/16/instagram.png View File


+ 0
- 0
src/static/img/icons/16/itune.png View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save