From 0b3f8a859658a4d91ef3b19bf3f9367722e1870d Mon Sep 17 00:00:00 2001 From: Micah Guttman Date: Mon, 13 Apr 2026 02:13:58 -0500 Subject: [PATCH 01/12] Initial implemntation and replacement work on PageSection component Co-authored-by: Sam Woravka --- src/components/PageSection.jsx | 28 ++++ src/pages/About.jsx | 210 ++++++++++++++--------------- src/pages/Apply.jsx | 238 ++++++++++++++++----------------- src/pages/Home.jsx | 141 +++++++++---------- 4 files changed, 305 insertions(+), 312 deletions(-) create mode 100644 src/components/PageSection.jsx diff --git a/src/components/PageSection.jsx b/src/components/PageSection.jsx new file mode 100644 index 0000000..0714b5f --- /dev/null +++ b/src/components/PageSection.jsx @@ -0,0 +1,28 @@ +export default function PageSection({ heading, colorVariant, children }) { + // split heading text so that yellow can be applied to last word only + const headingWithoutLastWord = + heading.length > 1 + ? heading.trim().split(/\s+/).slice(0, -1).join(" ") + : null; + const headingLastWord = + heading.length > 1 ? heading.trim().split(/\s+/).pop() : heading; + + const bgColorClasses = { + A: "", + B: "backdrop-brightness-90", + }; + + return ( +
+
+ {heading && ( +

+ {headingWithoutLastWord}{" "} + {headingLastWord}{" "} +

+ )} + {children} +
+
+ ); +} diff --git a/src/pages/About.jsx b/src/pages/About.jsx index 0ae3e1e..e10ffea 100644 --- a/src/pages/About.jsx +++ b/src/pages/About.jsx @@ -2,6 +2,7 @@ import { useState } from "react"; import StatisticsCard from "../components/StatisticsCard"; import TextLink from "../components/TextLink"; import Hero from "../components/Hero"; +import PageSection from "../components/PageSection"; const About = () => { const statistics = [ @@ -151,124 +152,113 @@ const About = () => { > {/* Statistics Section */} -
-
-

- OUR IMPACT -

-
- {statistics.map((stat, index) => ( - - ))} -
+ +
+ {statistics.map((stat, index) => ( + + ))}
-
+ {/* Leadership Section */} -
-
-

- OUR TEAM -

- - {/* Executive Roles Accordion */} -
- - {openSection.executive && ( -
- {renderLeadership([ - "President", - "Internal VP", - "External VP", - "Project VP", - "Development VP", - ])} -
- )} -
+ + {/* Executive Roles Accordion */} +
+ + {openSection.executive && ( +
+ {renderLeadership([ + "President", + "Internal VP", + "External VP", + "Project VP", + "Development VP", + ])} +
+ )} +
- {/* Internal Branch Accordion */} -
- - {openSection.internal && ( -
- {renderLeadership([ - "Internal VP", - "Finance", - "Logistics", - "Lab Quality Chair", - "Documentation", - ])} -
- )} -
+ {/* Internal Branch Accordion */} +
+ + {openSection.internal && ( +
+ {renderLeadership([ + "Internal VP", + "Finance", + "Logistics", + "Lab Quality Chair", + "Documentation", + ])} +
+ )} +
- {/* External Branch Accordion */} -
- - {openSection.external && ( -
- {renderLeadership([ - "External VP", - "Public Relations", - "Webmaster", - "Corporate Relations", - "Events", - ])} -
- )} -
+ {/* External Branch Accordion */} +
+ + {openSection.external && ( +
+ {renderLeadership([ + "External VP", + "Public Relations", + "Webmaster", + "Corporate Relations", + "Events", + ])} +
+ )} +
- {/* Projects Branch Accordion */} -
- - {openSection.projects && ( -
- {renderLeadership(["Project VP", "Design Review Chair"])} -
- )} -
+ {/* Projects Branch Accordion */} +
+ + {openSection.projects && ( +
+ {renderLeadership(["Project VP", "Design Review Chair"])} +
+ )} +
- {/* Development Branch Accordion */} -
- - {openSection.development && ( -
- {renderLeadership([ - "Development VP", - "Workshops", - "Hatchling Director", - ])} -
- )} -
+ {/* Development Branch Accordion */} +
+ + {openSection.development && ( +
+ {renderLeadership([ + "Development VP", + "Workshops", + "Hatchling Director", + ])} +
+ )}
-
+ ); }; diff --git a/src/pages/Apply.jsx b/src/pages/Apply.jsx index 6d84149..4e56f1b 100644 --- a/src/pages/Apply.jsx +++ b/src/pages/Apply.jsx @@ -1,6 +1,7 @@ import { Link } from "react-router-dom"; import ButtonLink from "../components/ButtonLink"; import Hero from "../components/Hero"; +import PageSection from "../components/PageSection"; const Apply = () => { // ✅ Toggle this to open/close applications @@ -26,45 +27,39 @@ const Apply = () => { {/* Application Process */} -
-
-

- JOIN TURTLE -

- -
-
-
📝
-

- Submit Application -

-

- Complete our online application form to join Hatchlings or - Advanced Project teams. -

-
-
-
🤝
-

- Open House -

-

- Meet with our team leaders to discuss your goals and project - preferences. -

-
-
-
🚀
-

- Start Contributing -

-

- Begin working on exciting robotics projects with TURTLE. -

-
+ +
+
+
📝
+

+ Submit Application +

+

+ Complete our online application form to join Hatchlings or + Advanced Project teams. +

+
+
+
🤝
+

+ Open House +

+

+ Meet with our team leaders to discuss your goals and project + preferences. +

+
+
+
🚀
+

+ Start Contributing +

+

+ Begin working on exciting robotics projects with TURTLE. +

-
+ {/* Contact Section (current) */}
@@ -85,97 +80,90 @@ const Apply = () => {
{/* What We Look For Section */} -
-
- {/* Main Heading */} -

- WHAT WE LOOK FOR -

- - {/* Hatchling Subsection */} -
-

- Hatchling -

-

- No skills or prior experience required. The Hatchling Program is - designed for students of all backgrounds who are eager to learn, - explore robotics, and grow alongside a supportive team. -

-
- - {/* Advanced Projects Subsection */} -
-

- Advanced Projects -

-
-
-

- Technical Skills -

-
    -
  • - - - Programming experience (Python, C++, ROS) - -
  • -
  • - - - Understanding of robotics fundamentals - -
  • -
  • - - - Experience with hardware and electronics - -
  • -
  • - - - Knowledge of control systems and algorithms - -
  • -
-
-
-

- Personal Qualities -

-
    -
  • - - - Strong problem-solving abilities - -
  • -
  • - - - Excellent teamwork and communication - -
  • -
  • - - - Passion for robotics and innovation - -
  • -
  • - - - Commitment to learning and growth - -
  • -
-
+ + {" "} + {/* Hatchling Subsection */} +
+

+ Hatchling +

+

+ No skills or prior experience required. The Hatchling Program is + designed for students of all backgrounds who are eager to learn, + explore robotics, and grow alongside a supportive team. +

+
+ {/* Advanced Projects Subsection */} +
+

+ Advanced Projects +

+
+
+

+ Technical Skills +

+
    +
  • + + + Programming experience (Python, C++, ROS) + +
  • +
  • + + + Understanding of robotics fundamentals + +
  • +
  • + + + Experience with hardware and electronics + +
  • +
  • + + + Knowledge of control systems and algorithms + +
  • +
+
+
+

+ Personal Qualities +

+
    +
  • + + + Strong problem-solving abilities + +
  • +
  • + + + Excellent teamwork and communication + +
  • +
  • + + + Passion for robotics and innovation + +
  • +
  • + + + Commitment to learning and growth + +
  • +
-
+ ); }; diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx index 1082007..a6ac464 100644 --- a/src/pages/Home.jsx +++ b/src/pages/Home.jsx @@ -3,6 +3,7 @@ import { Link } from "react-router-dom"; import SponsorTicker from "../components/SponsorTicker"; import ButtonLink from "../components/ButtonLink"; import Hero from "../components/Hero"; +import PageSection from "../components/PageSection"; const ENABLE_SHOWCASE_POPUPS = true; @@ -37,46 +38,41 @@ const Home = () => { - {/* About Section */} -
-
-

- ABOUT TURTLE -

-
-
-
🎓
-

- Student Leadership -

-

- Developing the next generation of robotics leaders through - hands-on experience and mentorship. -

-
-
-
🔬
-

- Research Excellence -

-

- Cutting-edge robotics research across multiple domains and - applications. -

-
-
-
⚙️
-

- Engineering Development -

-

- Hands-on engineering experience through real-world robotics - projects, technical workshops, and collaborative problem - solving. -

-
+ +
+
+
🎓
+

+ Student Leadership +

+

+ Developing the next generation of robotics leaders through + hands-on experience and mentorship. +

+
+
+
🔬
+

+ Research Excellence +

+

+ Cutting-edge robotics research across multiple domains and + applications. +

+
+
+
⚙️
+

+ Engineering Development +

+

+ Hands-on engineering experience through real-world robotics + projects, technical workshops, and collaborative problem + solving. +

+ {/* Competition Accolades - Large Rectangle */}
🏆
@@ -104,14 +100,10 @@ const Home = () => {
-
+ - {/* Contact Section */} -
-
-

- READY TO JOIN US -

+ +
{ APPLY NOW
-
+ {/* Kung Fu Tea Profit Share Popup - Mobile */} {/* @@ -200,40 +192,35 @@ const Home = () => { )} */} - {/* Calendar Section */} -
-
-

- Calendar -

-
-
-
- -
+ +
+
+
+
-
+ + From 519d659fa5f87544fe8832265fb5d4d64357a0be Mon Sep 17 00:00:00 2001 From: Micah Guttman Date: Tue, 14 Apr 2026 00:36:57 -0500 Subject: [PATCH 02/12] removed unnecessary contact section --- src/pages/Apply.jsx | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/pages/Apply.jsx b/src/pages/Apply.jsx index 4e56f1b..599ebc9 100644 --- a/src/pages/Apply.jsx +++ b/src/pages/Apply.jsx @@ -1,4 +1,3 @@ -import { Link } from "react-router-dom"; import ButtonLink from "../components/ButtonLink"; import Hero from "../components/Hero"; import PageSection from "../components/PageSection"; @@ -61,24 +60,6 @@ const Apply = () => { - {/* Contact Section (current) */} -
-
-

- CONTACT TURTLE -

-

- For any questions, email us at - - turtlerobotics@gmaill.com - -

-
-
- {/* What We Look For Section */} {" "} From fea47f9e95ec3386915a3b691a38c1d5419afc1f Mon Sep 17 00:00:00 2001 From: Micah Guttman Date: Tue, 14 Apr 2026 01:49:43 -0500 Subject: [PATCH 03/12] Page section tolerates empty header. Migrated development pages to page section component --- src/components/PageSection.jsx | 16 +- src/pages/DevelopmentPrograms.jsx | 304 ++++++------- src/pages/Hatchling.jsx | 697 ++++++++++++++---------------- src/pages/MechanicalIncubator.jsx | 159 +++---- src/pages/SoftwareIncubator.jsx | 159 +++---- 5 files changed, 623 insertions(+), 712 deletions(-) diff --git a/src/components/PageSection.jsx b/src/components/PageSection.jsx index 0714b5f..ec3a6f9 100644 --- a/src/components/PageSection.jsx +++ b/src/components/PageSection.jsx @@ -1,11 +1,15 @@ export default function PageSection({ heading, colorVariant, children }) { // split heading text so that yellow can be applied to last word only - const headingWithoutLastWord = - heading.length > 1 - ? heading.trim().split(/\s+/).slice(0, -1).join(" ") - : null; - const headingLastWord = - heading.length > 1 ? heading.trim().split(/\s+/).pop() : heading; + var headingWithoutLastWord; + var headingLastWord; + if (heading) { + headingWithoutLastWord = + heading.length > 1 + ? heading.trim().split(/\s+/).slice(0, -1).join(" ") + : null; + headingLastWord = + heading.length > 1 ? heading.trim().split(/\s+/).pop() : heading; + } const bgColorClasses = { A: "", diff --git a/src/pages/DevelopmentPrograms.jsx b/src/pages/DevelopmentPrograms.jsx index c81a3bc..dedcf1c 100644 --- a/src/pages/DevelopmentPrograms.jsx +++ b/src/pages/DevelopmentPrograms.jsx @@ -1,6 +1,7 @@ import { useNavigate } from "react-router-dom"; import ButtonLink from "../components/ButtonLink"; import Hero from "../components/Hero"; +import PageSection from "../components/PageSection"; const DevelopmentPrograms = () => { const navigate = useNavigate(); @@ -79,199 +80,180 @@ const DevelopmentPrograms = () => { {/* Program Sections */} {programs.map((program, index) => ( -
-
- {/* Section Title */} -

- {/* {program.title.toUpperCase()} */} -

+ {/* Large Glass Card */} +
+ {/* Background Image */} +
- {/* Large Glass Card */} -
- {/* Background Image */} -
+ {/* Glass Overlay Content */} +
+
+

+ {program.year} +

- {/* Glass Overlay Content */} -
-
-

- {program.year} -

+

+ {/* {program.tagline} */} + {program.title.toUpperCase()} +

-

- {/* {program.tagline} */} - {program.title.toUpperCase()} -

+

+ {program.description} +

-

- {program.description} -

- - {!program.disabled && ( - Learn More - )} -
+ {!program.disabled && ( + Learn More + )}
-
+
))} {/* Stats, Impact, and Accolades Section */} -
-
-

- STATS & IMPACT -

- -
-
-
75%
-
- Weekly Attendance -
-
- Through 8 weeks of lecture -
+ +
+
+
75%
+
+ Weekly Attendance
- -
-
70%
-
- New Engineers -
-
- 70% of members enter without prior robotics experience -
+
+ Through 8 weeks of lecture
+
-
-
95%
-
- Recommendation Rate -
-
- Would recommend to others -
+
+
70%
+
+ New Engineers
- -
-
782
-
- Social Connection -
-
All time Members
+
+ 70% of members enter without prior robotics experience
- {/* Impact Stories */} -
-
-

- Professional Development -

-
    -
  • - - Internships and Research Positions -
  • -
  • - - SolidWorks certifications (CSWA and CSWP) -
  • -
  • - - Project Leads and Sub-Team Leads -
  • -
+
+
95%
+
+ Recommendation Rate +
+
+ Would recommend to others
+
-
-

- Leadership & Growth -

-
    -
  • - - Student Organization Presidents & Officers -
  • -
  • - - Hatchling Directors -
  • -
  • - - Social connection with peers -
  • -
+
+
782
+
+ Social Connection
+
All time Members
+
- {/* More Info Section with Embedded PDF */} -
-

- More Info + {/* Impact Stories */} +
+
+

+ Professional Development

-
-
📊
-

- Detailed Program Impact Report -

-

- View our comprehensive impact report with detailed statistics, - success stories, and program outcomes. -

+
    +
  • + + Internships and Research Positions +
  • +
  • + + SolidWorks certifications (CSWA and CSWP) +
  • +
  • + + Project Leads and Sub-Team Leads +
  • +
+
- {/* Embedded PDF Viewer */} +
+

+ Leadership & Growth +

+
    +
  • + + Student Organization Presidents & Officers +
  • +
  • + + Hatchling Directors +
  • +
  • + + Social connection with peers +
  • +
+
+
-
- -
+ {/* More Info Section with Embedded PDF */} +
+

More Info

+
+
📊
+

+ Detailed Program Impact Report +

+

+ View our comprehensive impact report with detailed statistics, + success stories, and program outcomes. +

- + {/* Embedded PDF Viewer */} + +
+ +
+ +
-

+ {/* Call to Action Section */} -
-
-

- Ready to Start Your{" "} - Journey? -

+ +

Join TURTLE and gain the skills needed to excel in robotics

@@ -279,7 +261,7 @@ const DevelopmentPrograms = () => { Apply Now
-
+ ); }; diff --git a/src/pages/Hatchling.jsx b/src/pages/Hatchling.jsx index 6453c82..9f6df64 100644 --- a/src/pages/Hatchling.jsx +++ b/src/pages/Hatchling.jsx @@ -2,6 +2,7 @@ import { useEffect, useState } from "react"; import ImageCarousel from "../components/ImageCarousel"; import ButtonLink from "../components/ButtonLink"; import Hero from "../components/Hero"; +import PageSection from "../components/PageSection"; const Hatchling = () => { // Check localStorage for slides visibility @@ -170,433 +171,391 @@ const Hatchling = () => { > {/* Mission Statement Section */} -
-
-

- OUR MISSION -

- -
-

- Founded in the fall of 2015, Hatchling is our premier development - program that introduces foundational technical, soft, and - engineering skills -

-
+ +
+

+ Founded in the fall of 2015, Hatchling is our premier development + program that introduces foundational technical, soft, and + engineering skills +

-
+ {/* Trusted Organizations Section */} -
-
-

- CURRENTLY TRUSTED AT -

- -
-
-
🏢
-

3

-

Organizations

-
+ +
+
+
🏢
+

3

+

Organizations

+
-
across
+
across
-
-
🎓
-

2

-

Universities

-
+
+
🎓
+

2

+

Universities

+
-
-

+
+

- {/* Bring Hatchling to Your Organization */} -
-

- Bring the Hatchling Mission to Your Student Organization -

-

- Interested in expanding robotics education at your university? - Let's discuss how we can bring the Hatchling program to your - campus. -

- - Inquire Now - -
+ {/* Bring Hatchling to Your Organization */} +
+

+ Bring the Hatchling Mission to Your Student Organization +

+

+ Interested in expanding robotics education at your university? + Let's discuss how we can bring the Hatchling program to your + campus. +

+ + Inquire Now +
-
+ {/* Scrolling Pictures Section */} -
-
-

- HATCHLING GALLERY -

- -
- -
+ +
+
-
+ {/* Learning Objectives and Schedule Section */} -
-
-

- LEARNING OBJECTIVES & SCHEDULE -

+ + {/* Learning Objectives - Full Width on Top */} +
+

+ Core Learning Objectives +

+

+ Hatchlings graduate from the program with a community, passion for + engineering, and the following skills: +

- {/* Learning Objectives - Full Width on Top */} -
-

- Core Learning Objectives -

-

- Hatchlings graduate from the program with a community, passion for - engineering, and the following skills: -

+
+ {learningObjectiveGroups.map((group) => ( +
+

+ {group.groupName} +

+
    + {group.objectives.map((objective) => ( +
  • + + {objective} +
  • + ))} +
+
+ ))} +
+
-
- {learningObjectiveGroups.map((group) => ( -
-

- {group.groupName} + {/* Program Schedule - Horizontal Scrollable Timeline */} +
+

+ 10-Week Program Schedule +

+
+ {/* Scrollable Timeline Container */} +
+ {programScheduleItems.map((item) => ( +
+
+ {item.heading} +
+

+ {item.subheading}

-
    - {group.objectives.map((objective) => ( -
  • - - {objective} -
  • +
      + {item.objectives.map((objective) => ( +
    • • {objective}
    • ))} + {item.milestone ? ( +
    • + • Project Milestone: {item.milestone} +
    • + ) : null}
))}
-
- - {/* Program Schedule - Horizontal Scrollable Timeline */} -
-

- 10-Week Program Schedule -

-
- {/* Scrollable Timeline Container */} -
- {programScheduleItems.map((item) => ( -
-
- {item.heading} -
-

- {item.subheading} -

-
    - {item.objectives.map((objective) => ( -
  • • {objective}
  • - ))} - {item.milestone ? ( -
  • - • Project Milestone: {item.milestone} -
  • - ) : null} -
-
- ))} -
- {/* Scroll Indicator */} -
-

- ← Scroll to see all 10 weeks → -

-
+ {/* Scroll Indicator */} +
+

+ ← Scroll to see all 10 weeks → +

-

+ {/* Published Materials Section */} -
-
-

- PUBLISHED MATERIALS -

- - {/* Weekly Content PDFs (toggleable) */} - {slidesVisible && ( -
-
-
-
📚
-

- Slides -

-
- - {(() => { - const pdfMap = { - 1: "/pdfs/Hatchling Week 1 - Introduction.pptx.pdf", - 2: "/pdfs/Hatchling Week 2 - SolidWorks (CAD) Foundation.pptx.pdf", - 3: "/pdfs/Hatchling Week 3 - SolidWorks 3D.pptx.pdf", - 4: "/pdfs/Hatchling Week 4 - Tools, Project, and Process.pptx.pdf", - 5: "/pdfs/Hatchling Week 5 - Design Review and Cpp.pptx.pdf", - 6: "/pdfs/Hatchling Week 6 - SolidWorks Assembly.pptx.pdf", - 7: "/pdfs/Hatchling Week 7 - Programming and Git GitHub.pptx.pdf", - 8: "/pdfs/Hatchling Week 8 - Electronics and Soldering.pptx.pdf", - }; - - return ( -
- - - - Download PDF - -
- ); - })()} + + {/* Weekly Content PDFs (toggleable) */} + {slidesVisible && ( +
+
+
+
📚
+

+ Slides +

-
- )} - {/* Additional Materials */} -
-
-
📝
-

- Hatchling Syllabus -

- - Download Syllabus - -
+ {(() => { + const pdfMap = { + 1: "/pdfs/Hatchling Week 1 - Introduction.pptx.pdf", + 2: "/pdfs/Hatchling Week 2 - SolidWorks (CAD) Foundation.pptx.pdf", + 3: "/pdfs/Hatchling Week 3 - SolidWorks 3D.pptx.pdf", + 4: "/pdfs/Hatchling Week 4 - Tools, Project, and Process.pptx.pdf", + 5: "/pdfs/Hatchling Week 5 - Design Review and Cpp.pptx.pdf", + 6: "/pdfs/Hatchling Week 6 - SolidWorks Assembly.pptx.pdf", + 7: "/pdfs/Hatchling Week 7 - Programming and Git GitHub.pptx.pdf", + 8: "/pdfs/Hatchling Week 8 - Electronics and Soldering.pptx.pdf", + }; + + return ( +
+ -
-
🎨
-

- CAD Examples -

- - Download Examples - + + Download PDF + +
+ ); + })()}
+
+ )} + + {/* Additional Materials */} +
+
+
📝
+

+ Hatchling Syllabus +

+ + Download Syllabus + +
-
-
-

- Project Tips & Controller Resources -

- - Download Guide - -
+
+
🎨
+

+ CAD Examples +

+ + Download Examples + +
+ +
+
+

+ Project Tips & Controller Resources +

+ + Download Guide +
-
+ {/* Stats, Impact, and Accolades Section */} -
-
-

- STATS & IMPACT -

- -
-
-
75%
-
- Weekly Attendance -
-
- Through 8 weeks of lecture -
+ +
+
+
75%
+
+ Weekly Attendance
- -
-
70%
-
- New Engineers -
-
- 70% of members enter without prior robotics experience -
+
+ Through 8 weeks of lecture
+
-
-
95%
-
- Recommendation Rate -
-
- Would recommend to others -
+
+
70%
+
+ New Engineers
- -
-
782
-
- Social Connection -
-
All time Members
+
+ 70% of members enter without prior robotics experience
- {/* Impact Stories */} -
-
-

- Professional Development -

-
    -
  • - - Internships and Research Positions -
  • -
  • - - SolidWorks certifications (CSWA and CSWP) -
  • -
  • - - Project Leads and Sub-Team Leads -
  • -
+
+
95%
+
+ Recommendation Rate +
+
+ Would recommend to others
+
-
-

- Leadership & Growth -

-
    -
  • - - Student Organization Presidents & Officers -
  • -
  • - - Hatchling Directors -
  • -
  • - - Social connection with peers -
  • -
+
+
782
+
+ Social Connection
+
All time Members
+
- {/* More Info Section with Embedded PDF */} -
-

- More Info + {/* Impact Stories */} +
+
+

+ Professional Development

-
-
📊
-

- Detailed Program Impact Report -

-

- View our comprehensive impact report with detailed statistics, - success stories, and program outcomes. -

+
    +
  • + + Internships and Research Positions +
  • +
  • + + SolidWorks certifications (CSWA and CSWP) +
  • +
  • + + Project Leads and Sub-Team Leads +
  • +
+
- {/* Embedded PDF Viewer */} - -
- -
+
+

+ Leadership & Growth +

+
    +
  • + + Student Organization Presidents & Officers +
  • +
  • + + Hatchling Directors +
  • +
  • + + Social connection with peers +
  • +
+
+
- + {/* More Info Section with Embedded PDF */} +
+

More Info

+
+
📊
+

+ Detailed Program Impact Report +

+

+ View our comprehensive impact report with detailed statistics, + success stories, and program outcomes. +

+ + {/* Embedded PDF Viewer */} + +
+ +
+ +
-

+ {/* Call to Action */} -
+
-

- READY TO JOIN? -

-

Become part of the next generation of robotics innovators. Apply now to join the Hatchling Program and accelerate your robotics journey. @@ -611,7 +570,7 @@ const Hatchling = () => {

-
+ ); }; diff --git a/src/pages/MechanicalIncubator.jsx b/src/pages/MechanicalIncubator.jsx index 726ead1..e7b78ec 100644 --- a/src/pages/MechanicalIncubator.jsx +++ b/src/pages/MechanicalIncubator.jsx @@ -1,7 +1,7 @@ -import ImageCarousel from "../components/ImageCarousel"; import ButtonLink from "../components/ButtonLink"; import TextLink from "../components/TextLink"; import Hero from "../components/Hero"; +import PageSection from "../components/PageSection"; const MechanicalIncubator = () => { const learningObjectiveGroups = [ @@ -150,110 +150,93 @@ const MechanicalIncubator = () => { > {/* Mission Statement Section */} -
-
-

- PREVIEW WORKSHOP -

- -
-

- TURTLE is thrilled to announce the launch of our Mechanical and - Software Incubator. Building upon the success of the Hatchling - Development Program, Incubator will provide hands-on opportunities - to learn new technical and leadership skills. Join us at our - upcoming preview workshops and RSVP for free{" "} - here - . -

-
+ +
+

+ TURTLE is thrilled to announce the launch of our Mechanical and + Software Incubator. Building upon the success of the Hatchling + Development Program, Incubator will provide hands-on opportunities + to learn new technical and leadership skills. Join us at our + upcoming preview workshops and RSVP for free{" "} + here. +

-
+ {/* Learning Objectives and Schedule Section */} -
-
-

- LEARNING OBJECTIVES & SCHEDULE -

+ + {/* Learning Objectives - Full Width on Top */} +
+

+ Core Learning Objectives +

+

+ Mechanical Incubator Members graduate from the program with a + community, passion for engineering, and the following skills: +

- {/* Learning Objectives - Full Width on Top */} -
-

- Core Learning Objectives -

-

- Mechanical Incubator Members graduate from the program with a - community, passion for engineering, and the following skills: -

+
+ {learningObjectiveGroups.map((group) => ( +
+

+ {group.groupName} +

+
    + {group.objectives.map((objective) => ( +
  • + + {objective} +
  • + ))} +
+
+ ))} +
+
-
- {learningObjectiveGroups.map((group) => ( -
-

- {group.groupName} + {/* Program Schedule - Horizontal Scrollable Timeline */} +
+

+ 10-Week Program Schedule +

+
+ {/* Scrollable Timeline Container */} +
+ {programScheduleItems.map((item) => ( +
+
+ {item.heading} +
+

+ {item.subheading}

-
    - {group.objectives.map((objective) => ( -
  • - - {objective} -
  • +
      + {item.objectives.map((objective) => ( +
    • • {objective}
    • ))} + {item.milestone ? ( +
    • + • Project Milestone: {item.milestone} +
    • + ) : null}
))}
-
- - {/* Program Schedule - Horizontal Scrollable Timeline */} -
-

- 10-Week Program Schedule -

-
- {/* Scrollable Timeline Container */} -
- {programScheduleItems.map((item) => ( -
-
- {item.heading} -
-

- {item.subheading} -

-
    - {item.objectives.map((objective) => ( -
  • • {objective}
  • - ))} - {item.milestone ? ( -
  • - • Project Milestone: {item.milestone} -
  • - ) : null} -
-
- ))} -
- {/* Scroll Indicator */} -
-

- ← Scroll to see all 10 weeks → -

-
+ {/* Scroll Indicator */} +
+

+ ← Scroll to see all 10 weeks → +

-

+ {/* Call to Action */} -
+
-

- READY TO JOIN? -

-

Become part of the next generation of robotics innovators. Apply now to join the Mechanical Incubator Program and accelerate your @@ -269,7 +252,7 @@ const MechanicalIncubator = () => {

-
+ ); }; diff --git a/src/pages/SoftwareIncubator.jsx b/src/pages/SoftwareIncubator.jsx index c3605a4..552d419 100644 --- a/src/pages/SoftwareIncubator.jsx +++ b/src/pages/SoftwareIncubator.jsx @@ -1,7 +1,7 @@ -import ImageCarousel from "../components/ImageCarousel"; import ButtonLink from "../components/ButtonLink"; import TextLink from "../components/TextLink"; import Hero from "../components/Hero"; +import PageSection from "../components/PageSection"; const SoftwareIncubator = () => { const learningObjectiveGroups = [ @@ -127,110 +127,93 @@ const SoftwareIncubator = () => { > {/* Mission Statement Section */} -
-
-

- PREVIEW WORKSHOP -

- -
-

- TURTLE is thrilled to announce the launch of our Mechanical and - Software Incubator. Building upon the success of the Hatchling - Development Program, Incubator will provide hands-on opportunities - to learn new technical and leadership skills. Join us at our - upcoming preview workshops and RSVP for free{" "} - here - . -

-
+ +
+

+ TURTLE is thrilled to announce the launch of our Mechanical and + Software Incubator. Building upon the success of the Hatchling + Development Program, Incubator will provide hands-on opportunities + to learn new technical and leadership skills. Join us at our + upcoming preview workshops and RSVP for free{" "} + here. +

-
+ {/* Learning Objectives and Schedule Section */} -
-
-

- LEARNING OBJECTIVES & SCHEDULE -

+ + {/* Learning Objectives - Full Width on Top */} +
+

+ Core Learning Objectives +

+

+ Software Incubator Members graduate from the program with a + community, passion for engineering, and the following skills: +

- {/* Learning Objectives - Full Width on Top */} -
-

- Core Learning Objectives -

-

- Software Incubator Members graduate from the program with a - community, passion for engineering, and the following skills: -

+
+ {learningObjectiveGroups.map((group) => ( +
+

+ {group.groupName} +

+
    + {group.objectives.map((objective) => ( +
  • + + {objective} +
  • + ))} +
+
+ ))} +
+
-
- {learningObjectiveGroups.map((group) => ( -
-

- {group.groupName} + {/* Program Schedule - Horizontal Scrollable Timeline */} +
+

+ 10-Week Program Schedule +

+
+ {/* Scrollable Timeline Container */} +
+ {programScheduleItems.map((item) => ( +
+
+ {item.heading} +
+

+ {item.subheading}

-
    - {group.objectives.map((objective) => ( -
  • - - {objective} -
  • +
      + {item.objectives.map((objective) => ( +
    • • {objective}
    • ))} + {item.milestone ? ( +
    • + • Project Milestone: {item.milestone} +
    • + ) : null}
))}
-
- - {/* Program Schedule - Horizontal Scrollable Timeline */} -
-

- 10-Week Program Schedule -

-
- {/* Scrollable Timeline Container */} -
- {programScheduleItems.map((item) => ( -
-
- {item.heading} -
-

- {item.subheading} -

-
    - {item.objectives.map((objective) => ( -
  • • {objective}
  • - ))} - {item.milestone ? ( -
  • - • Project Milestone: {item.milestone} -
  • - ) : null} -
-
- ))} -
- {/* Scroll Indicator */} -
-

- ← Scroll to see all 10 weeks → -

-
+ {/* Scroll Indicator */} +
+

+ ← Scroll to see all 10 weeks → +

-

+ {/* Call to Action */} -
+
-

- READY TO JOIN? -

-

Become part of the next generation of robotics innovators. Apply now to join the Software Incubator Program and accelerate your robotics @@ -246,7 +229,7 @@ const SoftwareIncubator = () => {

-
+ ); }; From 124b00b20b60fa73465132f6e6b30ac2db247202 Mon Sep 17 00:00:00 2001 From: Micah Guttman Date: Tue, 14 Apr 2026 01:50:25 -0500 Subject: [PATCH 04/12] removed unneeded background from project detail page --- src/pages/ProjectDetail.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/ProjectDetail.jsx b/src/pages/ProjectDetail.jsx index c0787b1..1739865 100644 --- a/src/pages/ProjectDetail.jsx +++ b/src/pages/ProjectDetail.jsx @@ -28,7 +28,7 @@ const ProjectDetail = () => { }, [project]); return ( -
+
{/* Back Button */} Date: Tue, 14 Apr 2026 01:56:01 -0500 Subject: [PATCH 05/12] Used hero component for 404 page --- src/pages/NotFound.jsx | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/pages/NotFound.jsx b/src/pages/NotFound.jsx index a60b87b..1045817 100644 --- a/src/pages/NotFound.jsx +++ b/src/pages/NotFound.jsx @@ -1,18 +1,15 @@ -import React from "react"; -import { Link } from "react-router-dom"; import ButtonLink from "../components/ButtonLink"; +import Hero from "../components/Hero"; const NotFound = () => ( -
-

404

-

Page Not Found

-

- Sorry, the page you are looking for does not exist. -

+ Go Home -
+ ); export default NotFound; From c9c28b6510ebd117de587044e166c37f5d33b968 Mon Sep 17 00:00:00 2001 From: Micah Guttman Date: Tue, 14 Apr 2026 02:08:14 -0500 Subject: [PATCH 06/12] Migrated projects page to PageSection component --- src/pages/Projects.jsx | 213 ++++++++++++++++++++--------------------- 1 file changed, 105 insertions(+), 108 deletions(-) diff --git a/src/pages/Projects.jsx b/src/pages/Projects.jsx index 1cbdb75..c56c2c1 100644 --- a/src/pages/Projects.jsx +++ b/src/pages/Projects.jsx @@ -3,6 +3,7 @@ import { useState, useMemo } from "react"; import { projects } from "../data/projects"; import ButtonLink from "../components/ButtonLink"; import Hero from "../components/Hero"; +import PageSection from "../components/PageSection"; const Projects = () => { const [searchTerm, setSearchTerm] = useState(""); @@ -32,130 +33,126 @@ const Projects = () => { > {/* Projects Grid */} -
-
-
-
-
- setSearchTerm(e.target.value)} - className="w-full px-4 py-3 pl-12 border border-gray-600 rounded-xl bg-gray-800 text-gray-100 focus:ring-2 focus:ring-accent focus:border-transparent transition-all duration-200" + +
+
+
+ setSearchTerm(e.target.value)} + className="w-full px-4 py-3 pl-12 border border-gray-600 rounded-xl bg-gray-800 text-gray-100 focus:ring-2 focus:ring-accent focus:border-transparent transition-all duration-200" + /> + + - - - -
+
-
- {filteredProjects.map((project, index) => ( - - {/* Image */} -
- {project.title} -
-
- - {project.category} - - {project.tags?.slice(0, 2).map((tag, tagIndex) => ( - - {tag} - - ))} -
-
- - Click to expand +
+
+ {filteredProjects.map((project, index) => ( + + {/* Image */} +
+ {project.title} +
+
+ + {project.category} + + {project.tags?.slice(0, 2).map((tag, tagIndex) => ( + + {tag} -
+ ))} +
+
+ + Click to expand +
+
- {/* Content */} -
-

- {project.title} -

-

- {project.subtitle} -

-

- {project.description} -

+ {/* Content */} +
+

+ {project.title} +

+

+ {project.subtitle} +

+

+ {project.description} +

- {/* Project Lead */} -

- Lead: {project.lead} -

+ {/* Project Lead */} +

+ Lead: {project.lead} +

- {/* Status and Duration */} -
- - {project.status} - - - {project.duration} - -
+ {/* Status and Duration */} +
+ + {project.status} + + + {project.duration} + +
- {/* View Details Button */} -
+ {/* View Details Button */} +
+ + View Details → + + {project.status !== "Archived" && ( - View Details → + Apply - {project.status !== "Archived" && ( - - Apply - - )} -
+ )}
- - ))} -
+
+ + ))}
-
- - {/* Removed modal: clicking a card navigates to /projects/:id */} +
); }; From 10feb0d5805379bb6ea99d0dbbb0cb9dd32c4dfc Mon Sep 17 00:00:00 2001 From: Micah Guttman Date: Tue, 14 Apr 2026 02:15:10 -0500 Subject: [PATCH 07/12] Changed text case of all ButtonLinks for consistency --- src/pages/Apply.jsx | 2 +- src/pages/Hatchling.jsx | 4 ++-- src/pages/Home.jsx | 6 +++--- src/pages/MechanicalIncubator.jsx | 4 ++-- src/pages/SoftwareIncubator.jsx | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/pages/Apply.jsx b/src/pages/Apply.jsx index 599ebc9..eca2cbf 100644 --- a/src/pages/Apply.jsx +++ b/src/pages/Apply.jsx @@ -20,7 +20,7 @@ const Apply = () => { > {applicationsOpen && ( - APPLY NOW + Apply Now )} diff --git a/src/pages/Hatchling.jsx b/src/pages/Hatchling.jsx index 9f6df64..b76fbac 100644 --- a/src/pages/Hatchling.jsx +++ b/src/pages/Hatchling.jsx @@ -563,10 +563,10 @@ const Hatchling = () => {
- APPLY NOW + Apply Now - LEARN MORE + Learn More
diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx index a6ac464..29f1c1a 100644 --- a/src/pages/Home.jsx +++ b/src/pages/Home.jsx @@ -25,7 +25,7 @@ const Home = () => { sizeVariant="large" style="primary" > - EXPLORE PROJECTS + Explore Projects { sizeVariant="large" style="primary-outline" > - LEARN MORE + Learn More
@@ -109,7 +109,7 @@ const Home = () => { style="primary" to="https://forms.gle/59pUiPUCpDrgBCqn7" > - APPLY NOW + Apply Now diff --git a/src/pages/MechanicalIncubator.jsx b/src/pages/MechanicalIncubator.jsx index e7b78ec..f76ddd3 100644 --- a/src/pages/MechanicalIncubator.jsx +++ b/src/pages/MechanicalIncubator.jsx @@ -245,10 +245,10 @@ const MechanicalIncubator = () => {
- APPLY NOW + Apply Now - LEARN MORE + Learn More
diff --git a/src/pages/SoftwareIncubator.jsx b/src/pages/SoftwareIncubator.jsx index 552d419..8403084 100644 --- a/src/pages/SoftwareIncubator.jsx +++ b/src/pages/SoftwareIncubator.jsx @@ -222,10 +222,10 @@ const SoftwareIncubator = () => {
- APPLY NOW + Apply Now - LEARN MORE + Learn More
From 1381ef2dea788627c302afff7992dee5ca906fed Mon Sep 17 00:00:00 2001 From: Micah Guttman Date: Tue, 14 Apr 2026 02:23:21 -0500 Subject: [PATCH 08/12] made showcase page title somewhat consistent with standard hero --- src/pages/Showcase.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Showcase.jsx b/src/pages/Showcase.jsx index 5c6c501..98a17b9 100644 --- a/src/pages/Showcase.jsx +++ b/src/pages/Showcase.jsx @@ -103,7 +103,7 @@ function Showcase() { > {/* Title with text shadow for better readability */}

- TURTLE Showcase + TURTLE SHOWCASE

{ENABLE_SHOWCASE_COUNTDOWN ? ( From 02b7deb9db82f66d4c323df7d7202a64c38acf8f Mon Sep 17 00:00:00 2001 From: Micah Guttman Date: Tue, 14 Apr 2026 02:47:06 -0500 Subject: [PATCH 09/12] Migrated sponsorship page to PageSection and Hero components --- src/pages/Sponsorship.jsx | 325 ++++++++++++++++++-------------------- 1 file changed, 150 insertions(+), 175 deletions(-) diff --git a/src/pages/Sponsorship.jsx b/src/pages/Sponsorship.jsx index f7e6981..5f8b6fc 100644 --- a/src/pages/Sponsorship.jsx +++ b/src/pages/Sponsorship.jsx @@ -1,5 +1,7 @@ import { useState } from "react"; +import PageSection from "../components/PageSection"; import SponsorTicker from "../components/SponsorTicker"; +import Hero from "../components/Hero"; const Sponsorship = () => { const [showEmailPopup, setShowEmailPopup] = useState(false); @@ -64,202 +66,175 @@ const Sponsorship = () => { }; return ( -
- {/* Hero Section */} -
-
-
-

- SPONSOR - TURTLE -

- -

- Partner with the next generation of robotics innovators. Support - cutting-edge research and shape the future of TURTLE. -

- -
- - -
+
+ +
+ +
-
+ {/* Impact Stats */} -
-
-
- {impactStats.map((stat, index) => ( -
-
- {stat.number} -
-
- {stat.label} -
+ +
+ {impactStats.map((stat, index) => ( +
+
+ {stat.number}
- ))} -
+
+ {stat.label} +
+
+ ))}
-
+ {/* Why Sponsor Section */} -
-
-
-

- Why Sponsor TURTLE? -

-

- Join us in advancing robotics technology while gaining access to - top engineering talent and innovative research opportunities. -

-
+ +
+

+ Join us in advancing robotics technology while gaining access to top + engineering talent and innovative research opportunities. +

+
-
-
-
- - - -
-

- Innovation Access -

-

- Gain early insight into the latest in robotics development as - our diverse and talented teams work to innovate and change the - world. -

+
+
+
+ + +
+

+ Innovation Access +

+

+ Gain early insight into the latest in robotics development as our + diverse and talented teams work to innovate and change the world. +

+
-
-
- - - -
-

- Talent Pipeline -

-

- As one of the largest student-led robotics organizations in - Texas, we provide a unique opportunity to connect with future - engineers and recruit students for internships and co-ops from - our vast catalogue of projects. -

+
+
+ + +
+

+ Talent Pipeline +

+

+ As one of the largest student-led robotics organizations in Texas, + we provide a unique opportunity to connect with future engineers + and recruit students for internships and co-ops from our vast + catalogue of projects. +

+
-
-
- - - -
-

- Brand Recognition -

-

- With a platinum level sponsorship, your products and logo can be - featured directly on our projects, reaching tens of thousands of - students and engineers across Texas and beyond. -

+
+
+ + +
+

+ Brand Recognition +

+

+ With a platinum level sponsorship, your products and logo can be + featured directly on our projects, reaching tens of thousands of + students and engineers across Texas and beyond. +

-
+ {/* Sponsorship Tiers */} -
-
-
-

- Sponsorship Tiers -

-

- Choose the sponsorship level that best fits your organization's - goals and budget. -

-
+ +
+

+ Choose the sponsorship level that best fits your organization's + goals and budget. +

+
-
- {sponsorshipTiers.map((tier, index) => ( -
-
-

{tier.name}

-
{tier.amount}
-
    - {tier.benefits.map((benefit, benefitIndex) => ( -
  • - {benefit} -
  • - ))} -
-
+
+ {sponsorshipTiers.map((tier, index) => ( +
+
+

{tier.name}

+
{tier.amount}
+
    + {tier.benefits.map((benefit, benefitIndex) => ( +
  • + {benefit} +
  • + ))} +
- ))} -
+
+ ))}
-
+ {/* Contact Section */} -
-
-

- Ready to Partner? -

+ +

Let's discuss how your organization can support the future of robotics innovation while gaining valuable benefits. @@ -274,7 +249,7 @@ const Sponsorship = () => {

-
+ {showEmailPopup && ( From c65313110fbd9ca540cf7b45f8dfb984f75cb144 Mon Sep 17 00:00:00 2001 From: Micah Guttman Date: Tue, 14 Apr 2026 02:50:47 -0500 Subject: [PATCH 10/12] Migrated showcase page to PageSection component, made sure PageSection components across site alternated properly --- src/pages/Hatchling.jsx | 14 +++++++------- src/pages/MechanicalIncubator.jsx | 6 +++--- src/pages/Showcase.jsx | 16 +++++----------- src/pages/SoftwareIncubator.jsx | 6 +++--- 4 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/pages/Hatchling.jsx b/src/pages/Hatchling.jsx index b76fbac..059d637 100644 --- a/src/pages/Hatchling.jsx +++ b/src/pages/Hatchling.jsx @@ -171,7 +171,7 @@ const Hatchling = () => { > {/* Mission Statement Section */} - +

Founded in the fall of 2015, Hatchling is our premier development @@ -182,7 +182,7 @@ const Hatchling = () => { {/* Trusted Organizations Section */} - +

🏢
@@ -223,7 +223,7 @@ const Hatchling = () => { {/* Scrolling Pictures Section */} - +
{ {/* Learning Objectives and Schedule Section */} - + {/* Learning Objectives - Full Width on Top */}

@@ -313,7 +313,7 @@ const Hatchling = () => { {/* Published Materials Section */} - + {/* Weekly Content PDFs (toggleable) */} {slidesVisible && (
@@ -420,7 +420,7 @@ const Hatchling = () => { {/* Stats, Impact, and Accolades Section */} - +
75%
@@ -554,7 +554,7 @@ const Hatchling = () => { {/* Call to Action */} - +

Become part of the next generation of robotics innovators. Apply now diff --git a/src/pages/MechanicalIncubator.jsx b/src/pages/MechanicalIncubator.jsx index f76ddd3..3b4c57a 100644 --- a/src/pages/MechanicalIncubator.jsx +++ b/src/pages/MechanicalIncubator.jsx @@ -150,7 +150,7 @@ const MechanicalIncubator = () => { > {/* Mission Statement Section */} - +

TURTLE is thrilled to announce the launch of our Mechanical and @@ -164,7 +164,7 @@ const MechanicalIncubator = () => { {/* Learning Objectives and Schedule Section */} - + {/* Learning Objectives - Full Width on Top */}

@@ -235,7 +235,7 @@ const MechanicalIncubator = () => { {/* Call to Action */} - +

Become part of the next generation of robotics innovators. Apply now diff --git a/src/pages/Showcase.jsx b/src/pages/Showcase.jsx index 98a17b9..272385f 100644 --- a/src/pages/Showcase.jsx +++ b/src/pages/Showcase.jsx @@ -1,4 +1,5 @@ import { useEffect, useState } from "react"; +import PageSection from "../components/PageSection"; import TextLink from "../components/TextLink"; const ENABLE_SHOWCASE_COUNTDOWN = true; @@ -182,12 +183,8 @@ function Showcase() {

{/* FAQ SECTION */} -
+
-

- Frequently Asked Questions -

-
@@ -272,14 +269,11 @@ function Showcase() { )}
-
+
{/* SHOWCASE PROJECT INTEREST FORM SECTION (deprecated Jan 2026, replaced with email link) */} -
+
-

- Showcase Project Interest -

To express your interest in a project, please email us directly at:

@@ -287,7 +281,7 @@ function Showcase() { turtlerobotics@gmail.com
-
+