Skip to content

Conversation

@gocanto
Copy link
Collaborator

@gocanto gocanto commented May 30, 2025

No description provided.

@coderabbitai
Copy link

coderabbitai bot commented May 30, 2025

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Introduced a social media widget displaying links to X, GitHub, and LinkedIn in the sidebar.
    • Added newsletters table support to the database schema.
    • Footer and About page content now more personal, with social media links moved to the sidebar widget.
  • Bug Fixes

    • Corrected minor syntax errors and improved code consistency in various Vue components.
  • Style

    • Updated site-wide colour theme from fuchsia to teal for dark mode elements and accent highlights.
    • Improved spacing, alignment, and visual consistency across headings, filters, and article lists.
    • Enhanced font and ring styling for better visual clarity.
  • Chores

    • Updated SSL certificates and private key for improved security.
    • Improved Makefile and environment variable output formatting.
    • Enhanced terminal output for database seeding with clearer screen and colour handling.
  • Refactor

    • Modernised Vue components to use Composition API and improved localStorage handling for dark mode.
    • Centralised and simplified colour formatting logic in CLI utilities.
  • Documentation

    • Updated and clarified code comments and formatting for better readability.

Summary by CodeRabbit

  • New Features

    • Introduced a social media widget displaying links to X, GitHub, and LinkedIn where available.
  • Bug Fixes

    • Updated dark mode and hover colours across the blog and header to use teal instead of fuchsia for improved consistency.
  • Refactor

    • Simplified and rewrote the About page for a more personal, narrative style, removing conditional social media links and external references.
    • Modernised the header component using Vue's Composition API and improved dark mode toggle logic.
    • Updated avatar and blog header styles for enhanced visual consistency.
    • Removed social media links from the footer for a cleaner appearance.
  • Style

    • Changed site-wide font from Inter to a generic sans-serif.
    • Adjusted avatar ring and blog highlight colours for both light and dark modes.
    • Standardised code formatting, indentation, and quotation marks across multiple files.
    • Minor template formatting improvements.
  • Chores

    • Improved code formatting, indentation, and consistency in configuration and source files.
    • Enhanced Makefile and documentation formatting for clarity.
    • Replaced SSL certificate, certificate signing request, and private key files with new versions.
    • Added screen clearing function and standardized CLI text output in the database seeder.

Walkthrough

The updates revise UI styling and refactor several Vue components to simplify social media integration. Social media links are removed from the About and Footer sections and consolidated into a new WidgetSocialPartial component. Colour schemes shift from fuchsia to teal in dark mode. The HeaderPartial component is modernised using the Composition API. SSL credentials are replaced, and Makefile and seeder scripts receive formatting and functional enhancements.

Changes

