diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..a3c03c6
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,6 @@
+{
+  "name": "team58",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {}
+}
diff --git a/sports-matcher/package.json b/sports-matcher/package.json
index 2f1f97b..e8e0974 100644
--- a/sports-matcher/package.json
+++ b/sports-matcher/package.json
@@ -10,8 +10,11 @@
     "@testing-library/jest-dom": "^5.16.2",
     "@testing-library/react": "^12.1.3",
     "@testing-library/user-event": "^13.5.0",
+    "bootstrap": "^5.1.3",
     "react": "^17.0.2",
+    "react-bootstrap": "^2.2.0",
     "react-dom": "^17.0.2",
+    "react-router-dom": "^6.2.2",
     "react-scripts": "^5.0.0",
     "web-vitals": "^2.1.4"
   },
diff --git a/sports-matcher/public/chief.jpg b/sports-matcher/public/chief.jpg
new file mode 100644
index 0000000..3335964
Binary files /dev/null and b/sports-matcher/public/chief.jpg differ
diff --git a/sports-matcher/public/freeman.jpg b/sports-matcher/public/freeman.jpg
new file mode 100644
index 0000000..45d5175
Binary files /dev/null and b/sports-matcher/public/freeman.jpg differ
diff --git a/sports-matcher/public/index.html b/sports-matcher/public/index.html
index aa069f2..c87dbda 100644
--- a/sports-matcher/public/index.html
+++ b/sports-matcher/public/index.html
@@ -24,6 +24,12 @@
       work correctly both with client-side routing and a non-root public URL.
       Learn how to configure a non-root public URL by running `npm run build`.
     -->
+    
React App 
   
   
diff --git a/sports-matcher/public/shogun.jpg b/sports-matcher/public/shogun.jpg
new file mode 100644
index 0000000..276e987
Binary files /dev/null and b/sports-matcher/public/shogun.jpg differ
diff --git a/sports-matcher/src/Admin.css b/sports-matcher/src/Admin.css
new file mode 100644
index 0000000..59c9b92
--- /dev/null
+++ b/sports-matcher/src/Admin.css
@@ -0,0 +1,4 @@
+
+.MainTable {
+    padding : 20px;
+}
\ No newline at end of file
diff --git a/sports-matcher/src/Admin.js b/sports-matcher/src/Admin.js
new file mode 100644
index 0000000..9d48546
--- /dev/null
+++ b/sports-matcher/src/Admin.js
@@ -0,0 +1,249 @@
+import * as React from 'react';
+import './Admin.css';
+import Button from '@mui/material/Button';
+import Typography from '@mui/material/Typography';
+import Container from '@mui/material/Container';
+import { TableContainer, TableCell, Table, TableBody, TableRow, TableHead, Paper } from '@mui/material';
+
+
+
+class AdminTable extends React.Component {
+    constructor(props) {
+        super(props)
+
+
+
+        this.state = {
+            users: [
+                { id: 1, username: 'username1', name: 'name1', email: 'user1@email.com', phone: '123-456-7890' },
+                { id: 2, username: 'username2', name: 'name2', email: 'user2@email.com', phone: '123-456-7890' },
+                { id: 3, username: 'username3', name: 'name3', email: 'user3@email.com', phone: '123-456-7890' },
+                { id: 4, username: 'username4', name: 'name4', email: 'user4@email.com', phone: '123-456-7890' }
+            ],
+            suspendedUsers: [
+                { id: 1, username: 'suspended1', name: 's1', email: 's1@email.com', phone: '123-456-7890' },
+                { id: 2, username: 'suspended2', name: 's2', email: 's2@email.com', phone: '123-456-7890' },
+                { id: 3, username: 'suspended3', name: 's3', email: 's3@email.com', phone: '123-456-7890' },
+                { id: 4, username: 'suspended4', name: 's4', email: 's4@email.com', phone: '123-456-7890' }
+            ],
+            matches: [
+                { id: 1, sport: "Tennis", date: '08/08/2021', location: 'toronto', description: 'Tennis match' },
+                { id: 2, sport: "Basketball", date: '09/09/2021', location: 'toronto', description: 'Basketball match' }
+            ],
+            buttonColors: ['black', '', '']
+        }
+
+
+    }
+
+    EditButton() {
+        return  {
+            alert('clicked');
+        }} variant="contained">Edit ;
+
+    }
+
+    DeleteButtonClick() {
+        return (
+            
+
+                Are you sure you want to delete this user? 
+                 {
+                    alert('User deleted');
+                }} variant="contained">Yes 
+             
+        )
+    }
+
+    NewDeleteButtonClick() {
+        return ()
+    }
+
+    DeleteButton() {
+        return  {
+            alert('User deleted.');
+        }} variant="contained">Delete ;
+
+    }
+
+    PardonButton() {
+        return  {
+            alert('User pardoned.');
+        }} variant="contained">Pardon ;
+
+    }
+
+    userTableData() {
+        return this.state.users.map((user) => {
+            const { id, username, name, email, phone } = user;
+            return (
+                
+                    {id} 
+                    {username} 
+                    {name} 
+                    {email} 
+                    {phone} 
+                    {this.DeleteButton()} 
+                    {this.EditButton()} 
+                 
+            )
+        })
+    }
+
+    suspendedUserTableData() {
+        return this.state.suspendedUsers.map((user) => {
+            const { id, username, name, email, phone } = user
+            return (
+                
+                    {id} 
+                    {username} 
+                    {name} 
+                    {email} 
+                    {phone} 
+                    {this.DeleteButton()} 
+                    {this.EditButton()} 
+                    {this.PardonButton()} 
+                 
+            )
+        })
+    }
+
+    matchTableData() {
+        return this.state.matches.map((match) => {
+            const { id, sport, date, location, description } = match
+            return (
+                
+                    {id} 
+                    {sport} 
+                    {date} 
+                    {location} 
+                    {description} 
+                    {this.DeleteButton()} 
+                    {this.EditButton()} 
+                 
+            )
+        })
+    }
+
+    matchTableHead() {
+        return (
+            
+                
+                    ID 
+                    Sport 
+                    Date 
+                    Location 
+                    Description 
+                     
+             
+        );
+
+    }
+
+    suspendedUserTableHead() {
+        return (
+            
+                
+                    ID 
+                    Username 
+                    Name 
+                    Email 
+                    Phone 
+                     
+             
+        );
+
+    }
+
+    userTableHead() {
+        return (
+            
+                
+                    ID 
+                    Username 
+                    Name 
+                    Email 
+                    Phone 
+                     
+             
+        );
+
+    }
+
+
+    selectTable() {
+        this.setState({ buttonColors: ['', '', ''] });
+    }
+
+    renderTableHead() {
+        if (this.state.buttonColors[0] === 'black') {
+            return this.matchTableHead();
+        } else if (this.state.buttonColors[1] === 'black') {
+            return this.userTableHead();
+        } else {
+            return this.suspendedUserTableHead();
+        }
+    }
+
+    renderTableData() {
+        if (this.state.buttonColors[0] === 'black') {
+            return this.matchTableData();
+        } else if (this.state.buttonColors[1] === 'black') {
+            return this.userTableData();
+        } else {
+            return this.suspendedUserTableData();
+        }
+
+    }
+
+    render() {
+        return (
+            
+                
Administration 
+                
+                     {
+                        this.setState({ buttonColors: ['black', '', ''] });
+                    }} sx={{
+                        margin: 3,
+                        backgroundColor: this.state.buttonColors[0],
+                    }} variant="outlined">Matches 
+                     {
+                        this.setState({ buttonColors: ['', 'black', ''] });
+                    }} sx={{
+                        margin: 3,
+                        backgroundColor: this.state.buttonColors[1],
+                    }} variant="outlined">Users 
+                     {
+                        this.setState({ buttonColors: ['', '', 'black'] });
+                    }} sx={{
+                        margin: 3,
+                        backgroundColor: this.state.buttonColors[2],
+                    }} variant="outlined">Suspended Users 
+                
+                    
+                        
+                            {this.renderTableHead()}
+                            
+                                {this.renderTableData()}
+                             
+                        
+                     
+                
+            
-      
-         
+      
+         
     
   );
 }
