Saturday March 25th
As soon as I heard about this project I immediately set to work. Having not fully committed to a single framework, and eager to learn new forms of web development I dived into the deep end of modern web technologies once again. My tech stack is as follows:
Core technologies
Svelte serves as the central frontend framework and handles the content delivered to the browser of viewers
SvelteKit is used for Server Side Rendering (SSR) and acts as a wrapper for Svelte applications akin to Next.js for React. This allows search engines to provide a faster rendering of the site to the user by preloading information on the site in advance.
Firebase is the central backend technology. It handles all the data about the plants
Auth0 is a framework used to authenticate users and verify the identity of those using the app
Developer tools
TailwindCSS allows for predefined css classes and optimization of styling for faster lightweight applications
Typescript to ensure type safety and avoid undefined behavior in edge cases
Vite is a unit testing framework that allows for test-driven development and better productivity
Playwright is used for full end-to-end testing by simulating user inputs and code behavior
Prettier is a tool to enforce code style.
ESLint is a framework for linting - a tool used by developers to check code through the development process while writing the code and even before running the program.
As I delve further into web development I decided to test out a completely new tech stack to embrace the common practices of the industry. From the front end to the back end, I have gained exposure to new frameworks and different approaches to solving the challenges presented by web development.
Pivotally, when designing this test stack I wanted to explore Test Driven Development (TDD) as a new approach to programming. Typically, when writing code, I seldom write tests for the code I am writing and I have noticed that this approach might evade several frustrating dead ends and productivity traps which I have experienced in the past. To facilitate this approach I decided to begin with an initial exploration into the larger frameworks to learn their key functionality and to gain the skills to work within them sufficiently. Then I would meet with my client to compile a set of tests that I would be able to use to ensure that the behavior of my code meets expectations. This type of programming also better fits with the type of programming done by large companies where collaboration is required between large teams. The code produced is also more likely to be stable due to the stricter definition of code behavior throughout the development cycle.
These diverse technologies all combine to facilitate a lightweight, powerful, and blazingly fast web application that I can develop at high code velocities. As I explore more and more avenues of software development, I become more and more engrossed in programming. This project serves as yet another opportunity to learn and grow as a programmer.