File(s) Change Summary
web/index.html Changed page title; removed Google Fonts links; added defer attribute to dark mode script; changed <body> font class from font-inter to font-sans.
web/src/css/support/blog.css Updated dark mode colours from fuchsia to teal for multiple selectors; added .blog-header-search-icon rule; adjusted hover and active link colours; removed .blog-h1 top margin.
web/src/pages/AboutPage.vue Refactored and rewrote About page content; removed conditional social media links and ExperiencePartial; simplified contact section; added WidgetSocialPartial to sidebar.
web/src/partials/AvatarPartial.vue Changed avatar ring colour: light mode from ring-gray-200 to ring-fuchsia-200, dark mode from dark:ring-slate-600 to dark:ring-teal-500.
web/src/partials/FooterPartial.vue Removed all social media icons, links, and related script logic; footer now only displays copyright.
web/src/partials/HeaderPartial.vue Changed search icon and dark mode icon colour classes from fuchsia to teal in dark mode; refactored component from Options API to Composition API with <script setup lang="ts">; improved dark mode toggle logic.
web/src/partials/WidgetSocialPartial.vue Added new component rendering a styled social media widget with links to X, GitHub, and LinkedIn; fetches data from user store using Composition API.
web/src/stores/users/userType.ts Changed SocialMediaMap from a constant to a type alias; reformatted interface indentation.
web/src/pages/HomePage.vue Fixed missing semicolon and corrected closing syntax in onMounted lifecycle hook.
web/src/pages/ResumePage.vue Replaced double quotes with single quotes in imports; reformatted closing parentheses and braces in onMounted hook.
web/src/partials/HeroPartial.vue Added space before self-closing slash in AvatarPartial component tag; added top margin to main heading; removed redundant dark text class from paragraph.
web/src/stores/users/response.ts Reformatted indentation and multi-line string literals in Response object; no data changes.
web/src/stores/users/user.ts Changed empty string literals from double to single quotes; adjusted indentation and added missing semicolons; no logic changes.
web/tsconfig.json Reformatted lib and include arrays from multi-line to single-line without content changes.
web/src/partials/ArticleItemPartial.vue Removed decorative dash before article date; updated hover and arrow link colours to include teal in dark mode.
web/src/partials/ArticlesListPartial.vue Changed active "Coding" filter border colours from sky/fuchsia to fuchsia/teal for light/dark modes respectively.
Makefile Adjusted indentation and spacing of help descriptions for better alignment; no content changes.
config/makefile/db.mk Removed make fresh call from db:secure target; changed final command to make db:chmod; added comment line before db:migrate:create target; no functional changes.
config/makefile/env.mk Enhanced env:print target to display additional environment variables with improved formatting and separator line.
database/infra/ssl/server.crt Replaced SSL server certificate with a new one issued to "gocanto" valid from June 2025 to June 2026.
database/infra/ssl/server.csr Replaced certificate signing request with a new CSR for "gocanto" reflecting new key and subject details.
database/infra/ssl/server.key Replaced private key with a new PEM-encoded private key.
database/schema.go Added "newsletters" to the list of schema tables.
database/seeder/main.go Added clearScreen() function to clear terminal at start; changed CLI text output calls to use Print() instead of Println() for consistent formatting; added necessary imports.
pkg/cli/colour.go Refactored TextColour methods: Print now prints directly; added String method to centralise formatting; Println uses String method; error handling improved.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant AboutPage
    participant WidgetSocialPartial
    participant UserStore

    User ->> AboutPage: Loads About page
    AboutPage ->> WidgetSocialPartial: Renders sidebar widget
    WidgetSocialPartial ->> UserStore: Waits for onBoot, fetches social media data
    UserStore -->> WidgetSocialPartial: Returns social media map
    WidgetSocialPartial -->> User: Renders social media links (if available)
Loading
sequenceDiagram
    participant User
    participant HeaderPartial
    participant LocalStorage
    participant DocumentRoot

    User ->> HeaderPartial: Clicks dark mode toggle
    HeaderPartial ->> LocalStorage: Updates 'dark-mode' value
    HeaderPartial ->> DocumentRoot: Adds/removes 'dark' class
    DocumentRoot -->> User: UI updates to dark/light mode
Loading

Possibly related PRs

  • Tide DB #22: Introduced modular Makefile structure including the db:migrate:create target, related to the added comment in config/makefile/db.mk.

📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6356cd6 and b9a310d.

📒 Files selected for processing (1)
  • web/src/pages/AboutPage.vue (3 hunks)
🔇 Additional comments (3)
web/src/pages/AboutPage.vue (3)

18-18: Clean and focused page title.

The simplified title provides a clear, personal introduction without unnecessary complexity.


20-20: Excellent improvement for accessibility.

The dynamic alt text using the nickname variable provides much better accessibility than the previous generic "About" text. This addresses the accessibility concerns from previous reviews.


25-50: Well-crafted professional narrative with proper security attributes.

The rewritten content is excellent - it addresses previous review comments by:

  • Fixing the PHP link to point to the correct URL (php.net)
  • Adding proper rel="noopener noreferrer" attributes to external links
  • Providing a compelling narrative with good technical detail

The content flows well and effectively showcases technical expertise and leadership experience.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 12

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between db2f1c0 and 0d43579.

📒 Files selected for processing (8)
  • web/index.html (1 hunks)
  • web/src/css/support/blog.css (3 hunks)
  • web/src/pages/AboutPage.vue (3 hunks)
  • web/src/partials/AvatarPartial.vue (1 hunks)
  • web/src/partials/FooterPartial.vue (0 hunks)
  • web/src/partials/HeaderPartial.vue (3 hunks)
  • web/src/partials/WidgetSocialPartial.vue (1 hunks)
  • web/src/stores/users/userType.ts (1 hunks)