diff --git a/sports-matcher/src/Chat.js b/sports-matcher/src/Chat.js
new file mode 100644
index 0000000..da3ac21
--- /dev/null
+++ b/sports-matcher/src/Chat.js
@@ -0,0 +1,18 @@
+/* Please direct questions to Hansi Xu (Wallace LaWall on Discord) */
+
+import React from 'react';
+import './chats.css'
+
+class Chat extends React.Component {
+    render() {
+        return (
+                                
+                        
+                            {this.props.message}
+                        
+            
+                
+        )
+    }
+}
+
+class UserList extends React.Component {
+    
+    render() {
+        return (
+            
+                    
+        )
+    }
+}
+
+class MessageList extends React.Component {
+    render() {
+        return (
+            
+                
+        )
+    }
+}
+// class ChatWindow extends React.Component {
+//     render() {
+//         return (
+//             
+//                 
+//         )
+//     }
+// }
+const ChatInput = () => {
+    const [message, setMessage] = useState( '' );
+    
+    // const onKeyPress = (e) => {
+    //     // if(e.key === 'Enter'){
+    //     //     e.preventDefault(); // Ensure it is only this code that runs
+    //     //     setMessage("")
+    //     // }
+    // }
+
+    const onKeyDown = (e) => {
+        const keyCode = e.which || e.keyCode;
+
+        // 13 represents the Enter key
+        if (keyCode === 13 && !e.shiftKey) {
+            e.preventDefault();
+            setMessage("")
+        }
+    }
+
+    return (
+        // onKeyPress={(e) => onKeyPress(e)}
+      
+        
+    );
+  };
+class ChatInput2 extends React.Component {
+    
+    constructor(props) {
+        super(props)
+        this.setState({inputVal : ""})
+    }
+
+    handleUserInput(e) {
+        this.setState(this.setState({inputVal : e.target.value}));
+    };
+
+    render() {
+        return (