Welcome. My name is
Douglas Crawford
and I am a
Full-Stack Web Developer.
Projects
Please Note: Apps may take a sec to spin up.
Invoicer123
Create project invoice PDFs to be downloaded and used for any
purpose, utilizing a simple UI that facilitates the process
with a mobile-first approach.
-
React Router 7, React Hook Form, and jsPDF are used to
implement the invoice creation process and user
authentication
-
Invoice preview is rendered within a React component and
actually generated by jsPDF -- invoice information is
persisted in Postgresql managed through Prisma ORM.
Dairy Free Eats
Rails 8 + React App allowing test Stripe transactions and
order management via GraphQL API and Apollo Client
-
Order products created on Stripe using a test API key,
manage order statuses as a Demo Admin and receive emails
throughout the order status update process.
-
Rails 8 authentication sends JSON responses that are invoked
from React components with routing through React-Router v6.
-
GraphQL API manages database mutation, such as changing
order status through the React Admin Dashboard, with Apollo
GraphQL codegen generating queries to be automatically
imported into React components.
-
Minimum 90% test coverage employing Rspec for request specs,
Capybara for feature integration specs, and Jest/React
Testing Library for comoponent unit tests -- all automated
and performed upon Github pull request and deploy.
Workout Recorder
Rails 7 App that allows workouts to be recorded and analyzed
by Gemini AI
-
Fully implemented using the Rails 7 framework in both the
frontend and backend, with Turbo and StimulusJS on the
frontend to increase interactivity by preventing page
reloads for workout submissions.
-
Google Gemini AI API used to analyze exercises as they are
added to a workout, and later to evaluate the entire workout
based on the exercises that compose it.
-
Users first add a workout, then add exercises to the workout
from a page that feels like an SPA and is constructed with a
mobile-first approach. Rails controller actions manage the
RESTful approach to persisting data, and Turbo allows for
page updates without a full page reload.
-
Users may receive suggested workouts by selecting muscle
groups they wish to target and receiving a Gemini AI chatbot
recommendation for which exercise to perform.
CapApp
Financial investing project using Rails/React/Redux that
allows users to create and maintain dummy stock portfolios.
-
Implemented interactive charts using Recharts for
presentation and Cloud IEX API calls for current data, in
order to provide real-time stock data representations of
stocks and user portfolios.
-
Developed backend API that uses Rails for RESTful HTTP
processes, allowing users to asynchronously store and
retrieve their stock and watchlist data.
-
Create watchlists that are displayed and manipulated in a
dashboard sidebar by using React components that incorporate
Redux state, allowing for easy stock additions and removals.
Tower Defense
Defend base against increasingly stronger invaders, employing
Javascript, HTML, and CSS.
-
Implemented tower targeting system using iteration between
enemies within range, causing towers to all focus on the
closest enemy once it passes half the canvas.
-
Leveraged requestAnimationFrame() and canvas to repeatedly
and asynchronously draw and reposition elements linked to
class instances, resulting in a tower defense game with
animated waves of enemies and towers that aim at their
current target.
-
Incorporated asynchronous Javascript functions for gameplay
control, allowing for various gameplay functions such as
upgrading tower damage, tracking each enemy’s current
health, and increasing resource generation rate.
Egg Hunt
Find as many easter eggs as you can in this simple game
demonstrating basic game logic and React Three Fiber
implementation.
-
React Three Fiber is used to create the game world and
Rapier to apply basic physics when clicking eggs.
-
Zustand is the global state library that manages game state
such as starting the game, knowing when to animate the bunny
model and generate more eggs, and knowing when the game is
finished.
-
Prisma is used as the ORM with Postgresql as the database,
so that users may submit their score after completing the
game loop.
Solitaire
Basic Solitaire game utilizing strictly HTML/CSS/Javascript
-
Organized classes with OOP structure in order to demonstrate
understanding and increase organization of the project.
-
Individual instances of classes, such as Card and
TopCardColumn, interact with each other and their DOM
elements in order to create an interactive experience with a
stable win condition.
-
This project was started on a plane flight from Dallas back
home to Las Vegas, and continued shortly afterward as a
means of practicing OOP principles and brush up on vanilla
Javascript, HTML and CSS capabilities.
About
Douglas A. Crawford
Software Developer
Full-stack software engineer looking for a result-oriented and
driven team. Enjoys problem solving and improving production
efficiency through automation.
Hi! I'm Douglas Crawford and I'm a passionate software developer.
I really love working with React and Javascript because of their
asychronous functions that allow for an interactive web page
experience. I have built one full-stack project using
Rails/React/Redux, another using the Mongo/Express/React/Node
(MERN) stack, and a game using strictly Javascript/HTML/SASS with
no external libraries. Please check them out! I am looking for a
team project to work on together, and will bring an amicable
personality and strong Javascript and React skills to the table.
I'm always looking to master React and Javascript, but in my free
time I enjoy video gaming, Netflix binging, and when permitted,
playing at the gym.