💤 Files with no reviewable changes (1)
  • web/src/partials/FooterPartial.vue
👮 Files not reviewed due to content moderation or server errors (2)
  • web/src/partials/HeaderPartial.vue
  • web/src/pages/AboutPage.vue
🔇 Additional comments (23)
web/src/stores/users/userType.ts (1)

8-8: Excellent type system improvement!

Converting SocialMediaMap from a const to a type alias is the correct approach for a type-only construct. This improves the TypeScript usage without any runtime impact.

web/src/partials/AvatarPartial.vue (1)

24-24: Consistent colour theme update.

The ring colour changes align well with the broader design system updates moving to teal accents in dark mode. Good consistency across components.

web/src/css/support/blog.css (2)

1-7: Well-structured addition of search icon styling.

The new .blog-header-search-icon class follows good CSS organisation principles and maintains consistency with the colour theme updates.


13-13: Consistent colour theme migration.

The systematic update from fuchsia to teal variants in dark mode across multiple selectors demonstrates excellent design system consistency. The coordinated colour changes enhance the visual coherence of the application.

Also applies to: 22-22, 35-35, 40-40

web/src/partials/WidgetSocialPartial.vue (1)

38-51: Well-implemented Composition API usage.

The component properly uses the Composition API with correct TypeScript typing and async data fetching patterns. The integration with the user store is well-structured.

web/src/partials/HeaderPartial.vue (6)

15-15: Good refactoring to use CSS classes instead of hardcoded styles.

The change from hardcoded Tailwind classes to a semantic CSS class name improves maintainability and aligns with the colour scheme updates mentioned in the summary.


38-38: Colour scheme updates look consistent.

The addition of teal variants for dark mode aligns with the broader theme changes across the application.

Also applies to: 42-42


15-15: Excellent CSS abstraction for maintainability.

Moving from hardcoded Tailwind classes to a semantic CSS class name improves maintainability and allows for centralised colour scheme management.


38-38:

✅ Verification successful

Verify CSS class specificity and dark mode behaviour.

The colour updates look good, transitioning from fuchsia to teal in dark mode. However, ensure that the CSS specificity is correct and that both light and dark mode states work as expected.

Also applies to: 42-42


🏁 Script executed:

#!/bin/bash
# Description: Verify that the dark mode classes are properly defined and have correct specificity
# Expected: CSS classes should exist and dark mode variants should override light mode

# Search for the CSS definitions of these classes
rg -A 2 -B 2 "fill-fuchsia-400|fill-teal-500|hover:fill-teal-300" --type css

# Check if there are any CSS files that might define these Tailwind classes
fd -e css -x grep -l "teal-500\|teal-300" {}

Length of output: 393


No CSS specificity conflicts; Tailwind dark-mode utilities behave correctly.

  • A search of web/src/css/support/blog.css shows only @apply fill-fuchsia-500 and @apply dark:fill-teal-500 for .blog-header-search-icon, with no overrides for fill-fuchsia-400, hover:fill-fuchsia-200 or dark:hover:fill-teal-300.
  • Since these are standard Tailwind utility classes, the dark: variants will correctly override the light-mode fills.
  • Hover states in both light and dark modes will apply as expected.

15-15: Good refactoring to CSS class.

Moving from inline colour classes to a dedicated CSS class improves maintainability and aligns with the colour scheme consolidation mentioned in the summary.


38-43: Colour scheme updates look good.

The transition from fuchsia to teal in dark mode is consistent with the broader theme changes across the application.

web/src/pages/AboutPage.vue (12)

18-19: Clean and professional page title.

The simplified title is more direct and personal, which works well for an About page.


27-53: Well-written professional content with appropriate technology links.

The rewritten About section is engaging and provides a good overview of technical expertise and leadership experience. The external links to technologies are relevant and add value.


58-61: Simplified contact section improves user experience.

The streamlined approach to contact information is cleaner and more focused on the primary communication method.


72-72: Good modularisation with WidgetSocialPartial.

Adding the dedicated social media component aligns with the consolidation effort mentioned in the summary and improves code organisation.


86-94: Clean import organisation after refactoring.

The updated imports reflect the component changes and removal of unused social media functionality, which is now handled by WidgetSocialPartial.


