diff --git a/app/services-and-resources/documents/page.tsx b/app/about/documents/page.tsx similarity index 100% rename from app/services-and-resources/documents/page.tsx rename to app/about/documents/page.tsx diff --git a/app/about/executives/page.tsx b/app/about/executives/page.tsx index a2f6945..f11285c 100644 --- a/app/about/executives/page.tsx +++ b/app/about/executives/page.tsx @@ -90,63 +90,60 @@ export default async function Executives() { const executives = await loadExecutives(); return ( -
-
- - - Get to know your 2024-25 ASSU Executive Team. - - -
- {executives.map((executive, index) => ( -
-
- {executive.image ? ( - {`${executive.name}${ - ) : ( -
- No image available -
- )} -
- -
- - {executive.name} - - {executive.title && ( - - {executive.title} - - )} -
+
+ + + Get to know your 2024-25 ASSU Executive Team. + +
+ {executives.map((executive, index) => ( +
+
+ {executive.image ? ( + {`${executive.name}${ + ) : ( +
+ No image available +
+ )} +
+
- {executive.bio} + {executive.name} + {executive.title && ( + + {executive.title} + + )}
- ))} -
+ + + {executive.bio} + +
+ ))}
diff --git a/app/about/page.tsx b/app/about/page.tsx index f47c3b1..cb78808 100644 --- a/app/about/page.tsx +++ b/app/about/page.tsx @@ -6,6 +6,7 @@ import VerticalTimeline, { } from "@/components/common/VerticalTimeline"; import MapSection from "@/components/common/MapSection"; import ContactInfoGrid from "@/components/layout/ContactInfoGrid"; +import HeroText from "@/components/sections/HeroText"; export default function About() { const overlays: OverlayBlock[] = [ @@ -28,51 +29,45 @@ export default function About() { ]; return ( -
-
- - - - About the ASSU - - - - The Arts and Science Students’ Union (ASSU) is the academic student - union for over 27,000 full-time undergraduate students in the Faculty - of Arts & Science at the University of Toronto. Based in Sidney Smith, - 1068, ASSU is made up of over 60 course unions, 7 elected executives, - and 3 staff members. Through our structure of course unions, we - organize with students and community members to hold events, change - policies, improve programs, run successful campaigns, and provide - support for academic grievances. - - - ASSU recognizes that our academic experience is inherently linked to - our lived experience and seeks to support our members in addressing - the systemic barriers that they face, including poverty, racism, - sexism, homophobia, transphobia, ableism, and discrimination based - upon immigration status. We work to ensure that the academic needs and - concerns of all students are fulfilled. - - - - - - - - -
+
+ + + + The Arts and Science Students’ Union (ASSU) is the academic student + union for over 27,000 full-time undergraduate students in the Faculty of + Arts & Science at the University of Toronto. Based in Sidney Smith, + 1068, ASSU is made up of over 60 course unions, 7 elected executives, + and 3 staff members. Through our structure of course unions, we organize + with students and community members to hold events, change policies, + improve programs, run successful campaigns, and provide support for + academic grievances. + + + ASSU recognizes that our academic experience is inherently linked to our + lived experience and seeks to support our members in addressing the + systemic barriers that they face, including poverty, racism, sexism, + homophobia, transphobia, ableism, and discrimination based upon + immigration status. We work to ensure that the academic needs and + concerns of all students are fulfilled. + + + + + + + +
); } diff --git a/app/about/staff/page.tsx b/app/about/staff/page.tsx index 38aa2e3..2927928 100644 --- a/app/about/staff/page.tsx +++ b/app/about/staff/page.tsx @@ -4,6 +4,7 @@ import React from "react"; import Text from "@/components/common/Text"; import Image from "next/image"; import HeroText from "@/components/sections/HeroText"; +import Divider from "@/components/common/Divider"; type StaffMember = { name: string; @@ -32,80 +33,73 @@ const staff: StaffMember[] = [ export default function Staff() { return ( -
+
{/* Header Section */} -
-
- - - At the heart of the ASSU is a dedicated group of individuals - committed to enriching the academic and campus experience for all - Arts and Science students at the University of Toronto. - -
-
+ + + At the heart of the ASSU is a dedicated group of individuals committed + to enriching the academic and campus experience for all Arts and Science + students at the University of Toronto. + + - {/* Staff Grid */} -
- {staff.map((member, index) => ( -
-
- {member.image ? ( - {`${member.name}${ - ) : ( -
- No image available -
- )} -
+ {/* Staff Grid */} +
+ {staff.map((member, index) => ( +
+
+ {member.image ? ( + {`${member.name}${ + ) : ( +
+ No image available +
+ )} +
-
+
+ + {member.name} + + {member.title && ( - {member.name} + {member.title} - {member.title && ( - - {member.title} - - )} -
+ )} +
- - {member.bio} - + + {member.bio} + - - {member.email} - -
- ))} -
+ + {member.email} + +
+ ))}
); diff --git a/app/awards-and-grants/awards/page.tsx b/app/awards-and-grants/awards/page.tsx index 65884a6..bfbf4dd 100644 --- a/app/awards-and-grants/awards/page.tsx +++ b/app/awards-and-grants/awards/page.tsx @@ -1,6 +1,7 @@ import Link from "@/components/common/Link"; import Divider from "../../../components/common/Divider"; import Tabs, { TabItem } from "../../../components/common/Tabs"; +import HeroText from "@/components/sections/HeroText"; type AwardLink = { label: string; @@ -802,16 +803,7 @@ export default function Awards() { return (
- {/* Top horizontal line */} - - - {/* ASSU Awards Title */} -

- ASSU Awards -

- - {/* Bottom horizontal line */} - + {/* Gavin Nowlan Award Section */}
@@ -837,8 +829,7 @@ export default function Awards() {
- {/* Separator line */} -
+ {/* William Gardner Award Section */}
@@ -864,8 +855,7 @@ export default function Awards() {
- {/* Separator line */} -
+ {/* Abdullah Shihipar Award Section */}
@@ -891,8 +881,7 @@ export default function Awards() {
- {/* Separator line */} -
+ {/* Ikran Jama Award Section */}
@@ -918,8 +907,7 @@ export default function Awards() {
- {/* Separator line */} -
+ {/* Fatemeh Nami Award Section */}
@@ -945,8 +933,7 @@ export default function Awards() {
- {/* Separator line */} -
+ {/* ASSU First Year Award Section */}
@@ -972,8 +959,7 @@ export default function Awards() {
- {/* Separator line */} -
+ {/* ASSU 2nd Year Award Section */}
@@ -999,8 +985,7 @@ export default function Awards() {
- {/* Separator line */} -
+ {/* Ranjini Ghosh Teaching Award Section */}
@@ -1026,8 +1011,7 @@ export default function Awards() {
- {/* Separator line */} -
+ {/* Sanjeev Dewett Course Union Award Section */}
@@ -1053,8 +1037,7 @@ export default function Awards() {
- {/* Separator line */} -
+ {/* Terry Buckland Award Section */}
@@ -1066,8 +1049,7 @@ export default function Awards() {
- {/* Separator line */} -
+ {/* Urmila Sarkar Service Award Section */}
@@ -1079,8 +1061,7 @@ export default function Awards() {
- {/* Separator line */} -
+ {/* Katharine Ball Award Section */}
@@ -1106,8 +1087,7 @@ export default function Awards() {
- {/* Separator line */} -
+ {/* Ali Saeed Memorial Award Section */}
@@ -1133,8 +1113,7 @@ export default function Awards() {
- {/* Separator line */} -
+ {/* ASSU Graduating Student Leadership Award Section */}
@@ -1160,7 +1139,6 @@ export default function Awards() {
- {/* Separator line */}
{/* ASSU New Student Initiative Award Section */} diff --git a/app/awards-and-grants/grants/page.tsx b/app/awards-and-grants/grants/page.tsx index a14147a..a3229b1 100644 --- a/app/awards-and-grants/grants/page.tsx +++ b/app/awards-and-grants/grants/page.tsx @@ -4,6 +4,7 @@ import React from "react"; import ContentGrid, { ContentItem } from "@/components/layout/ContentGrid"; import Divider from "@/components/common/Divider"; import Link from "@/components/common/Link"; +import HeroText from "@/components/sections/HeroText"; // Grid items for the Grants page const items: ContentItem[] = [ @@ -11,17 +12,7 @@ const items: ContentItem[] = [ id: "travel-grant", title: "ASSU Travel Grant", mergeKey: "travel", - node: ( -
- {/* */} -
- ), + node:
, }, { id: "travel-grant-desc", @@ -46,17 +37,7 @@ const items: ContentItem[] = [ id: "deferred-exam-fee-1", title: "Deferred Exam Fee Grant", mergeKey: "defer", - node: ( -
- {/* */} -
- ), + node:
, }, { id: "deferred-exam-fee-1-desc", @@ -82,17 +63,7 @@ const items: ContentItem[] = [ id: "donation-requests", title: "Donation Requests", mergeKey: "donation", - node: ( -
- {/* */} -
- ), + node:
, }, { id: "donation-requests-desc", @@ -118,37 +89,29 @@ const items: ContentItem[] = [ export default function GrantsPage() { return ( -
-
- -

- ASSU Grants -

- +
+ - {/* Top notice line under the heading */} -

- All forms should be submitted to{" "} - ASSU office (Sid Smith Room 1068), or - email{" "} - - students.assu@utoronto.ca - - . -

+

+ All forms should be submitted to{" "} + ASSU office (Sid Smith Room 1068), or + email{" "} + + students.assu@utoronto.ca + + . +

- + - {/* ContentGrid draws the thin separators between cells like the mock */} - + - -
+
); } diff --git a/app/awards-and-grants/page.tsx b/app/awards-and-grants/page.tsx index adf602f..a13fbac 100644 --- a/app/awards-and-grants/page.tsx +++ b/app/awards-and-grants/page.tsx @@ -43,13 +43,11 @@ export default function AwardsAndGrants() { Check eligibility, application deadlines, and get guidance on securing funding for your academic journey. - - {/* add content grid here */} +
); diff --git a/app/contact-us/page.tsx b/app/contact-us/page.tsx index cbbb4c2..9701a6f 100644 --- a/app/contact-us/page.tsx +++ b/app/contact-us/page.tsx @@ -2,11 +2,11 @@ import Divider from "../../components/common/Divider"; import MapSection from "../../components/common/MapSection"; -import Link from "@/components/common/Link"; import Accordion, { type AccordionItemData, } from "@/components/common/Accordion"; import HeroText from "@/components/sections/HeroText"; +import ContactInfoGrid from "@/components/layout/ContactInfoGrid"; const faqItems: AccordionItemData[] = [ { @@ -55,101 +55,28 @@ const faqItems: AccordionItemData[] = [ export default function ContactUs() { return ( -
-
- -
- -
+
+ + - {/* removed unused contact form, TODO LATER */} + {/* removed unused contact form, TODO LATER */} + + + - {/* Contact Information Section - 4 columns */} -
- -
- {/* Column 1 - Three dots SVG and Contact Us */} -
-

- Contact Us -

-
- {/* Column 2 - Address */} -
-
-
-

- Address -

-
-

100 St. George Street

-

Sidney Smith Hall

-

Room 1068

-
-
-
- - {/* Column 3 - Contact Details */} -
-
-
-

- Contact -

-
-

Phone: (416) 978-4903

-

Fax: (416) 971-2161

-

students.assu@utoronto.ca

-
- - Linkedin - - - Instagram - -
-
-
-
- - {/* Column 4 - Opening Hours */} -
-
-
-

- Opening Hours -

-
-

Monday 10:00 am - 5:00 pm

-

Tuesday 10:00 am - 5:00 pm

-

Wednesday 10:00 am - 6:00 pm

-

Thursday 10:00 am - 6:00 pm

-

- Friday 10:00 am - 5:00 pm (Friday closed from May-Aug) -

-

Weekends Closed

-
-
-
-
- {/* Final thick horizontal line */} - -
- - {/* Map Section */} - -
+ {/* Map Section */} +
); } diff --git a/app/course-unions/page.tsx b/app/course-unions/page.tsx index 7f962ce..11f9764 100644 --- a/app/course-unions/page.tsx +++ b/app/course-unions/page.tsx @@ -39,50 +39,51 @@ export default async function CourseUnionsPage() { const unions = await loadCourseUnions(); return ( -
-
- - - Course Unions are the core of the Arts and Science Students' - Union. From A to Z, Anthropology to Women & Gender Studies, these - academic unions represent the students in disciplines within the - Faculty of Arts and Science and by taking any course you are - automatically a part of them. -
-
- We have nearly 55 active Course Unions offering several academic and - social services for their members. While each Course Union is unique, - both in vision and in form, all share the common goals of meeting - students' needs and representing students' views. -
-
- - {unions.map((union, index) => ( - - - {union.name} - - - - {union.link} - - - - ))} - -
-
-
+
+ + + Course Unions are the core of the Arts and Science Students' Union. + From A to Z, Anthropology to Women & Gender Studies, these academic + unions represent the students in disciplines within the Faculty of Arts + and Science and by taking any course you are automatically a part of + them. + + + We have nearly 55 active Course Unions offering several academic and + social services for their members. While each Course Union is unique, + both in vision and in form, all share the common goals of meeting + students' needs and representing students' views. + +
+ + {unions.map((union, index) => ( + + + {union.name} + + + + {union.link} + + + + ))} + +
+
); } diff --git a/app/course-unions/union-resources/page.tsx b/app/course-unions/union-resources/page.tsx index cfa7f3b..f8f3b2f 100644 --- a/app/course-unions/union-resources/page.tsx +++ b/app/course-unions/union-resources/page.tsx @@ -48,8 +48,8 @@ export default function UnionResources() { ]; return ( -
-
+
+
{/* Main layout container */}
{/* Left side - Header, description, contact, and diamonds */} diff --git a/app/get-involved/current/page.tsx b/app/get-involved/current/page.tsx index aa42552..b6629f5 100644 --- a/app/get-involved/current/page.tsx +++ b/app/get-involved/current/page.tsx @@ -1,5 +1,6 @@ import HeroImage from "@/components/sections/HeroImage"; import Divider from "@/components/common/Divider"; +import HeroText from "@/components/sections/HeroText"; export default function Current() { // Current projects data based on the Wix site with specific text formatting @@ -103,18 +104,8 @@ export default function Current() { return (
{/* Current Projects Section */} -
- {/* Divider above Current Projects */} - - -
-

- Current Projects -

- {/* Divider below title */} - -
- +
+ {/* Projects Grid - Responsive layout */}
{/* Mobile: Single column layout */} @@ -338,7 +329,7 @@ export default function Current() {
{/* Hero Image Section */} -
+
{/* Achievements Section */} -
- {/* Divider above Achievements */} - - -
-

- Achievements in the Past Year -

- {/* Divider below title */} - -
+
+ {/* Simple bulleted list */} -
+
    {achievements.map((achievement, index) => (
  • diff --git a/app/get-involved/initiatives/page.tsx b/app/get-involved/initiatives/page.tsx index fd795b8..0bd9502 100644 --- a/app/get-involved/initiatives/page.tsx +++ b/app/get-involved/initiatives/page.tsx @@ -5,6 +5,7 @@ import Button from "@/components/common/Button"; import ContentGrid, { ContentItem } from "@/components/layout/ContentGrid"; import Divider from "@/components/common/Divider"; import AssuImage from "@/components/common/AssuImage"; +import HeroText from "@/components/sections/HeroText"; // Content items for the Initiatives page (pairs row-by-row in the grid) const items: ContentItem[] = [ @@ -80,24 +81,13 @@ const items: ContentItem[] = [ export default function InitiativesPage() { return ( -
    -
    - -

    - Our Initiatives -

    - +
    + - {/* ContentGrid draws the thin separators between cells like the mock */} - + {/* ContentGrid draws the thin separators between cells like the mock */} + - -
    +
    ); } diff --git a/app/get-involved/page.tsx b/app/get-involved/page.tsx index 57f1ee1..40458df 100644 --- a/app/get-involved/page.tsx +++ b/app/get-involved/page.tsx @@ -4,6 +4,7 @@ import React from "react"; import Button from "@/components/common/Button"; import ContentGrid, { ContentItem } from "@/components/layout/ContentGrid"; import Divider from "@/components/common/Divider"; +import HeroText from "@/components/sections/HeroText"; // Define data const items: ContentItem[] = [ @@ -57,19 +58,15 @@ const items: ContentItem[] = [ export default function GetInvolved() { return ( -
    +
    - - {/* Page Title */} -

    Get Involved

    - + - {/* ContentGrid draws the thin separators between cells like the mock */} diff --git a/app/get-involved/upcoming/page.tsx b/app/get-involved/upcoming/page.tsx index 2560bee..e360b7b 100644 --- a/app/get-involved/upcoming/page.tsx +++ b/app/get-involved/upcoming/page.tsx @@ -17,40 +17,18 @@ export default async function Upcoming() { // Fetch upcoming posts data at build time const allPosts = await fetchUpcomingPosts(); - // Get current date (at start of day for comparison) - const today = new Date(); - today.setHours(0, 0, 0, 0); - - // Separate upcoming and past events - const upcomingPosts = allPosts.filter((post) => { - // Clone the date to avoid mutating the original - const postDate = new Date(post.dateObj.getTime()); - postDate.setHours(0, 0, 0, 0); - return postDate >= today; - }); - - const pastPosts = allPosts.filter((post) => { - // Clone the date to avoid mutating the original - const postDate = new Date(post.dateObj.getTime()); - postDate.setHours(0, 0, 0, 0); - return postDate < today; - }); - - // Sort upcoming posts by date (earliest first) and past posts by date (newest first) - upcomingPosts.sort((a, b) => a.dateObj.getTime() - b.dateObj.getTime()); - pastPosts.sort((a, b) => b.dateObj.getTime() - a.dateObj.getTime()); - - console.log( - `Filtered posts: ${upcomingPosts.length} upcoming, ${pastPosts.length} past` + // Sort all events by date (newest first) + const sortedPosts = [...allPosts].sort( + (a, b) => b.dateObj.getTime() - a.dateObj.getTime() ); return ( <> - {pastPosts.length > 0 && } - {pastPosts.length === 0 && ( + {sortedPosts.length > 0 && } + {sortedPosts.length === 0 && (

    - No past events to display. + No events to display.

    )} diff --git a/app/not-found.tsx b/app/not-found.tsx index 3d2ed93..8f9dc0d 100644 --- a/app/not-found.tsx +++ b/app/not-found.tsx @@ -15,7 +15,6 @@ export default function NotFound() { 404 - {/* Error Message */} -

    - Title 1 -

    -

    - Description 1. This is some sample text content for the first tab. You - can put any content here that you want to display when this tab is - active. -

    -

    - Additional description text for tab 1 content area. -

    -
    - ), - }, - { - id: "tab2", - label: "Title 2", - content: ( -
    -

    - Title 2 -

    -

    - Description 2. This is some sample text content for the second tab. - You can customize this content as needed for your specific use case. -

    -

    - Additional description text for tab 2 content area. -

    -
    - ), - }, - { - id: "tab3", - label: "Title 3", - content: ( -
    -

    - Title 3 -

    -

    - Description 3. This is some sample text content for the third tab. The - tab component supports as many tabs as you need. -

    -

    - Additional description text for tab 3 content area. -

    -
    - ), - }, -]; - -export default function Home() { - return ( - <> -
    -
    - {/* Page Title */} - {/* Page Title */} -

    - ASSU Styling Demo -

    - - {/* Colors & Typography Section */} -
    - {/* Brand Colors */} - {/* Brand Colors */} -
    -

    - Primary Brand Color -

    -
    -
    -
    - - Primary Pink (pink) - Most used color - -
    -
    -
    - - Light Pink (pink-light) - -
    -
    -
    - - Lighter Pink (pink-lighter) - -
    -
    -
    - - {/* Typography */} - {/* Typography */} -
    -

    Typography

    -
    -

    - Questrial Heading -

    -

    - din-next-w01-light Body -

    -

    Secondary Text

    -

    Small Text

    -
    -
    -
    - - {/* Buttons */} -
    -

    - ASSU Button Styles -

    -
    - -
    -
    - -
    - -
    - -
    -
    -
    Primary Pink
    -
    pink
    -
    -
    -
    - Light Pink -
    -
    pink-light
    -
    -
    -
    - Lighter Pink -
    -
    - pink-lighter -
    -
    -
    -
    Dark Blue
    -
    blue-dark
    -
    -
    - - {/* Image Card */} -
    -

    Image Card

    -
    - -
    -
    - - {/* Image Card Grid */} -
    -

    - Image Card Grid -

    -
    - -
    -
    - - {/* Content Grid */} -
    -

    - Image Card Grid -

    -
    - Button, - }, - { - id: "current2", - title: "Ethics pre-requisite", - description: "Ethics pre-requisite module", - ariaLabel: "Ethics pre-requisite module", - node: , - }, - { - id: "current3", - title: "Syllabus archive", - description: "Digital Syllabus archive", - ariaLabel: "Digital Syllabus archive", - node: , - }, - { - id: "current4", - title: "Room 1068", - description: "Revitalizing Room 1068 ASSU Podcast", - ariaLabel: "Revitalizing Room 1068 ASSU Podcast", - node: , - }, - ]} - columns={2} - ariaLabel="content grid" - /> -
    -
    - -
    - - Top left title - - ), - position: "top-left", - }, - { - content: ( - - Bottom right description - - ), - position: "bottom-right", - }, - ]} - /> - - -
    - -
    - -
    - - {/* Map Section */} - -
    -
    - - ); -} diff --git a/app/services-and-resources/handbook/page.tsx b/app/services-and-resources/handbook/page.tsx index c5d62c2..7d5e414 100644 --- a/app/services-and-resources/handbook/page.tsx +++ b/app/services-and-resources/handbook/page.tsx @@ -2,15 +2,12 @@ import Divider from "@/components/common/Divider"; import Text from "@/components/common/Text"; import Link from "@/components/common/Link"; import Image from "next/image"; +import HeroText from "@/components/sections/HeroText"; export default function Handbook() { return (
    - - - Academic Handbook - - + The ASSU Academic Handbook is an essential guide to rules, regulations, and services that students need to be aware of at the St. George campus diff --git a/app/services-and-resources/misc/page.tsx b/app/services-and-resources/misc/page.tsx index feb3e2e..b40b486 100644 --- a/app/services-and-resources/misc/page.tsx +++ b/app/services-and-resources/misc/page.tsx @@ -2,6 +2,7 @@ import Divider from "components/common/Divider"; import Text from "components/common/Text"; // import Link from "components/common/Link"; import LinkSection, { LinkItem } from "components/common/LinkSection"; +import HeroText from "@/components/sections/HeroText"; export default function Misc() { const studentSocieties: LinkItem[] = [ @@ -64,11 +65,7 @@ export default function Misc() { return (
    - - - Useful Links - - + Find essential links to student societies, academic resources, and U of T services.
    Easily access the resources that keep you informed @@ -78,7 +75,6 @@ export default function Misc() { -
    ); } diff --git a/app/services-and-resources/office-services/page.tsx b/app/services-and-resources/office-services/page.tsx index 996ce7d..54542b6 100644 --- a/app/services-and-resources/office-services/page.tsx +++ b/app/services-and-resources/office-services/page.tsx @@ -4,6 +4,8 @@ import React from "react"; import ContentGrid, { ContentItem } from "@/components/layout/ContentGrid"; import Divider from "@/components/common/Divider"; import Link from "@/components/common/Link"; +import HeroText from "@/components/sections/HeroText"; +import Text from "@/components/common/Text"; // Grid items for Office Services const items: ContentItem[] = [ @@ -160,32 +162,22 @@ const items: ContentItem[] = [ export default function OfficeServicesPage() { return ( -
    -
    - -

    - Office Services -

    - +
    + - {/* Intro body text under the heading */} -

    - Supporting students with essential resources, our office services - provide printing, study spaces, locker rentals, and administrative - assistance to enhance your campus experience. Visit us for everything - you need! -

    + {/* Intro body text under the heading */} + + Supporting students with essential resources, our office services + provide printing, study spaces, locker rentals, and administrative + assistance to enhance your campus experience. Visit us for everything + you need! + + - {/* Main content grid */} - + {/* Main content grid */} + - -
    +
    ); } diff --git a/app/services-and-resources/page.tsx b/app/services-and-resources/page.tsx index 7ba10ce..aefd255 100644 --- a/app/services-and-resources/page.tsx +++ b/app/services-and-resources/page.tsx @@ -2,6 +2,8 @@ import Text from "@/components/common/Text"; import HeroText from "@/components/sections/HeroText"; import ContentGrid from "@/components/layout/ContentGrid"; import Link from "next/link"; +import Divider from "@/components/common/Divider"; +import Button from "@/components/common/Button"; export default function ServicesAndResources() { const services = [ @@ -122,68 +124,50 @@ export default function ServicesAndResources() { return (
    {/* Header Section */} -
    -
    - - - - ASSU offers a various amount of services in order to provide support - for students. -
    -
    - Stop by anytime to scan our events board and see what current - campaigns ASSU has going on or to take a break between classes and - chat with our friendly executive and staff! -
    -
    -
    - + + + ASSU offers a various amount of services in order to provide support for + students. + + + Stop by anytime to scan our events board and see what current campaigns + ASSU has going on or to take a break between classes and chat with our + friendly executive and staff! + + {/* Services Grid*/} -
    -
    - ({ - id: service.id, - node: ( -
    -
    - {service.icon} -
    -
    -

    - {service.title} -

    -

    - {service.description} -

    -
    - - EXPLORE - - - - + ({ + id: service.id, + node: ( +
    +
    +
    + {service.icon}
    - ), - }))} - /> -
    -
    +
    +

    + {service.title} +

    +

    + {service.description} +

    +
    +
    + + +
    + ), + }))} + /> +
    ); } diff --git a/app/services-and-resources/resources/page.tsx b/app/services-and-resources/resources/page.tsx index 4ed4b38..abcdb23 100644 --- a/app/services-and-resources/resources/page.tsx +++ b/app/services-and-resources/resources/page.tsx @@ -4,6 +4,7 @@ import Accordion, { type AccordionItemData, } from "@/components/common/Accordion"; import ContentGrid from "@/components/layout/ContentGrid"; +import Divider from "@/components/common/Divider"; const faqItems: AccordionItemData[] = [ { @@ -36,6 +37,36 @@ const faqItems: AccordionItemData[] = [ answer: "Victoria College tutors help with labs, concepts, and past test questions. Tutoring is free and open to all enrolled Arts and Science chemistry students.", }, + { + value: "faq-6", + question: "Math Aid Centres", + answer: + "The Department of Mathematics provides free math assistance to all first-year Arts & Science students, with one-on-one tutoring available.", + }, + { + value: "faq-7", + question: "Statistics Aid Centres", + answer: + "The Department of Statistics provides free statistical help to undergraduate students.", + }, + { + value: "faq-8", + question: "Economics Study Centre", + answer: + "The Department of Economics provides free assistance to students enrolled in core undergraduate economics courses.", + }, + { + value: "faq-9", + question: "Philosophy Essay Clinic", + answer: + "The Department of Philosophy provides free assistance to students enrolled in philosophy courses at the University.", + }, + { + value: "faq-10", + question: "English Language Learning (ELL)", + answer: + "The English Language Learning Program supports all U of T undergraduates enrolled in the Faculty of Arts and Science whose first language is not English (ESL or multilingual students), as well as native speakers seeking to improve their English language skills.", + }, ]; const collegeResources = [ @@ -143,18 +174,19 @@ const collegeResources = [ export default function Resources() { return ( -
    - +
    + - -
    - ({ + + ({ id: college.id, node: (
    @@ -171,7 +203,7 @@ export default function Resources() { href={link.href} target="_blank" rel="noopener noreferrer" - className="px-3 py-2 text-xs bg-gray-dark text-white rounded-none hover:bg-gray-800 transition min-h-[40px] text-left" + className="px-3 py-2 text-xs bg-gray-dark text-white rounded-none hover:bg-gray-800 transition min-h-[40px]" > {link.label} @@ -179,9 +211,35 @@ export default function Resources() {
    ), - }))} - /> -
    + })), + { + id: "icons-only", + node: ( +
    + + + + + + +
    + ), + }, + ]} + />
    ); } diff --git a/app/services-and-resources/tests/page.tsx b/app/services-and-resources/tests/page.tsx index 5f42003..024c3a1 100644 --- a/app/services-and-resources/tests/page.tsx +++ b/app/services-and-resources/tests/page.tsx @@ -2,6 +2,7 @@ import React from "react"; import HeroText from "../../../components/sections/HeroText"; import Divider from "../../../components/common/Divider"; import { KeyValueList } from "../../../components/common/KeyValueList"; +import Text from "../../../components/common/Text"; import { fetchTestsData } from "@/lib/tests"; export async function generateStaticParams() { @@ -20,27 +21,31 @@ export default async function Tests() { const testData = await fetchTestsData(); return ( -
    +
    - -
    -

    + + All the tests listed below have been donated by students in the past. -

    -

    + + You can access them at our{" "} - ASSU office at SS1068{" "} + + ASSU office at SS1068 + {" "} (not available online). -

    -

    + + We are currently having a Test Drive in attempts to greatly expand our test bank. We are having a draw for the students who donate tests we don't currently have.{" "} - + Past tests can be submitted to the ASSU office. - -

    -
    + + + diff --git a/components/common/LinkSection.tsx b/components/common/LinkSection.tsx index fe4c136..a5e92ac 100644 --- a/components/common/LinkSection.tsx +++ b/components/common/LinkSection.tsx @@ -21,9 +21,9 @@ export default function LinkSection({ className = "", }: LinkSectionProps) { return ( -
    +
    {/* Main layout container */} -
    +
    {/* Left side - Header and Arrow */}
    {/* Header at top left */} diff --git a/components/common/Tabs.tsx b/components/common/Tabs.tsx index fc276e7..5589b6b 100644 --- a/components/common/Tabs.tsx +++ b/components/common/Tabs.tsx @@ -1,7 +1,12 @@ "use client"; import { useState } from "react"; -import { Tabs as TabsRoot, TabsList, TabsTrigger, TabsContent } from "../ui/tabs"; +import { + Tabs as TabsRoot, + TabsList, + TabsTrigger, + TabsContent, +} from "../ui/tabs"; export interface TabItem { id: string; @@ -41,12 +46,11 @@ export default function Tabs({ > {/* Tab List */}
    - - {tabs.map((tab, index) => { + {tabs.map((tab, _index) => { const isActive = tab.id === activeTab; return ( (arr: T[], size: number): T[][] { } function groupForMobile(items: ContentItem[], enabled: boolean) { - if (!enabled) return items.map(i => [i]); + if (!enabled) return items.map((i) => [i]); const groups: ContentItem[][] = []; let i = 0; while (i < items.length) { @@ -49,12 +50,14 @@ export default function ContentGrid({ columns = 2, ariaLabel = "Content grid", className = "", + cellClassName = "", mergeAdjacentOnMobile = true, }: ContentGridProps) { const colCount = Math.max(1, columns); const rows = chunk(items, colCount); const mobileGroups = groupForMobile(items, mergeAdjacentOnMobile); - const cellBase = "relative p-5 md:p-6 min-h-11 min-w-11 focus-within:outline-none rounded-none"; + const cellBase = + "relative p-5 md:p-6 min-h-11 min-w-11 focus-within:outline-none rounded-none"; const titleCls = "text-base md:text-lg font-semibold text-pink"; const descCls = "mt-2 text-sm md:text-base text-gray-700"; @@ -68,10 +71,9 @@ export default function ContentGrid({ > {mobileGroups.map((group, idx) => { const isFirst = idx === 0; - const mobileTop = - !isFirst - ? "before:content-[''] before:absolute before:top-0 before:left-4 before:right-4 before:h-px before:bg-gray-500" - : ""; + const mobileTop = !isFirst + ? "before:content-[''] before:absolute before:top-0 before:left-4 before:right-4 before:h-px before:bg-gray-500" + : ""; return (
    {group.map((item, j) => ( -
    0 ? "pt-5" : ""}> +
    0 ? "pt-5 flex-1 flex" : ""} + > {item.title ? (

    {item.title} @@ -93,7 +99,9 @@ export default function ContentGrid({ {item.description ? (

    {item.description}

    ) : null} - {item.node ?
    {item.node}
    : null} + {item.node ? ( +
    {item.node}
    + ) : null}
    ))}
    @@ -108,11 +116,10 @@ export default function ContentGrid({ aria-label={ariaLabel} aria-rowcount={rows.length} aria-colcount={colCount} - className={[ - "hidden md:grid gap-0", - `md:grid-cols-${columns}`, - "mx-auto", - ].join(" ")} + className="hidden md:grid gap-0 mx-auto" + style={{ + gridTemplateColumns: `repeat(${colCount}, minmax(0, 1fr))`, + }} > {rows.map((row, rIndex) => (
    @@ -137,6 +144,7 @@ export default function ContentGrid({ {...(item.title ? { "aria-labelledby": titleId } : {})} className={[ cellBase, + cellClassName, partialTop, partialLeft, "focus-visible:ring-2 focus-visible:ring-pink focus-visible:ring-offset-2", @@ -151,7 +159,9 @@ export default function ContentGrid({ {item.description ? (

    {item.description}

    ) : null} - {item.node ?
    {item.node}
    : null} + {item.node ? ( +
    {item.node}
    + ) : null}
    ); })} @@ -160,4 +170,4 @@ export default function ContentGrid({
    ); -} \ No newline at end of file +} diff --git a/components/layout/Header.tsx b/components/layout/Header.tsx index 3651d63..7d550f8 100644 --- a/components/layout/Header.tsx +++ b/components/layout/Header.tsx @@ -62,7 +62,7 @@ const NAV: NavGroup[] = [ items: [ { label: "ASSU Executives", href: "/about/executives" }, { label: "ASSU Staff", href: "/about/staff" }, - { label: "Documents", href: "/services-and-resources/documents" }, + { label: "Documents", href: "/about/documents" }, ], }, { diff --git a/components/ui/accordion.tsx b/components/ui/accordion.tsx index e419173..640c5d0 100644 --- a/components/ui/accordion.tsx +++ b/components/ui/accordion.tsx @@ -11,7 +11,7 @@ function Accordion({