(978)-846-2834
LIAM DONAHER
SKILLS
JavaScript | TypeScript | HTML | CSS | Sass | React | Node | Express | Webpack | PostgreSQL | MongoDB/NoSQL
EXPERIENCE
Software Engineering | Reactime (contributor to open source dev tool maintained by OSLabs)
dec 2023 - jan 2024
- Used Webpack’s hot module reloading in watch mode when testing our chrome extension to near-instantly refresh and review updates
- Controlled theme with Materials UI and Sass to allow for global color variables and an organized nested approach to styling
- Utilized React Fiber to reliably inject our own chrome extension’s script into any react site and locally save React state data
- Used VisX and D3 as libraries for their ready-made code to build node trees. Refactored existing code to not have overlapping nodes
- Developed modules in TypeScript to allow for type-checking before runtime and ensure variables and functions had expected return values
Landscape Architecture | Stimson Studio
- Used AutoCAD, Rhino, and Adobe Creative Suite to design University campus masterplan projects throughout the Northeast
- Built custom scripts in the language Grasshopper which use parametric inputs to assist in building complex generative 3d models
SOFTWARE ENGINEERING PROJECTS
Leebo.io (website for visualizing overlaid GPS routes recorded with excercise-tracking app Strava)
- Created a Single Page App centered around a Mapbox component that can display GPS routes fetched from the Strava API
2019 - 2023
mar 2024
- Currently functioning as coding sandbox to experiment with UI/UX features like animated routes and displaying other kinds of GeoJSON data
Turn Off My Lamp (website that allows users to remotely control my smart lamp)
- Utilized Firebase due to serverless architecture and ability to create a live snapshot link between each client and the Firestore database
- Accessed my smart lamp’s API through a proxy server that intercepts traffic from my phone’s smart home app
GigaWattMap (website for comparing visualized renewable energy generation data between states)
- Used React to create a single-page app and allow for component-based html page building and easy debugging
- Used Redux to manage a centralized shared state of all components and to minimize unnecessary re-renders of page elements
- Downloaded a public database to our server to serve as a locally-accessible SQL database to avoid asynchronous calls to an external API
feb 2024
dec 2023
BrewMaster (website for searching for nearby breweries) jan 2024
- Used Authentication to securely save users and passwords and provide custom site components based on previous saved states
- Followed a TDD strategy with Jest to ensure accurate, type-sensitive expected outputs for functions and asynchronous calls to databases and APIs
TALKS / PUBLICATIONS
Reactime - medium article covering our teams open source work dec 2023 - jan 2024
Tech Talk - 15 minute deep dive video presentation about network protocols jan 2024
EDUCATION
State University of New York College of Environmental Science and Forestry - Bachelors of Landscape Architecture may 2019
Codesmith Full-Stack Software Engineering Immersive oct 2023 - jan 2024
INTERESTS
Ceramics - I use the visual language Grasshopper to create scripts that produce custom 3d geometry that I can 3d print and then cast in clay.
Undergraduate Thesis - created a 50-page book summarizing my studies in Copenhagen, Denmark. Would love to go back one day.
Biomimicry Global Design Challenge finalist - built a prototype product for algal bloom phytoremediation. Invited to startup incubator in Panama.
Web Dev Projects
turnoffmylamp
I have a lamp in my bedroom that is plugged into a smart outlet, and it can be controlled remotely by anyone who visits the website (currently hosted at turnoffmylamp.com). Users can leave their name and it will record it alongside the current time and whether they turned the lamp on or off.
Challenges
- Security: I had to be careful to not allow users to directly access my smart home account, so any interaction with the actual smart home API were behind a server I set up to manage those requests. Allowing text input also runs the risk of SQL injection into the database where I store the log of names, and I had to take measures to secure that database.
- Hosting: setting up a cloud server with Amazon AWS to deliver web pages to client browsers was an interesting challenge.
leebo.io
Over the last 5 years or so, I have been recording every walk, run, and bike ride on a GPS tracking app. The sole purpose of this was to eventually make a fun web app that visualized all these routes compiled together into a kind of heatmap. This is currently hosted at leebo.io and is also serving as my personal website as I work on it!
Challenges
- Interfacing: Mapbox was a new library I haven't worked with before, and finding ways to take a response from the Strava API and display it properly on a map was a creative excercise.
- SPA: Since the site was based around a single map, it needed to be a Single Page App and not require re-rendering the page everytime a link was clicked. Keeping data states and visual components organized and seamless in their transitions was very important for the UI experience.
Open Source Project - Reactime
In collaboration with Open Source Labs, I worked alongside a team of 3 in contributing to the open source product Reactime. It is a developer tool that brings the functionality of Redux devtools to React projects - being able to jump forwards and backwards in time to see how the app state changes between any renders.
Our main accomplishments were:
1. Reorganizing the node diagram tab - making the structure of the react project a lot more legible.
2. Restructured stlying of Reactime - color pallete was changed, but the behind-the-scenes organization of theme colors was completely overhauled to put all styling parameters in the same place.
3. Updated Dependecies - downsized from 124 to just 70 dependency packages, and updated the remaining ones to current versions.
For more information, we published a medium article about our work with Reactime: https://medium.com/@liam.donaher/reactimerenovation-updates-coming-in-version-23-037b2ef2a2771
The Reactime extension on the Chrome Web Store: https://chromewebstore.google.com/detail/reactime/ cgibknllccemdnfhfpmjhffpjfeidjga?pli=1
The Github repo: https://github.com/open-source-labs/Reactime
Copenhagen undergraduate thesis project
The landscape architecture program at SUNY-ESF was unique, in that we had a 5th year where an off-campus study was required. I picked enclosure as a topic of study, and chose to go to Copenhagen. This was not affiliated with any Danish university, so we wouldn't be taking any classes. It was purely self-directed, which really allowed us to immerse ourselves in the city and learn how other countries and cultures live (and hopefully apply those lessons to the landscapes we design back in the US). It was the most influential 3 months of my life.
Intimate Enclosure
- A smaller enclosed space
- 5 to 10m wide
- comfortably fits 1 to 3 people
The main purpose of this type of enclosure is security
A person goes here to be separated from the greater landscape, and to be protected from the elements or from the eyes of others. This space fosters a stronger relationship with oneself
Social Enclosure
- A medium sized enclosed space
- 10 to 35m wide
- comfortably fits 10-20 people
The main purpose of this type of enclosure is theater
A person goes here to talk to friends and to be around strangers. Notably less enclosed than an Intimate Enclosure, but allows for greater observation of one's surroundings by sacrificing some security. This space fosters a stronger relationship with others.
2019
read the full book online:
.com/liamdonaher/docs/issuu
I chose to present my thesis in the form of a book. It breaks down what I believe to be the 3 types of enclosed space (see diagrams below), goes into detail about the main elements I thought contributed to a good enclosure, and examines a few case studies of parks in Copenhagen that exemplified those elements.
Monumental Enclosure
- A large space
- 35 to 100m wide
- fits hundreds of people
The main purpose of this type of enclosure is awe
A person goes to this space with the intent of enjoying the landscape for itself, as opposed to just a backdrop for some other activity. This space fosters a stronger relationship with the landscape itself.
Newport, RI residence
We had a great client for this project, who really liked the 3d digital renderings. This allowed us to produce an entire 60 second video, instead of just still images. It was a great multimedia project. Watch at the QR code here:
https://youtu.be/ZyU3XBDYaTI
Hardberger Park Landbridge - San Antonio, TX
I was part of a team that designed a landbridge over a highway in Texas. Both people and animals can cross the landbridge, so we built a pair of blinds to screen visitors and allow them to see the wildlife without being seen themselves. They are made of weathering steel and perforated with a waterjet-cutter in a pattern designed by a local artist.
I was given the opportunity to design how the blind was constructed, and through the design and manufacturing process, I communicated with the local artists, waterjet cutter, steel manufacturer, and contractor to have all of the parts built and shipped to the site.
Perforations in the roof were studied to increase airflow and decrease the structure's weight. Inspired by the surrounding landscape, the following 3 patterns were considered:
SNAKESKIN
SUNFLOWER
CRACKED EARTH
Northeastern University EXP Building - Boston, MA
This building is one of the newest projects on Northeastern's campus. On the 8th floor, a large outdoor deck is proposed, with enough space to support cocktail parties, and enough vegetation to feel like you're enclosed in an alpine garden.
Providence Riverwalk Masterplan- Providence, RI
Under Providence's Unified Vision Plan, the central city plaza (Kennedy Square) and the historic riverwalk area are being redesigned to become a better functioning and connected public space. The new masterplan involves building walkways on stilts over the old riverwalk to avoid flooding during future storm events and allowing accessible travel along the entire waterfront. I spent a week building the 3d model for this huge urban project and also created these illustrative section drawings.
Lasercut topography study models
Lasercut coaster set
DIY plant light
Baffle came with original light housing.
3d printed mount to friction fit between heat sink and baffle.
10W triple LED star and lens.
Cheap heat sink from Ebay. Found a 3d model online with the exact same dimensions. LEDs bolted to heat sink with thermal paste.
Power supply - biggest one I could fit in the housing, in case I wanted to add more LEDs in the future.
3d printed lower mount to hold power supply and LED driver board.
LED driver board with boost + buck functions for precise power draw.
On/Off switch accessed through backside of housing.
Track light housing purchased from facebook marketplace.
Fabric-wrapped power cable feeds through original track light mount to allowed the light to hang from ceiling and also point at an angle.
Every software developer eventually has to go through their microcontroller / raspberry pi era, and I wasn't totally happy with my current plant lights anyway, so I thought it'd fun to make my own. The following are some goals of what I wanted this light to be:
1. Bright enough to grow healthy plants
2. Directional, so I won't be blinded
3. Cheaper than a store-bought light
4. Dimmable
5. Nice looking
Unfortunately, I only accomplished the last goal. This was the first time I ever ventured into the field of hobby electronics, so it also took a little longer than expected to finally finish, but I had a great time building it, and I learned a lot in the process.