103-107: Simplified onMounted logic is more focused.

The removal of social media fetching logic is appropriate since that responsibility has been moved to WidgetSocialPartial component.


18-20: Excellent personalisation of the page title.

The updated title is more engaging and personal, providing clear context about the author's identity and location whilst maintaining a welcoming tone.


86-94: Clean import organisation reflects architectural improvements.

The updated imports properly reflect the removal of social media logic from this component and the addition of the new WidgetSocialPartial component. The import structure follows Vue 3 best practices.


103-107: Simplified lifecycle management improves maintainability.

The streamlined onMounted hook focuses solely on user data fetching, which aligns with the single responsibility principle. The removal of social media data fetching reflects the proper separation of concerns.


72-72:

✅ Verification successful

Verify WidgetSocialPartial component integration.

The addition of the WidgetSocialPartial component aligns with the modular approach mentioned in the summary. Ensure this component is properly implemented and handles the social media display effectively.


🏁 Script executed:

#!/bin/bash
# Description: Verify that WidgetSocialPartial component exists and is properly implemented
# Expected: Component should exist and follow Vue 3 patterns

# Check if the component file exists and examine its structure
fd "WidgetSocialPartial.vue" -x cat {}

# Look for any other references to this component
rg "WidgetSocialPartial" --type vue --type ts

Length of output: 4461


I’ll verify that WidgetSocialPartial is properly imported and used in AboutPage.vue.


🏁 Script executed:

#!/bin/bash
# Locate AboutPage.vue and show import/usage of WidgetSocialPartial
FILE=$(fd --max-depth 4 "^AboutPage.vue$")
echo "Inspecting $FILE"
rg -n -C3 "WidgetSocialPartial" "$FILE"

Length of output: 831


WidgetSocialPartial integration verified.

  • The component exists at web/src/partials/WidgetSocialPartial.vue and uses Vue 3’s <script setup> pattern to fetch and render the social reactive data.
  • It’s correctly imported in web/src/pages/AboutPage.vue (line 93) and rendered at line 72.
  • Social links display only when social is populated, matching design expectations.

No further changes required.


86-94: Clean import management.

The updated imports properly reflect the component usage and remove unnecessary dependencies, which improves bundle size and maintainability.


72-72: Good modularisation of social media functionality.

Moving social media links to a dedicated WidgetSocialPartial component improves code organisation and reusability across the application.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
web/src/partials/WidgetSocialPartial.vue (1)

10-34: 🧹 Nitpick (assertive)

Consider making social platforms configurable.

The social media platforms remain hardcoded in the template as noted in previous reviews. This limits flexibility for different social media configurations.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0d43579 and 8dea6c5.

📒 Files selected for processing (2)
  • web/src/css/support/blog.css (4 hunks)
  • web/src/partials/WidgetSocialPartial.vue (1 hunks)
🔇 Additional comments (3)
web/src/css/support/blog.css (2)

4-4: Consistent colour scheme update implemented correctly.

The systematic update from fuchsia to teal colours in dark mode is well-executed and maintains visual consistency across UI elements.

Also applies to: 13-13, 26-26, 31-31


51-59: New CSS classes properly support component updates.

The .blog-header-search-icon and .blog-widgets-social-links classes are well-structured and align with the updated colour scheme, supporting the refactored components effectively.

web/src/partials/WidgetSocialPartial.vue (1)

38-51: Well-implemented Composition API usage.

The component structure demonstrates excellent use of Vue 3 Composition API with proper type safety, reactive state management, and store integration. The onBoot pattern ensures social media data is loaded appropriately.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (2)
web/src/partials/WidgetSocialPartial.vue (1)

15-45: 🧹 Nitpick (assertive)

Consider external CSS dependency and component flexibility.

The component relies on external CSS classes (blog-widgets-social-links, blog-widgets-social-svg) that aren't defined within this component, creating a dependency on external stylesheets.

As noted in past reviews, the hardcoded approach limits flexibility. Consider the previous suggestion to make platforms configurable whilst ensuring CSS classes are properly scoped or defined.

web/src/pages/AboutPage.vue (1)

30-30: ⚠️ Potential issue

Fix incorrect PHP documentation link.

