Skip to content

Conversation

@gocanto
Copy link
Contributor

@gocanto gocanto commented Sep 30, 2025

Summary

  • add a reusable project card skeleton partial for the projects listings
  • show loading placeholders in the featured projects partial while data is fetched
  • display skeletons and a fallback message on the projects page when data is unavailable

Testing

  • npm run build (fails: vite executable is unavailable in the container environment)

https://chatgpt.com/codex/tasks/task_e_68db9ab1b8e083339361d8c6c2f432da

Summary by CodeRabbit

  • New Features

    • Added skeleton loading states for Projects and Featured Projects to improve perceived performance.
    • Featured Projects now load dynamically and show two skeleton cards while fetching data.
    • Introduced clear empty-state messages when no projects are available.
  • Style

    • Minor template/formatting adjustments across Resume, Education, Experience, and Recommendation sections.

@coderabbitai
Copy link

coderabbitai bot commented Sep 30, 2025

Caution

Review failed

The pull request is closed.

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Adds loading skeletons and explicit empty states for projects. Introduces isLoading/isLoadingProjects flags, renders ProjectCardSkeletonPartial while fetching, then shows project cards or an empty message. Adds a new presentational skeleton component and updates fetch flows to clear loading in finally blocks. (≤50 words)

Changes

Cohort / File(s) Summary of edits
Projects page & featured block
src/pages/ProjectsPage.vue, src/partials/FeaturedProjectsPartial.vue
Added isLoading/isLoadingProjects state, conditional templates to render skeletons while fetching, then project cards or empty-state messages; fetch calls use finally to unset loading. Template structure adjusted to include skeleton path.
New skeleton component
src/partials/ProjectCardSkeletonPartial.vue
Added a presentational Vue partial that renders a pulsing project-card skeleton (avatar, title line, metadata lines) used during loading.
Whitespace/formatting-only updates
src/pages/ResumePage.vue, src/partials/EducationPartial.vue, src/partials/ExperiencePartial.vue, src/partials/RecommendationPartial.vue
Minor indentation and whitespace changes in templates; no behavioral or API changes.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant U as User
  participant PP as ProjectsPage.vue
  participant API as Projects API

  U->>PP: Navigate to Projects
  activate PP
  note right of PP #D3E4FF: isLoadingProjects = true\nrender skeletons
  PP->>API: fetch profile & projects (Promise.all)
  API-->>PP: results or error
  note right of PP #FFF4D6: finally: isLoadingProjects = false
  alt projects.length > 0
    PP-->>U: Render ProjectCardPartial list
  else no projects
    PP-->>U: Render empty-state message
  end
  deactivate PP
Loading
sequenceDiagram
  autonumber
  participant U as User
  participant FP as FeaturedProjectsPartial.vue
  participant API as Projects API

  U->>FP: Mount component
  activate FP
  note right of FP #D3E4FF: isLoading = true\nshow two skeletons
  FP->>API: fetch projects
  API-->>FP: projects or error
  note right of FP #FFF4D6: finally: isLoading = false
  alt has >=1 projects
    FP-->>U: Render first two ProjectCardPartial
  else none
    FP-->>U: Render fallback message
  end
  deactivate FP
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10–15 minutes

Possibly related PRs

Poem

I nibble keys and hum a tune,
Skeleton cards glow 'til data's in bloom.
Cards hop out when projects arrive,
If none appear, I stay alive—
A rabbit waits; the UI thrives. 🐇✨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title “Add loading skeletons to project sections” succinctly and accurately describes the primary change introduced in the pull request, namely the addition of skeleton components to project listing views. It focuses on the core feature without unnecessary detail or vagueness, making it clear to reviewers at a glance.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8a31d53 and cc12bf3.

📒 Files selected for processing (7)
  • src/pages/ProjectsPage.vue (3 hunks)
  • src/pages/ResumePage.vue (2 hunks)
  • src/partials/EducationPartial.vue (1 hunks)
  • src/partials/ExperiencePartial.vue (1 hunks)
  • src/partials/FeaturedProjectsPartial.vue (3 hunks)
  • src/partials/ProjectCardSkeletonPartial.vue (1 hunks)
  • src/partials/RecommendationPartial.vue (1 hunks)

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link

Summary of Changes

