summaryrefslogtreecommitdiff
path: root/src/pages
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages')
-rw-r--r--src/pages/about.js18
-rw-r--r--src/pages/index.js4
-rw-r--r--src/pages/projects.js165
-rw-r--r--src/pages/work.js16
4 files changed, 117 insertions, 86 deletions
diff --git a/src/pages/about.js b/src/pages/about.js
index c8f050e..7e2c7b0 100644
--- a/src/pages/about.js
+++ b/src/pages/about.js
@@ -1,5 +1,5 @@
import React from 'react'
-import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
+import { FontAwesome } from '../components/font-awesome'
import {
faHeart,
faMap,
@@ -26,7 +26,7 @@ export const skills = [
export const tools = [
`Languages: Expert in TypeScript/JavaScript, fluent in C, working knowledge of Python and Shell`,
- 'Frontend: React, Angular, Ionic, RxJS',
+ 'Frontend: React, Angular, Ionic, RxJS, Redux',
'Infrastructure: Node, Firebase, Google Cloud (Cloud Functions, Pubsub, Stackdriver)',
'Embedded: Linux, Legato, Yocto, AirVantage',
'Automation: TSLint, ESLint, Prettier, clang-format'
@@ -36,7 +36,7 @@ const aboutLists = [
{
header: (
<>
- Values and Ethics <FontAwesomeIcon icon={faHeart} />
+ Values and Ethics <FontAwesome icon={faHeart} />
</>
),
listItems: [
@@ -49,7 +49,7 @@ const aboutLists = [
{
header: (
<>
- Skills and Experience <FontAwesomeIcon icon={faMap} />
+ Skills and Experience <FontAwesome icon={faMap} />
</>
),
listItems: skills
@@ -57,7 +57,7 @@ const aboutLists = [
{
header: (
<>
- Tools <FontAwesomeIcon icon={faWrench} />
+ Tools <FontAwesome icon={faWrench} />
</>
),
listItems: tools
@@ -65,7 +65,7 @@ const aboutLists = [
{
header: (
<>
- Future Learning Ideas <FontAwesomeIcon icon={faFlask} />
+ Future Learning Ideas <FontAwesome icon={faFlask} />
</>
),
listItems: [
@@ -76,7 +76,7 @@ const aboutLists = [
helps me write better code at all levels of abstraction.`,
`Implement TCP from scratch in C (bonus for x86 Assembly). We send a lot of data over the network
so I want to zoom in on how it's done.`,
- `Maybe write my own kernel with some basic threading (RTOS style)?`,
+ `Write my own kernel with some basic threading (RTOS style)?`,
'Reduce the overhead of declarative web primitives (React style API close to the metal).'
]
}
@@ -89,8 +89,8 @@ const personalProps = {
imgUrl: profilePic,
email: (
<p>
- <FontAwesomeIcon icon={faEnvelope} /> nick <em>at</em> nv <em>dot</em>{' '}
- delivery
+ <FontAwesome icon={faEnvelope} size="12px" /> nick <em>at</em> nv{' '}
+ <em>dot</em> delivery
</p>
)
}
diff --git a/src/pages/index.js b/src/pages/index.js
index 26c481c..b872fd8 100644
--- a/src/pages/index.js
+++ b/src/pages/index.js
@@ -1,7 +1,7 @@
import React from 'react'
-import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faPaperPlane } from '@fortawesome/free-solid-svg-icons'
+import { FontAwesome } from '../components/font-awesome'
import Layout from '../components/layout'
import { Splash } from '../components/splash'
@@ -12,7 +12,7 @@ const indexData = {
heroBtnTo: '/about',
heroBtn: (
<>
- Get In Touch <FontAwesomeIcon icon={faPaperPlane} />
+ Get In Touch <FontAwesome icon={faPaperPlane} />
</>
)
}
diff --git a/src/pages/projects.js b/src/pages/projects.js
index 0c55834..77894b5 100644
--- a/src/pages/projects.js
+++ b/src/pages/projects.js
@@ -3,12 +3,11 @@ import React from 'react'
import Layout from '../components/layout'
import { Project } from '../components/project'
-import functional from '../images/functional.png'
import camera from '../images/camera.png'
-import storageService from '../images/storage-service.png'
import gpsMonitor from '../images/gps-monitor.png'
import slask from '../images/slask.png'
-import ie from '../images/ie.png'
+import cnakedTestSuite from '../images/cnaked-test-suite.png'
+import naiveChat from '../images/naive-chat.png'
export const projects = [
{
@@ -16,27 +15,45 @@ export const projects = [
brief:
'A Battlesnake so close to the metal, 6 CVEs have been opened while reading',
date: 'Feb 2019 - Present',
- desc: (
- <p>
- A fast snake where everything is implemented by hand in C to perform a
- fast traversal of all possible game states. The implementation is still
- unfinished but I hope to enter it in the Battlesnake 2020 competition.
- </p>
- ),
- url: '//github.com/nvandoorn/cnaked'
+ url: '//github.com/nvandoorn/cnaked',
+ projectDetails: [
+ {
+ listItems: [
+ 'Prototype for Battlesnake 2019, will be entered in contest in 2020',
+ `Dangerously close to the metal`,
+ `All in on test driven development`,
+ 'Likely to be re-written in Rust'
+ ],
+ images: [
+ {
+ imgUrl: cnakedTestSuite,
+ caption: 'cnaked Test Suite'
+ }
+ ]
+ }
+ ]
},
{
name: 'naive',
brief: 'A naive implementation of a NoSQL database',
date: 'Jan 2019 - Present',
- desc: (
- <p>
- A small realtime NoSQL database that can be used locally or over a
- network. The public interface for this database mimic that of the
- Firebase Realtime Database and data is persisted using a static JSON
- file. For that reason, I do not suggest using this in production.
- </p>
- ),
+ projectDetails: [
+ {
+ listItems: [
+ 'Designed to mimic the Firebase Realtime Database API',
+ 'Written in TypeScript for the browser and Node',
+ 'Code organized as monorepo with independent builds and integration tests',
+ 'Can be used with a local filesystem or remote filesystem',
+ `Persisted in a static JSON file (don't use this in prod)`
+ ],
+ images: [
+ {
+ imgUrl: naiveChat,
+ caption: 'Chat Client Using Naive'
+ }
+ ]
+ }
+ ],
url: '//github.com/nvandoorn/naive',
showOnCv: true
},
@@ -47,7 +64,8 @@ export const projects = [
desc: (
<p>
My home internet performance is consistently below spec and my ISP never
- believes me. Hopefully they will soon. Designed for maximum plug-ability
+ believes me. Hopefully they will soon. Designed for maximum
+ plug-ability.
</p>
),
url: '//github.com/nvandoorn/pipefitter',
@@ -63,7 +81,6 @@ export const projects = [
two. In reality, a simple for loop is better, but I had fun trying this.
</p>
),
- imgUrl: functional,
inProd: true,
url: '//github.com/nvandoorn/functional'
},
@@ -71,7 +88,6 @@ export const projects = [
name: 'Legato Storage Service',
brief: 'Non-volatile time series data storage',
date: 'Jun 2018 - Present',
- imgUrl: storageService,
desc: (
<p>
The Legato Linux framework offers out of the box support for uploading
@@ -86,15 +102,23 @@ export const projects = [
brief:
'Monitor GPS in a separate process to avoid blocking single threaded apps',
date: 'April 2018',
- imgUrl: gpsMonitor,
- desc: (
- <p>
- Instead of managing and synchronizing a thread to monitor GPS location
- on embedded devices, this service asynchronously monitors the GPS
- position and allows users to retrieve it using an inter process API (see
- more about Legato IPC APIs here).
- </p>
- ),
+ projectDetails: [
+ {
+ listItems: [
+ 'Allow single threaded apps to read the latest position without blocking',
+ 'Dynamically poll and cache GPS location based on accuracy',
+ 'Expose GPS API as synchronous methods reading from cache',
+ 'Cache is updated in background using event-loop based timer (much like in JavaScript)'
+ ],
+ images: [
+ {
+ imgUrl: gpsMonitor,
+ caption: 'GPS Monitor with BRNKL App',
+ noShadow: true
+ }
+ ]
+ }
+ ],
inProd: true,
url: '//github.com/brnkl/gps-monitor',
showOnCv: true
@@ -103,35 +127,31 @@ export const projects = [
name: 'CF3 Config App',
brief: 'Automatically configure common settings for CF3 based modules',
date: 'April 2018',
- desc: (
- <p>
- Sierra Wireless offers a range of cellular modules based on a common
- socket with a common set of inputs and outputs.A range of commonly used
- input / output pins and UART connections must be configured by running
- an AT command over a serial connection to the CF3 based modem.Run this
- app once and the CF3 based module will support the full range of GPIO
- pins and UARTs in the Linux userspace.
- </p>
- ),
+ desc: <p>Automatically configure Sierra Wireless CF3 based modules</p>,
inProd: true,
- url: ''
+ url: '//github.com/brnkl/cf3-config'
},
{
name: 'Legato Camera Driver',
brief: 'Support for the VC0706 camera on a Legato based project',
date: 'Nov 2017 - Dec 2017',
- desc: (
- <p>
- The VC0706 camera is one of the only low power remote cameras with an
- open protocol (serial port based).The seller, Adafruit, supplies open
- source drivers implemented in Python and C++ with the purpose of running
- on Arduino based systems. This means a dependency on certain Arduino
- libraries for reading and writing to the serial port. We re-implemented
- the C++ driver in C without the dependence on anything not included in
- Linux (with the exception of a few Legato specific macros).
- </p>
- ),
- imgUrl: camera,
+ projectDetails: [
+ {
+ listItems: [
+ 'Port of an Arduino style driver to Linux',
+ 'Integrated with Sierra Wireless Legato Framework',
+ 'In use at Sierra Wireless and with their customers (see forums)'
+ ],
+ images: [
+ {
+ imgUrl: camera,
+ caption: 'Camera Driver with BRNKL App',
+ noShadow: true
+ }
+ ]
+ }
+ ],
+
inProd: true,
url: '//github.com/brnkl/VC0706-cam-lib',
showOnCv: true
@@ -140,27 +160,30 @@ export const projects = [
name: 'ccss',
brief: 'A slightly more polite variant of CSS',
date: 'Jul 2017',
- links: '',
desc: `ccss transforms the correct spelling of colour to color in your CSS. This was intended
to be part one of a series of awful CSS transforms.`,
- imgUrl: '',
url: '//github.com/nvandoorn/ccss'
},
{
name: 'slask',
brief: 'A lightweight log viewer and server all in one',
date: 'Mar 2017 - Present',
- desc: (
- <p>
- slask is designed to make remote systems debugging easy. During my time
- at Forest Technology Systems (FTS), we worked on a remote weather
- station based on a single board Linux computer. During the early days, I
- spent large amounts of time transferring and filtering log files using a
- mix of <em>scp</em>, <em>grep</em>, and <em>less</em>.
- </p>
- ),
- imgUrl: slask,
- url: '//github.com/nvandoorn/slask'
+ url: '//github.com/nvandoorn/slask',
+ projectDetails: [
+ {
+ listItems: [
+ 'Log server implemented run in Node',
+ 'Log client implemented with React',
+ 'Support for custom configs and custom log parsing'
+ ],
+ images: [
+ {
+ imgUrl: slask,
+ caption: 'slask Client Screenshot'
+ }
+ ]
+ }
+ ]
},
{
name: 'IE Media Queries',
@@ -169,8 +192,14 @@ export const projects = [
desc: `IE Media Queries is a Javascript polyfill for Internet Explorer 8's lack of
media query support. IE8 is more or less dead and unsupported, but I still
enjoyed re-creating unsupported functionality`,
- imgUrl: ie,
url: '//github.com/nvandoorn/IEMediaQueries'
+ },
+ {
+ name: 'times-table-tester',
+ brief: 'Code is easier than mental math',
+ date: 'March 2007',
+ url: '//github.com/nvandoorn/times-table-tester',
+ desc: 'In 6th grade I made command line app to quiz myself on times tables.'
}
]
diff --git a/src/pages/work.js b/src/pages/work.js
index 19cf86c..e33525d 100644
--- a/src/pages/work.js
+++ b/src/pages/work.js
@@ -8,6 +8,7 @@ import brnklAppMap from '../images/brnkl-app-map-iphone.png'
import brnklAppAlerts from '../images/brnkl-app-alerts-iphone.png'
import brnklProduct from '../images/brnkl-product.jpg'
import wpModule from '../images/wp-module.png'
+import raos from '../images/raos.jpg'
export const workHistory = [
{
@@ -44,9 +45,9 @@ export const workHistory = [
{
header: <a href="https://app.brnkl.io"> App</a>,
listItems: [
- 'Implemented with TypeScript, Angular, and RxJS',
+ 'Implemented with TypeScript, Angular, RxJS, and Redux',
'Deployed on iOS, Android, and the web',
- 'Realtime data using RxJS and Firebase Realtime Database',
+ 'Live data using RxJS and Firebase Realtime Database',
'Push alerts implemented over Firebase Cloud Messaging'
],
images: [
@@ -72,7 +73,7 @@ export const workHistory = [
]
},
{
- header: 'Embedded',
+ header: <a href="https://github.com/brnkl">Embedded</a>,
listItems: [
<>
Written in C with the{' '}
@@ -96,7 +97,7 @@ export const workHistory = [
header: 'Production Automation',
listItems: [
'Test circuit boards against a suite of hardware tests',
- 'Automate installtion of latest firmware release for hardware',
+ 'Automate installation of latest firmware release for hardware',
'Automated delivery of diagnostic messages to factory workers',
'Automation of device inventory (e.g collecting board serial numbers)'
],
@@ -112,8 +113,8 @@ export const workHistory = [
desc: (
<p>
Barnacle Systems is a self bootstrapped company working on boat
- monitoring and security. I worked as the sole implementer of the the
- BRNKL app, backend, embedded firmware, and production automation
+ monitoring and security. I worked remotely as the sole implementer of
+ the the BRNKL app, backend, embedded firmware, and production automation
software (with thanks to many open source authors).
</p>
),
@@ -152,7 +153,8 @@ export const workHistory = [
'Implement components of embedded camera product aimed at the fire weather market (FTS RAOS)',
'Automate builds and installs',
'Integrate with user facing software as a service product'
- ]
+ ],
+ images: [{ imgUrl: raos, caption: 'FTS RAOS camera system' }]
}
],
desc: (