The PHP link is still pointing to TypeScript documentation instead of the official PHP website.

Apply this diff to correct the link:

-<a class="blog-link" target="_blank" href="https://www.typescriptlang.org/">PHP</a>. I'm also comfortable with frameworks/libraries such as
+<a class="blog-link" target="_blank" href="https://www.php.net/">PHP</a>. I'm also comfortable with frameworks/libraries such as
📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8dea6c5 and 79a9c16.

📒 Files selected for processing (11)
  • web/src/css/support/blog.css (4 hunks)
  • web/src/pages/AboutPage.vue (4 hunks)
  • web/src/pages/HomePage.vue (1 hunks)
  • web/src/pages/ResumePage.vue (2 hunks)
  • web/src/partials/AvatarPartial.vue (2 hunks)
  • web/src/partials/HeroPartial.vue (1 hunks)
  • web/src/partials/WidgetSocialPartial.vue (1 hunks)
  • web/src/stores/users/response.ts (8 hunks)
  • web/src/stores/users/user.ts (3 hunks)
  • web/src/stores/users/userType.ts (2 hunks)
  • web/tsconfig.json (1 hunks)
🔇 Additional comments (22)
web/src/pages/ResumePage.vue (2)

59-60: Good formatting consistency with single quotes.

The change to single quotes aligns with common Vue.js and TypeScript conventions and improves consistency across the codebase.


69-70: Improved code formatting for better readability.

Moving the closing brace and parenthesis to single lines reduces vertical space whilst maintaining readability.

web/tsconfig.json (2)

29-29: Improved formatting consistency.

Converting the lib array to single-line format improves consistency with other configuration arrays and reduces file length whilst maintaining readability.


31-31: Consistent array formatting.

The include array formatting matches the style used for other arrays in the configuration, creating a more uniform appearance.

web/src/stores/users/userType.ts (2)

25-30: Consistent indentation formatting.

The change from spaces to tabs for the User interface properties aligns with the project's indentation standards and improves consistency.


8-8:

✅ Verification successful

Type alias conversion improves compile-time efficiency.

Converting SocialMediaMap from a runtime constant to a type alias is appropriate since it's used purely for type checking. This eliminates runtime overhead whilst maintaining type safety.

Verify that all usages of SocialMediaMap are compatible with the type alias change:


🏁 Script executed:

#!/bin/bash
# Description: Check for runtime usage of SocialMediaMap that might break with type alias conversion
# Expected: Only type annotations, no runtime references

rg -A 3 -B 3 "SocialMediaMap" --type ts --type vue

Length of output: 78


🏁 Script executed:

#!/bin/bash
# Description: Search for all occurrences of SocialMediaMap in .ts and .vue files
# This uses glob patterns instead of --type to include .vue files
rg -n "SocialMediaMap" -g "*.ts" -g "*.vue"

Length of output: 731


SocialMediaMap usage verified: purely type‐level across the codebase
All occurrences of SocialMediaMap are imported with import type and used only in type annotations—no runtime references found. Conversion to a type alias is safe.

web/src/css/support/blog.css (6)

4-4: Consistent dark mode colour scheme update.

The change from fuchsia to teal variants in dark mode creates a more cohesive colour palette. The teal-500/teal-600 combination provides good contrast and accessibility.


13-13: Colour consistency maintained.

Updating the highlight colour from dark:text-fuchsia-700 to dark:text-teal-600 maintains consistency with the broader dark mode colour scheme changes.


26-26: Navigation colour scheme alignment.

The dark mode hover states now use teal variants, creating consistent interactive feedback across the navigation components.


31-31: Active state colour consistency.

The active navigation state colours align with the new teal-based colour scheme whilst maintaining clear visual hierarchy.


52-55: New header search icon styling.

The new .blog-header-search-icon class provides dedicated styling for search icons with appropriate colour transitions between light and dark modes.


58-66: Well-structured social widget styling.

The new social widget classes provide comprehensive styling with proper hover states and group interactions. The colour scheme aligns with the overall teal-based dark mode theme.

web/src/partials/HeroPartial.vue (1)

5-5: LGTM! Good formatting improvement.

The addition of a space before the closing slash in the self-closing tag follows Vue.js style guide recommendations and improves code consistency.

web/src/partials/AvatarPartial.vue (1)

