-
Notifications
You must be signed in to change notification settings - Fork 4
FAQ and Contact Page #15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FAQ and Contact Page #15
Conversation
fixed design and font issues
added font to assests
|
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
WalkthroughThe changes in this pull request primarily involve the addition of new components, updates to existing components, and modifications to configuration files. Key updates include the introduction of a Changes
Possibly related PRs
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 23
🧹 Outside diff range and nitpick comments (9)
createx/vite.config.js (1)
7-10: Document the non-standard port configuration.Consider adding a comment explaining why port 3122 was chosen to help other developers understand the configuration decision.
export default defineConfig({ plugins: [react()], + // Port 3122 chosen to avoid conflicts with <reason> server: { port: 3122, open: true, }, })createx/src/App.css (1)
Remove unused template styles
The styles in App.css for
.logo,logo-spinanimation,.card, and.read-the-docsare remnants from a template and are not being used in the current codebase. These classes only appear in App.css and are not referenced in any component, including App.jsx which uses Tailwind classes instead. You should remove these unused styles to keep the codebase clean and prevent potential future conflicts.
- Remove the
.logoclass and its hover states (lines 1-11)- Remove the
logo-spinanimation and its media query (lines 13-24)- Remove the
.cardclass (lines 26-28)- Remove the
.read-the-docsclass (lines 30-32)🔗 Analysis chain
Line range hint
7-45: Consider cleaning up unused template styles.Since this PR focuses on FAQ and Contact pages, consider removing or documenting the purpose of template-related styles (logo animations, cards, etc.) if they're not being used by the new components.
Let's verify the usage of these styles:
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Search for usage of template-related classes echo "Checking for logo class usage..." rg -l "className=.*logo.*" --type jsx echo "Checking for card class usage..." rg -l "className=.*card.*" --type jsx echo "Checking for read-the-docs class usage..." rg -l "className=.*read-the-docs.*" --type jsxLength of output: 455
Script:
#!/bin/bash # Search for usage of template-related classes without file type restriction echo "Checking for logo class usage..." rg -l "className=.*logo" echo "Checking for card class usage..." rg -l "className=.*card" echo "Checking for read-the-docs class usage..." rg -l "className=.*read-the-docs" # Also check for these class names in other common formats echo "Checking for class names in other formats..." rg -l "class=.*logo|class=\"logo" rg -l "class=.*card|class=\"card" rg -l "class=.*read-the-docs|class=\"read-the-docs" # Check for actual HTML/JSX files in the repo echo "Checking for React component files..." fd "\.(jsx?|tsx?)$"Length of output: 1464
Script:
#!/bin/bash # Let's check the content of App.jsx since it's likely the main component that might use these styles echo "Checking App.jsx content..." cat createx/src/App.jsx # Also check if there are any references to these classes in the entire codebase echo "Checking for any references to these specific classes..." rg -l "logo-spin" rg -l "read-the-docs"Length of output: 1417
createx/src/components/index.js (1)
8-10: LGTM! Consider sorting exports alphabetically.The new exports maintain consistency with the existing pattern and are properly integrated into the application according to the related changes.
Consider sorting the exports alphabetically for better maintainability. Here's the suggested order:
export { default as Contact } from './Contact/index.jsx'; +export { default as FAQs } from './FAQs/index.jsx'; export { default as Home } from './Home/index.jsx'; +export { default as Navbar } from './Navbar/index.jsx'; export { default as ProblemStatements } from './ProblemStatements/index.jsx'; export { default as RegistrationForm } from './RegistrationForm/index.jsx'; export { default as Rules } from './Rules/index.jsx'; export { default as Schedule } from './Schedule/index.jsx'; export { default as Sponsors } from './Sponsors/index.jsx'; export { default as SubmissionPortal } from './SubmissionPortal/index.jsx'; -export { default as FAQs } from './FAQs/index.jsx'; -export { default as Navbar } from './Navbar/index.jsx';createx/src/components/Button/index.jsx (1)
4-4: Add PropTypes validation for component props.Since this is a reusable component, it would benefit from proper props validation to catch potential issues early in development.
Add the following at the end of the file:
import PropTypes from 'prop-types'; Button.propTypes = { children: PropTypes.node.isRequired, to: PropTypes.string, onClick: PropTypes.func, className: PropTypes.string };createx/src/App.jsx (2)
2-3: Consider consistent component importsThe
Navbarcomponent is imported directly while other components (includingFAQs) are imported through the barrel file. Consider moving theNavbarimport to be consistent with other components.-import { Home, ProblemStatements, RegistrationForm, Rules, Contact, Sponsors, SubmissionPortal, Schedule, FAQs } from "./components"; -import Navbar from "./components/Navbar"; +import { Home, ProblemStatements, RegistrationForm, Rules, Contact, Sponsors, SubmissionPortal, Schedule, FAQs, Navbar } from "./components";
23-23: Fix spacing in FAQs route componentMaintain consistent spacing in route components.
-<Route path="/faq" element={<FAQs/>}/> +<Route path="/faq" element={<FAQs />} />createx/src/data/faqs.js (1)
1-1: Fix TODO comment capitalization.The TODO comment has inconsistent capitalization in "ContenT".
-// #TODO: Update FAQ ContenT +// TODO: Update FAQ contentcreatex/src/components/FAQs/index.jsx (2)
1-5: Consider adding PropTypes for future extensibility.While the component currently doesn't accept props, adding PropTypes would make it more maintainable if you plan to make it more configurable in the future (e.g., customizable styles, header text, or FAQ data source).
+import PropTypes from 'prop-types'; import React, { useState } from "react"; import { faqs } from "../../data/faqs"; const FAQs = () => {
7-9: Consider a more descriptive function name.
togglerFunctionis a generic name. Consider renaming it to something more specific liketoggleFAQItemorhandleFAQToggleto better describe its purpose.- const togglerFunction = (index) => { + const toggleFAQItem = (index) => { setActiveId(activeId === index ? null : index); };
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
⛔ Files ignored due to path filters (9)
createx/public/assets/background-home-image.pngis excluded by!**/*.pngcreatex/public/assets/contact-svg.pngis excluded by!**/*.pngcreatex/public/assets/insta.pngis excluded by!**/*.pngcreatex/public/assets/logo.svgis excluded by!**/*.svgcreatex/public/assets/mail.pngis excluded by!**/*.pngcreatex/public/assets/menu-close.svgis excluded by!**/*.svgcreatex/public/assets/menu-icon.svgis excluded by!**/*.svgcreatex/public/assets/phone.pngis excluded by!**/*.pngcreatex/src/fonts/Kagitingan-Bold.otfis excluded by!**/*.otf
📒 Files selected for processing (13)
- createx/index.html (1 hunks)
- createx/src/App.css (1 hunks)
- createx/src/App.jsx (1 hunks)
- createx/src/components/Button/index.jsx (1 hunks)
- createx/src/components/Contact/index.jsx (1 hunks)
- createx/src/components/FAQs/index.jsx (1 hunks)
- createx/src/components/Home/index.jsx (1 hunks)
- createx/src/components/Navbar/index.jsx (1 hunks)
- createx/src/components/index.js (1 hunks)
- createx/src/data/faqs.js (1 hunks)
- createx/src/fonts.css (1 hunks)
- createx/tailwind.config.js (1 hunks)
- createx/vite.config.js (1 hunks)
✅ Files skipped from review due to trivial changes (2)
- createx/index.html
- createx/src/fonts.css
🔇 Additional comments (7)
createx/src/components/Home/index.jsx (1)
6-9: Implementation appears incomplete.The hero section is currently empty despite the PR title mentioning FAQ and Contact page implementation. Please ensure:
- The hero section includes relevant content
- The component aligns with the PR objectives
createx/tailwind.config.js (1)
11-11: Review color naming convention and verify usage.The color
whiteis being changed from a cream color (#F5E6C4) to true white (#ffffff), while there's already acreamcolor defined with the same previous value. This change might affect the appearance of existing components.Consider:
- Reviewing all components using the
whiteclass to ensure this change doesn't break existing designs- Documenting the color system in a style guide to maintain consistency
createx/src/components/Button/index.jsx (1)
7-13:⚠️ Potential issueVerify onClick behavior in Link mode.
The component ignores the onClick prop when rendering as a Link. This might lead to confusion if both 'to' and 'onClick' props are provided.
Consider either:
- Warning when both props are provided
- Supporting onClick in Link mode
if (to) { return ( - <Link to={to} className={`${baseClasses} ${className}`}> + <Link + to={to} + onClick={onClick} + className={`${baseClasses} ${className}`} + > {children} </Link> ); }Also applies to: 15-22
createx/src/App.jsx (2)
10-13: LGTM! Well-structured layout implementationGood implementation of:
- Semantic HTML with
<main>tag- Flex layout for sticky footer pattern
- Proper use of flex-grow for main content
2-2: Verify all imported components existLet's ensure all components referenced in the imports are properly defined.
✅ Verification successful
All imported components exist and are properly defined
The verification confirms that all components referenced in the import statement exist in their respective directories under
src/components/. Each component has its own directory with anindex.jsxfile:
- Home/index.jsx
- ProblemStatements/index.jsx
- RegistrationForm/index.jsx
- Rules/index.jsx
- Contact/index.jsx
- Sponsors/index.jsx
- SubmissionPortal/index.jsx
- Schedule/index.jsx
- FAQs/index.jsx
Additionally, there's a main
components/index.jsfile that likely handles the re-exports, making the import statement valid.🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify existence of all imported components # Test: Check if all component files exist echo "Checking for component files..." components=("Home" "ProblemStatements" "RegistrationForm" "Rules" "Contact" "Sponsors" "SubmissionPortal" "Schedule" "FAQs") for component in "${components[@]}"; do fd -t f "$component\.(jsx?|tsx?)$" src/components doneLength of output: 1922
Script:
#!/bin/bash # Let's first check if the components directory exists and its location fd -t d "components" # Then let's check for any JSX/TSX files that might contain these component definitions echo "Searching for component files..." rg -l "export.*(?:Home|ProblemStatements|RegistrationForm|Rules|Contact|Sponsors|SubmissionPortal|Schedule|FAQs)" -g "*.{jsx,tsx}" # Also check the index file in components directory that might be re-exporting these components fd "index\.(jsx?|tsx?)$"Length of output: 1201
createx/src/components/FAQs/index.jsx (1)
45-49: Add error handling and loading states.The component should handle potential loading states and errors when fetching FAQ data.
Let's check if the FAQ data is being loaded asynchronously:
createx/src/components/Contact/index.jsx (1)
1-43: Verify required assets and fontsThe component relies on several external assets and custom fonts. Let's verify their existence in the project.
✅ Verification successful
All required assets and fonts are properly configured
All necessary resources for the Contact component are present and correctly configured:
- All image assets (
mail.png,phone.png,insta.png,contact-svg.png) exist in/public/assets/- Both fonts (Kagitingan and Jura) are:
- Properly defined in
tailwind.config.js- Have their font files present in
/public/fonts/(both .woff and .woff2 formats)- Correctly configured in
index.csswith proper@font-facedeclarations🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Check for required assets and font definitions echo "Checking for required assets..." fd -t f "mail.png|phone.png|insta.png|contact-svg.png" assets/ echo "Checking for font definitions..." rg -l "font-kagitingan|font-jura" "tailwind.config.*"Length of output: 421
Script:
#!/bin/bash # Let's first check the repository structure to locate assets and config files echo "Checking repository structure..." fd -t d -d 2 echo "\nChecking for image assets in any directory..." fd -t f -e png echo "\nChecking for tailwind configuration..." fd "tailwind.config" echo "\nChecking for font configurations in any CSS or configuration files..." rg -l "font-kagitingan|font-jura"Length of output: 1090
Script:
#!/bin/bash # Let's check the font configurations in tailwind config and CSS echo "Checking tailwind configuration for fonts..." cat createx/tailwind.config.js echo "\nChecking font definitions in CSS..." cat createx/src/index.cssLength of output: 2478
Script:
#!/bin/bash # Let's verify the font files existence echo "Checking for font files..." fd -t f "Kagitingan.woff2|Kagitingan.woff|Jura.woff2|Jura.woff" createx/public/fonts/ echo "\nVerifying all required assets are in the correct location..." ls -l createx/public/assets/mail.png createx/public/assets/phone.png createx/public/assets/insta.png createx/public/assets/contact-svg.png 2>/dev/nullLength of output: 897
| export default defineConfig({ | ||
| plugins: [react()], | ||
| server: { | ||
| port: 3122, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Consider using a standard development port
The port 3122 appears to be arbitrarily chosen with no documented reason or usage elsewhere in the codebase. To maintain consistency with common development practices and avoid confusion, consider using standard development ports like:
- 3000 (common React development port)
- 5173 (Vite's default port)
- 8080 (standard development port)
🔗 Analysis chain
Verify the port selection rationale.
The chosen port (3122) is non-standard. Please verify if this specific port was selected for a particular reason (e.g., avoiding conflicts with other services). If not, consider using more common development ports like 3000 or 5173.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Check if port 3122 is mentioned elsewhere in the codebase
# or if there's documentation explaining this choice
rg -i "3122|port" README.md
rg -i "3122" --type md
Length of output: 52
Script:
#!/bin/bash
# Let's check for any port configurations across the entire codebase
rg -i "port.*=.*\d{4}" -A 2 -B 2
# Also check for any documentation about ports in package.json scripts
cat package.json | jq .scripts
# Check if there are other Vite config files that might have port configurations
fd "vite.config" --type f --exec cat {}
Length of output: 366
|
|
||
| #root { | ||
| max-width: 1280px; | ||
| margin: 0; | ||
| text-align: center; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Consider adding a container class for content width management.
While removing the max-width constraint from #root allows full-width layouts, it's recommended to add a container class to manage content width for better readability, especially for text-heavy pages like FAQs. This ensures optimal line lengths across different screen sizes.
Consider adding:
#root {
margin: 0;
text-align: center;
}
+.container {
+ width: 100%;
+ max-width: 1280px;
+ margin: 0 auto;
+ padding: 0 1rem;
+}
+@media (min-width: 1536px) {
+ .container {
+ max-width: 1440px;
+ }
+}This approach:
- Maintains a reasonable reading width for content
- Provides consistent padding on smaller screens
- Scales appropriately for larger displays
- Keeps full-width capability for background elements when needed
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| #root { | |
| max-width: 1280px; | |
| margin: 0; | |
| text-align: center; | |
| #root { | |
| margin: 0; | |
| text-align: center; | |
| } | |
| .container { | |
| width: 100%; | |
| max-width: 1280px; | |
| margin: 0 auto; | |
| padding: 0 1rem; | |
| } | |
| @media (min-width: 1536px) { | |
| .container { | |
| max-width: 1440px; | |
| } | |
| } |
| useEffect(() => { | ||
| const handleScroll = () => { | ||
| setIsScrolled(window.scrollY > 0); | ||
| }; | ||
|
|
||
| window.addEventListener('scroll', handleScroll); | ||
| return () => window.removeEventListener('scroll', handleScroll); | ||
| }, []); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Add throttling to scroll event handler.
The scroll event can fire hundreds of times per second, potentially impacting performance. Consider implementing throttling:
+import { throttle } from 'lodash';
+
useEffect(() => {
- const handleScroll = () => {
+ const handleScroll = throttle(() => {
setIsScrolled(window.scrollY > 0);
- };
+ }, 100);
window.addEventListener('scroll', handleScroll);
- return () => window.removeEventListener('scroll', handleScroll);
+ return () => {
+ handleScroll.cancel();
+ window.removeEventListener('scroll', handleScroll);
+ };
}, []);📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| useEffect(() => { | |
| const handleScroll = () => { | |
| setIsScrolled(window.scrollY > 0); | |
| }; | |
| window.addEventListener('scroll', handleScroll); | |
| return () => window.removeEventListener('scroll', handleScroll); | |
| }, []); | |
| import { throttle } from 'lodash'; | |
| useEffect(() => { | |
| const handleScroll = throttle(() => { | |
| setIsScrolled(window.scrollY > 0); | |
| }, 100); | |
| window.addEventListener('scroll', handleScroll); | |
| return () => { | |
| handleScroll.cancel(); | |
| window.removeEventListener('scroll', handleScroll); | |
| }; | |
| }, []); |
| <button onClick={toggleMenu} className={`${isMenuOpen ? 'invisible' : 'visible'}`}> | ||
| <img src="/assets/menu-icon.svg" alt="Menu" className="w-[5.75rem] h-[3.875rem]" /> | ||
| </button> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Improve menu button accessibility.
The menu toggle button needs proper ARIA attributes and keyboard support:
-<button onClick={toggleMenu} className={`${isMenuOpen ? 'invisible' : 'visible'}`}>
+<button
+ onClick={toggleMenu}
+ aria-expanded={isMenuOpen}
+ aria-label="Toggle navigation menu"
+ aria-controls="navigation-menu"
+ className={`${isMenuOpen ? 'invisible' : 'visible'}`}
+>
<img src="/assets/menu-icon.svg" alt="Menu" className="w-[5.75rem] h-[3.875rem]" />
</button>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <button onClick={toggleMenu} className={`${isMenuOpen ? 'invisible' : 'visible'}`}> | |
| <img src="/assets/menu-icon.svg" alt="Menu" className="w-[5.75rem] h-[3.875rem]" /> | |
| </button> | |
| <button | |
| onClick={toggleMenu} | |
| aria-expanded={isMenuOpen} | |
| aria-label="Toggle navigation menu" | |
| aria-controls="navigation-menu" | |
| className={`${isMenuOpen ? 'invisible' : 'visible'}`} | |
| > | |
| <img src="/assets/menu-icon.svg" alt="Menu" className="w-[5.75rem] h-[3.875rem]" /> | |
| </button> |
| <div ref={menuRef} className={`fixed top-0 left-0 w-80 h-full bg-[#1E1E1E] transform transition-transform duration-300 ease-in-out ${isMenuOpen ? 'translate-x-0' : '-translate-x-full'}`}> | ||
| <div className="p-8 flex flex-col space-y-6"> | ||
| <div className="flex justify-between items-center mb-6"> | ||
| <Button to="/register" className="flex-grow mr-4" onClick={closeMenu}>REGISTER NOW</Button> | ||
| <button onClick={toggleMenu} className="p-2"> | ||
| <img src="/assets/menu-close.svg" alt="Close Menu" className="w-8 h-8" /> | ||
| </button> | ||
| </div> | ||
| <Link to="/sponsors" className="text-white font-kagitingan text-2xl text-left" onClick={closeMenu}>SPONSORS & PARTNERS</Link> | ||
| <Link to="/problem-statements" className="text-white font-kagitingan text-2xl text-left" onClick={closeMenu}>PROBLEM STATEMENTS</Link> | ||
| <Link to="/rules" className="text-white font-kagitingan text-2xl text-left" onClick={closeMenu}>RULES</Link> | ||
| <Link to="/schedule" className="text-white font-kagitingan text-2xl text-left" onClick={closeMenu}>SCHEDULE</Link> | ||
| <Link to="/faq" className="text-white font-kagitingan text-2xl text-left" onClick={closeMenu}>FAQ</Link> | ||
| <Link to="/contact" className="text-white font-kagitingan text-2xl text-left" onClick={closeMenu}>CONTACT</Link> | ||
| <Link to="/team" className="text-white font-kagitingan text-2xl text-left" onClick={closeMenu}>ORGANIZING TEAM</Link> | ||
| <div className="border-t border-white my-4"></div> | ||
| <Link to="/submission" className="text-white font-kagitingan text-2xl text-left" onClick={closeMenu}>SUBMISSION PORTAL</Link> | ||
| <Link to="/registration" className="text-white font-kagitingan text-2xl text-left" onClick={closeMenu}>TEAM REGISTRATION</Link> | ||
| </div> | ||
| <div className="absolute bottom-8 left-0 w-full flex justify-center"> | ||
| <img src="/assets/logo.svg" alt="CreateX Logo" className="h-12" /> | ||
| </div> | ||
| </div> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Improve menu structure and maintainability.
Consider the following improvements:
- Use semantic HTML elements
- Make navigation items data-driven
- Add proper ARIA roles
+const navigationItems = [
+ { to: '/sponsors', label: 'SPONSORS & PARTNERS' },
+ { to: '/problem-statements', label: 'PROBLEM STATEMENTS' },
+ // ... add other items
+];
-<div ref={menuRef} className={`fixed top-0 left-0 w-80 h-full bg-[#1E1E1E] transform transition-transform duration-300 ease-in-out ${isMenuOpen ? 'translate-x-0' : '-translate-x-full'}`}>
+<aside
+ ref={menuRef}
+ id="navigation-menu"
+ role="navigation"
+ aria-label="Main navigation"
+ className={`fixed top-0 left-0 w-80 h-full bg-[#1E1E1E] transform transition-transform duration-300 ease-in-out ${isMenuOpen ? 'translate-x-0' : '-translate-x-full'}`}
+>
<div className="p-8 flex flex-col space-y-6">
{/* ... button code ... */}
- <Link to="/sponsors" className="text-white font-kagitingan text-2xl text-left" onClick={closeMenu}>SPONSORS & PARTNERS</Link>
- {/* ... other links ... */}
+ <nav>
+ {navigationItems.map(({ to, label }) => (
+ <Link
+ key={to}
+ to={to}
+ className="text-white font-kagitingan text-2xl text-left block py-2"
+ onClick={closeMenu}
+ >
+ {label}
+ </Link>
+ ))}
+ </nav>
</div>
-</div>
+</aside>Committable suggestion was skipped due to low confidence.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Outside diff range and nitpick comments (1)
createx/src/data/faqs.js (1)
1-112: Add documentation and improve content formatting.Consider the following improvements for better maintainability:
- Add JSDoc documentation for the data structure
- Consider using template literals for long descriptions
- Support basic markdown or HTML formatting in descriptions for better readability
Example implementation:
/** * FAQ data for CreateX challenge. * @typedef {Object} FAQ * @property {string} title - The question * @property {string} description - The answer, supports basic markdown */ /** @type {FAQ[]} */ export const faqs = [ { title: "What is CreateX?", description: ` CreateX is a 30-day challenge where participants: - Bring their ideas to life - Solve real-world problems - Learn through hands-on projects ` }, // ... other FAQs ];
Summary by CodeRabbit
Release Notes
New Features
Navbarfor improved navigation.FAQscomponent for frequently asked questions.Contactcomponent with detailed contact options and styling.Buttoncomponent for consistent button styling and functionality.Homecomponent layout for a more engaging user experience.Bug Fixes
Style
Chores