I'm a full-stack developer with a passion for front-end web development and typed, functional programming.
Notable Projects
-
Logo Database and Scraper
Pellucid Analytics
Objective: Scrape company logo images from WikiData (RDF-formatted Wikipedia data) and present them in a friendly, searchable web app.
This project was created as a proof-of-concept in about a week.
- Scraper (written in PureScript) makes SPARQL queries to the WikiData service
- Downloaded data is processed and stored in PostgreSQL
- Elm web interface retrieves data via GraphQL and presents a searchable grid of logos
-
Pellucid Analytics Application
Pellucid Analytics
Objective: Make en e-commerce experience for customers wishing to purchase digital charts analyzing financial data.
- The front-end is written in Haxe (compiling to JavaScript)
- Mithril.js is the UI framework
- Users interact with chart options using json-editor
- We developed an in-house component for editing data (FancyTable)
- Admin tooling uses Doom and Lies (similar to React/Redux)
- The back-end manages products, user data, and much more
- Routing uses abe, our custom, strongly typed layer over Express.js
- PostgreSQL holds all of the data
- The front-end is written in Haxe (compiling to JavaScript)
-
FancyTable
Pellucid Analytics
Fancy Table provides a simple spreadsheet-like implementation for Haxe and JavaScript. It supports collapsing rows, nested rows, fixed header rows and columns, and cell editing.
- Cell content is rendered lazily to improve performance
- Content is removed from the DOM when scrolled out of view, to support gigantic tables of data
-
FancySearch
Pellucid Analytics
FancySearch is a typeahead search component written in Haxe, targetting JavaScript/browsers.
- The component manages an internal state using Lies (conceptually similar to Redux)
- It responds to streaming events from the UI
- Suggestions are matched asynchronously
The component can be used with the raw DOM, but it works best when rendering to virtual DOM targets. It has been used in production with Mithril.js and Doom