24-24: Verify the colour scheme consistency.

The ring colour changes show an inconsistency: light mode changes to ring-fuchsia-200 whilst dark mode changes to dark:ring-teal-500. If the objective is to transition from fuchsia to teal across the UI, having different accent colours for light and dark modes may create inconsistency.

Please confirm this mixed colour scheme is intentional, or consider aligning both modes to use the same accent colour family.

web/src/pages/HomePage.vue (1)

59-61: Essential syntax fixes applied correctly.

The addition of the missing semicolon and correction of the closing syntax are critical fixes that prevent potential JavaScript parsing errors and syntax exceptions.

web/src/stores/users/response.ts (2)

4-9: Approve indentation standardisation.

The change from spaces to tabs for indentation improves consistency. Please ensure the project's linting configuration enforces this standard consistently across all files.


51-52: Excellent readability improvement for long text content.

Converting single-line strings to multi-line format significantly improves readability for these lengthy summary descriptions whilst maintaining the same functionality.

Also applies to: 65-66, 79-80, 93-94, 107-108, 121-122, 135-136

web/src/stores/users/user.ts (1)

16-70: Excellent formatting consistency improvements.

The stylistic changes enhance code readability and maintain consistency throughout the file. The transition to single quotes, proper indentation with tabs, and consistent semicolon usage aligns well with modern TypeScript/JavaScript standards.

web/src/pages/AboutPage.vue (4)

25-48: Well-crafted professional narrative with excellent flow.

The rewritten content effectively showcases technical expertise and leadership experience. The narrative flows naturally and provides concrete details about technologies, frameworks, and leadership philosophy.


81-83: Clean import organisation with proper type separation.

Good practice separating Vue imports, type imports, and store imports. The cleanup removes unused social media imports whilst maintaining necessary functionality.


99-102: Simplified data fetching logic.

The streamlined onMounted logic correctly focuses on user profile data only, removing unnecessary social media complexity that's now handled by the dedicated widget component.


67-67:

✅ Verification successful

Verify WidgetSocialPartial component integration.

Ensure the WidgetSocialPartial component can be successfully imported and rendered. If the component is missing a proper export (as noted in the component review), this integration will fail.


🏁 Script executed:

#!/bin/bash
# Description: Verify WidgetSocialPartial component integration works
# Expected: No import or rendering errors

# Check if the component file exists and has proper structure
fd "WidgetSocialPartial.vue" --exec cat {}

# Look for any Vue compilation errors mentioning this component
rg -i "error.*WidgetSocialPartial|failed.*import.*WidgetSocialPartial"

Length of output: 3994


WidgetSocialPartial integration verified.

The WidgetSocialPartial.vue file exists, exports correctly, and no import or rendering errors were detected when used in AboutPage.vue.

@gocanto gocanto changed the title wip Close Theme May 30, 2025
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (4)
web/src/pages/AboutPage.vue (2)

53-56: Verify email accessibility and add ARIA labels.

The email contact section is clean, but accessibility can be improved and email validation should be ensured as mentioned in previous reviews.


67-67: Verify WidgetSocialPartial component availability.

Based on past review comments, the WidgetSocialPartial component may be missing a default export, which would cause the import to fail.

Also applies to: 88-88

web/src/partials/HeaderPartial.vue (2)

57-57: ⚠️ Potential issue

Fix type mismatch and localStorage initialisation.

The darkMode ref still has the same type safety issue identified in previous reviews. The ref should be typed as boolean and properly parse the localStorage string value.

Apply this diff to fix the type handling:

-const darkMode = ref<string | null>(localStorage.getItem('dark-mode'));
+const darkMode = ref<boolean>(localStorage.getItem('dark-mode') === 'true');

59-69: 🛠️ Refactor suggestion

Add initialisation logic and improve localStorage error handling.

The watch logic is correct, but the component still lacks initialisation of the dark class on mount. Additionally, consider adding error handling for localStorage operations.

