Skip to content

Improve Watchlist UX with Richer Metadata, Progress Tracking & Personalized Insights (#239)#439

Open
diksha78dev wants to merge 8 commits into
S3DFX-CYBER:mainfrom
diksha78dev:fix/issue-239
Open

Improve Watchlist UX with Richer Metadata, Progress Tracking & Personalized Insights (#239)#439
diksha78dev wants to merge 8 commits into
S3DFX-CYBER:mainfrom
diksha78dev:fix/issue-239

Conversation

@diksha78dev
Copy link
Copy Markdown
Contributor

@diksha78dev diksha78dev commented May 11, 2026

NSOC26

Description

Enhances the watchlist section with richer organization metadata, interactive progress tracking, and personalized AI recommendations based on user activity.

Related Issue

Fixes #239

Type of Change

  • Feature
  • Bug Fix
  • Enhancement

Changes Made

  • Richer org cards: Display category, competition level, codebase difficulty, tech stack tags
  • Progress tracking: Visual progress bar + checklist (read ideas, intro contact, first PR, proposal)
  • Personal notes: Per-org textarea for user annotations (200 char limit)
  • Personalized insights: Context-aware recommendations based on watchlist progress and top technologies
  • Responsive layout: 2-column desktop → 1-column mobile
  • localStorage: New watchlist_meta key stores all user progress persistently

Testing

  • Add 2-3 orgs to watchlist
  • Toggle checklist items → progress bar updates
  • Add notes → persists on page reload
  • Check responsive layout on mobile/tablet

…nd personalized insights

- Add watchlist metadata persistence (checklist, notes, progress) via localStorage
- Display richer org cards with: category, competition level, codebase difficulty, tech stack
- Add progress bar and interactive checklist for proposal preparation
- Add personal notes textarea per organization
- Generate personalized AI insights based on watchlist progress and top technologies
- Responsive grid layout adapts to mobile/tablet/desktop
- Maintains minimal code philosophy with no external dependencies
@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented May 11, 2026

@diksha78dev is attempting to deploy a commit to the s3dfx-cyber's projects Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 11, 2026

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds per-organization watchlist persistence in localStorage (checklist booleans, notes, progress, updatedAt), wires checklist and notes inputs to update/save helpers, preserves grid pagination on bookmark toggle, and enriches renderWatchlist to show progress bars, persisted checklists, and notes.

Changes

Watchlist Metadata and Enhancement

Layer / File(s) Summary
Sidebar typography tweak
index.html
Small tracking/typography change on Upcoming Deadlines sidebar date rows.
Org card input event wiring
index.html
Extends attachOrgCardListeners to call updateChecklistItem(...) on checkbox change and updateOrgNotes(...) on notes textarea input.
Watchlist metadata load/save and updates
index.html
Adds loadWatchlistMeta(), saveWatchlistMeta(meta), getOrgMeta(meta, orgName), updateChecklistItem(orgName, key, value), and updateOrgNotes(orgName, notes) with lazy init, checklist normalization, 200-char notes truncation, progress recomputation, updatedAt updates, and a pagination-preserving refreshOrgGridPreservingVisibleCount().
Render hook to load persisted meta
index.html
Loads persisted watchlistMeta at the start of renderWatchlist() so rendering uses stored checklist/notes/progress.
Render watchlist with progress, checklist, and notes
index.html
Reworks per-org watchlist cards to include progress bars (from progress), checkboxes reflecting stored checklist, and a prefilled notes textarea; updates AI Application Insight wording to use average persisted progress across watched orgs.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant WatchlistUI
  participant MetaStore as localStorage:watchlist_meta
  participant Renderer as renderWatchlist
  User->>WatchlistUI: toggle checklist / edit notes
  WatchlistUI->>MetaStore: updateChecklistItem / updateOrgNotes
  MetaStore-->>Renderer: stored meta updated
  Renderer->>WatchlistUI: re-render cards & progress
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related issues

Possibly related PRs

Suggested labels

level3

Suggested reviewers

  • S3DFX-CYBER

🐇 I cached your checks and scribbled notes with care,
Progress bars glow where bookmarks used to stare,
LocalStorage hums a quiet tune at night,
Check, write, and hop — your watchlist feels just right!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the main changes: watchlist UX improvements with richer metadata, progress tracking, and personalized insights, directly aligning with the primary changeset objectives.
Description check ✅ Passed The description comprehensively relates to the changeset, outlining richer org cards, progress tracking, personal notes, personalized insights, responsive layout, and localStorage persistence—all implemented in the PR changes.
Linked Issues check ✅ Passed The PR successfully implements core objectives from #239: richer org metadata display, progress tracking via checklist and progress bar, personal notes functionality, personalized AI insights based on watchlist activity, and localStorage persistence, fulfilling primary coding requirements.
Out of Scope Changes check ✅ Passed All code changes are directly related to watchlist enhancement objectives: persistence helpers, checklist/notes update functions, UI rendering enhancements, and event listeners align with #239 requirements. Minor typography tweak to 'Upcoming Deadlines' is cosmetic and stays within scope.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@github-actions
Copy link
Copy Markdown
Contributor

🚀 Pull Request Opened

Hi @diksha78dev! Here's your current ranking:

Rank User Merged PRs Score
8 @SHUBHAM2775 2 20
9 @diksha78dev 1 12
10 @VaibhavMP 1 12

Current Rank: #9

Current Score: 12

Keep contributing to climb the leaderboard 📈

@coderabbitai coderabbitai Bot requested a review from S3DFX-CYBER May 11, 2026 15:10
Copy link
Copy Markdown
Contributor

@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

🧹 Nitpick comments (1)
index.html (1)

2090-2100: 💤 Low value

getOrgMeta mutates updatedAt on every read.

Treating a getter as a writer makes it hard to reason about who last touched a record and causes updatedAt to drift purely from rendering. Consider only setting updatedAt from the explicit mutators (updateChecklistItem, updateOrgNotes) and leaving getOrgMeta side-effect-free for "first-create" cases.

♻️ Suggested change
   function getOrgMeta(meta, orgName) {
     if (!meta[orgName]) {
       meta[orgName] = {
         checklist: { read_ideas: false, intro_contact: false, first_pr: false, proposal: false },
         notes: '',
         progress: 0,
-        updatedAt: new Date().toISOString()
+        updatedAt: null
       };
     }
     return meta[orgName];
   }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@index.html` around lines 2090 - 2100, getOrgMeta currently mutates the org
entry by setting updatedAt every time it is called, which causes reads to look
like writes; change getOrgMeta to be side-effect-free by only creating and
returning a default meta object when meta[orgName] is missing without setting
updatedAt there, and instead update updatedAt only inside the explicit mutators
(updateChecklistItem and updateOrgNotes) when they actually change data; locate
getOrgMeta, updateChecklistItem, and updateOrgNotes in the diff and move or add
updatedAt assignments into those mutator functions so creation uses a static
default (no timestamp) and all real timestamp updates occur in the mutators.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@index.html`:
- Line 2149: Inline JS handlers that interpolate org.name break on quotes;
replace the inline onchange and oninput usage with data attributes and delegated
listeners: render the checkbox list items and notes textarea/input with data
attributes (e.g., data-checklist-org, data-checklist-key on each checkbox and
data-notes-org on the notes control) instead of calling updateChecklistItem(...)
or updateOrgNotes(...) inline, then extend attachOrgCardListeners to add
delegated event handlers (change for checkboxes, input/change for notes) that
read org and key from event.target.dataset and call the existing
updateChecklistItem and updateOrgNotes functions; this keeps behavior identical
but avoids JS-string injection and matches the existing data-* +
attachOrgCardListeners pattern.
- Line 2186: The textarea uses an inline onchange handler which only fires on
blur, causing typed notes to be lost if the user navigates away; update the
textarea element that currently calls updateOrgNotes('${org.name}', this.value)
(and references meta.notes/escapeHtml) to use oninput instead of onchange so
updates happen as the user types, or alternatively keep oninput and also call
updateOrgNotes on blur to guarantee persistence; ensure the same updateOrgNotes
function continues to accept (orgName, value) and works with the data reflected
by escapeHtml/meta.notes.
- Line 2187: The Remove button in the org card is missing the required CSS class
so attachOrgCardListeners (which binds to elements matching
.bookmark-btn[data-bookmark-org]) never attaches its click handler; fix by
adding the bookmark-btn class to the Remove button element (the button with
data-bookmark-org="${escapeHtml(org.name)}") so it matches
.bookmark-btn[data-bookmark-org] and the existing attachOrgCardListeners logic
will bind the un-bookmark click behavior.
- Around line 2197-2200: avgProgress is computed by summing
Object.values(watchlistMeta) but dividing by bookmarks.length, causing inflated
averages because watchlistMeta contains stale entries; change the calculation to
iterate only over current bookmarks (e.g., map bookmarks to their corresponding
watchlistMeta entries, sum each entry's progress || 0 and divide by
bookmarks.length, guarding against zero-length bookmarks) and optionally remove
stale keys from watchlistMeta inside toggleBookmark when an org is unbookmarked
to keep storage in sync.

---

Nitpick comments:
In `@index.html`:
- Around line 2090-2100: getOrgMeta currently mutates the org entry by setting
updatedAt every time it is called, which causes reads to look like writes;
change getOrgMeta to be side-effect-free by only creating and returning a
default meta object when meta[orgName] is missing without setting updatedAt
there, and instead update updatedAt only inside the explicit mutators
(updateChecklistItem and updateOrgNotes) when they actually change data; locate
getOrgMeta, updateChecklistItem, and updateOrgNotes in the diff and move or add
updatedAt assignments into those mutator functions so creation uses a static
default (no timestamp) and all real timestamp updates occur in the mutators.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: fe5f8ba4-ed43-408f-b273-b74a14ac9968

📥 Commits

Reviewing files that changed from the base of the PR and between 3bcfa24 and 214189b.

📒 Files selected for processing (1)
  • index.html
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: cubic · AI code reviewer
🧰 Additional context used
🪛 GitHub Check: SonarCloud Code Analysis
index.html

[warning] 2205-2205: Unexpected negated condition.

See more on https://sonarcloud.io/project/issues?id=S3DFX-CYBER_GSoC-Org-Finder-&issues=AZ4XlcXmBVtZah--TLw5&open=AZ4XlcXmBVtZah--TLw5&pullRequest=439


[warning] 2149-2149: Prefer String#replaceAll() over String#replace().

See more on https://sonarcloud.io/project/issues?id=S3DFX-CYBER_GSoC-Org-Finder-&issues=AZ4XlcXmBVtZah--TLw4&open=AZ4XlcXmBVtZah--TLw4&pullRequest=439

Comment thread index.html Outdated
Comment thread index.html Outdated
Comment thread index.html Outdated
Comment thread index.html Outdated
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

1 issue found across 1 file

Confidence score: 3/5

  • There is a concrete user-facing accuracy risk in index.html: avgProgress is being computed with stale watchlistMeta entries, which can inflate the displayed insight percentage after orgs are removed.
  • Given the issue is medium severity (6/10) with high confidence (9/10), this introduces some regression risk in metrics correctness rather than a broad functional break.
  • This looks localized to aggregation logic, so the PR may still be mergeable, but the calculation should be corrected to use only current bookmarks.
  • Pay close attention to index.html - ensure avgProgress excludes removed-org metadata and reflects only active bookmark data.
Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="index.html">

<violation number="1" location="index.html:2197">
P2: Compute `avgProgress` from the current `bookmarks` only. Including stale `watchlistMeta` entries from removed orgs inflates the insight percentage.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review, or fix all with cubic.

Comment thread index.html Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes May 11, 2026
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

1 issue found across 1 file (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="index.html">

<violation number="1" location="index.html:2205">
P2: Reusing the `bookmark-btn` class on the watchlist “Remove” action applies icon-specific styles (1.25rem font + scale hover) to a full-width text button, causing unintended UI behavior.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review, or fix all with cubic.

Comment thread index.html
@S3DFX-CYBER S3DFX-CYBER added the nsoc26 Nexus Spring of Code 2026 label May 11, 2026
@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented May 11, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
g-so-c-org-finder Ready Ready Preview, Comment May 11, 2026 7:02pm

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 13, 2026

⚠️ DCO Sign-off Missing

Hi @diksha78dev 👋

Some commits in this PR are missing a Signed-off-by line required by the Developer Certificate of Origin (DCO).

Fix

git commit --amend --signoff
git push --force

For multiple commits:

git rebase --signoff HEAD~N
git push --force

Example:

Signed-off-by: Your Name <you@example.com>

After fixing the commits, this comment will automatically update.

@github-actions github-actions Bot removed the nsoc26 Nexus Spring of Code 2026 label May 13, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 13, 2026

⚠️ PR Format Issues Detected

Hi @diksha78dev, please update the following:

  • ⚠️ Invalid PR title format. Example: feat: add search filters

After pushing new commits, this comment will automatically update.

coderabbitai[bot]
coderabbitai Bot previously approved these changes May 13, 2026
@github-actions github-actions Bot added nsoc26 Nexus Spring of Code 2026 and removed nsoc26 Nexus Spring of Code 2026 labels May 13, 2026
Copy link
Copy Markdown
Contributor

@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

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@index.html`:
- Around line 2125-2188: The file contains unresolved git conflict markers;
remove the conflict lines and merge both changes so the watchlist meta functions
(loadWatchlistMeta, saveWatchlistMeta, getOrgMeta, updateChecklistItem,
updateOrgNotes) are preserved and the new pagination helper
refreshOrgGridPreservingVisibleCount() is present; then update toggleBookmark to
call refreshOrgGridPreservingVisibleCount() after updating localStorage
(replacing the renderOrgs(false) call) so bookmarking preserves visibleCount and
pagination state. Ensure no leftover <<<<<<<, =======, or >>>>>>> markers
remain.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c9fcfc72-8692-4024-8d03-ef5123b395eb

📥 Commits

Reviewing files that changed from the base of the PR and between efb21b2 and cd249dc.

📒 Files selected for processing (1)
  • index.html
📜 Review details
🔇 Additional comments (4)
index.html (4)

724-725: LGTM!


1974-1991: LGTM!


2210-2255: LGTM!


2257-2272: LGTM!

Comment thread index.html Outdated
@github-actions github-actions Bot added nsoc26 Nexus Spring of Code 2026 and removed nsoc26 Nexus Spring of Code 2026 labels May 13, 2026
@github-actions github-actions Bot added nsoc26 Nexus Spring of Code 2026 and removed nsoc26 Nexus Spring of Code 2026 labels May 13, 2026
Copy link
Copy Markdown
Contributor

@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

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@index.html`:
- Around line 2139-2149: getOrgMeta currently returns stored objects as-is which
can have malformed checklist/progress/notes; update getOrgMeta to defensively
normalize and return a well-shaped org object: ensure checklist exists and
contains the boolean keys read_ideas, intro_contact, first_pr, proposal (default
false), ensure notes is a string (default ''), ensure progress is a number
(compute from checklist if missing), and ensure updatedAt is an ISO string
(default new Date().toISOString()); apply this normalization before returning
meta[orgName] so callers like whoever reads meta.checklist or computes progress
(lines referenced around getOrgMeta and the progress calculation) cannot crash
on stale shapes.
- Around line 2135-2137: The saveWatchlistMeta function writes directly to
localStorage and can throw in restricted/storage-quota environments; wrap the
localStorage write in a guard that first checks for the existence of
window/localStorage (or typeof localStorage !== 'undefined') and then perform
the setItem inside a try/catch, swallowing or logging the error and falling back
to a safe no-op or in-memory cache so note input events (caller around the notes
input) cannot break watchlist interactions; update saveWatchlistMeta to
implement this guarded write and ensure any callers still work if the write
fails.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 49c9116a-9e7c-4d0b-bfb5-deb3a7a96301

📥 Commits

Reviewing files that changed from the base of the PR and between cd249dc and a7b2768.

📒 Files selected for processing (1)
  • index.html
📜 Review details
🧰 Additional context used
🪛 GitHub Check: SonarCloud Code Analysis
index.html

[warning] 2265-2265: Unexpected negated condition.

See more on https://sonarcloud.io/project/issues?id=S3DFX-CYBER_GSoC-Org-Finder-&issues=AZ4g0-iuwJ1e4rinjPA3&open=AZ4g0-iuwJ1e4rinjPA3&pullRequest=439


[warning] 2207-2207: Prefer String#replaceAll() over String#replace().

See more on https://sonarcloud.io/project/issues?id=S3DFX-CYBER_GSoC-Org-Finder-&issues=AZ4g0-iuwJ1e4rinjPA2&open=AZ4g0-iuwJ1e4rinjPA2&pullRequest=439

🔇 Additional comments (1)
index.html (1)

724-725: LGTM!

Also applies to: 1975-1991, 2193-2193, 2208-2246, 2252-2266

Comment thread index.html
Comment thread index.html
@github-actions github-actions Bot added nsoc26 Nexus Spring of Code 2026 and removed nsoc26 Nexus Spring of Code 2026 labels May 13, 2026
- Enforce 200-char limit in updateOrgNotes() (browser+code validation)
- Prevents storage issues from bypassed maxlength attribute

Signed-off-by: diksha78dev <diksha78dev@gmail.com>
@github-actions github-actions Bot added nsoc26 Nexus Spring of Code 2026 needs-fixes and removed nsoc26 Nexus Spring of Code 2026 labels May 13, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 13, 2026

🚦 PR Review Pipeline

NSOC PR — Stage 2 requires reviewer/contributor approval

Stage Status
Stage 1 — Automated Validation Failed — fix required before review can proceed
Stage 2 — Human Review 🔒 Blocked — Stage 1 must pass first
Stage 3 — PA / Maintainer Review 🔒 Blocked — previous stages must complete first
  • DCO sign-off missing on one or more commits
  • PR format issues detected — see validator comment above
ℹ️ Stage 1 checks
Check Signal
DCO sign-off ❌ missing
AI / slop detection ✅ ok
PR format validator ⚠️ issues found
Duplicate guard ✅ ok
Code quality (JS/CSS/HTML lint) checked via GitHub Checks
ℹ️ Pipeline legend

✅ Passed · ❌ Failed · ⏳ Pending · 🔒 Blocked · 👀 Under review

Bots never auto-approve or auto-merge. Humans make every final decision.

Last updated: Wed, 13 May 2026 11:35:38 GMT

Copy link
Copy Markdown
Contributor

@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

🧹 Nitpick comments (1)
index.html (1)

2167-2174: ⚡ Quick win

Prune watchlist_meta when an org is unbookmarked.

toggleBookmark only mutates bookmarkedSet/bookmarks, so removing an org leaves its checklist + notes in localStorage indefinitely. Not user-visible today (avgProgress now correctly iterates bookmarks), but the keyspace grows unbounded and re-bookmarking surprises the user with old progress/notes from a previous session. Cheap to clean up here.

♻️ Suggested cleanup
   function toggleBookmark(e, name) {
     if (e) e.stopPropagation();
-    if (bookmarkedSet.has(name)) bookmarkedSet.delete(name);
-    else bookmarkedSet.add(name);
+    if (bookmarkedSet.has(name)) {
+      bookmarkedSet.delete(name);
+      const meta = loadWatchlistMeta();
+      if (meta[name]) {
+        delete meta[name];
+        saveWatchlistMeta(meta);
+      }
+    } else {
+      bookmarkedSet.add(name);
+    }
     localStorage.setItem('bookmarks', JSON.stringify([...bookmarkedSet]));
     refreshOrgGridPreservingVisibleCount();
     renderWatchlist();
   }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@index.html` around lines 2167 - 2174, When an org is removed in
toggleBookmark, also remove its metadata from the watchlist_meta stored in
localStorage: inside toggleBookmark (the function that updates bookmarkedSet and
writes 'bookmarks'), detect the branch where bookmarkedSet.delete(name) runs and
then load localStorage.getItem('watchlist_meta'), JSON.parse it (safely
defaulting to {}), delete the property for the same name, and write the updated
object back with localStorage.setItem('watchlist_meta',
JSON.stringify(updatedMeta)); keep the rest of the function
(refreshOrgGridPreservingVisibleCount and renderWatchlist) unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@index.html`:
- Around line 2139-2147: updateChecklistItem currently calls renderWatchlist()
which rebuilds the DOM and loses each <details> open state; modify
updateChecklistItem to preserve the checklist drawer state by either updating
the checkbox and progress DOM in place (find the org card element for orgName
and update its checkbox input.checked, progress text/value and updatedAt without
calling renderWatchlist) or persist the <details> open state in the meta object
(use loadWatchlistMeta/getOrgMeta to add an org.open boolean, set it before
saveWatchlistMeta, and update renderWatchlist to render <details open> when
org.open is true) and ensure getOrgMeta/saveWatchlistMeta and renderWatchlist
respect that flag so toggling a checkbox does not collapse the drawer.

---

Nitpick comments:
In `@index.html`:
- Around line 2167-2174: When an org is removed in toggleBookmark, also remove
its metadata from the watchlist_meta stored in localStorage: inside
toggleBookmark (the function that updates bookmarkedSet and writes 'bookmarks'),
detect the branch where bookmarkedSet.delete(name) runs and then load
localStorage.getItem('watchlist_meta'), JSON.parse it (safely defaulting to {}),
delete the property for the same name, and write the updated object back with
localStorage.setItem('watchlist_meta', JSON.stringify(updatedMeta)); keep the
rest of the function (refreshOrgGridPreservingVisibleCount and renderWatchlist)
unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 480d6e69-0d4a-490a-a706-d33dec63df34

📥 Commits

Reviewing files that changed from the base of the PR and between a7b2768 and 26743ba.

📒 Files selected for processing (1)
  • index.html
📜 Review details
🧰 Additional context used
🪛 GitHub Check: SonarCloud Code Analysis
index.html

[warning] 2114-2114: Unexpected negated condition.

See more on https://sonarcloud.io/project/issues?id=S3DFX-CYBER_GSoC-Org-Finder-&issues=AZ4hFi71fsSAqMF9t6ot&open=AZ4hFi71fsSAqMF9t6ot&pullRequest=439


[warning] 2134-2134: Prefer Number.isNaN over isNaN.

See more on https://sonarcloud.io/project/issues?id=S3DFX-CYBER_GSoC-Org-Finder-&issues=AZ4hFi71fsSAqMF9t6ou&open=AZ4hFi71fsSAqMF9t6ou&pullRequest=439


[warning] 2196-2196: Prefer String#replaceAll() over String#replace().

See more on https://sonarcloud.io/project/issues?id=S3DFX-CYBER_GSoC-Org-Finder-&issues=AZ4g0-iuwJ1e4rinjPA2&open=AZ4g0-iuwJ1e4rinjPA2&pullRequest=439


[warning] 2254-2254: Unexpected negated condition.

See more on https://sonarcloud.io/project/issues?id=S3DFX-CYBER_GSoC-Org-Finder-&issues=AZ4g0-iuwJ1e4rinjPA3&open=AZ4g0-iuwJ1e4rinjPA3&pullRequest=439

🔇 Additional comments (4)
index.html (4)

724-725: LGTM!


1943-1960: LGTM!


2094-2111: LGTM!


2176-2256: LGTM!

Comment thread index.html
@github-actions github-actions Bot added nsoc26 Nexus Spring of Code 2026 and removed nsoc26 Nexus Spring of Code 2026 labels May 13, 2026
@github-actions github-actions Bot added nsoc26 Nexus Spring of Code 2026 and removed nsoc26 Nexus Spring of Code 2026 labels May 13, 2026
@github-actions github-actions Bot added nsoc26 Nexus Spring of Code 2026 and removed nsoc26 Nexus Spring of Code 2026 labels May 13, 2026
@sonarqubecloud
Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dco-missing needs-fixes nsoc26 Nexus Spring of Code 2026

Projects

Status: Todo

Development

Successfully merging this pull request may close these issues.

feat: Improve Watchlist UX, Layout, and Insights System

2 participants