From 5a3eee3524a7a0d676e769d46f2b4fa48894ef76 Mon Sep 17 00:00:00 2001 From: David Emulo <161654052+Davidemulo@users.noreply.github.com> Date: Mon, 9 Mar 2026 19:02:25 +0100 Subject: [PATCH 01/10] Create hackathon-detail-design.md (#466) --- .../[slug]/hackathon-detail-design.md | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 app/(landing)/hackathons/[slug]/hackathon-detail-design.md diff --git a/app/(landing)/hackathons/[slug]/hackathon-detail-design.md b/app/(landing)/hackathons/[slug]/hackathon-detail-design.md new file mode 100644 index 00000000..cdb81ff1 --- /dev/null +++ b/app/(landing)/hackathons/[slug]/hackathon-detail-design.md @@ -0,0 +1,30 @@ +Hackathon Detail Page Redesign +Issue: #414 + +Figma Design +https://www.figma.com/design/EMNGAQl1SGObXcsoa24krt/Boundless_Project-Details?node-id=0-1&t=A1ywRcn60Xyw0X6h-1 + +This design proposes a cleaner and more professional UI/UX for the hackathon detail page. + +Included in the Figma file: +- Desktop layout +- Mobile layout +- Banner / hero placement proposal +- Redesigned hero section +- Sticky sidebar card +- Tab navigation +- All tab layouts (overview, participants, resources, announcements, submissions, discussions, find team, winners) +- Loading state +- Hackathon not found state + +Banner Placement Proposal +The hackathon banner is placed as a full-width hero image at the top of the page, allowing it to visually represent the hackathon and improve page identity. + +The sidebar becomes a compact summary card with key information and actions. + +Design Goals +- Simpler UI and improved visual hierarchy +- Clear primary actions (Join, Submit, View Submission) +- Consistent spacing and typography +- Better mobile usability +- Professional and product-quality look From 6639c96dc2f6667dd95261cbf73dd8aea7781926 Mon Sep 17 00:00:00 2001 From: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Date: Mon, 9 Mar 2026 19:49:46 +0100 Subject: [PATCH 02/10] Production (#472) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * Merge fixes to production (#467) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign * UI fixes (#458) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * fix: fix auto refresh ib submission page * fix: hackathon submission fixes * fix: fix coderabbit corrections * fix: fix coderabbit corrections * chore: write boundless on x challenge blog * fix: remove blog * Blog fix (#464) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * fix: fix auto refresh ib submission page * fix: hackathon submission fixes * fix: fix coderabbit corrections * fix: fix coderabbit corrections * chore: write boundless on x challenge blog * fix: remove blog * chore: add blog content * Blog fix (#465) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * fix: fix auto refresh ib submission page * fix: hackathon submission fixes * fix: fix coderabbit corrections * fix: fix coderabbit corrections * chore: write boundless on x challenge blog * fix: remove blog * chore: add blog content * fix: fix broken blog image and notification redirect * merge fork main to boundlessfi main (#468) * fix: improve timeline input , ui improvement and fixes for participation tab * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * merge to main (#469) * fix: improve timeline input , ui improvement and fixes for participation tab * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * merge (#470) * fix: improve timeline input , ui improvement and fixes for participation tab * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * merge fork to main (#471) * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * Create hackathon-detail-design.md (#466) --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: David Emulo <161654052+Davidemulo@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> Co-authored-by: David Emulo <161654052+Davidemulo@users.noreply.github.com> --- hooks/hackathon/use-participants.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/hooks/hackathon/use-participants.ts b/hooks/hackathon/use-participants.ts index 45e43122..8b448a6c 100644 --- a/hooks/hackathon/use-participants.ts +++ b/hooks/hackathon/use-participants.ts @@ -18,7 +18,6 @@ export function useParticipants() { useEffect(() => { if (hackathonId) { setIsLoading(true); - const fetchAllData = async () => { try { // Fetch teams From 3482a521e057b2b3d0241f46024517a78e8bb85f Mon Sep 17 00:00:00 2001 From: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Date: Mon, 9 Mar 2026 21:33:34 +0100 Subject: [PATCH 03/10] Production (#474) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * Merge fixes to production (#467) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign * UI fixes (#458) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * fix: fix auto refresh ib submission page * fix: hackathon submission fixes * fix: fix coderabbit corrections * fix: fix coderabbit corrections * chore: write boundless on x challenge blog * fix: remove blog * Blog fix (#464) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * fix: fix auto refresh ib submission page * fix: hackathon submission fixes * fix: fix coderabbit corrections * fix: fix coderabbit corrections * chore: write boundless on x challenge blog * fix: remove blog * chore: add blog content * Blog fix (#465) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * fix: fix auto refresh ib submission page * fix: hackathon submission fixes * fix: fix coderabbit corrections * fix: fix coderabbit corrections * chore: write boundless on x challenge blog * fix: remove blog * chore: add blog content * fix: fix broken blog image and notification redirect * merge fork main to boundlessfi main (#468) * fix: improve timeline input , ui improvement and fixes for participation tab * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * merge to main (#469) * fix: improve timeline input , ui improvement and fixes for participation tab * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * merge (#470) * fix: improve timeline input , ui improvement and fixes for participation tab * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * merge fork to main (#471) * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * Create hackathon-detail-design.md (#466) --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: David Emulo <161654052+Davidemulo@users.noreply.github.com> * merge David's Pr (#473) * Create hackathon-detail-design.md (#466) * Production (#472) * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * Merge fixes to production (#467) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign * UI fixes (#458) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * fix: fix auto refresh ib submission page * fix: hackathon submission fixes * fix: fix coderabbit corrections * fix: fix coderabbit corrections * chore: write boundless on x challenge blog * fix: remove blog * Blog fix (#464) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * fix: fix auto refresh ib submission page * fix: hackathon submission fixes * fix: fix coderabbit corrections * fix: fix coderabbit corrections * chore: write boundless on x challenge blog * fix: remove blog * chore: add blog content * Blog fix (#465) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * fix: fix auto refresh ib submission page * fix: hackathon submission fixes * fix: fix coderabbit corrections * fix: fix coderabbit corrections * chore: write boundless on x challenge blog * fix: remove blog * chore: add blog content * fix: fix broken blog image and notification redirect * merge fork main to boundlessfi main (#468) * fix: improve timeline input , ui improvement and fixes for participation tab * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * merge to main (#469) * fix: improve timeline input , ui improvement and fixes for participation tab * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * merge (#470) * fix: improve timeline input , ui improvement and fixes for participation tab * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * merge fork to main (#471) * merg to prod (#450) * fix: improve timeline input , ui improvement and fixes for participation tab (#442) * feat: integrate Sentry for error tracking and reporting - Added Sentry configuration for both server and edge environments to capture errors and performance metrics. - Updated error handling across various components to report errors to Sentry, enhancing monitoring capabilities. - Introduced a new MessagesProvider for managing in-app messaging and notifications. - Refactored the .env.example file to include Sentry DSN and related configurations for production environments. - Removed the deprecated connect-wallet component to streamline the codebase. * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * UI fixes (#445) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: handle potential null values in notification data - Updated notification handling to safely access properties using optional chaining. - Ensured that the notification data is checked for null values before accessing its properties in various components, improving robustness and preventing runtime errors. * feat: Enforce Submission Requirements (requireGithub, requireDemoVideo, requireOtherLinks) (#443) * feat: enforce submission requirements (requireGithub, requireDemoVideo, requireOtherLinks) - Add dynamic schema validation based on currentHackathon flags - Enforce requireDemoVideo at schema level with Zod refine - Add Step 2 validation for requireGithub, requireDemoVideo, requireOtherLinks - Add final validation pass in onSubmit before API call - Add dynamic asterisk (*) to required field labels - Add legend and helper text for required fields - Wrap links section in FormField for proper error display * UI fixes (#444) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * feat: prevent removal of required links and style required asterisks in red Made-with: Cursor --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: felipevega2x * feat(submissions): enforce team size limits (teamMin, teamMax) (#446) * feat(submissions): enforce team size limits (teamMin, teamMax) - Add validation in handleNext (Step 0) to block progression when team size is below teamMin, showing specific message with members needed - Guard handleAddInvitee function to prevent adding members when team reaches teamMax capacity - Add capacity indicator Badge showing "X / Y members" with visual states: orange when below minimum, yellow when at capacity - Disable "Add Member" button and inputs when team is full - Display helper text when team is below minimum requirement Closes #405 * fix(submissions): remove hardcoded team size fallbacks - Use undefined instead of hardcoded defaults (1, 10) - Add hasTeamLimits guard to only enforce when hackathon defines limits - Conditionally render Badge and helper text when limits are defined * refactor: enhance error handling and submission response structure - Introduced a utility function to standardize API error messages across submission operations. - Updated the create and update submission functions to handle optional chaining for response checks. - Improved the response structure to include messages for successful submissions. - Adjusted the CreateSubmissionRequest interface to remove the hackathonId field and made organizationId optional in the update submission request. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> * UI fixes (#451) (#453) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * ui-fixes (#455) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * merge to prod (#457) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> * merg to prod (#459) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> * merg to prod (#461) * UI fixes (#451) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * UI fixes (#454) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * feat(navbar): enhance navbar styles and layout - Added CSS variables for active navbar link states, improving visual feedback. - Refactored navbar layout for better alignment and responsiveness, including adjustments for mobile and desktop views. - Updated component structure to ensure consistent styling and behavior across different states. * feat(announcements): enhance announcement rendering and markdown support - Implemented a `stripMarkdown` function to convert Markdown content to plain text for better preview handling in the announcement page. - Created an `AnnouncementPreview` component to render announcements with Markdown support, improving content display in the announcements tab. - Updated the announcement editor to utilize a dynamic Markdown editor, enhancing the editing experience for users. * feat(newsletter): implement newsletter API integration with subscribe… (#452) * feat(newsletter): implement newsletter API integration with subscribe, confirm, unsubscribe, and preferences * Draft feat(newsletter): Imp some extra things * feat(newsletter): add API routes, client helpers, and UI pages * Docs: add comprehensive bug test report for organization features (#456) * Test: add comprehensive bug test report for organization features * docs: update bug test report for organization features and address critical issues * fix: update branch name in bug test report and upgrade dompurify to version 3.3.2 * fix: update the milestone submission flow for campaign --------- Co-authored-by: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> * Create hackathon-detail-design.md (#466) --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: David Emulo <161654052+Davidemulo@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> Co-authored-by: David Emulo <161654052+Davidemulo@users.noreply.github.com> --------- Co-authored-by: David Emulo <161654052+Davidemulo@users.noreply.github.com> Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> --------- Co-authored-by: Collins Ikechukwu Co-authored-by: Matias Aguilar Co-authored-by: felipevega2x Co-authored-by: Josué Araya Marín <104031367+Josue19-08@users.noreply.github.com> Co-authored-by: Sandeep chauhan <92181599+ryzen-xp@users.noreply.github.com> Co-authored-by: Ekene Ngwudike <94962750+Ekene001@users.noreply.github.com> Co-authored-by: David Emulo <161654052+Davidemulo@users.noreply.github.com> From 560a0cb164be8929b80391d1bac9968c4ef0e436 Mon Sep 17 00:00:00 2001 From: Bioba <97415163+Agbeleshe@users.noreply.github.com> Date: Mon, 9 Mar 2026 23:50:58 +0100 Subject: [PATCH 04/10] feat: implement Wallet Not Ready modal and readiness checks (#462) * feat: implement Wallet Not Ready modal and readiness checks * fix: redesigned not wallet ready and global usage --------- Co-authored-by: Benjtalkshow --- components/escrow/FundEscrowButton.tsx | 436 +++++++++++--------- components/landing-page/navbar.tsx | 37 +- components/modals/fund-project/index.tsx | 62 +-- components/providers/wallet-provider.tsx | 16 + components/wallet/LandingWalletWrapper.tsx | 9 +- components/wallet/WalletNotReadyModal.tsx | 163 ++++++++ components/wallet/WalletTrigger.tsx | 3 +- features/projects/components/Initialize.tsx | 26 +- hooks/use-protected-action.ts | 6 + hooks/use-wallet-protection.ts | 43 +- hooks/use-wallet-readiness.ts | 63 +++ 11 files changed, 627 insertions(+), 237 deletions(-) create mode 100644 components/wallet/WalletNotReadyModal.tsx create mode 100644 hooks/use-wallet-readiness.ts diff --git a/components/escrow/FundEscrowButton.tsx b/components/escrow/FundEscrowButton.tsx index 54652343..1ea7f8d1 100644 --- a/components/escrow/FundEscrowButton.tsx +++ b/components/escrow/FundEscrowButton.tsx @@ -15,6 +15,10 @@ import { } from '@trustless-work/escrow'; import { toast } from 'sonner'; import { reportError } from '@/lib/error-reporting'; +import { useWalletProtection } from '@/hooks/use-wallet-protection'; +import WalletRequiredModal from '@/components/wallet/WalletRequiredModal'; +import WalletNotReadyModal from '@/components/wallet/WalletNotReadyModal'; +import { WalletSheet } from '@/components/wallet/WalletSheet'; // Extended type to include balance property that may exist at runtime // Using intersection type to avoid type conflicts with required balance property @@ -34,7 +38,6 @@ import { * Component to fund an existing multi-release escrow using Trustless Work */ export const FundEscrowButton = () => { - const { walletAddress } = useWalletContext(); const { contractId, escrow, updateEscrow } = useEscrowContext(); const { fundEscrow } = useFundEscrow(); const { sendTransaction } = useSendTransaction(); @@ -45,6 +48,22 @@ export const FundEscrowButton = () => { transactionHash?: string; } | null>(null); + // Wallet protection hook + const { + requireWallet, + showWalletModal, + showNotReadyModal, + notReadyReasons, + handleWalletConnected, + closeWalletModal, + closeNotReadyModal, + publicKey: walletAddress, + } = useWalletProtection({ + actionName: 'fund escrow', + }); + + const [isWalletDrawerOpen, setIsWalletDrawerOpen] = useState(false); + // Calculate total amount from all milestones const calculateTotalAmount = (): number => { if (!escrow || !escrow.milestones) { @@ -94,79 +113,86 @@ export const FundEscrowButton = () => { ); } - // Step 1: Prepare the payload according to FundEscrowPayload type - const payload: FundEscrowPayload = { - contractId: contractId, - signer: walletAddress, - amount: totalAmount, - }; - - // Log payload for debugging - // Step 2: Execute function from Trustless Work - const fundResponse: EscrowRequestResponse = await fundEscrow( - payload, - 'multi-release' as EscrowType - ); + const walletReady = await requireWallet(async () => { + // Step 1: Prepare the payload according to FundEscrowPayload type + const payload: FundEscrowPayload = { + contractId: contractId, + signer: walletAddress!, + amount: totalAmount, + }; - // Type guard: Check if response is successful - if ( - fundResponse.status !== ('SUCCESS' as Status) || - !fundResponse.unsignedTransaction - ) { - const errorMessage = - 'message' in fundResponse && typeof fundResponse.message === 'string' - ? fundResponse.message - : 'Failed to fund escrow'; - throw new Error(errorMessage); - } + // Step 2: Execute function from Trustless Work + const fundResponse: EscrowRequestResponse = await fundEscrow( + payload, + 'multi-release' as EscrowType + ); - const { unsignedTransaction } = fundResponse; + // Type guard: Check if response is successful + if ( + fundResponse.status !== ('SUCCESS' as Status) || + !fundResponse.unsignedTransaction + ) { + const errorMessage = + 'message' in fundResponse && + typeof fundResponse.message === 'string' + ? fundResponse.message + : 'Failed to fund escrow'; + throw new Error(errorMessage); + } - // Step 3: Sign transaction with wallet - const signedXdr = await signTransaction({ - unsignedTransaction, - address: walletAddress, - }); + const { unsignedTransaction } = fundResponse; + + // Step 3: Sign transaction with wallet + const signedXdr = await signTransaction({ + unsignedTransaction, + address: walletAddress!, + }); + + // Step 4: Send transaction + const sendResponse = await sendTransaction(signedXdr); + + // Type guard: Check if response is successful + if ( + 'status' in sendResponse && + sendResponse.status !== ('SUCCESS' as Status) + ) { + const errorMessage = + 'message' in sendResponse && + typeof sendResponse.message === 'string' + ? sendResponse.message + : 'Failed to send transaction'; + throw new Error(errorMessage); + } - // Step 4: Send transaction - const sendResponse = await sendTransaction(signedXdr); + // Update escrow balance in context + if (escrow) { + const escrowWithBalance = escrow as MultiReleaseEscrowWithBalance; + const currentBalance = escrowWithBalance.balance || 0; + const updatedEscrow: MultiReleaseEscrowWithBalance = { + ...escrow, + balance: currentBalance + totalAmount, + }; + updateEscrow(updatedEscrow as MultiReleaseEscrow); + } - // Type guard: Check if response is successful - if ( - 'status' in sendResponse && - sendResponse.status !== ('SUCCESS' as Status) - ) { - const errorMessage = + // Display success status + const successMessage = 'message' in sendResponse && typeof sendResponse.message === 'string' ? sendResponse.message - : 'Failed to send transaction'; - throw new Error(errorMessage); - } + : 'Escrow funded successfully!'; - // Update escrow balance in context - if (escrow) { - // Balance may not be in the type, so we use type assertion - const escrowWithBalance = escrow as MultiReleaseEscrowWithBalance; - const currentBalance = escrowWithBalance.balance || 0; - const updatedEscrow: MultiReleaseEscrowWithBalance = { - ...escrow, - balance: currentBalance + totalAmount, - }; - updateEscrow(updatedEscrow as MultiReleaseEscrow); - } + setFundingStatus({ + success: true, + message: successMessage, + }); - // Display success status - const successMessage = - 'message' in sendResponse && typeof sendResponse.message === 'string' - ? sendResponse.message - : 'Escrow funded successfully!'; + toast.success('Escrow funded successfully!'); + }, totalAmount); - setFundingStatus({ - success: true, - message: successMessage, - }); - - toast.success('Escrow funded successfully!'); + if (!walletReady) { + setIsLoading(false); + return; + } } catch (err) { reportError(err, { context: 'escrow-fund' }); setFundingStatus({ @@ -187,147 +213,159 @@ export const FundEscrowButton = () => { const totalAmount = calculateTotalAmount(); - if (fundingStatus) { - return ( - - -
- {fundingStatus.success ? ( - - ) : ( - - )} - + {fundingStatus ? ( + + +
+ {fundingStatus.success ? ( + + ) : ( + + )} + + {fundingStatus.success + ? 'Escrow Funded Successfully!' + : 'Funding Failed'} + +
+ - {fundingStatus.success - ? 'Escrow Funded Successfully!' - : 'Funding Failed'} -
-
- - {fundingStatus.message} - -
- {fundingStatus.success && escrow && ( - -
-
- - Previous Balance: - - - {formatAmount( - ((escrow as MultiReleaseEscrowWithBalance).balance || 0) - - totalAmount - )} - -
-
- - Funded Amount: - - - +{formatAmount(totalAmount)} - -
-
- - New Balance: - - - {formatAmount( - (escrow as MultiReleaseEscrowWithBalance).balance || 0 - )} - + {fundingStatus.message} + + + {fundingStatus.success && escrow && ( + +
+
+ + Previous Balance: + + + {formatAmount( + ((escrow as MultiReleaseEscrowWithBalance).balance || 0) - + totalAmount + )} + +
+
+ + Funded Amount: + + + +{formatAmount(totalAmount)} + +
+
+ + New Balance: + + + {formatAmount( + (escrow as MultiReleaseEscrowWithBalance).balance || 0 + )} + +
+ +
+ )} + + ) : !contractId || !escrow ? ( +
+

+ Please initialize an escrow first before funding. +

+
+ ) : !escrow.milestones || escrow.milestones.length === 0 ? ( +
+

+ Error: Escrow initialized without milestones +

+

+ This escrow was initialized without milestones. Please initialize a + new escrow with milestones. +

+
+ ) : ( + <> +
+
+ + Total Funding Amount: + + + {formatAmount(totalAmount)} +
- - - )} - - ); - } - - if (!contractId || !escrow) { - return ( -
-

- Please initialize an escrow first before funding. -

-
- ); - } - - // Check if escrow has milestones - if (!escrow.milestones || escrow.milestones.length === 0) { - return ( -
-

- Error: Escrow initialized without milestones -

-

- This escrow was initialized without milestones. Please initialize a - new escrow with milestones. -

-
- ); - } +