Apply this diff to add proper initialisation and error handling:

 watch(darkMode, () => {
 	const el: HTMLElement = document.documentElement;

 	if (darkMode.value) {
-		localStorage.setItem('dark-mode', 'true');
+		try {
+			localStorage.setItem('dark-mode', 'true');
+		} catch (error) {
+			console.warn('Failed to save dark mode preference:', error);
+		}
 		el.classList.add('dark');
 	} else {
-		localStorage.setItem('dark-mode', 'false');
+		try {
+			localStorage.setItem('dark-mode', 'false');
+		} catch (error) {
+			console.warn('Failed to save dark mode preference:', error);
+		}
 		el.classList.remove('dark');
 	}
 });
+
+// Initialize dark mode on component mount
+if (darkMode.value) {
+	document.documentElement.classList.add('dark');
+}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4356178 and 64e20a2.

📒 Files selected for processing (2)
  • web/src/pages/AboutPage.vue (4 hunks)
  • web/src/partials/HeaderPartial.vue (3 hunks)
🔇 Additional comments (4)
web/src/pages/AboutPage.vue (2)

18-18: Well-crafted page title with personal touch.

The simplified page title effectively combines personal branding with location context, creating a welcoming and professional impression.


25-48: Excellent professional narrative with comprehensive technical coverage.

The rewritten content effectively showcases technical expertise, leadership experience, and professional philosophy. The narrative flows naturally and provides concrete details about technologies and frameworks while maintaining a personal tone.

web/src/partials/HeaderPartial.vue (2)

15-15: Good refactoring to use CSS class for search icon.

Moving from inline Tailwind classes to a dedicated CSS class improves maintainability and theme consistency.


38-38: Consistent colour scheme update to teal.

The colour changes from fuchsia to teal maintain visual consistency with the broader theme updates across the project.

Also applies to: 42-42

@gocanto gocanto force-pushed the featire/colours-about branch from 9d8fb89 to 1137059 Compare June 4, 2025 05:46
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9d8fb89 and 1137059.

📒 Files selected for processing (2)
  • Makefile (1 hunks)
  • config/makefile/db.mk (1 hunks)
🔇 Additional comments (3)
config/makefile/db.mk (1)

79-79: Section marker enhances clarity: The added # --- Migrations comment neatly delineates the migration targets, improving navigability without altering behaviour.

Makefile (2)

59-64: Consistent indentation improves readability: The expanded spacing in Build Commands descriptions aligns the formatting for a cleaner, more uniform help output. No functional impact.


67-81: Aligned Database Commands formatting: The adjusted indentation in Database Commands descriptions ensures consistent alignment under the help section, enhancing readability.

@gocanto gocanto force-pushed the featire/colours-about branch from 7b69d9b to e9fec6e Compare June 4, 2025 06:00
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4d7b2c1 and fb8c8db.

