commit aea0071b3bf18b0f29a0d4749a78261535e39953 Author: Chris Haulmark Date: Mon Sep 9 15:22:17 2024 -0600 Just started diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c8d2a32 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +# Build stage for client +FROM node:14 AS client-build +WORKDIR /app/client +COPY client/package*.json ./ +RUN npm install +COPY client/ ./ +RUN npm run build -- --mode production + +# Build stage for server +FROM node:14 AS server-build +WORKDIR /app/server +COPY server/package*.json ./ +RUN npm install +COPY server/ ./ +RUN npm run build + +# Production stage +FROM node:14-alpine +WORKDIR /app +COPY --from=client-build /app/client/build ./client/build +COPY --from=server-build /app/server/dist ./server/dist +COPY --from=server-build /app/server/package*.json ./server/ +WORKDIR /app/server +RUN npm install --only=production +EXPOSE 5000 +CMD ["node", "dist/index.js"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..cf34a51 --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# Missoula Council of the Deaf, Inc. Website + +This repository contains the source code for the Missoula Council of the Deaf, Inc. (MCDi) website. The project is built using a MERN stack (MongoDB, Express, React, Node.js) with TypeScript and is containerized using Docker. + +## Features + +- Responsive design +- Animated UI components using Framer Motion +- Docker containerization for easy deployment +- Express.js backend serving static React files + +## Project Structure + +The project is organized into client and server directories: + +- `client/`: React frontend application +- `server/`: Express.js backend application +- `Dockerfile`: Multi-stage build for both client and server +- `docker-compose.yml`: Docker Compose configuration for running the application + +## Getting Started + +To run this project locally: + +1. Clone the repository +2. Install Docker and Docker Compose +3. Run `docker-compose up --build` in the project root directory +4. Access the website at `http://localhost:5000` diff --git a/client/package.json b/client/package.json new file mode 100644 index 0000000..d25d0d5 --- /dev/null +++ b/client/package.json @@ -0,0 +1,44 @@ +{ + "name": "mcdi-website-client", + "version": "1.0.0", + "private": true, + "homepage": ".", + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.10.0", + "styled-components": "^5.3.9", + "framer-motion": "^10.12.4" + }, + "devDependencies": { + "@types/react": "^18.0.37", + "@types/react-dom": "^18.0.11", + "@types/styled-components": "^5.1.26", + "typescript": "^5.0.4", + "react-scripts": "5.0.1" + }, + "scripts": { + "start": "react-scripts start", + "build": "GENERATE_SOURCEMAP=false react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } + } \ No newline at end of file diff --git a/client/public/MCD-Inc._AOI_Bylaws.pdf b/client/public/MCD-Inc._AOI_Bylaws.pdf new file mode 100644 index 0000000..b43bf7d Binary files /dev/null and b/client/public/MCD-Inc._AOI_Bylaws.pdf differ diff --git a/client/public/index.html b/client/public/index.html new file mode 100644 index 0000000..55f7ccb --- /dev/null +++ b/client/public/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + + Missoula Council of the Deaf, Inc. + + + +
+ + \ No newline at end of file diff --git a/client/src/App.tsx b/client/src/App.tsx new file mode 100644 index 0000000..b6b3086 --- /dev/null +++ b/client/src/App.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import styled from 'styled-components'; +import Header from './components/Header'; +import Footer from './components/Footer'; +import ComingSoon from './components/ComingSoon'; + +const AppContainer = styled.div` + min-height: 100vh; + position: relative; + padding-bottom: 60px; // Height of the footer +`; + +const App: React.FC = () => { + return ( + +
+ +