diff --git a/app/events/[eventId]/event.module.scss b/app/events/[eventId]/event.module.scss new file mode 100644 index 0000000..9019304 --- /dev/null +++ b/app/events/[eventId]/event.module.scss @@ -0,0 +1,48 @@ +.container { + display: flex; + flex-direction: column; + align-items: center; + padding: 1rem; +} + +.eventCard { + background-color: white; + border: 1px solid #ddd; + border-radius: 10px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + margin: 1rem 0; + padding: 1rem; + width: 100%; + max-width: 600px; + + img { + width: 100%; + height: auto; + border-radius: 10px 10px 0 0; + } +} + +.eventDetails { + padding: 1rem; +} + +.eventName { + font-size: 2rem; + font-weight: bold; + margin-bottom: 0.5rem; +} + +.eventType, +.eventCategory, +.eventDate, +.eventDuration, +.eventLocation, +.eventDescription, +.eventOrganizerUrl, +.eventEntryFee { + margin-bottom: 0.5rem; +} + +.backLink { + margin-top: 2rem; +} diff --git a/app/events/[eventId]/page.tsx b/app/events/[eventId]/page.tsx index 81e66a3..9cc50e5 100644 --- a/app/events/[eventId]/page.tsx +++ b/app/events/[eventId]/page.tsx @@ -1,6 +1,7 @@ import Link from 'next/link'; import { notFound } from 'next/navigation'; import { getEventInsecure } from '../../../database/events'; +import styles from './event.module.scss'; type Props = { params: { @@ -31,31 +32,36 @@ export default async function EventPage(props: Props) { } return ( -
-

{singleEvent.name}

- -
+
+

{singleEvent.name}

+
{singleEvent.name} -
- {singleEvent.type} -
- {singleEvent.category} -
- {singleEvent.date.toLocaleDateString()} -
- {formatDuration(singleEvent.duration)} -
- {singleEvent.location} -
- {singleEvent.description} -
- {singleEvent.organizerUrl} -
-

€{singleEvent.entryFee}

-
+
+
{singleEvent.type}
+
{singleEvent.category}
+
+ {singleEvent.date.toLocaleDateString()} +
+
+ {formatDuration(singleEvent.duration)} +
+
{singleEvent.location}
+
+ {singleEvent.description} +
+ +
€{singleEvent.entryFee}
+
-
-
+
Back to Upcoming Events
diff --git a/app/events/events.module.scss b/app/events/events.module.scss new file mode 100644 index 0000000..115eaf7 --- /dev/null +++ b/app/events/events.module.scss @@ -0,0 +1,49 @@ +.container { + display: flex; + flex-direction: column; + align-items: center; + padding: 1rem; +} + +.eventCard { + background-color: white; + border: 1px solid #ddd; + border-radius: 10px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + margin: 1rem 0; + padding: 1rem; + width: 100%; + max-width: 600px; + transition: transform 0.3s; + + &:hover { + transform: scale(1.05); + } + + img { + width: 100%; + height: auto; + border-radius: 10px 10px 0 0; + } +} + +.eventDetails { + padding: 1rem; +} + +.eventName { + font-size: 1.5rem; + font-weight: bold; + margin-bottom: 0.5rem; +} + +.eventType, +.eventDate, +.eventLocation, +.eventCategory { + margin-bottom: 0.5rem; +} + +.backLink { + margin-top: 2rem; +} diff --git a/app/events/page.tsx b/app/events/page.tsx index 4bc4bfa..b174f05 100644 --- a/app/events/page.tsx +++ b/app/events/page.tsx @@ -1,5 +1,6 @@ import Link from 'next/link'; import { getEventsInsecure } from '../../database/events'; +import styles from './events.module.scss'; // Import the CSS module export const metadata = { title: 'Upcoming Events', @@ -9,40 +10,83 @@ export const metadata = { export default async function EventsPage() { const events = await getEventsInsecure(); return ( -
+

These Are Our Currently Listed Upcoming Events

-
{events.map((event) => ( -
- -
- {event.name} -
- {event.type} -
- {event.date.toLocaleDateString()} -
- {event.location} -
- {event.name} - {/* temporary for now */} -
- {event.category} -
-
+ +
+ {event.name} +
+
{event.name}
+
{event.type}
+
+ {event.date.toLocaleDateString()} +
+
{event.location}
+
{event.category}
-
-
- -
+
+ ))} -
-
-
+
Back to Home page
); } + +// import Link from 'next/link'; +// import { getEventsInsecure } from '../../database/events'; +// import styles from './events.module.scss'; + +// export const metadata = { +// title: 'Upcoming Events', +// description: 'Upcoming events around the city', +// }; + +// export default async function EventsPage() { +// const events = await getEventsInsecure(); +// return ( +//
+//

These Are Our Currently Listed Upcoming Events