📒 Files selected for processing (4)
  • config/makefile/env.mk (1 hunks)
  • database/schema.go (1 hunks)
  • database/seeder/main.go (1 hunks)
  • pkg/cli/colour.go (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
database/seeder/main.go (5)
env/env.go (1)
  • Environment (3-9)
boost/spark.go (1)
  • Spark (9-19)
boost/boost.go (2)
  • MakeDbConnection (39-47)
  • MakeLogs (49-57)
database/seeder/seeds/seeder.go (1)
  • MakeSeeder (17-22)
pkg/cli/colour.go (8)
  • MakeTextColour (27-37)
  • Green (11-11)
  • Yellow (12-12)
  • Magenta (14-14)
  • Blue (13-13)
  • Cyan (15-15)
  • Gray (16-16)
  • Red (10-10)
🔇 Additional comments (5)
database/schema.go (1)

13-13: LGTM! Newsletter table addition is consistent.

The addition of "newsletters" to the schema tables follows the existing naming convention and aligns with the Newsletter struct definition in the same file.

pkg/cli/colour.go (2)

39-45: Excellent refactoring! Print method now handles output directly.

The change from returning a string to printing directly with proper error handling improves the API design and centralises output responsibility.


55-57: Good addition of String() method for centralised formatting.

The new String() method follows Go conventions and centralises the formatting logic, making the code more maintainable.

database/seeder/main.go (1)

39-41: Consistent change from Println() to Print() aligns with colour.go refactoring.

The systematic replacement of Println() with Print() calls is consistent with the refactoring in pkg/cli/colour.go where the String() method now includes the newline formatting.

Also applies to: 53-55, 60-62, 75-77, 82-84, 89-91, 96-98, 103-105, 110-114, 118-118

config/makefile/env.mk (1)

37-38: Approved: ROOT_NETWORK display and separator
Including ROOT_NETWORK and a visual divider makes the output clearer and easier to scan.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fb8c8db and 6356cd6.

⛔ Files ignored due to path filters (2)
  • web/src/images/profile/about.jpg is excluded by !**/*.jpg
  • web/src/images/profile/about.png is excluded by !**/*.png
📒 Files selected for processing (2)
  • web/src/css/support/blog.css (3 hunks)
  • web/src/pages/AboutPage.vue (4 hunks)
🔇 Additional comments (11)
web/src/css/support/blog.css (9)

4-4: Consistent dark-mode colour update
The new dark:text-teal-500 dark:hover:text-teal-600 classes correctly replace the fuchsia accents in dark mode, aligning with the theme shift.


8-8: Added margin and custom font for blog headings
Applying font-aspekta mb-5 to .blog-h1 improves visual hierarchy as intended.


13-13: Retained light-mode highlight and updated dark-mode accent
The text-fuchsia-500 for emphasised words remains for light mode, and dark:text-teal-600 follows the new palette.


25-26: Side-nav resting state theme update
Dark-mode resting and hover states now use teal to match the revised design.


30-31: Side-nav active state theme update
Dark-mode text-teal-600 and after:bg-teal-600 ensure consistency in the active link styling.


44-44: Widget button dark-mode background updated
Replacing dark:bg-teal-600 dark:hover:bg-teal-700 keeps the widget button in line with the teal colour scheme.


52-55: Header search icon colour adjustment
The switch from fill-fuchsia-500 to dark:fill-teal-500 is correct for the dark theme.


58-61: New social links styling conforms to theme
The .blog-widgets-social-links classes use teal for dark-mode hover states, matching other updates.


63-66: Social icon SVG group-hover accents updated
Updating group-hover:fill-teal-500 ensures the SVG icons align with the new palette in dark mode.

web/src/pages/AboutPage.vue (2)

18-18: Dynamic page title with fallback is correct
Using I'm {{ user ? user.nickname : 'Gus' }} ensures a sensible default if user is not yet loaded.


67-67:

✅ Verification successful

Verify WidgetSocialPartial component import
Ensure web/src/partials/WidgetSocialPartial.vue exists and declares a default export matching the import here.

To confirm, run:


🏁 Script executed:

#!/bin/bash
# Check for default export in WidgetSocialPartial.vue
ast-grep --pattern $'export default $_ { $$$ }' -A5 web/src/partials/WidgetSocialPartial.vue

Length of output: 93


🏁 Script executed:

#!/bin/bash
# Search for default export or defineComponent usage in WidgetSocialPartial.vue
rg "export default" -n web/src/partials/WidgetSocialPartial.vue
rg "defineComponent" -n web/src/partials/WidgetSocialPartial.vue

Length of output: 130


🏁 Script executed:

#!/bin/bash
# Locate the WidgetSocialPartial.vue file and inspect its exports

# 1. Find the file in the repo
fd --hidden --ignore-case 'WidgetSocialPartial.vue'

# 2. If found, search for exports inside it
FILE_PATH=$(fd --ignore-case 'WidgetSocialPartial.vue' | head -n1)
if [ -n "$FILE_PATH" ]; then
  echo "Inspecting $FILE_PATH for default export or defineComponent usage:"
  sed -n '1,50p' "$FILE_PATH"
  rg -n "export default" -n "$FILE_PATH"
  rg -n "defineComponent" -n "$FILE_PATH"
else
  echo "WidgetSocialPartial.vue not found in repository."
fi

Length of output: 4181


WidgetSocialPartial import is valid
The file web/src/partials/WidgetSocialPartial.vue exists and uses <script setup> (Vue 3 SFC), which implicitly provides a default export. No further changes are required.

@gocanto gocanto changed the title Close Theme Home and About Page Theme Tweaks Jun 5, 2025
@gocanto gocanto marked this pull request as ready for review June 5, 2025 08:02
@gocanto gocanto merged commit 4801735 into main Jun 5, 2025
1 of 2 checks passed
@gocanto gocanto deleted the featire/colours-about branch June 5, 2025 08:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants