Home Fusion Logo Home Fusion OMS

Home Fusion OMS is an order management system in development that classifies clientele, consolidates data, and automates the order process of Home Fusion, a North Georgia new-home construction subcontractor.

The current order process relies on the handwritten transcription of line items, referencing an item master that requires frequent changes. Once these orders are transcribed, they are relayed to an individual who separates items by vendor and places an order through a vendor representative. This application aims to address these process bottlenecks by eliminating the need for handwritten transcription as well as creating an automated order pipeline between business and vendor.

In respect to technical infrastructure, this application defines infrastructure as code through the use of AWS CloudFormation templates, allowing for the rapid deployment and teardown of a development stack, isolated from production. In addition, by leveraging the AWS CodePipeline suite of CodeCommit, CodeBuild, and CodeDeploy, all stacks utilize an automated code pipeline, initialized by every git commit or reversion, streamlining the rollout or rollback of new features.

Future features consist of the conversion of the current PostgreSQL relational database to AWS DynamoDB, motivated by its pay-per-request pricing model as well as its schematic flexibility, allowing for more efficient pulls of data per request using the Single Table Design approach among other benefits. Additionally, the automation of emails sent to vendors will leverage AWS SNS.

Technologies Used

Front End

AWS Nuxtjs Shell Script TailwindCSS TypeScript

AWS Amplify AWS CloudFormation AWS CodeCommit AWS CodeBuild AWS CodeDeploy AWS CodePipeline AWS EventBridge AWS S3

Back End

AWS Go Postgres Shell Script

AWS API Gateway AWS CloudFormation AWS CodeCommit AWS CodeBuild AWS CodeDeploy AWS CodePipeline AWS Cognito AWS EC2 AWS EventBridge AWS Lambda AWS RDS AWS S3 AWS Secrets Manager

Attributions

Front-End Dummy Tools Documentation

Dummy Tools are a collection of Bash scripts created to expedite development. Alongside Bash, these scripts leverage the AWS, Go, and popular golang-migrate CLI tools to execute full units of work that are commonly needed during development. These units of work include building, deploying, or destroying AWS CloudFormation stacks, performing database migrations, and creating AWS Cognito users to generate tokens for API testing.

Front-End Dependencies

  • Linux
  • Bash
  • git
  • npm (for optionally building the front end locally outside of AWS Amplify)
  • AWS CLI

The front-end stack is dependent on environment variables and resources deployed in the back-end stack; as a result, the back-end stack must be deployed first.

Deploying common stack

  • Note: The common stack contains resources that are shared between all environments; resources include this code repository, build artifact bucket, and basic build configuration
  1. Build the stack
./dummy common

Deploying the dev stack

  • Note: The current stack is dictated by the current git branch; if the current branch name is dev, it will deploy an environment with resources postfixed with dev
  1. If git is not initialized and branch is not set to dev
git init && git checkout -b dev
  1. Deploy the stack into the cloud
    • Note: The front-end stack includes a code pipeline but would only be utilized if future resources were to be added; currently, the front-end stack is primarily deployed via Amplify
./dummy deploy

Setting up dev environment

- Note: This is pulling environment variables set from the back-end stack
  1. Pull your environment variables from the cloud
./dummy env
  1. Create Cognito user to log into application if user is already not created
./dummy user {EMAIL} {PASSWORD}
  1. Run development environment
npm run dev
  1. Go to http://localhost:3000 to access development environment

During development

  1. Delete Cognito user if wanting to recreate
./dummy delete user

Cleaning up dev stack

  1. Delete stack
./dummy delete stack

Cleaning up common stack

  1. Delete stack
./dummy delete common