+//
+//
+// {events.map((event) => ( +//
+// +//
+// {event.name} +//
+// {event.type} +//
+// {event.date.toLocaleDateString()} +//
+// {event.location} +//
+// {event.name} +// {/* temporary for now */} +//
+// {event.category} +//
+//
+//
+//
+//
+// +//
+// ))} +//
+//
+//
+//
+// Back to Home page +//
+//
+// ); +// } diff --git a/app/globals.scss b/app/globals.scss index 16756c6..d16fcc9 100644 --- a/app/globals.scss +++ b/app/globals.scss @@ -1,49 +1,76 @@ :root { - --color-background: rgb(253, 247, 228); - --color-layout: rgb(222, 208, 182); + --color-background: #fdf7e4; + --color-layout: #ded0b6; + --color-primary: #ff6f61; // New vibrant color + --color-secondary: #3b5998; // Another vibrant color + --color-accent: #b4c2da; // Accent color + --color-text: #333; + --color-link: #007bff; + --color-link-hover: #0056b3; +} + +* { + box-sizing: border-box; } body { margin: 0; - font-family: -apple-system, 'system-ui', 'Segoe UI', 'Noto Sans', Helvetica, - Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'; + font-family: + 'Geist Sans', + 'Geist Mono', + -apple-system, + 'system-ui', + 'Segoe UI', + 'Noto Sans', + Helvetica, + Arial, + sans-serif, + 'Apple Color Emoji', + 'Segoe UI Emoji'; background: var(--color-background); - // Avoid fixed footer obscuring content - padding-bottom: 50px; + color: var(--color-text); + padding: 1rem; + padding-bottom: 50px; // Keep the padding-bottom for the footer + + @media (min-width: 768px) { + padding: 2rem; + } + + @media (min-width: 1024px) { + padding: 3rem; + } } main { padding: 1rem; -} -a { - color: black; + @media (min-width: 768px) { + padding: 2rem; + } } -nav { - width: 100vw; - height: 4rem; - background: var(--color-layout); - display: flex; - justify-content: space-around; - align-items: center; - - > div { - display: flex; - align-items: center; - gap: 0.625rem; - } +a { + color: var(--color-link); + transition: color 0.3s; - > div a { - margin: 0.25rem; + &:hover { + color: var(--color-link-hover); } } button { font-size: 0.875rem; border-radius: 6px; - padding: 0.5rem; + padding: 0.5rem 1rem; cursor: pointer; + background: var(--color-primary); + color: white; + border: none; + transition: background 0.3s; + + &:hover { + background: var(--color-secondary); + } } label { @@ -54,7 +81,90 @@ label { input { font-size: 1rem; border-radius: 5px; - border: 1px solid; - padding: 0.5rem; + border: 1px solid var(--color-layout); + padding: 0.75rem; margin-bottom: 0.5rem; + transition: border-color 0.3s; + + &:focus { + border-color: var(--color-primary); + outline: none; + } } + +footer { + background: var(--color-layout); + padding: 1rem; + text-align: center; + border-top: 1px solid var(--color-primary); + + a { + color: var(--color-link); + margin: 0 0.5rem; + + &:hover { + color: var(--color-link-hover); + } + } +} + +// :root { +// --color-background: rgb(253, 247, 228); +// --color-layout: rgb(222, 208, 182); +// } + +// body { +// margin: 0; +// font-family: -apple-system, 'system-ui', 'Segoe UI', 'Noto Sans', Helvetica, +// Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'; +// background: var(--color-background); +// // Avoid fixed footer obscuring content +// padding-bottom: 50px; +// } + +// main { +// padding: 1rem; +// } + +// a { +// color: black; +// } + +// nav { +// width: 100vw; +// height: 4rem; +// background: var(--color-layout); +// display: flex; +// justify-content: space-around; +// align-items: center; + +// > div { +// display: flex; +// align-items: center; +// gap: 0.625rem; +// } + +// > div a { +// margin: 0.25rem; +// } +// } + +// button { +// font-size: 0.875rem; +// border-radius: 6px; +// padding: 0.5rem; +// cursor: pointer; +// } + +// label { +// display: flex; +// flex-direction: column; +// } + +// input { +// font-size: 1rem; +// border-radius: 5px; +// border: 1px solid; +// padding: 0.5rem; +// margin-bottom: 0.5rem; +// } diff --git a/app/layout.module.scss b/app/layout.module.scss new file mode 100644 index 0000000..aea6b44 --- /dev/null +++ b/app/layout.module.scss @@ -0,0 +1,50 @@ +.nav { + width: 100vw; + height: 4rem; + background: linear-gradient( + to right, + var(--color-primary), + var(--color-secondary) + ); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + display: flex; + align-items: center; + padding: 0 2rem; +} + +.navLinks { + display: flex; + align-items: center; + gap: 1rem; // Adjust spacing as needed +} + +.navLinks > a, +.navLinks > button { + color: white; + font-weight: bold; + text-transform: uppercase; + margin: 0.25rem; + transition: color 0.3s; + + &:hover { + color: var(--color-accent); + } +} + +.userLinks { + display: flex; + align-items: center; + gap: 1rem; // Adjust spacing as needed +} + +.userLinks > a { + color: white; + font-weight: bold; + text-transform: uppercase; + margin: 0.25rem; + transition: color 0.3s; + + &:hover { + color: var(--color-accent); + } +} diff --git a/app/layout.tsx b/app/layout.tsx index e185003..27b02b6 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -4,6 +4,7 @@ import { cookies } from 'next/headers'; import Link from 'next/link'; import { getUser } from '../database/users'; import LogoutButton from './(auth)/logout/LogoutButton'; +import styles from './layout.module.scss'; const geistSans = localFont({ src: './fonts/GeistVF.woff', @@ -39,24 +40,19 @@ export default async function RootLayout({ children }: Props) {
-