From 3bab2c720b546f73bd8ce4f6e5a532dca91697e0 Mon Sep 17 00:00:00 2001 From: keeryn04 Date: Sun, 2 Nov 2025 14:03:24 -0700 Subject: [PATCH 001/130] (Progress) Added Basic Pages with Nav Bar Basic pages with navigation built in, adjusted config file with extra settings for app --- shatter-mobile/app/(tabs)/NewEvents.tsx | 59 ++++++++++++++++++++++++ shatter-mobile/app/(tabs)/PastEvents.tsx | 16 +++++++ shatter-mobile/app/(tabs)/_layout.tsx | 29 ++++++++++++ shatter-mobile/app/(tabs)/index.tsx | 32 ++++++------- shatter-mobile/package-lock.json | 4 +- shatter-mobile/package.json | 12 ++--- shatter-mobile/tsconfig.json | 16 +++++-- 7 files changed, 138 insertions(+), 30 deletions(-) create mode 100644 shatter-mobile/app/(tabs)/NewEvents.tsx create mode 100644 shatter-mobile/app/(tabs)/PastEvents.tsx create mode 100644 shatter-mobile/app/(tabs)/_layout.tsx diff --git a/shatter-mobile/app/(tabs)/NewEvents.tsx b/shatter-mobile/app/(tabs)/NewEvents.tsx new file mode 100644 index 0000000..3a9152c --- /dev/null +++ b/shatter-mobile/app/(tabs)/NewEvents.tsx @@ -0,0 +1,59 @@ +import React from "react"; +import { Pressable, StyleSheet, Text, TextInput, View } from "react-native"; + +const NewEvents = () => { + const [text, setText] = React.useState('Join An Event'); + + return ( + + + + [ + styles.button, + pressed && { backgroundColor: "#005" }, + ]} + onPress={() => console.log("Event Joined!")} + > + Join Event + + + ); +}; + +export default NewEvents; + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: "center", + alignItems: "center", + backgroundColor: "#f8f8f8", + padding: 20, + }, + input: { + height: 50, + borderWidth: 1, + borderColor: "#ccc", + borderRadius: 10, + padding: 10, + marginBottom: 20, + backgroundColor: "white", + }, + button: { + backgroundColor: "#3366ff", + padding: 12, + borderRadius: 10, + }, + buttonText: { + color: "white", + fontWeight: "bold", + fontSize: 16, + }, +}); \ No newline at end of file diff --git a/shatter-mobile/app/(tabs)/PastEvents.tsx b/shatter-mobile/app/(tabs)/PastEvents.tsx new file mode 100644 index 0000000..64812bd --- /dev/null +++ b/shatter-mobile/app/(tabs)/PastEvents.tsx @@ -0,0 +1,16 @@ +import React from "react"; +import { Text, View } from "react-native"; + +export default function PastEvents() { + return ( + + Coming Soon... + + ); +} \ No newline at end of file diff --git a/shatter-mobile/app/(tabs)/_layout.tsx b/shatter-mobile/app/(tabs)/_layout.tsx new file mode 100644 index 0000000..52d058c --- /dev/null +++ b/shatter-mobile/app/(tabs)/_layout.tsx @@ -0,0 +1,29 @@ +import React from "react"; +import { Tabs } from 'expo-router'; + +export default function RootLayout() { + return ( + + + + + + + + ); +} diff --git a/shatter-mobile/app/(tabs)/index.tsx b/shatter-mobile/app/(tabs)/index.tsx index 2a68ff7..67f4efc 100644 --- a/shatter-mobile/app/(tabs)/index.tsx +++ b/shatter-mobile/app/(tabs)/index.tsx @@ -1,19 +1,15 @@ -import { Image } from "expo-image"; -import { Platform, StyleSheet, View, Text } from "react-native"; +import { Text, View } from "react-native"; -import { Link } from "expo-router"; - -export default function HomeScreen() { - return - Hello - ; -} - -const styles = StyleSheet.create({ - title: { - fontSize: 20, - fontWeight: 'bold', - textAlign: 'center', - marginTop: 20, - }, -}); +export default function Profile() { + return ( + + Coming Soon... + + ); +} \ No newline at end of file diff --git a/shatter-mobile/package-lock.json b/shatter-mobile/package-lock.json index 44523e0..5171298 100644 --- a/shatter-mobile/package-lock.json +++ b/shatter-mobile/package-lock.json @@ -24,9 +24,9 @@ "expo-symbols": "~1.0.7", "expo-system-ui": "~6.0.8", "expo-web-browser": "~15.0.8", - "react": "19.1.0", + "react": "^19.1.0", "react-dom": "19.1.0", - "react-native": "0.81.5", + "react-native": "^0.81.5", "react-native-gesture-handler": "~2.28.0", "react-native-reanimated": "~4.1.1", "react-native-safe-area-context": "~5.6.0", diff --git a/shatter-mobile/package.json b/shatter-mobile/package.json index 5d02685..215a5ed 100644 --- a/shatter-mobile/package.json +++ b/shatter-mobile/package.json @@ -27,21 +27,21 @@ "expo-symbols": "~1.0.7", "expo-system-ui": "~6.0.8", "expo-web-browser": "~15.0.8", - "react": "19.1.0", + "react": "^19.1.0", "react-dom": "19.1.0", - "react-native": "0.81.5", + "react-native": "^0.81.5", "react-native-gesture-handler": "~2.28.0", - "react-native-worklets": "0.5.1", "react-native-reanimated": "~4.1.1", "react-native-safe-area-context": "~5.6.0", "react-native-screens": "~4.16.0", - "react-native-web": "~0.21.0" + "react-native-web": "~0.21.0", + "react-native-worklets": "0.5.1" }, "devDependencies": { "@types/react": "~19.1.0", - "typescript": "~5.9.2", "eslint": "^9.25.0", - "eslint-config-expo": "~10.0.0" + "eslint-config-expo": "~10.0.0", + "typescript": "~5.9.2" }, "private": true } diff --git a/shatter-mobile/tsconfig.json b/shatter-mobile/tsconfig.json index 909e901..4f28ade 100644 --- a/shatter-mobile/tsconfig.json +++ b/shatter-mobile/tsconfig.json @@ -2,11 +2,19 @@ "extends": "expo/tsconfig.base", "compilerOptions": { "strict": true, + "baseUrl": ".", "paths": { - "@/*": [ - "./*" - ] - } + "@/*": ["./*"] + }, + "jsx": "react-jsx", + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "skipLibCheck": true, + "noEmit": true, + "isolatedModules": true }, "include": [ "**/*.ts", From 9c647c237c28ee8e3df08e953321fc9412fcdab4 Mon Sep 17 00:00:00 2001 From: keeryn04 Date: Mon, 3 Nov 2025 11:41:31 -0700 Subject: [PATCH 002/130] (Progress) Added Basic Login / Signup Page Adjusted nav bar layout, added login and signup page that stores current user throughout app pages through Auth --- shatter-mobile/app/(tabs)/Events.tsx | 22 +++++ shatter-mobile/app/(tabs)/JoinEvent.tsx | 22 +++++ shatter-mobile/app/(tabs)/NewEvents.tsx | 59 ------------- shatter-mobile/app/(tabs)/PastEvents.tsx | 16 ---- shatter-mobile/app/(tabs)/Profile.tsx | 62 ++++++++++++++ shatter-mobile/app/(tabs)/_layout.tsx | 40 ++++----- shatter-mobile/app/(tabs)/index.tsx | 15 ---- shatter-mobile/app/components/LoginForm.tsx | 86 +++++++++++++++++++ shatter-mobile/app/components/SignupForm.tsx | 89 ++++++++++++++++++++ shatter-mobile/app/context/AuthContext.tsx | 27 ++++++ 10 files changed, 326 insertions(+), 112 deletions(-) create mode 100644 shatter-mobile/app/(tabs)/Events.tsx create mode 100644 shatter-mobile/app/(tabs)/JoinEvent.tsx delete mode 100644 shatter-mobile/app/(tabs)/NewEvents.tsx delete mode 100644 shatter-mobile/app/(tabs)/PastEvents.tsx create mode 100644 shatter-mobile/app/(tabs)/Profile.tsx delete mode 100644 shatter-mobile/app/(tabs)/index.tsx create mode 100644 shatter-mobile/app/components/LoginForm.tsx create mode 100644 shatter-mobile/app/components/SignupForm.tsx create mode 100644 shatter-mobile/app/context/AuthContext.tsx diff --git a/shatter-mobile/app/(tabs)/Events.tsx b/shatter-mobile/app/(tabs)/Events.tsx new file mode 100644 index 0000000..6279f47 --- /dev/null +++ b/shatter-mobile/app/(tabs)/Events.tsx @@ -0,0 +1,22 @@ +import { StyleSheet, Text, View } from "react-native"; + +const NewEvents = () => { + + return ( + + See your Events Here (Current or Past) + + ); +}; + +export default NewEvents; + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: "center", + alignItems: "center", + backgroundColor: "#f8f8f8", + padding: 20, + }, +}); \ No newline at end of file diff --git a/shatter-mobile/app/(tabs)/JoinEvent.tsx b/shatter-mobile/app/(tabs)/JoinEvent.tsx new file mode 100644 index 0000000..14863a4 --- /dev/null +++ b/shatter-mobile/app/(tabs)/JoinEvent.tsx @@ -0,0 +1,22 @@ +import { Text, View } from "react-native"; +import { useAuth } from "../context/AuthContext"; + +export default function Profile() { + const { user } = useAuth(); + + if (user) { + return ( + + Welcome, {user.name}! + Join an Event Here + + ); + } else { + return ( + + Welcome! + Join an Event Here + + ); + } +} \ No newline at end of file diff --git a/shatter-mobile/app/(tabs)/NewEvents.tsx b/shatter-mobile/app/(tabs)/NewEvents.tsx deleted file mode 100644 index 3a9152c..0000000 --- a/shatter-mobile/app/(tabs)/NewEvents.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import React from "react"; -import { Pressable, StyleSheet, Text, TextInput, View } from "react-native"; - -const NewEvents = () => { - const [text, setText] = React.useState('Join An Event'); - - return ( - - - - [ - styles.button, - pressed && { backgroundColor: "#005" }, - ]} - onPress={() => console.log("Event Joined!")} - > - Join Event - - - ); -}; - -export default NewEvents; - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: "center", - alignItems: "center", - backgroundColor: "#f8f8f8", - padding: 20, - }, - input: { - height: 50, - borderWidth: 1, - borderColor: "#ccc", - borderRadius: 10, - padding: 10, - marginBottom: 20, - backgroundColor: "white", - }, - button: { - backgroundColor: "#3366ff", - padding: 12, - borderRadius: 10, - }, - buttonText: { - color: "white", - fontWeight: "bold", - fontSize: 16, - }, -}); \ No newline at end of file diff --git a/shatter-mobile/app/(tabs)/PastEvents.tsx b/shatter-mobile/app/(tabs)/PastEvents.tsx deleted file mode 100644 index 64812bd..0000000 --- a/shatter-mobile/app/(tabs)/PastEvents.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from "react"; -import { Text, View } from "react-native"; - -export default function PastEvents() { - return ( - - Coming Soon... - - ); -} \ No newline at end of file diff --git a/shatter-mobile/app/(tabs)/Profile.tsx b/shatter-mobile/app/(tabs)/Profile.tsx new file mode 100644 index 0000000..d1c9383 --- /dev/null +++ b/shatter-mobile/app/(tabs)/Profile.tsx @@ -0,0 +1,62 @@ +import { useState } from "react"; +import { View, Text, TouchableOpacity, StyleSheet } from "react-native"; +import { useAuth } from "../context/AuthContext"; +import LoginForm from "../components/LoginForm"; +import SignUpForm from "../components/SignupForm"; + +export default function Profile() { + const { user, setUser } = useAuth(); + const [form, setForm] = useState<"login" | "signup">("login"); + + //logged in + if (user) { + return ( + + Welcome, {user.name}! + {user.email} + setUser(null)}> + Log Out + + + ); + } + + //not logged in, show pages for signup or login + return ( + + {form === "login" ? ( + setForm("signup")} /> + ) : ( + setForm("login")} /> + )} + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: "center", + padding: 24, + backgroundColor: "#A1C9F6" }, + title: { + fontSize: 28, + fontWeight: "600", + textAlign: "center", + color: "#1B253A", + marginBottom: 16 }, + subtitle: { + fontSize: 16, + textAlign: "center", + color: "#666", + marginBottom: 20 }, + button: { + backgroundColor: "#1C1DEF", + padding: 14, + borderRadius: 8, + alignItems: "center" }, + buttonText: { + color: "#fff", + fontWeight: "600", + fontSize: 16 }, +}); \ No newline at end of file diff --git a/shatter-mobile/app/(tabs)/_layout.tsx b/shatter-mobile/app/(tabs)/_layout.tsx index 52d058c..4365fff 100644 --- a/shatter-mobile/app/(tabs)/_layout.tsx +++ b/shatter-mobile/app/(tabs)/_layout.tsx @@ -1,29 +1,25 @@ -import React from "react"; -import { Tabs } from 'expo-router'; +import { Tabs } from "expo-router"; +import { AuthProvider } from "../context/AuthContext"; export default function RootLayout() { return ( - - + + + - + - - + + + ); } diff --git a/shatter-mobile/app/(tabs)/index.tsx b/shatter-mobile/app/(tabs)/index.tsx deleted file mode 100644 index 67f4efc..0000000 --- a/shatter-mobile/app/(tabs)/index.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { Text, View } from "react-native"; - -export default function Profile() { - return ( - - Coming Soon... - - ); -} \ No newline at end of file diff --git a/shatter-mobile/app/components/LoginForm.tsx b/shatter-mobile/app/components/LoginForm.tsx new file mode 100644 index 0000000..3ca1075 --- /dev/null +++ b/shatter-mobile/app/components/LoginForm.tsx @@ -0,0 +1,86 @@ +//called by Profile.tsx for logging in +import { useState } from "react"; +import { StyleSheet, ActivityIndicator, TextInput, TouchableOpacity, View, Text } from "react-native"; +import { useAuth } from "../context/AuthContext"; + +//used in profile to swap page +type Props = { + switchToSignUp: () => void; +}; + +export default function LoginForm({ switchToSignUp }: Props) { + const { setUser } = useAuth(); + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [loading, setLoading] = useState(false); + + const handleLogin = () => { + setLoading(true); + + if (!email || !password) { + console.log("Error: All fields are required"); + setLoading(false) + return; + } + + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + if (!emailRegex.test(email)) { + console.log("Error: Invalid email format"); + setLoading(false) + return; + } + + if (password.length < 8) { + console.log("Error: Password must be at least 8 characters"); + setLoading(false) + return; + } + + //TODO: Backend logic + + setTimeout(() => { + setUser({ name: "John Doe", email }); //load name from backend + setLoading(false); + }, 1000); + }; + + return ( + + Log In + + + + {loading ? : Log In} + + + + Don't have an account? Sign Up + + + ); +} + +const styles = StyleSheet.create({ + title: { + fontSize: 28, + fontWeight: "600", + marginBottom: 24, + textAlign: "center", + color: "#1B253A" }, + input: { + borderWidth: 1, + borderColor: "#ccc", + borderRadius: 8, + padding: 12, + marginBottom: 16, + backgroundColor: "#fff" }, + button: { + backgroundColor: "#1C1DEF", + padding: 14, + borderRadius: 8, + alignItems: "center" }, + buttonText: { + color: "#fff", + fontWeight: "600", + fontSize: 16 }, +}); \ No newline at end of file diff --git a/shatter-mobile/app/components/SignupForm.tsx b/shatter-mobile/app/components/SignupForm.tsx new file mode 100644 index 0000000..87584b9 --- /dev/null +++ b/shatter-mobile/app/components/SignupForm.tsx @@ -0,0 +1,89 @@ +//called by Profile.tsx for signing up +import React, { useState } from "react"; +import { View, Text, TextInput, TouchableOpacity, StyleSheet, ActivityIndicator } from "react-native"; +import { useAuth } from "../context/AuthContext"; + +//used in profile to swap page +type Props = { + switchToLogin: () => void; +}; + +export default function SignUpForm({ switchToLogin }: Props) { + const { setUser } = useAuth(); + const [name, setName] = useState(""); + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [loading, setLoading] = useState(false); + + const handleSignup = () => { + setLoading(true); + + if (!email || !password) { + console.log("Error: All fields are required"); + setLoading(false) + return; + } + + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + if (!emailRegex.test(email)) { + console.log("Error: Invalid email format"); + setLoading(false) + return; + } + + if (password.length < 8) { + console.log("Error: Password must be at least 8 characters"); + setLoading(false) + return; + } + + //TODO: Backend logic + + setTimeout(() => { + setUser({ name, email }); + setLoading(false); + }, 1000); + }; + + return ( + + Sign Up + + + + + + {loading ? : Sign Up} + + + + Already have an account? Log In + + + ); +} + +const styles = StyleSheet.create({ + title: { + fontSize: 28, + fontWeight: "600", + marginBottom: 24, + textAlign: "center", + color: "#1B253A" }, + input: { + borderWidth: 1, + borderColor: "#ccc", + borderRadius: 8, + padding: 12, + marginBottom: 16, + backgroundColor: "#fff" }, + button: { + backgroundColor: "#1C1DEF", + padding: 14, + borderRadius: 8, + alignItems: "center" }, + buttonText: { + color: "#fff", + fontWeight: "600", + fontSize: 16 }, +}); \ No newline at end of file diff --git a/shatter-mobile/app/context/AuthContext.tsx b/shatter-mobile/app/context/AuthContext.tsx new file mode 100644 index 0000000..1d91ff9 --- /dev/null +++ b/shatter-mobile/app/context/AuthContext.tsx @@ -0,0 +1,27 @@ +//handles user login status +import React, { createContext, useContext, useState } from "react"; + +type User = { name: string; email: string } | null; + +type AuthContextType = { + user: User; + setUser: React.Dispatch>; +}; + +const AuthContext = createContext(undefined); + +export const AuthProvider = ({ children }: { children: React.ReactNode }) => { + const [user, setUser] = useState(null); + + return ( + + {children} + + ); +}; + +export const useAuth = () => { + const context = useContext(AuthContext); + if (!context) throw new Error("useAuth must be used within AuthProvider"); + return context; +}; \ No newline at end of file From 4c9490ae7856b29c482e93b05c850236647bfb85 Mon Sep 17 00:00:00 2001 From: jktieh Date: Wed, 5 Nov 2025 14:23:23 -0700 Subject: [PATCH 003/130] Update package-lock.json --- shatter-web/package-lock.json | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/shatter-web/package-lock.json b/shatter-web/package-lock.json index e3cca73..14c9e72 100644 --- a/shatter-web/package-lock.json +++ b/shatter-web/package-lock.json @@ -60,7 +60,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -1634,7 +1633,6 @@ "integrity": "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -1645,7 +1643,6 @@ "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -1706,7 +1703,6 @@ "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.2", "@typescript-eslint/types": "8.46.2", @@ -1959,7 +1955,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2078,7 +2073,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", @@ -2321,7 +2315,6 @@ "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3420,7 +3413,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -3664,7 +3656,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3717,7 +3708,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3803,7 +3793,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz", "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -3895,7 +3884,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, From 2e432704e050fcb472efd8edcc718e884f101aad Mon Sep 17 00:00:00 2001 From: jktieh Date: Wed, 5 Nov 2025 15:19:44 -0700 Subject: [PATCH 004/130] Create Navbar.tsx --- shatter-web/src/components/Navbar.tsx | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 shatter-web/src/components/Navbar.tsx diff --git a/shatter-web/src/components/Navbar.tsx b/shatter-web/src/components/Navbar.tsx new file mode 100644 index 0000000..5924721 --- /dev/null +++ b/shatter-web/src/components/Navbar.tsx @@ -0,0 +1,13 @@ +// src/components/Navbar.tsx +export default function Navbar() { + return ( + + ); +} From bd888abceb5bf1e71543a5dd3a566ffecf26e22a Mon Sep 17 00:00:00 2001 From: jktieh Date: Wed, 5 Nov 2025 15:23:06 -0700 Subject: [PATCH 005/130] Create Hero.tsx --- shatter-web/src/components/Hero.tsx | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 shatter-web/src/components/Hero.tsx diff --git a/shatter-web/src/components/Hero.tsx b/shatter-web/src/components/Hero.tsx new file mode 100644 index 0000000..e69de29 From 5db1770b46581ed9bfacef9ee2841e116110b3fb Mon Sep 17 00:00:00 2001 From: jktieh Date: Wed, 5 Nov 2025 15:27:49 -0700 Subject: [PATCH 006/130] Create Footer.tsx --- shatter-web/src/components/Footer.tsx | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 shatter-web/src/components/Footer.tsx diff --git a/shatter-web/src/components/Footer.tsx b/shatter-web/src/components/Footer.tsx new file mode 100644 index 0000000..e69de29 From 78de9da205c90941e13851c478f1f84148ca9eec Mon Sep 17 00:00:00 2001 From: jktieh Date: Wed, 5 Nov 2025 15:28:00 -0700 Subject: [PATCH 007/130] Rename to QRCode.tsx --- shatter-web/src/components/{QRCodeDisplay.tsx => QRCode.tsx} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename shatter-web/src/components/{QRCodeDisplay.tsx => QRCode.tsx} (100%) diff --git a/shatter-web/src/components/QRCodeDisplay.tsx b/shatter-web/src/components/QRCode.tsx similarity index 100% rename from shatter-web/src/components/QRCodeDisplay.tsx rename to shatter-web/src/components/QRCode.tsx From f877a3f278c60d49dcc2613408034c0d373d03a1 Mon Sep 17 00:00:00 2001 From: jktieh Date: Wed, 5 Nov 2025 15:28:04 -0700 Subject: [PATCH 008/130] Create Home.tsx --- shatter-web/src/pages/Home.tsx | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 shatter-web/src/pages/Home.tsx diff --git a/shatter-web/src/pages/Home.tsx b/shatter-web/src/pages/Home.tsx new file mode 100644 index 0000000..bfa986e --- /dev/null +++ b/shatter-web/src/pages/Home.tsx @@ -0,0 +1,26 @@ +// src/pages/Home.tsx +import Navbar from "../components/Navbar"; +import Hero from "../components/Hero"; +import Card from "../components/Card"; +import Footer from "../components/Footer"; +import QRCode from "../components/QRCode"; + +export default function Home() { + return ( +
+ + + +
+ + +
+

Share Profile

+ +
+
+ +
+
+ ); +} From fe3c30322928617090a4730c8e34f2e87a877c23 Mon Sep 17 00:00:00 2001 From: jktieh Date: Wed, 5 Nov 2025 15:29:37 -0700 Subject: [PATCH 009/130] Create Card.tsx --- shatter-web/src/components/Card.tsx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 shatter-web/src/components/Card.tsx diff --git a/shatter-web/src/components/Card.tsx b/shatter-web/src/components/Card.tsx new file mode 100644 index 0000000..4c036ff --- /dev/null +++ b/shatter-web/src/components/Card.tsx @@ -0,0 +1,17 @@ +// src/components/Card.tsx +export default function Card() { + return ( +
+ Jane Doe +

