From 456c8bc1af0096b2cb1dea28486258cc2b664538 Mon Sep 17 00:00:00 2001 From: ClarkLach <102780236+ClarkLach@users.noreply.github.com> Date: Fri, 29 Mar 2024 11:25:58 -0400 Subject: [PATCH 1/7] Fixed Profile Name and updated README --- README.md | 6 ++++-- frontend-next/src/components/app/header.js | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c7115de..aa9e57b 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ ![](/frontend-next/public/logos/logo_transparent.png) Main repo for ChatMaps, our COS420 Project. -ChatMaps is a web-based social networking service that allows users to connect to others in their local geographic area. It will implement an interactable mapping utility to show general user locations relative to other users, as well as a chat room feature that allows users to start public conversations based on a specified topic. ChatMaps is primarily intended for use in densely populated areas, such as college campuses or metropolitan areas, so people of similar interests can start conversations. The goal of this project is to create a web app that plots locations, gives a radius of the local area, and connects users into different topic-based chat rooms. +ChatMaps is a web-based social networking service that allows users to connect to others in their local geographic area. It implements an interactable mapping utility to show general user locations relative to other users, as well as a chat room feature that allows users to start public conversations based on a specified topic. ChatMaps is primarily intended for use in densely populated areas, such as college campuses or metropolitan areas, so people of similar interests can start conversations. The goal of this project is to create a web app that plots locations, gives a radius of the local area, and connects users into different topic-based chat rooms. -This service will implement user login and profiles, allowing users to add each other as friends and start private conversations. There will be several default chat rooms of varying topics, but users will also have the ability to create their own topics that will be viewable by other users. For example, a user at the University of Maine could create a joinable chat room titled “COS420”, which would be visible to others near this campus. +This service implements user login and profiles, allowing users to add each other as friends and start private conversations. There are several default chat rooms of varying topics, but users also have the ability to create their own topics that will be viewable by other users. For example, a user at the University of Maine could create a joinable chat room titled “COS420”, which would be visible to others near this campus. This app shares some similarities to other social networks that implement location-based content. ChatMaps’ novel approach is to utilize user location to facilitate real-time communication with others within a given radius. @@ -15,6 +15,8 @@ A local version can be run with: cd frontend-next/ +npm install + npm run build npm run dev diff --git a/frontend-next/src/components/app/header.js b/frontend-next/src/components/app/header.js index 5a8cd1f..0eb5937 100644 --- a/frontend-next/src/components/app/header.js +++ b/frontend-next/src/components/app/header.js @@ -121,7 +121,7 @@ export function Header({mainTab, isMyRoom, chatRoomObj, setChatRoomObj, setMainT
- Nicholas + {user.firstName}
-- 2.52.0 From 88b7202069d095fa5c1c3cf8cdb76e54ef689687 Mon Sep 17 00:00:00 2001 From: ClarkLach <102780236+ClarkLach@users.noreply.github.com> Date: Sat, 30 Mar 2024 00:50:38 -0400 Subject: [PATCH 2/7] Links for room markers Room Marker links to room, deleted unneeded files, beginning work on better structuring --- .vscode/settings.json | 2 + frontend-next/src/app/app/page.js | 2 + frontend-next/src/app/layout.js | 6 +- frontend-next/src/app/page.js | 140 ++++++----- frontend-next/src/components/app/datatypes.js | 236 +++++++++--------- .../src/components/app/main_tab/chat.js | 173 +++++++------ .../src/components/app/main_tab/home.js | 2 +- frontend-next/src/components/app/map/geo.js | 27 ++ .../src/components/app/map/marker.js | 0 .../src/components/app/sidebar/chat.js | 74 +++--- package-lock.json | 102 -------- package.json | 5 - 12 files changed, 359 insertions(+), 410 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 frontend-next/src/components/app/map/geo.js create mode 100644 frontend-next/src/components/app/map/marker.js delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/frontend-next/src/app/app/page.js b/frontend-next/src/app/app/page.js index b0e0a5b..b29f687 100644 --- a/frontend-next/src/app/app/page.js +++ b/frontend-next/src/app/app/page.js @@ -103,6 +103,7 @@ function Home() { width={30} anchor={[rooms[room].latitude, rooms[room].longitude]} color="blue" + onClick = {() => window.location.href = "/app?room="+rooms[room].path+"/"+rooms[room].name+"-"+rooms[room].timestamp} /> ); roomArr.push(newRoom); @@ -138,6 +139,7 @@ function Home() { width={30} anchor={[data[room].latitude, data[room].longitude]} color="blue" + onClick = {() => window.location.href = "/app?room="+data[room].path+"/"+data[room].name+"-"+data[room].timestamp} /> ); } diff --git a/frontend-next/src/app/layout.js b/frontend-next/src/app/layout.js index 927f794..16679e4 100644 --- a/frontend-next/src/app/layout.js +++ b/frontend-next/src/app/layout.js @@ -5,15 +5,13 @@ const inter = Inter({ subsets: ["latin"] }); export const metadata = { title: "ChatMaps", - description: "ChatMaps: Social Media for College Students" + description: "ChatMaps: Social Media for College Students", }; export default function RootLayout({ children }) { return ( - - {children} - + {children} ); } diff --git a/frontend-next/src/app/page.js b/frontend-next/src/app/page.js index 1f88fb0..4cdce00 100644 --- a/frontend-next/src/app/page.js +++ b/frontend-next/src/app/page.js @@ -1,73 +1,99 @@ -"use client" -import { useState, useEffect } from 'react' +"use client"; +import { useState, useEffect } from "react"; import { auth, database } from "../../firebase-config"; -import { ref, get} from "firebase/database"; -import {onAuthStateChanged} from "firebase/auth" - +import { ref, get } from "firebase/database"; +import { onAuthStateChanged } from "firebase/auth"; function Home() { - const [isLoadingLoc, setLoadingLoc] = useState(true) - const [roomCount, setRoomCount] = useState(null) - const [isAuthenticated, setAuth] = useState(false) - const [userID, setUserID] = useState(null) + const [isLoadingLoc, setLoadingLoc] = useState(true); + const [roomCount, setRoomCount] = useState(null); + const [isAuthenticated, setAuth] = useState(false); + const [userID, setUserID] = useState(null); - // Authentication + // Authentication useEffect(() => { onAuthStateChanged(auth, (user) => { if (user) { - setUserID(user.uid) - setAuth(true) + setUserID(user.uid); + setAuth(true); } else { - setAuth(false) + setAuth(false); } - }) - }, []) + }); + }, []); - useEffect(() => { - if('geolocation' in navigator) { - // Retrieve latitude & longitude coordinates from `navigator.geolocation` Web API - navigator.geolocation.getCurrentPosition(({ coords }) => { - var path = String(coords.latitude.toFixed(2)).replace(".","")+"/"+String(coords.longitude.toFixed(2)).replace(".","") - get(ref(database, `/rooms/${path}`)).then((snapshot) => { - if (snapshot.exists()) { - var count = 0 - for (var room in snapshot.val()) { - count += 1 - } - setRoomCount(count) - } else { - setRoomCount(0) - } - setLoadingLoc(false) - }); - }); + useEffect(() => { + if ("geolocation" in navigator) { + // Retrieve latitude & longitude coordinates from `navigator.geolocation` Web API + navigator.geolocation.getCurrentPosition(({ coords }) => { + var path = + String(coords.latitude.toFixed(2)).replace(".", "") + + "/" + + String(coords.longitude.toFixed(2)).replace(".", ""); + get(ref(database, `/rooms/${path}`)).then((snapshot) => { + if (snapshot.exists()) { + var count = 0; + for (var room in snapshot.val()) { + count += 1; + } + setRoomCount(count); + } else { + setRoomCount(0); } - }) - return ( + setLoadingLoc(false); + }); + }); + } + }); + return ( +
+
-
-
- - - Chat with friends! - -
- {(!isAuthenticated) && -
- - -
- } - {isAuthenticated && } - {(!isLoadingLoc && roomCount == 1) &&
Join others in {roomCount} room near you!
} - {(!isLoadingLoc && roomCount != 1 && roomCount != 0) &&
Join others in {roomCount} rooms near you!
} - {(isLoadingLoc || (roomCount == 0 && !isLoadingLoc)) &&
Start the conversation today!
} -
-
-
+ + Chat with friends! +
+ {!isAuthenticated && ( + + )} + {isAuthenticated && ( + + + + )} + {!isLoadingLoc && roomCount == 1 && ( +
+ Join others in {roomCount} room near you! +
+ )} + {!isLoadingLoc && roomCount != 1 && roomCount != 0 && ( +
+ Join others in {roomCount} rooms near you! +
+ )} + {(isLoadingLoc || (roomCount == 0 && !isLoadingLoc)) && ( +
+ Start the conversation today! +
+ )} +
- ) +
+
+ ); } -export default Home; \ No newline at end of file +export default Home; diff --git a/frontend-next/src/components/app/datatypes.js b/frontend-next/src/components/app/datatypes.js index 91d75e4..5681dec 100644 --- a/frontend-next/src/components/app/datatypes.js +++ b/frontend-next/src/components/app/datatypes.js @@ -2,30 +2,65 @@ import { Map, Marker, ZoomControl } from "pigeon-maps"; // Colors for Messages const userColors = [ - "#ff80ed", - "#065535", - "#133337", - "#ffc0cb", - "#e6e6fa", - "#ffd700", - "#ffa500", - "#0000ff", - "#1b85b8", - "#5a5255", - "#559e83", - "#ae5a41", - "#c3cb71", - ]; + "#ff80ed", + "#065535", + "#133337", + "#ffc0cb", + "#e6e6fa", + "#ffd700", + "#ffa500", + "#0000ff", + "#1b85b8", + "#5a5255", + "#559e83", + "#ae5a41", + "#c3cb71", +]; - let dateOptions = { - weekday: "long", - year: "numeric", - month: "short", - day: "numeric", - hour: "2-digit", - minute: "2-digit", - }; +let dateOptions = { + weekday: "long", + year: "numeric", + month: "short", + day: "numeric", + hour: "2-digit", + minute: "2-digit", +}; +const generateColor = (user_str) => { + // hashes username for consistent colors, maybe all functionality to pick color later + let hash = 0; + for (let i = 0; i < user_str.length; i++) { + hash = user_str.charCodeAt(i) + (hash * 32 - hash); + } + const index = Math.abs(hash) % userColors.length; + return index; +}; + +// Chat Message +export function Chat({ chatObj }) { + return ( +
+
+ + + {chatObj.user} + + + : {chatObj.body} +
+
+ {new Date(chatObj.timestamp).toLocaleString(dateOptions)} +
+
+ ); +} + +// System Chat Message +export function SystemMessage({ chatObj }) { const generateColor = (user_str) => { // hashes username for consistent colors, maybe all functionality to pick color later let hash = 0; @@ -36,129 +71,92 @@ const userColors = [ return index; }; -// Chat Message -export function Chat({ chatObj }) { - return ( -
-
- - {chatObj.user} - - : {chatObj.body} -
-
- {new Date(chatObj.timestamp).toLocaleString(dateOptions)} -
-
- ); - } - -// System Chat Message -export function SystemMessage({ chatObj }) { - -const generateColor = (user_str) => { - // hashes username for consistent colors, maybe all functionality to pick color later - let hash = 0; - for (let i = 0; i < user_str.length; i++) { - hash = user_str.charCodeAt(i) + (hash * 32 - hash); - } - const index = Math.abs(hash) % userColors.length; - return index; -}; - -return ( + return (
-
+
- {chatObj.user} + + {chatObj.user} + {" "} has {chatObj.body} the room. -
-
+
+
{new Date(chatObj.timestamp).toLocaleString(dateOptions)} +
-
-); + ); } - + // Member for Active/Room members in sidebar export function Member({ memberObj }) { - return ( - -
+ return ( + +
{memberObj.username}
- ); - } + ); +} // Chat Room Object for myRooms and Nearby in sidebar export function ChatRoomSidebar({ roomObj, click }) { - // TODO: Gross fix but it works - function clicker() { - click(roomObj); - } - return ( -
-
-
{roomObj.name}
-
{roomObj.description}
-
-
- ); + // TODO: Gross fix but it works + function clicker() { + click(roomObj); } - -// Map module for main page and chat room sidebar -// TODO: MAKE NOT MOVABLE -export function Geo({ loc, zoom, locMarker, markers }) { - if (loc) { - return ( - - {markers && markers} - {locMarker && ( - - )} - {zoom && } - - ); - } else { - return ( - - ); - } - } - - -// Interest for Profile -export function Interest({interest}) { return ( -
-
- {interest} +
+
+
{roomObj.name}
+
{roomObj.description}
- ) + ); } -export function ProfileRoom({room}) { +// Interests for Profile +export function Interest({ interest }) { + return ( +
+
{interest}
+
+ ); +} + +// Display of Rooms on user profile +export function ProfileRoom({ room }) { return (
- +
-
+
{room.name}
{room.description}
-
Created on {new Date(room.timestamp).toLocaleString(dateOptions)}
- Open Room +
+ Created on {new Date(room.timestamp).toLocaleString(dateOptions)} +
+ + Open Room +
- ) -} \ No newline at end of file + ); +} diff --git a/frontend-next/src/components/app/main_tab/chat.js b/frontend-next/src/components/app/main_tab/chat.js index dfdc5d3..78a4da6 100644 --- a/frontend-next/src/components/app/main_tab/chat.js +++ b/frontend-next/src/components/app/main_tab/chat.js @@ -1,95 +1,94 @@ -import { Chat, SystemMessage} from "../datatypes" +import { Chat, SystemMessage } from "../datatypes"; import { useState, useEffect } from "react"; import { Form, useForm } from "react-hook-form"; -import { ref, onValue, set} from "firebase/database"; +import { ref, onValue, set } from "firebase/database"; import { database } from "../../../../firebase-config"; - - // Chatroom Module for Primary Tab +// Chatroom Module for Primary Tab export function MainTabChatRoom({ roomObj, user }) { - var { register, control, reset, handleSubmit } = useForm(); - const [chats, setData] = useState(null); - const [isLoading, setLoading] = useState(true); - - // Message updater - useEffect(() => { - onValue( - ref( - database, - `/rooms/${ - roomObj.path + "/" + roomObj.name + "-" + roomObj.timestamp - }/chats` - ), - (snapshot) => { - var chatsArr = []; - var messages = snapshot.val(); - for (var message in messages) { - if (messages[message].isSystem) { - chatsArr.push( - - ); - } else { - chatsArr.push( - - ); - } + var { register, control, reset, handleSubmit } = useForm(); + const [chats, setData] = useState(null); + const [isLoading, setLoading] = useState(true); + + // Message updater + useEffect(() => { + onValue( + ref( + database, + `/rooms/${ + roomObj.path + "/" + roomObj.name + "-" + roomObj.timestamp + }/chats` + ), + (snapshot) => { + var chatsArr = []; + var messages = snapshot.val(); + for (var message in messages) { + if (messages[message].isSystem) { + chatsArr.push( + + ); + } else { + chatsArr.push( + + ); } - setData(chatsArr.reverse()); - setLoading(false); } - ); - }); - - function sendMessage(data) { - reset(); - var payload = { - body: data.message, - user: user.username, - uid: user.uid, - isSystem: false, - timestamp: new Date().getTime(), - }; - set( - ref( - database, - `/rooms/${ - roomObj.path + "/" + roomObj.name + "-" + roomObj.timestamp - }/chats/${new Date().getTime()}-${user.username}` - ), - payload - ); - } - - if (isLoading) return
Loading
; - if (!chats) return
No Chats
; - return ( -
-
- {chats} -
-
-
- - -
-
-
+ setData(chatsArr.reverse()); + setLoading(false); + } ); - } \ No newline at end of file + }); + + function sendMessage(data) { + reset(); + var payload = { + body: data.message, + user: user.username, + uid: user.uid, + isSystem: false, + timestamp: new Date().getTime(), + }; + set( + ref( + database, + `/rooms/${ + roomObj.path + "/" + roomObj.name + "-" + roomObj.timestamp + }/chats/${new Date().getTime()}-${user.username}` + ), + payload + ); + } + + if (isLoading) return
Loading
; + if (!chats) return
No Chats
; + return ( +
+
+ {chats} +
+
+
+ + +
+
+
+ ); +} diff --git a/frontend-next/src/components/app/main_tab/home.js b/frontend-next/src/components/app/main_tab/home.js index c492063..23fe138 100644 --- a/frontend-next/src/components/app/main_tab/home.js +++ b/frontend-next/src/components/app/main_tab/home.js @@ -1,4 +1,4 @@ -import {Geo} from "../datatypes" +import {Geo} from "../map/geo" // Module for Welcome Message on main tab landing page function WelcomeMessage({user}) { diff --git a/frontend-next/src/components/app/map/geo.js b/frontend-next/src/components/app/map/geo.js new file mode 100644 index 0000000..cbed5d5 --- /dev/null +++ b/frontend-next/src/components/app/map/geo.js @@ -0,0 +1,27 @@ +import { Map, Marker, ZoomControl } from "pigeon-maps"; + + +// Map module for main page and chat room sidebar (and eventually user profile) +// Constructs Map and Markers +export function Geo({ loc, zoom, locMarker, markers }) { + if (loc) { + return ( + + {markers && markers} + {locMarker && ( + + )} + {zoom && } + + ); + } else { + return ( + + ); + } + } \ No newline at end of file diff --git a/frontend-next/src/components/app/map/marker.js b/frontend-next/src/components/app/map/marker.js new file mode 100644 index 0000000..e69de29 diff --git a/frontend-next/src/components/app/sidebar/chat.js b/frontend-next/src/components/app/sidebar/chat.js index 01cc6e3..336b64f 100644 --- a/frontend-next/src/components/app/sidebar/chat.js +++ b/frontend-next/src/components/app/sidebar/chat.js @@ -1,38 +1,42 @@ -import { Geo } from "../datatypes"; +import { Geo } from "../map/geo"; -export function Chat_Sidebar({chatRoomObj, chatroomOnline, chatroomUsersLoading, chatroomUsers, setTab}) { - return ( -
-
-
-
- -
-
- - {chatRoomObj.name} - -
- {chatRoomObj.description} -
-
-
-
Online Members
- {chatroomOnline} -
-
-
All Members
- {!chatroomUsersLoading && chatroomUsers} -
+export function Chat_Sidebar({ + chatRoomObj, + chatroomOnline, + chatroomUsersLoading, + chatroomUsers, + setTab, +}) { + return ( +
+
+
+
+ +
+
+ {chatRoomObj.name} +
+ {chatRoomObj.description}
- ) -} \ No newline at end of file +
+
Online Members
+ {chatroomOnline} +
+
+
All Members
+ {!chatroomUsersLoading && chatroomUsers} +
+
+
+ ); +} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index e48b872..0000000 --- a/package-lock.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "name": "ChatMaps", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "react-router-dom": "^6.22.3" - } - }, - "node_modules/@remix-run/router": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz", - "integrity": "sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "peer": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-router": { - "version": "6.22.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz", - "integrity": "sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==", - "dependencies": { - "@remix-run/router": "1.15.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/react-router-dom": { - "version": "6.22.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.3.tgz", - "integrity": "sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==", - "dependencies": { - "@remix-run/router": "1.15.3", - "react-router": "6.22.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 6d86765..0000000 --- a/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "react-router-dom": "^6.22.3" - } -} -- 2.52.0 From 2571b8cc73c7cdf057dd31c6f400ebe54c48f2fc Mon Sep 17 00:00:00 2001 From: ClarkLach <102780236+ClarkLach@users.noreply.github.com> Date: Sat, 30 Mar 2024 00:55:11 -0400 Subject: [PATCH 3/7] CSS Fixes Got rid of all the errors of duplicate colors/sizing. --- frontend-next/src/app/login/page.js | 2 +- frontend-next/src/app/register/page.js | 2 +- frontend-next/src/app/user/[stub]/page.js | 6 +++--- frontend-next/src/components/app/header.js | 8 ++++---- frontend-next/src/components/app/main_tab/chat.js | 2 +- frontend-next/src/components/app/sidebar/home.js | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/frontend-next/src/app/login/page.js b/frontend-next/src/app/login/page.js index b0ee5aa..0804d06 100644 --- a/frontend-next/src/app/login/page.js +++ b/frontend-next/src/app/login/page.js @@ -45,7 +45,7 @@ function Login() { >

-
+
Have an account? Log In
diff --git a/frontend-next/src/app/user/[stub]/page.js b/frontend-next/src/app/user/[stub]/page.js index d161d90..4444b9e 100644 --- a/frontend-next/src/app/user/[stub]/page.js +++ b/frontend-next/src/app/user/[stub]/page.js @@ -129,8 +129,8 @@ function Home({ params }) { {userInterestArray}
)} @@ -168,7 +168,7 @@ function Home({ params }) {