# S25-CECAS-ME / ShipME

ShipME is an order tracking and management platform for use by the Clemson University Mechanical Engineering department, specifically ME 4020 instructors, TAs, and students. It will facilitate the requesting of parts for prototyping by students and their teams, as well as the ordering of requested parts by instructors, with the ultimate goal of replacing the existing ME 4020 system of arrays of Excel spreadsheets.

ShipME is being created for CPSC 4910 (Capstone) at Clemson University in the Spring 2025 semester, and is being developed by members of the "Spare Parts" Capstone team.

## Project Specs

ShipME will consist of three main components:

1. A front end user interface, built in [React Bootstrap](https://react-bootstrap.netlify.app/) and found in the [frontend](frontend/) directory. Runs on port `5173`.
2. A back end RESTful API, built in [Express](https://expressjs.com/) and found in the [backend](backend/) directory. Runs on port `3000` and includes [Swagger UI](https://swagger.io/tools/swagger-ui/) for testing.
3. A database, built using [PostgreSQL](https://www.postgresql.org/) and found in the [db](db/) directory. Runs on port `5432`, the default PostgreSQL port.

Each of these components is contained within its own Docker container. See [Getting Started](#getting-started) for more information.

More information about the project's specs can be found in the [original spec sheet](spec_sheet.pdf) created by Dr. Tim Guggisberg, ME 4020 coordinator.

## Project Roadmap

![CECAS ME Roadmap](roadmap.png)
[Canva link](https://www.canva.com/design/DAGdxDiS6kM/MJpjm993-OsmY4EMjeClSw/edit?utm_content=DAGdxDiS6kM&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton).

## User Interface Mockups

The ShipME front end design mockups are available via the working [Figma prototype](https://www.figma.com/design/52nLQKz9XgwCi7Dd5sTkdc/CECAS-ME-Interface?node-id=0-1&t=FyZdcI5u7BURRylC-1).

## Getting Started

ShipME is developed using Docker containers to normalize development and deployment. To get started developing ShipME, clone this repository and [install Docker](https://docs.docker.com/desktop/).

Once you have Docker installed and configured, run the following from project root:

```
docker compose build
docker compose up
```

To delete containers, run:

```
docker compose down
```

To clear the database container's persistent storage, run:

```
docker volume rm s25-cecas-me_postgres_data
```

## Deployment

ShipME is built for hosting on [Amazon Web Services](https://aws.amazon.com/) in a multi-container, single-service Elastic Container Service structure on a single EC2 instance. Each container runs independently and is linked together through Docker bridge networking.

### Prerequisites

The deployment of ShipME containers is performed using the [AWS CLI](https://aws.amazon.com/cli/), which must be installed first then configured using:

```
aws configure
```

Because the AWS infrastructure for ShipME runs on ARM64 Linux, you must also configure [buildx](https://github.com/docker/buildx) to perform multi-archicture builds with Docker:

```
docker buildx create --use --name multiarch-builder
```

### Pushing Container Updates

From the repository root (where [docker-compose.yml](docker-compose.yml) is located), tag and push each build:

```
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin [AWS_ACCOUNT_ID].dkr.ecr.us-east-1.amazonaws.com

docker buildx build [CONTAINER_NAME] --platform linux/arm64 -t [AWS_ACCOUNT_ID].dkr.ecr.us-east-1.amazonaws.com/shipme/[CONTAINER_NAME]:latest --push
```