+ This amount is the sum of all milestone amounts ( + {escrow.milestones.length} milestones) +

+
- return ( -
-
-
- - Total Funding Amount: - - - {formatAmount(totalAmount)} - -
-

- This amount is the sum of all milestone amounts ( - {escrow.milestones.length} milestones) -

-
- - + + + )} + + {/* Wallet Modals */} + + + setIsWalletDrawerOpen(true)} + actionName='fund escrow' + /> + +
); }; diff --git a/components/landing-page/navbar.tsx b/components/landing-page/navbar.tsx index 01fe37b4..930ff85f 100644 --- a/components/landing-page/navbar.tsx +++ b/components/landing-page/navbar.tsx @@ -33,6 +33,8 @@ import WalletRequiredModal from '@/components/wallet/WalletRequiredModal'; import { WalletTrigger } from '../wallet/WalletTrigger'; import { NotificationBell } from '../notifications/NotificationBell'; import CreateProjectModal from '@/features/projects/components/CreateProjectModal'; +import WalletNotReadyModal from '@/components/wallet/WalletNotReadyModal'; +import { useWalletContext } from '../providers/wallet-provider'; const BRAND_COLOR = '#a7f950'; const ACTIONS = { @@ -200,12 +202,16 @@ function AuthenticatedActions() { const { executeProtectedAction, showWalletModal, + showNotReadyModal, + notReadyReasons, closeWalletModal, + closeNotReadyModal, handleWalletConnected, } = useProtectedAction({ actionName: ACTIONS.CREATE_PROJECT, onSuccess: () => setCreateProjectModalOpen(true), }); + const { onOpenWallet } = useWalletContext(); return ( <> @@ -294,17 +300,31 @@ function AuthenticatedActions() { actionName={ACTIONS.CREATE_PROJECT} onWalletConnected={handleWalletConnected} /> + ); } function UnauthenticatedActions() { const [createProjectModalOpen, setCreateProjectModalOpen] = useState(false); - const { showWalletModal, closeWalletModal, handleWalletConnected } = - useProtectedAction({ - actionName: ACTIONS.CREATE_PROJECT, - onSuccess: () => setCreateProjectModalOpen(true), - }); + const { + showWalletModal, + showNotReadyModal, + notReadyReasons, + closeWalletModal, + closeNotReadyModal, + handleWalletConnected, + } = useProtectedAction({ + actionName: ACTIONS.CREATE_PROJECT, + onSuccess: () => setCreateProjectModalOpen(true), + }); + const { onOpenWallet } = useWalletContext(); return ( <> @@ -334,6 +354,13 @@ function UnauthenticatedActions() { actionName={ACTIONS.CREATE_PROJECT} onWalletConnected={handleWalletConnected} /> + ); } diff --git a/components/modals/fund-project/index.tsx b/components/modals/fund-project/index.tsx index e74f2b7b..763645c1 100644 --- a/components/modals/fund-project/index.tsx +++ b/components/modals/fund-project/index.tsx @@ -12,6 +12,9 @@ import { fundCrowdfundingProject } from '@/features/projects/api'; import { useWalletContext } from '@/components/providers/wallet-provider'; import { useWalletProtection } from '@/hooks/use-wallet-protection'; import { signTransaction } from '@/lib/config/wallet-kit'; +import WalletRequiredModal from '@/components/wallet/WalletRequiredModal'; +import WalletNotReadyModal from '@/components/wallet/WalletNotReadyModal'; +import { WalletSheet } from '@/components/wallet/WalletSheet'; import { useFundEscrow, useSendTransaction, @@ -82,9 +85,19 @@ const FundProject = ({ open, setOpen, project }: FundProjectProps) => { // Wallet hooks const { walletAddress } = useWalletContext(); - const { requireWallet } = useWalletProtection({ + const { + requireWallet, + showWalletModal, + showNotReadyModal, + notReadyReasons, + handleWalletConnected, + closeWalletModal, + closeNotReadyModal, + } = useWalletProtection({ actionName: 'fund project', }); + + const [isWalletDrawerOpen, setIsWalletDrawerOpen] = useState(false); // Form data state const [formData, setFormData] = useState({ amount: {}, @@ -292,29 +305,11 @@ const FundProject = ({ open, setOpen, project }: FundProjectProps) => { setError(null); const walletValid = await requireWallet(async () => { - if (!walletAddress) { - setError('Wallet address is required'); - setFlowStep('form'); - setIsLoading(false); - setIsSubmitting(false); - return; - } - - if (!project.contractId) { - setError( - 'This project does not have an escrow contract set up. Please contact the project creator or support if you believe this is an error.' - ); - setFlowStep('form'); - setIsLoading(false); - setIsSubmitting(false); - return; - } - try { // Step 1: Prepare the payload according to FundEscrowPayload type const payload: FundEscrowPayload = { - contractId: project.contractId, - signer: walletAddress, + contractId: project.contractId!, + signer: walletAddress!, amount: fundingAmount, }; @@ -342,7 +337,7 @@ const FundProject = ({ open, setOpen, project }: FundProjectProps) => { // Step 3: Sign transaction with wallet const signedXdr = await signTransaction({ unsignedTransaction, - address: walletAddress, + address: walletAddress!, }); // Extract transaction hash from signed XDR @@ -405,7 +400,7 @@ const FundProject = ({ open, setOpen, project }: FundProjectProps) => { setIsLoading(false); setIsSubmitting(false); } - }); + }, fundingAmount); if (!walletValid) { setFlowStep('form'); @@ -593,6 +588,27 @@ const FundProject = ({ open, setOpen, project }: FundProjectProps) => { isSubmitting={isSubmitting} /> )} + + {/* Wallet Modals */} + + + setIsWalletDrawerOpen(true)} + actionName='fund project' + /> + + ); }; diff --git a/components/providers/wallet-provider.tsx b/components/providers/wallet-provider.tsx index 46586a6a..fa1b918d 100644 --- a/components/providers/wallet-provider.tsx +++ b/components/providers/wallet-provider.tsx @@ -26,6 +26,9 @@ type WalletContextType = { syncWallet: () => Promise; getSupportedTrustlineAssets: () => Promise; addTrustline: (assetCode: string) => Promise; + isWalletOpen: boolean; + onOpenWallet: () => void; + onCloseWallet: () => void; }; const WalletContext = createContext(undefined); @@ -123,6 +126,16 @@ export const WalletProvider = ({ children }: { children: ReactNode }) => { const isLoading = isSessionLoading || walletLoading; const hasWalletFromSession = !!session?.user?.wallet?.address; + const [isWalletOpen, setIsWalletOpen] = useState(false); + + const onOpenWallet = useCallback(() => { + setIsWalletOpen(true); + }, []); + + const onCloseWallet = useCallback(() => { + setIsWalletOpen(false); + }, []); + return ( { syncWallet, getSupportedTrustlineAssets, addTrustline, + isWalletOpen, + onOpenWallet, + onCloseWallet, }} > {children} diff --git a/components/wallet/LandingWalletWrapper.tsx b/components/wallet/LandingWalletWrapper.tsx index 4b827829..8e37ecd6 100644 --- a/components/wallet/LandingWalletWrapper.tsx +++ b/components/wallet/LandingWalletWrapper.tsx @@ -4,11 +4,12 @@ import { useState } from 'react'; import { FamilyWalletButton } from './FamilyWalletButton'; import { FamilyWalletDrawer, DrawerView } from './FamilyWalletDrawer'; import { useAuthStatus } from '@/hooks/use-auth'; +import { useWalletContext } from '@/components/providers/wallet-provider'; export function LandingWalletWrapper() { - const [open, setOpen] = useState(false); const [drawerView, setDrawerView] = useState('main'); const { isAuthenticated, isLoading } = useAuthStatus(); + const { isWalletOpen, onOpenWallet, onCloseWallet } = useWalletContext(); if (isLoading || !isAuthenticated) { return null; @@ -19,13 +20,13 @@ export function LandingWalletWrapper() { { if (view) setDrawerView(view); - setOpen(true); + onOpenWallet(); }} /> ); diff --git a/components/wallet/WalletNotReadyModal.tsx b/components/wallet/WalletNotReadyModal.tsx new file mode 100644 index 00000000..ec1a3976 --- /dev/null +++ b/components/wallet/WalletNotReadyModal.tsx @@ -0,0 +1,163 @@ +import React from 'react'; +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, +} from '../ui/dialog'; +import { Button } from '../ui/button'; +import { + XIcon, + Wallet, + ExternalLink, + Activity, + Coins, + ShieldCheck, + AlertCircle, +} from 'lucide-react'; +import { WalletNotReadyReason } from '@/hooks/use-wallet-readiness'; + +interface WalletNotReadyModalProps { + open: boolean; + onOpenChange: (open: boolean) => void; + reasons: WalletNotReadyReason[]; + onOpenWallet: () => void; + actionName: string; +} + +const WalletNotReadyModal: React.FC = ({ + open, + onOpenChange, + reasons, + onOpenWallet, + actionName, +}) => { + const handleOpenWallet = () => { + onOpenChange(false); + onOpenWallet(); + }; + + return ( + + + + + + + + +
+ {/* Header Icon with Glow */} +
+
+
+ +
+
+ + {/* Title & Description */} +
+ + Wallet Not Ready + + + A few quick steps are needed before you can{' '} + {actionName}. + +
+ + {/* Steps Section */} +
+ {reasons.includes('not_activated') && ( + } + title='Activate Stellar Account' + description="Your account isn't on-chain. Send at least 2 XLM to this address to activate it." + /> + )} + {reasons.includes('no_usdc_trustline') && ( + } + title='Add USDC Trustline' + description='Required to hold USDC on Stellar. Open your wallet to add the trustline.' + /> + )} + {reasons.includes('insufficient_xlm') && + !reasons.includes('not_activated') && ( + } + title='Low XLM Balance' + description='Transaction fees and reserve requirements need a small amount of XLM.' + /> + )} + {reasons.includes('insufficient_usdc') && ( + } + title='Insufficient USDC Balance' + description='You need more USDC in your wallet to complete this transaction.' + /> + )} +
+ + {/* Actions */} +
+ + +
+ + + Why is this required? + + +
+ +
+ ); +}; + +const StepItem = ({ + icon, + title, + description, +}: { + icon: React.ReactNode; + title: string; + description: string; +}) => ( +
+
+ {icon} +
+
+

{title}

+

{description}

+
+
+); + +export default WalletNotReadyModal; diff --git a/components/wallet/WalletTrigger.tsx b/components/wallet/WalletTrigger.tsx index db0eff67..31f39591 100644 --- a/components/wallet/WalletTrigger.tsx +++ b/components/wallet/WalletTrigger.tsx @@ -21,7 +21,8 @@ export function WalletTrigger({ className, drawerType = 'sheet', }: WalletTriggerProps) { - const { walletAddress, hasWalletFromSession, isLoading } = useWalletContext(); + const { walletAddress, hasWalletFromSession, isLoading, onOpenWallet } = + useWalletContext(); const [open, setOpen] = useState(false); // Wallet is managed by backend; no "Connect Wallet" flow. Show trigger only when diff --git a/features/projects/components/Initialize.tsx b/features/projects/components/Initialize.tsx index 5460ab3b..18a9c74b 100644 --- a/features/projects/components/Initialize.tsx +++ b/features/projects/components/Initialize.tsx @@ -13,6 +13,8 @@ import ProjectSubmissionSuccess from './ProjectSubmissionSuccess'; import Loading from '@/components/loading/Loading'; import { useWalletProtection } from '@/hooks/use-wallet-protection'; import WalletRequiredModal from '@/components/wallet/WalletRequiredModal'; +import WalletNotReadyModal from '@/components/wallet/WalletNotReadyModal'; +import { WalletSheet } from '@/components/wallet/WalletSheet'; type StepState = 'pending' | 'active' | 'completed'; @@ -47,12 +49,17 @@ const Initialize: React.FC = ({ onSuccess }) => { const { requireWallet, showWalletModal, + showNotReadyModal, + notReadyReasons, handleWalletConnected, closeWalletModal, + closeNotReadyModal, } = useWalletProtection({ actionName: 'initialize project', }); + const [isWalletDrawerOpen, setIsWalletDrawerOpen] = useState(false); + const localSteps: Step[] = [ { title: 'Submit your project Details', @@ -97,7 +104,7 @@ const Initialize: React.FC = ({ onSuccess }) => { const submitInit = async () => { if (!formData) return; - requireWallet(async () => { + await requireWallet(async () => { try { setIsSubmitting(true); toast.loading('Initializing project...'); @@ -203,6 +210,21 @@ const Initialize: React.FC = ({ onSuccess }) => { actionName='initialize project' onWalletConnected={handleWalletConnected} /> + + {/* Wallet Not Ready Modal */} + setIsWalletDrawerOpen(true)} + actionName='initialize project' + /> + + {/* Wallet Sheet */} + ); }; @@ -237,7 +259,7 @@ const MilestonesPhase = ({ -
- - {/* Stats Cards Grid */} -
- {/* Profile Card */} - -
- - -
- -
- Profile -
-
- -
- - - - {session.user.name?.charAt(0) || - session.user.email.charAt(0)} - - -
-

- {session.user.name || 'No name'} -

-

- {session.user.email} -

-
-
-
-
- - {/* Account Details Card */} - -
- - -
- -
- Account Details -
-
- -
- User ID - - {session.user.id} - -
-
- Email - - {session.user.email} - -
-
-
- - {/* Status Card */} - -
- - -
- -
- Status & Verification -
-
- -
- Email Status -
- {session.user.emailVerified ? ( - <> - - - Verified - - - ) : ( - - Unverified - - )} -
-
-
- Account Status -
-
- - Active - -
-
- {(session.user as { lastLoginMethod?: string | null }) - ?.lastLoginMethod && ( -
- - Last Login Method - - - {(() => { - const method = ( - session.user as { lastLoginMethod?: string | null } - ).lastLoginMethod; - return method === 'google' - ? 'Google' - : method === 'email' - ? 'Email' - : method || 'N/A'; - })()} - -
- )} -
-
-
- - {/* Welcome Card */} -
- -
-
- - - Welcome to Boundless - - - Your platform for crowdfunding and grants - - - -

- This is your dashboard where you can manage your projects, view - contributions, and access all the features of the platform. The - authentication system is now working properly! -

-
-
-
-
- - ); -} diff --git a/app/dashboard/page.tsx b/app/dashboard/page.tsx deleted file mode 100644 index 69a6c55d..00000000 --- a/app/dashboard/page.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { DashboardContent } from '@/components/dashboard-content'; -import React from 'react'; - -export default function Page() { - return ; -} diff --git a/components/dashboard-content.tsx b/components/dashboard-content.tsx index a8dcd2c5..2aba3177 100644 --- a/components/dashboard-content.tsx +++ b/components/dashboard-content.tsx @@ -7,7 +7,7 @@ import { SectionCards } from '@/components/section-cards'; import { SiteHeader } from '@/components/site-header'; import { SidebarInset, SidebarProvider } from '@/components/ui/sidebar'; import { useAuthStatus } from '@/hooks/use-auth'; -import data from '../app/dashboard/data.json'; +import data from '../data/data.json'; import React, { useState } from 'react'; import { FamilyWalletButton } from '@/components/wallet/FamilyWalletButton'; import { diff --git a/components/hackathons/hackathonBanner.tsx b/components/hackathons/hackathonBanner.tsx index f08d27b0..d18a9212 100644 --- a/components/hackathons/hackathonBanner.tsx +++ b/components/hackathons/hackathonBanner.tsx @@ -30,6 +30,7 @@ interface HackathonBannerProps { onLeaveClick?: () => void; isLeaving?: boolean; participantType?: 'INDIVIDUAL' | 'TEAM' | 'TEAM_OR_INDIVIDUAL'; + submissionDeadlineExtendedAt?: string | null; } export function HackathonBanner({ @@ -46,6 +47,7 @@ export function HackathonBanner({ registrationDeadline, isLeaving, participantType, + submissionDeadlineExtendedAt, onJoinClick, onSubmitClick, onViewSubmissionClick, @@ -252,6 +254,11 @@ export function HackathonBanner({ {status === 'ongoing' ? 'Ends In' : 'Starts In'} + {status === 'ongoing' && submissionDeadlineExtendedAt && ( + + Extended + + )} void; onLeaveClick?: () => void; participantType?: 'INDIVIDUAL' | 'TEAM' | 'TEAM_OR_INDIVIDUAL'; + submissionDeadlineExtendedAt?: string | null; } export function HackathonStickyCard(props: HackathonStickyCardProps) { @@ -54,6 +55,7 @@ export function HackathonStickyCard(props: HackathonStickyCardProps) { onLeaveClick, isLeaving, participantType, + submissionDeadlineExtendedAt, } = props; const { status } = useHackathonStatus(startDate, deadline); @@ -162,6 +164,11 @@ export function HackathonStickyCard(props: HackathonStickyCardProps) { Deadline {formatDateWithFallback(deadline)} + {submissionDeadlineExtendedAt && ( + + Extended + + )} )} diff --git a/app/dashboard/data.json b/data/data.json similarity index 100% rename from app/dashboard/data.json rename to data/data.json diff --git a/lib/api/hackathon.ts b/lib/api/hackathon.ts index b450807e..b747804f 100644 --- a/lib/api/hackathon.ts +++ b/lib/api/hackathon.ts @@ -55,7 +55,6 @@ export const getHackathon = async ( slug: string ): Promise => { const res = await api.get(`/hackathons/s/${slug}`); - return res.data as GetHackathonResponse; }; diff --git a/lib/api/hackathons.ts b/lib/api/hackathons.ts index dc6e1ecc..3b63befe 100644 --- a/lib/api/hackathons.ts +++ b/lib/api/hackathons.ts @@ -347,6 +347,7 @@ export type Hackathon = { startDate: string; // ISO date submissionDeadline: string; // ISO date + submissionDeadlineExtendedAt?: string | null; registrationDeadline: string; // ISO date judgingDeadline?: string; // ISO date From b2249e3e63d13b4e4d0f202bbe528c56388306fb Mon Sep 17 00:00:00 2001 From: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Date: Tue, 10 Mar 2026 00:42:57 +0100 Subject: [PATCH 06/10] merge into main (#476) * fix: delete /dashboard * fix: implement extend deadline and remove dummy /dashboard From 2f7335f5edd7f481314e191b312f010621f3a7b0 Mon Sep 17 00:00:00 2001 From: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Date: Tue, 10 Mar 2026 00:43:44 +0100 Subject: [PATCH 07/10] merge into main (#477) * fix: delete /dashboard * fix: implement extend deadline and remove dummy /dashboard From 12a5ccda0830949a1d1941a0f0f0924363f2a9a0 Mon Sep 17 00:00:00 2001 From: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Date: Tue, 10 Mar 2026 01:08:15 +0100 Subject: [PATCH 08/10] UI fixes (#478) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * fix: fix auto refresh ib submission page * fix: hackathon submission fixes * fix: fix coderabbit corrections * fix: fix coderabbit corrections * chore: write boundless on x challenge blog * fix: remove blog * fix: my project dashbaord count and extend hackathon deadline * fix: my project dashbaord count and extend hackathon deadline --- app/me/layout.tsx | 25 +++++++++++++++++++++++++ components/app-sidebar.tsx | 18 +++++------------- components/landing-page/navbar.tsx | 2 +- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/app/me/layout.tsx b/app/me/layout.tsx index 0560658f..85dabcb1 100644 --- a/app/me/layout.tsx +++ b/app/me/layout.tsx @@ -23,9 +23,14 @@ interface MeLayoutProfile { image?: string; joinedHackathons?: ProfileItemWithId[]; hackathonSubmissionsAsParticipant?: ProfileItemWithId[]; + projects?: ProfileItemWithId[]; }; image?: string; hackathonSubmissionsAsParticipant?: ProfileItemWithId[]; + projects?: ProfileItemWithId[]; + stats?: { + projectsCreated?: number; + }; } const getId = (item: ProfileItemWithId): string | undefined => @@ -69,6 +74,25 @@ const MeLayout = ({ children }: MeLayoutProps): React.ReactElement => { }).length; }, [typedProfile]); + const projectsCount = useMemo(() => { + if (!typedProfile) return 0; + // stats.projectsCreated is often the most direct count + if (typeof typedProfile.stats?.projectsCreated === 'number') { + return typedProfile.stats.projectsCreated; + } + // Fallback to array lengths + const fromUser = typedProfile.user?.projects ?? []; + const fromProfile = typedProfile.projects ?? []; + const merged = [...fromUser, ...fromProfile]; + const seen = new Set(); + return merged.filter(p => { + const id = getId(p); + if (!id || seen.has(id)) return false; + seen.add(id); + return true; + }).length; + }, [typedProfile]); + // Only show full-screen spinner on first load, not on background refetches if (isLoading && !hasLoadedOnce.current) { return ( @@ -92,6 +116,7 @@ const MeLayout = ({ children }: MeLayoutProps): React.ReactElement => { counts={{ participating: hackathonsCount, submissions: submissionsCount, + projects: projectsCount, }} variant='inset' /> diff --git a/components/app-sidebar.tsx b/components/app-sidebar.tsx index ec78d978..c4703ddb 100644 --- a/components/app-sidebar.tsx +++ b/components/app-sidebar.tsx @@ -29,11 +29,13 @@ import { import Image from 'next/image'; import Link from 'next/link'; import { useNotificationStore } from '@/lib/stores/notification-store'; +import { Logo } from './landing-page/navbar'; const getNavigationData = (counts?: { participating?: number; unreadNotifications?: number; submissions?: number; + projects?: number; }) => ({ main: [ { @@ -57,7 +59,7 @@ const getNavigationData = (counts?: { title: 'My Projects', url: '/me/projects', icon: IconFolder, - badge: '3', + badge: (counts?.projects ?? 0) > 0 ? String(counts?.projects) : undefined, }, { title: 'Create Project', @@ -132,7 +134,7 @@ export function AppSidebar({ ...props }: { user: UserData; - counts?: { participating?: number; submissions?: number }; + counts?: { participating?: number; submissions?: number; projects?: number }; } & React.ComponentProps) { const unreadNotifications = useNotificationStore(state => state.unreadCount); @@ -164,17 +166,7 @@ export function AppSidebar({ size='lg' className='group hover:bg-sidebar-accent/0 transition-all duration-200' > - -
- Boundless Logo -
- + diff --git a/components/landing-page/navbar.tsx b/components/landing-page/navbar.tsx index 930ff85f..10cddc32 100644 --- a/components/landing-page/navbar.tsx +++ b/components/landing-page/navbar.tsx @@ -124,7 +124,7 @@ export function Navbar() { ); } -function Logo() { +export function Logo() { return ( Date: Tue, 10 Mar 2026 13:35:34 +0100 Subject: [PATCH 09/10] UI fixes (#479) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * fix: fix auto refresh ib submission page * fix: hackathon submission fixes * fix: fix coderabbit corrections * fix: fix coderabbit corrections * chore: write boundless on x challenge blog * fix: remove blog * fix: my project dashbaord count and extend hackathon deadline * fix: my project dashbaord count and extend hackathon deadline * fix: fix auto validate wallet address and user nav * fix: fix notification badge * fix: fix coderabbit corrections --- app/me/notifications/page.tsx | 4 -- components/app-sidebar.tsx | 13 +++-- components/nav-user.tsx | 63 +++++++++++++++++------ components/wallet/FamilyWalletDrawer.tsx | 65 ++++++++++++++++-------- hooks/useNotifications.ts | 22 +++++++- 5 files changed, 123 insertions(+), 44 deletions(-) diff --git a/app/me/notifications/page.tsx b/app/me/notifications/page.tsx index 8b7e58fa..59a71019 100644 --- a/app/me/notifications/page.tsx +++ b/app/me/notifications/page.tsx @@ -104,10 +104,6 @@ export default function NotificationsPage() { const { setUnreadCount, clearUnreadCount } = useNotificationStore(); - useEffect(() => { - setUnreadCount(unreadCount); - }, [unreadCount, setUnreadCount]); - useNotificationPolling(notificationsHook, { interval: 30000, enabled: true, diff --git a/components/app-sidebar.tsx b/components/app-sidebar.tsx index c4703ddb..d4b3ac94 100644 --- a/components/app-sidebar.tsx +++ b/components/app-sidebar.tsx @@ -27,9 +27,10 @@ import { SidebarMenuItem, } from '@/components/ui/sidebar'; import Image from 'next/image'; -import Link from 'next/link'; import { useNotificationStore } from '@/lib/stores/notification-store'; import { Logo } from './landing-page/navbar'; +import { useNotifications } from '@/hooks/useNotifications'; +import { authClient } from '@/lib/auth-client'; const getNavigationData = (counts?: { participating?: number; @@ -115,8 +116,8 @@ const getNavigationData = (counts?: { url: '/me/notifications', icon: IconBell, badge: - counts?.unreadNotifications && counts.unreadNotifications > 0 - ? counts.unreadNotifications.toString() + (counts?.unreadNotifications ?? 0) > 0 + ? String(counts?.unreadNotifications) : undefined, }, ], @@ -136,6 +137,12 @@ export function AppSidebar({ user: UserData; counts?: { participating?: number; submissions?: number; projects?: number }; } & React.ComponentProps) { + const { data: session } = authClient.useSession(); + const userId = session?.user?.id; + + // Initialize notifications hook to ensure it fetches globally and syncs with store + useNotifications({ enabled: !!userId }); + const unreadNotifications = useNotificationStore(state => state.unreadCount); const navigationData = React.useMemo( diff --git a/components/nav-user.tsx b/components/nav-user.tsx index edcd65d0..df269f80 100644 --- a/components/nav-user.tsx +++ b/components/nav-user.tsx @@ -26,6 +26,9 @@ import { useSidebar, } from '@/components/ui/sidebar'; import { Badge } from './ui/badge'; +import Link from 'next/link'; +import { useAuthActions } from '@/hooks/use-auth'; +import { useNotificationStore } from '@/lib/stores/notification-store'; export interface NavUserProps { user: { @@ -37,6 +40,14 @@ export interface NavUserProps { export const NavUser = ({ user }: NavUserProps): React.ReactElement => { const { isMobile } = useSidebar(); + const { logout } = useAuthActions(); + const { unreadCount: unreadNotifications, clearUnreadCount } = + useNotificationStore(); + + const handleLogout = () => { + logout(); + clearUnreadCount(); + }; return ( @@ -68,7 +79,7 @@ export const NavUser = ({ user }: NavUserProps): React.ReactElement => { {
- + {user.name} - + {user.email}
@@ -96,22 +107,44 @@ export const NavUser = ({ user }: NavUserProps): React.ReactElement => { - - - Account Settings + + + + Account Settings + - - - Billing + + + + Billing + - - - Notifications - 3 + + + + Notifications + {unreadNotifications > 0 && ( + + {unreadNotifications} + + )} + - - + + Log out diff --git a/components/wallet/FamilyWalletDrawer.tsx b/components/wallet/FamilyWalletDrawer.tsx index e9e7cb67..9f49efac 100644 --- a/components/wallet/FamilyWalletDrawer.tsx +++ b/components/wallet/FamilyWalletDrawer.tsx @@ -212,6 +212,10 @@ export function FamilyWalletDrawer({ setValidateResult('idle'); try { const result = await validateSendDestination(dest, currency); + + // Protect against stale responses if the user has changed the destination + if (sendDestination.trim() !== dest) return; + if (result.valid) { setValidateResult('valid'); setValidateError(''); @@ -222,15 +226,45 @@ export function FamilyWalletDrawer({ ); } } catch (err: unknown) { + // Protect against stale responses + if (sendDestination.trim() !== dest) return; + const { message, details } = getErrorDisplay(err); setValidateResult('invalid'); setValidateError(message); setValidateErrorDetails(details); } finally { - setValidateLoading(false); + // We still want to clear loading if it's the latest call + if (sendDestination.trim() === dest) { + setValidateLoading(false); + } } }, [sendDestination, sendCurrency, getErrorDisplay]); + // Auto-validate destination address + useEffect(() => { + const trimmedDest = sendDestination.trim(); + + // Reset state if empty + if (!trimmedDest) { + setValidateResult('idle'); + setValidateError(''); + return; + } + + // Immediate trigger if 56 chars + if (trimmedDest.length === 56) { + handleValidateDestination(); + return; + } + + const timer = setTimeout(() => { + handleValidateDestination(); + }, 500); + + return () => clearTimeout(timer); + }, [sendDestination, sendCurrency, handleValidateDestination]); + const handleSendSubmit = useCallback(async () => { const dest = sendDestination.trim(); const currency = sendCurrency || 'XLM'; @@ -833,37 +867,26 @@ export function FamilyWalletDrawer({ -
+
{ setSendDestination(e.target.value); - setValidateResult('idle'); - setValidateError(''); }} - className='font-mono text-sm' + className='pr-10 font-mono text-sm' /> - + ) : validateResult === 'invalid' && + sendDestination.trim().length >= 56 ? ( + + ) : null} +
{validateResult === 'invalid' && validateError && ( diff --git a/hooks/useNotifications.ts b/hooks/useNotifications.ts index 8493ad1f..953a504a 100644 --- a/hooks/useNotifications.ts +++ b/hooks/useNotifications.ts @@ -3,11 +3,13 @@ import { useSocket } from './useSocket'; import { getNotifications } from '@/lib/api/notifications'; import { Notification } from '@/types/notifications'; import { reportError } from '@/lib/error-reporting'; +import { useNotificationStore } from '@/lib/stores/notification-store'; interface UseNotificationsOptions { page?: number; limit?: number; autoFetch?: boolean; + enabled?: boolean; } export interface UseNotificationsReturn { @@ -32,11 +34,17 @@ export function useNotifications( // Handle overloaded arguments const userId = typeof input === 'string' ? input : undefined; const options = typeof input === 'object' ? input : {}; - const { page: initialPage = 1, limit = 10, autoFetch = true } = options; + const { + page: initialPage = 1, + limit = 10, + autoFetch = true, + enabled = true, + } = options; const { socket, isConnected } = useSocket({ namespace: '/notifications', userId, + autoConnect: enabled && autoFetch, }); const [notifications, setNotifications] = useState([]); @@ -45,6 +53,16 @@ export function useNotifications( const [error, setError] = useState(null); const [total, setTotal] = useState(0); const [currentPage, setCurrentPage] = useState(initialPage); + const [hasFetched, setHasFetched] = useState(false); + + const { setUnreadCount: setGlobalUnreadCount } = useNotificationStore(); + + // Sync with global store + useEffect(() => { + if (hasFetched) { + setGlobalUnreadCount(unreadCount); + } + }, [unreadCount, setGlobalUnreadCount, hasFetched]); // Merge server list with current state: dedupe by id, preserve optimistic read state (short rollback path) const mergeNotifications = useCallback( @@ -79,6 +97,7 @@ export function useNotifications( mergeNotifications(prev, response.notifications) ); setTotal(response.total || 0); + setHasFetched(true); } } catch (err) { reportError(err, { context: 'notifications-fetch' }); @@ -142,6 +161,7 @@ export function useNotifications( // Listen for unread count updates const handleUnreadCount = (data: { count: number }) => { setUnreadCount(data.count); + setHasFetched(true); }; // Listen for notification updates From e1c216c9da8f5d7d48fee315773c1c9f5c87a2be Mon Sep 17 00:00:00 2001 From: Nnaji Benjamin <60315147+Benjtalkshow@users.noreply.github.com> Date: Tue, 10 Mar 2026 22:51:41 +0100 Subject: [PATCH 10/10] UI fixes (#480) * fix: improve timeline input , ui improvement and fixes for participation tab * fix: implement 2fa for email and password login * fix: fix conflict * fix: fix submission form * fix: fix hackathon submission and participant page * fix: fix hackathon submission and participant page * fix: fix auto refresh ib submission page * fix: hackathon submission fixes * fix: fix coderabbit corrections * fix: fix coderabbit corrections * chore: write boundless on x challenge blog * fix: remove blog * fix: my project dashbaord count and extend hackathon deadline * fix: my project dashbaord count and extend hackathon deadline * fix: fix auto validate wallet address and user nav * fix: fix notification badge * fix: fix coderabbit corrections * fix: fix pagination in organization participants page --- .../[hackathonId]/participants/page.tsx | 29 +++++++++-------- hooks/use-hackathons.ts | 32 +++++++++++-------- 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/app/(landing)/organizations/[id]/hackathons/[hackathonId]/participants/page.tsx b/app/(landing)/organizations/[id]/hackathons/[hackathonId]/participants/page.tsx index 832add8f..b5a17ef1 100644 --- a/app/(landing)/organizations/[id]/hackathons/[hackathonId]/participants/page.tsx +++ b/app/(landing)/organizations/[id]/hackathons/[hackathonId]/participants/page.tsx @@ -53,6 +53,7 @@ const ParticipantsPage: React.FC = () => { const hackathonId = params.hackathonId as string; const [view, setView] = useState<'table' | 'grid'>('table'); + const [pageSize, setPageSize] = useState(PAGE_SIZE); const [filters, setFilters] = useState({ search: '', status: 'all', @@ -63,9 +64,9 @@ const ParticipantsPage: React.FC = () => { () => ({ organizationId, autoFetch: false, - pageSize: PAGE_SIZE, // Grid looks better with multiples of 3/4 + pageSize, // Use dynamic page size }), - [organizationId] + [organizationId, pageSize] ); const { @@ -110,7 +111,7 @@ const ParticipantsPage: React.FC = () => { fetchParticipants( actualHackathonId, 1, - PAGE_SIZE, + pageSize, mapFiltersToParams(filters, debouncedSearch) ); } @@ -120,6 +121,7 @@ const ParticipantsPage: React.FC = () => { debouncedSearch, filters.status, filters.type, + pageSize, ]); // Statistics @@ -161,12 +163,12 @@ const ParticipantsPage: React.FC = () => { }, [organizationId, actualHackathonId]); // Handlers - const handlePageChange = (page: number) => { + const handlePageChange = (page: number, limit?: number) => { if (actualHackathonId) { fetchParticipants( actualHackathonId, page, - PAGE_SIZE, + limit ?? pageSize, mapFiltersToParams(filters, debouncedSearch) ); } @@ -220,7 +222,7 @@ const ParticipantsPage: React.FC = () => { fetchParticipants( actualHackathonId, participantsPagination.currentPage, - PAGE_SIZE, + pageSize, mapFiltersToParams(filters, debouncedSearch) ); } @@ -241,16 +243,17 @@ const ParticipantsPage: React.FC = () => { }, onPaginationChange: updater => { if (typeof updater === 'function') { - const newState = ( - updater as (old: { pageIndex: number; pageSize: number }) => { - pageIndex: number; - pageSize: number; - } - )({ + const newState = updater({ pageIndex: participantsPagination.currentPage - 1, pageSize: participantsPagination.itemsPerPage, }); - handlePageChange(newState.pageIndex + 1); + + if (newState.pageSize !== participantsPagination.itemsPerPage) { + setPageSize(newState.pageSize); + handlePageChange(1, newState.pageSize); + } else { + handlePageChange(newState.pageIndex + 1); + } } }, }); diff --git a/hooks/use-hackathons.ts b/hooks/use-hackathons.ts index 9679b970..4b56eff7 100644 --- a/hooks/use-hackathons.ts +++ b/hooks/use-hackathons.ts @@ -228,17 +228,19 @@ export function useHackathons( organizationId, // Add organization filter }); + const pagination = (response.data?.pagination || + response.meta?.pagination) as any; setHackathons(response.data?.hackathons || []); setHackathonsPagination({ - currentPage: response.data?.pagination.page || 1, - totalPages: response.data?.pagination.totalPages || 1, - totalItems: response.data?.pagination.total || 0, - itemsPerPage: response.data?.pagination.limit || pageSize, - hasNext: response.data?.pagination.hasNext || false, - hasPrev: response.data?.pagination.hasPrev || false, + currentPage: pagination?.page || 1, + totalPages: pagination?.totalPages || 1, + totalItems: pagination?.total || 0, + itemsPerPage: pagination?.limit || pageSize, + hasNext: !!pagination?.hasNext, + hasPrev: !!pagination?.hasPrev, }); // Update ref immediately - hackathonsPageRef.current = response.data?.pagination.page || 1; + hackathonsPageRef.current = pagination?.page || 1; } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Failed to fetch hackathons'; @@ -575,16 +577,18 @@ export function useHackathons( filters ?? initialParticipantFilters ); + const pagination = (response.data?.pagination || + response.meta?.pagination) as any; setParticipants(response.data?.participants || []); setParticipantsPagination({ - currentPage: response.data?.pagination.page || 1, - totalPages: response.data?.pagination.totalPages || 1, - totalItems: response.data?.pagination.total || 0, - itemsPerPage: response.data?.pagination.limit || pageSize, - hasNext: response.data?.pagination.hasNext || false, - hasPrev: response.data?.pagination.hasPrev || false, + currentPage: pagination?.page || 1, + totalPages: pagination?.totalPages || 1, + totalItems: pagination?.total || 0, + itemsPerPage: pagination?.limit || pageSize, + hasNext: !!pagination?.hasNext, + hasPrev: !!pagination?.hasPrev, }); - participantsPageRef.current = response.data?.pagination.page || 1; + participantsPageRef.current = pagination?.page || 1; } catch (error) { const errorMessage = error instanceof Error