Jane Doe

+

Software Engineer

+ +
+ ); +} From a35e3e8a7a15c22179109e5e4964bb8f72fcff1d Mon Sep 17 00:00:00 2001 From: jktieh Date: Wed, 5 Nov 2025 15:31:12 -0700 Subject: [PATCH 010/130] Update App.tsx --- shatter-web/src/App.tsx | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/shatter-web/src/App.tsx b/shatter-web/src/App.tsx index b146904..8a108ef 100644 --- a/shatter-web/src/App.tsx +++ b/shatter-web/src/App.tsx @@ -1,16 +1,6 @@ -import { useState } from "react"; -import TestComponent from "./components/TestComponent.tsx"; -import QRCodeDisplay from "./components/QRCodeDisplay.tsx"; -function App() { - return ( - <> -
-

This is the first component

- - -
- - ); -} +// src/App.tsx +import Home from "./pages/Home"; -export default App; +export default function App() { + return ; +} From aa42265a94a1ce9aece844f591f90b1a2409d178 Mon Sep 17 00:00:00 2001 From: jktieh Date: Wed, 5 Nov 2025 15:38:15 -0700 Subject: [PATCH 011/130] Update index.html --- shatter-web/index.html | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/shatter-web/index.html b/shatter-web/index.html index 1082d7b..f398b3c 100644 --- a/shatter-web/index.html +++ b/shatter-web/index.html @@ -1,10 +1,9 @@ - + - - shatter-web + Shatter
From 40042019ba30ebad1971459e5a1ac2afaff8ab13 Mon Sep 17 00:00:00 2001 From: jktieh Date: Wed, 5 Nov 2025 15:38:17 -0700 Subject: [PATCH 012/130] Update Footer.tsx --- shatter-web/src/components/Footer.tsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/shatter-web/src/components/Footer.tsx b/shatter-web/src/components/Footer.tsx index e69de29..692fa5d 100644 --- a/shatter-web/src/components/Footer.tsx +++ b/shatter-web/src/components/Footer.tsx @@ -0,0 +1,8 @@ +// src/components/Footer.tsx +export default function Footer() { + return ( +
+ © 2025 Shatter. All rights reserved. +
+ ); +} From 48f1658d2023bd3e46c4a56fc2ca75b691d2c4c9 Mon Sep 17 00:00:00 2001 From: jktieh Date: Wed, 5 Nov 2025 15:38:20 -0700 Subject: [PATCH 013/130] Update Hero.tsx --- shatter-web/src/components/Hero.tsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/shatter-web/src/components/Hero.tsx b/shatter-web/src/components/Hero.tsx index e69de29..3ab2097 100644 --- a/shatter-web/src/components/Hero.tsx +++ b/shatter-web/src/components/Hero.tsx @@ -0,0 +1,14 @@ +// src/components/Hero.tsx +export default function Hero() { + return ( +
+

Welcome to Shatter

+

+ Making professional networking easier and exciting! +

+ +
+ ); +} From c228e72dad79d653b3999f8d25e6d44b7fe7ab16 Mon Sep 17 00:00:00 2001 From: jktieh Date: Wed, 5 Nov 2025 15:38:22 -0700 Subject: [PATCH 014/130] Update Navbar.tsx --- shatter-web/src/components/Navbar.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shatter-web/src/components/Navbar.tsx b/shatter-web/src/components/Navbar.tsx index 5924721..589380d 100644 --- a/shatter-web/src/components/Navbar.tsx +++ b/shatter-web/src/components/Navbar.tsx @@ -5,8 +5,8 @@ export default function Navbar() {
Shatter
); From 5a4e2768d28c97b8f4e797f55415c13fca12f7aa Mon Sep 17 00:00:00 2001 From: jktieh Date: Wed, 5 Nov 2025 15:38:33 -0700 Subject: [PATCH 015/130] Update main.tsx --- shatter-web/src/main.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/shatter-web/src/main.tsx b/shatter-web/src/main.tsx index bef5202..9b67590 100644 --- a/shatter-web/src/main.tsx +++ b/shatter-web/src/main.tsx @@ -1,10 +1,10 @@ -import { StrictMode } from 'react' -import { createRoot } from 'react-dom/client' -import './index.css' -import App from './App.tsx' +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App"; +import "./index.css"; -createRoot(document.getElementById('root')!).render( - +ReactDOM.createRoot(document.getElementById("root")!).render( + - , -) + +); From 0408e9619113e9125d8ee4e3b5b151b51fc8777e Mon Sep 17 00:00:00 2001 From: jktieh Date: Wed, 5 Nov 2025 17:58:21 -0700 Subject: [PATCH 016/130] Update Home.tsx --- shatter-web/src/pages/Home.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/shatter-web/src/pages/Home.tsx b/shatter-web/src/pages/Home.tsx index bfa986e..9ea97e3 100644 --- a/shatter-web/src/pages/Home.tsx +++ b/shatter-web/src/pages/Home.tsx @@ -14,10 +14,7 @@ export default function Home() {
-
-

Share Profile

- -
+