Planning

Probably the most critical portion of building an application, I use pen, paper, whiteboards, and meandering walks to allow my brain the space to dissect a goal, look at it from as many angles as possible, and organize an approach to tackling it.

Design

Once I'm ready to visualize a project, I use Figma for layout and prototyping. This gives both myself and the client a thorough preview of the product, including user experience and an idea of how the features will work. For bitmap image manipulation I look to Gimp (when on Linux) or Photoshop, and for vector manipulation I stay in Figma if I can, or I look to Inkscape (again, on Linux) or Illustrator.

Front End / Jamstack

I build Single Page Applications with Create React App and Server Side Rendered websites using Next.js. I implement responsive and cross-browser friendly styling with styled-components whenever I can, though I've also used frameworks like Material UI, Ant Design, and Semantic UI. For Jamstack sites, I deploy to Netlify and Vercel (formerly Zeit Now) to take advantage of their global CDNs. I've also used AWS Lambda for serverless functions.

Back End

For full stack applications, I primarily use Node.js, Express, and MySQL (though I've also used MongoDB). I've used OpenAPI / Swagger for API documentation and tape for testing. I deploy to Linux virtual machines on DigitalOcean or AWS, served with NGINX, with TLS certificates through Let's Encrypt.

Tooling

I use Git for version control (via the command line, GitHub, or GitLab). I use feature branches, I write clear and concise commit messages, and I've set up Git Hooks for automated deployment. I use Sublime Text with ESLint and Prettier to ensure code quality.