Hello @gocanto, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request enhances the user experience by integrating loading skeletons across the project display sections. This change provides immediate visual feedback to users while project data is being loaded, preventing blank screens and indicating that content is on its way. It also includes clear messages for scenarios where no projects are available.

Highlights

  • Reusable Skeleton Component: A new ProjectCardSkeletonPartial component has been created to provide a consistent and reusable loading state display for project cards across the application.
  • Projects Page Loading State: The main projects page (ProjectsPage.vue) now displays multiple ProjectCardSkeletonPartial components while project data is being fetched, improving the perceived loading time. It also includes a fallback message if no projects are available.
  • Featured Projects Loading State: The featured projects section (FeaturedProjectsPartial.vue) has been updated to show ProjectCardSkeletonPartial components during data loading and provides a clear message if no featured projects are found.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request effectively adds loading skeletons to the project sections, improving the user experience by providing visual feedback while data is being fetched. A reusable ProjectCardSkeletonPartial component has been created for this purpose. The implementation in both ProjectsPage.vue and FeaturedProjectsPartial.vue correctly uses a loading state to conditionally render the skeletons, the project cards, or a fallback message.

My review includes a few suggestions to enhance the layout consistency. Specifically, I've pointed out that the fallback messages should span the full width of their grid containers and that the skeleton loaders in the featured projects section should match the rotation of the actual project cards to prevent layout shifts.

<!-- Cards -->
<div class="grid sm:grid-cols-2 md:grid-cols-1 lg:grid-cols-2 gap-5">
<template v-if="isLoading">
<ProjectCardSkeletonPartial v-for="index in 2" :key="`featured-project-skeleton-${index}`" />

Choose a reason for hiding this comment

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

medium

The actual project cards in this section have a slight rotation applied using odd:-rotate-1 even:rotate-1 classes. To prevent a layout shift when the projects load, the skeleton placeholders should have the same rotation effect. You can achieve this by passing the rotation classes to the ProjectCardSkeletonPartial component.

                                <ProjectCardSkeletonPartial v-for="index in 2" :key="`featured-project-skeleton-${index}`" class="odd:-rotate-1 even:rotate-1" />

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: 2

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between aa2f1df and 8a31d53.

📒 Files selected for processing (3)
  • src/pages/ProjectsPage.vue (4 hunks)
  • src/partials/FeaturedProjectsPartial.vue (1 hunks)
  • src/partials/ProjectCardSkeletonPartial.vue (1 hunks)
🔇 Additional comments (7)
src/partials/FeaturedProjectsPartial.vue (3)

7-9: LGTM! Skeleton loading implementation is clean.

The skeleton loading state correctly renders two placeholder cards during data fetch, matching the expected number of featured projects.


55-68: LGTM! Loading state management is properly implemented.

The isLoading flag is correctly initialized to true, data is fetched in onMounted, and the loading state is reliably cleared in the finally block regardless of success or failure.


41-41: LGTM! Empty state message is user-friendly.

The fallback message appropriately informs users when no projects are available.

src/pages/ProjectsPage.vue (4)

34-36: LGTM! Skeleton count is appropriate for the full projects page.

Rendering four skeleton cards matches the typical grid layout for a full project listing page, providing a better loading experience than the featured section's two cards.


37-40: LGTM! Conditional rendering logic is correct.

The template properly handles all three states: loading, projects available, and empty state with clear user feedback.


81-81: LGTM! Loading state variable is appropriately named.

Using isLoadingProjects instead of just isLoading provides better clarity in a page component that may load multiple data sources.


103-117: LGTM! Loading state management is properly implemented with Promise.all.

The implementation correctly:

  • Fetches both profile and projects in parallel using Promise.all
  • Handles errors gracefully
  • Ensures loading state is cleared in the finally block regardless of outcome

@gocanto gocanto marked this pull request as draft September 30, 2025 09:15
@gocanto gocanto force-pushed the codex/build-loading-skeleton-for-project-sections branch from 9098009 to d27db2d Compare October 2, 2025 09:02
@gocanto gocanto marked this pull request as ready for review October 2, 2025 09:05
@gocanto gocanto merged commit a2acf8e into main Oct 2, 2025
4 of 5 checks passed
@gocanto gocanto deleted the codex/build-loading-skeleton-for-project-sections branch October 2, 2025 09:05
@coderabbitai coderabbitai bot mentioned this pull request Nov 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants