Hi there 👋 I’m Keith Hetrick
I am a Full-Stack software developer. I specialize in JavaScript (React, Node, NoSQL) & am currently learning Next.js, TypeScript, C++, JUCE, React Native, Django, as well as other Cloud engineering technologies like AWS (like EC2, Amplify, Route 53, Image Builder, S3, Lambda), Vercel, Docker, Postgres, SSH, SSL, Bash, Linux & NeoVim.
I’m looking to collaborate on projects & portfolio building. Looking forward to connecting with you!
- 1. Pixel Space - FULL STACK - text-to-image generator & social platform
- 2. musicNotes - FULL STACK - Employee Portal for the LA location of international Music School "Garnish"
- 3. Databox - FULL STACK - file storage app, with full integration using AWS S3 buckets
- 4. Cinna-Kanban - FULL STACK - Kanban board that can add, update, and delete tasks & users
- 5. Chatty Cathy - FULL STACK - interacive chatbot utilzing OpenAI's ChatGPT AI technology
This is a full stack application that uses the Dall-E API to generate images from text prompts. The application is built using React, Node, Express, and MongoDB. Images are stored in Cloudinary (a cloud-based image and video management service), and the generated image-urls are stored in a MongoDB database, for easy access & sharability. Swipeabity is implemented on the Image page using the React-Swipeable package, and the app is deployed on AWS EC2.
- React
- Node
- Express
- MongoDB
- Mongoose
- Express-Async-Handler
- Express-Rate-Limit
- Helmet
- Cors
- Passport
- OAuth2
- Google-OAuth2
- Axios
- Nodemon
- Tailwind
- File-Saver
- UUID
- Date-FNS
- React-Swipeable
- React-Router-DOM
- Font-Awesome
- Dotenv
- Cloudinary
- Dall-E
- OpenAI
- TLS
- AWS
- AWS EC2
- Clone the repo
git clone <repo_url>
- Install NPM packages on both the client and server
npm install
- Create a .env file in the server directory and add the following:
PORT=8000 || <your_port_number>
MONGODB_URL=<your_mongoDB_uri> => can be created via MongoDB Atlas
NODE_ENV=<development> || <production>
ACCESS_TOKEN_SECRET=<your_access_token_secret> => can be generated inside Node shell via the following command: require('crypto').randomBytes(64).toString('hex')
REFRESH_TOKEN_SECRET=<your_refresh_token_secret> => use the same command as above, and paste the new result into the .env file
CLOUDINARY_NAME=your_cloudinary_name
CLOUDINARY_API_KEY=your_cloudinary_api_key
CLOUDINARY_API_SECRET=your_cloudinary_api_secret
CLIENT_ID=your_google_client_id
CLIENT_SECRET=your_google_client_secret
- Run the app on both the client and server
npm run start => client
nodemon server => server
- Enter a text prompt in the input field
- Click the "Generate Image" button
- Click the "Save Image" button to save the image to your computer
- Click the "Share Image" button to share the image on social media
A simple portal for Garnish employees to keep track of their current tasks and projects. This is a full-stack application built with React, Redux, Node.js, Express, and MongoDB. It has a fully functional Auth/login& reg system manually built from the ground up. The application is currently hosted on AWS EC2 and due to permissions (from the Auth functionality), the full application is only accessible to Garnish employees - only the login page is publicly accessible.
- React
- Redux
- Redux-Toolkit
- React-Router-Dom
- JSON Web Token
- Node.js
- Express
- MongoDB
- Express-Async-Handler
- Express-Rate-Limit
- Mongoose
- Mongoose-Sequences
- Bcrypt
- Cookie-Parser
- Dotenv
- Nodemon
- UUID
- CORS
- Clone the repo
git clone <repo_url>
- Install NPM packages on both the client and server directories
npm install
- Create a .env file in the server directory and add the following:
PORT=8000
DATABASE_URI=<your_mongoDB_uri> => can be created via MongoDB Atlas
NODE_ENV=<development> || <production>
ACCESS_TOKEN_SECRET=<your_access_token_secret> => can be generated inside Node shell via the following command: require('crypto').randomBytes(64).toString('hex')
REFRESH_TOKEN_SECRET=<your_refresh_token_secret> => use the same command as above, and paste the new result into the .env file
- Run the server
nodemon server.js
- Run the client
npm run start
- Login with your credentials
- Create a new project or task
- Assign a project or task to yourself or another employee
- View your current projects and tasks
- Managers - Update your current projects and tasks
- Managers - Delete your current projects and tasks
- Admin - Add a new employee, or update an existing employee's information
- Admin - Delete an employee
Full Stack Application w/ Login and Registration, full CRUD with validations and access control, S3 file storage, and API payment for membership subscription using Python/Django/React
"# databox"
Kanban board that a user can add tasks to and update. A Kanban board is a project management tool designed to help visualize workflow for an individual and/or team.
Deployed to AWS (Amazon Web Services) EC2 instance.
- Clone the repo
git clone
- Install NPM packages
npm install
- Run the app
npm start
- Open http://localhost:3000 to view it in the browser.
- Create a new task by clicking the "Add Task" button
- Update the task by clicking the "Update Task" button
- Delete the task by clicking the "Delete Task" button
Meet Cathy, a Full-stack, fully-responsive personal AI assistant. Type any question to get real-time answers from Cathy herself. Ask and you shall receive!
Deployed to AWS for 24-hr access
- 1. Wocka-Flocka Bot - automated & interactive Discord Bot
- 2. AWS/S3 Bucket Creator - full CRUD app that interacts directly with S3 buckets from the terminal
- 4. Web Scrapers Collection - a series of web scraper apps in Node.js
Interactive bot that can tell you jokes, quotes, stories, the weather, even define words in the Merriam-Webster Dictionary! It can also play games with you such as Rock, Paper, Scissors, Guess the Number, as well as fully-integrated AI-powered conversations using OpenAI GPT-3 technology!
- Node.js
- Discord.js
- OpenAI
- ChatGPT
- Cleverbot
- Axios
- AWS
- AWS-EC2
- Cheerio
- Weather-js
- Ip
- ip2Location-nodejs
- ipify2
- Node-Cron
- Merriam-Webster
Deployed to AWS EC2 Instance for 24-hr functionality
Wocka-Flocka uses Discord as its "front-end" that enables users to engage with it.
ChatGPT integration allows Wocka-Flocka users to have real AI-powered conversations with the bot using OpenAI GPT-3 technology.
Automated "Quote of the Day" feature using Node-Cron
Dynamic "Holiday Countdown" algorithm tells you how many days until any specific holiday
Plethora of embedded game apps that can be played with Wocka-Flocka such as:
Rock, Paper, Scissors
Guess the Number
Flip a coin
Roll the dice
8-Ball
Embedded "Joke" app that can tell you jokes
Embedded "Story" app that can tell you stories
Embedded "Quote" app that can tell you quotes
Embedded "Developer" app that can tell you Developer-related information
Embedded Web-scraped "News" & "Random Sentence Generator" apps that can tell you the latest news & generate random sentences
"Dictionary" app that can define any word inside the Merriam-Webster Dictionary using a unique & specially-made Dictionary algorithm
Embedded "Weather" app that uses Socket-IO technology to give real-time climate data based on user location
Can give a collection of algorithm, data structure, & programmer-related information on command such as:
Full CRUD with S3 Bucket, AWS, and Node.js. Uses a random bucket name generator to create a unique bucket name for each user to avoid bucket name collisions. The bucket name is saved in a text file in the root directory in susbtitution of a database...can be easily modified to use a database.
Automated File Read functionality that sends a daily email of the current buckets on AWS
Includes a random bucket name generator to create a unique bucket name for each user
In order to run this app, you will need to create a .env file in the root directory with the following variables:
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
These variables are your AWS access key and secret access key. You can find these in your AWS console.
npm install
node index.js
Before running app, make sure to comment out the desired function(s) in the index.js. The app will run any function(s) that is not commented out.
- Node.js
- Express
- Cheerio
- Axios
- Dotenv
- File System (fs)
- Path
- PM2 Process Management (daemon process manager)
- Node-Fetch
- Unirest
- Got-Scraping
- Node-Cron
- Crawlee
- Puppeteer
- Playwright
- EJS
- yt-trending-scraper
- PDFKit
- Json2Csv
- CsvToJson
- Docker
- Scrapes the Formula One website for the latest news, results,standings, converts the scraped data into a PDF file, and saves it to a local folder.
- Scrapes the website for the latest books, converts the scraped data into a CSV file & saves it to a local folder.
- Version 1: Scrapes the website for the latest news.
- Version 2: The CheerioCrawler version using Crawlee is similar, but since Crawlee "simulates" the actions of a real user, the browser settings are defaulted to
"headless: false"
, so the designated browser opens & the whole program runs as automated. Also, any & all Datasets are stored in a storage folder in the root directory, & containerized using Docker.
- Version 1: Scrapes a website for a specific product & takes a screenshot of the webpage. Code is currently set for mintmobile.com.
- Version 2: The PlaywrightCrawler version using Crawlee is similar, but since Crawlee "simulates" the actions of a real user, the browser settings are defaulted to
"headless: false"
, so the designated browser opens & the whole program runs as automated. Also, any & all Datasets are stored in a storage folder in the root directory, & containerized using Docker.
- Version 1: Scrapes Amazon for a specific product & takes a screenshot of the webpage.
- Version 2: The Playwright version is similar, but since Playwright "simulates" the actions of a real user, the browser settings are defaulted to
"headless: false"
, so the designated browser opens & the whole program runs as automated.
- Scrapes Yelp for the latest restaurants, their corresponding information & saves it in a local folder.
- Scrapes Google for the latest search results.
- Running as a background app via PM2 (Process Management), Job scrapers scrapes Google for the latest jobs in an specific area, converts the scraped data into a PDF file, saves to a local folder, & uploaded/sent as an email via custom-made Email Sender App.
- Scrapes Google for the latest images in an area, and downloads them to a local folder.
- Scrapes a website for all of its images, and downloads them to a local folder.
- Scrapes YouTube for the latest trending videos by country & category.
- Scrapes multiple websites for images, texts, can perform operations such as button clicking, form submission, as well as saves the scraped data to a local folder. Can also be automated using Node-Cron.