Skip to content

feat(bookmarks): add question bookmarks & personal notes - #2273

Merged
KaranUnique merged 72 commits into
Canopus-Labs:feature-2from
karan-chaos:feature/question-bookmarks
Aug 31, 2026
Merged

feat(bookmarks): add question bookmarks & personal notes#2273
KaranUnique merged 72 commits into
Canopus-Labs:feature-2from
karan-chaos:feature/question-bookmarks

Conversation

@karan-chaos

@karan-chaos karan-chaos commented Aug 29, 2026

Copy link
Copy Markdown

closes #2272
Description:
Adds a complete Question Bookmarks & Personal Notes system for saving, organizing, searching, and managing important questions.

Changes
Added Bookmark Mongoose schema with tags, difficulty, star, and source tracking
Added full bookmark CRUD functionality
Added bookmark search and filtering
Added star/favorite toggle
Added bookmark statistics aggregation
Added 8 authenticated REST endpoints
Added Zod validation for create and update operations
Added BookmarkPanel React component
Added search, filters, pagination, and inline note editing
Added expandable bookmark details
Added bookmark statistics bar
Mounted bookmark routes in the backend
Added bookmark API path constants

Branch: feature/question-bookmarks
Commit: c9febf0

ionfwsrijan and others added 30 commits August 8, 2026 20:40
The controller required completedTopics to be an Array, but the frontend,
the Zod validator (z.record), the Mongoose schema ({ type: Object }), the
import util, and resetProgress all use an object/map — so every save hit
!Array.isArray({...}) and returned 400, and progress was silently lost
(kept only in localStorage). Validate it as a plain object instead.

Fixes Canopus-Labs#1727
…ntract)

Per review: the object check accepted any non-null object, so { "0-0-0": "true" }
(string value) passed. Also require every value to be a boolean, matching the
Zod z.record(z.string(), z.boolean()) contract and the map/{key:bool} shape.
Automated dependency upgrade by OrbisAI Security
…eld-validation

fix: Validate country field accepting numeric input
…ew-kw-extractor-v4

feat : added AI interview question keyword extractor
…#1930

test : added unit tests for SM-2 spaced repetition algorithm
The override was incorrectly set to 8.3.0 (a cross-major mismatch with
react-router-dom@7.x and incompatible with react@18). Change it to 7.18.0
and regenerate the lockfile so the fix lands at the top-level package.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…mastery-decay-monitor

feat: add AI topic mastery decay monitor
…ce-gap-detector

Feature/ai practice gap detector
…-flow-analyzer

Feature/ai answer flow analyzer
sam-dwdkr404 and others added 20 commits August 16, 2026 03:50
Add streak milestone achievements/badges (1/3/7/14/30-day streaks)
…gistration-validation

fix: resolve account registration login issue
fix(ui): add client-side file size validation for PDF upload (max 5MB)Feature/my change
# Pull Request: Add Google Calendar Backend Routes

## Summary

This PR adds the missing backend routes required by the Interview Prep frontend for Google Calendar integration.

The frontend already defines the following Google Calendar API paths in `frontend/src/utils/apiPaths.js`, but the backend did not have a corresponding mounted router. As a result, all Google Calendar actions were returning `404 Not Found`.

## Changes Made

* Added `backend/routes/googleCalendarRoutes.js`.
* Added the following Google Calendar endpoints:

  * `GET /api/google-calendar/connect`
  * `GET /api/google-calendar/callback`
  * `GET /api/google-calendar/status`
  * `POST /api/google-calendar/events`
* Mounted the Google Calendar router in `backend/server.js`.
* Added Google Calendar OAuth environment variable placeholders to `backend/.env.example`.
* Kept the implementation lightweight and prepared for future Google OAuth2/token persistence.
* Avoided changes to the existing MongoDB configuration because MongoDB is outside the scope of this issue.

## API Behavior

### GET `/api/google-calendar/connect`

Provides the entry point for initiating the Google Calendar OAuth flow.

### GET `/api/google-calendar/callback`

Provides the callback endpoint required for Google OAuth integration.

### GET `/api/google-calendar/status`

Returns the current calendar connection status.

Example response:

```json
{
  "success": true,
  "connected": false
}
```

### POST `/api/google-calendar/events`

Accepts calendar event data for synchronization/saving.

Example request:

```json
{
  "events": [
    {
      "title": "Mock Interview",
      "start": "2026-08-25T10:00:00",
      "end": "2026-08-25T11:00:00"
    }
  ]
}
```

## Environment Variables

Added placeholders for:

```env
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_REDIRECT_URI=http://localhost:5000/api/google-calendar/callback
```

Actual credentials are not included in the repository.

## Testing

Verified the backend Google Calendar endpoints locally:

* `GET /api/google-calendar/connect`
* `GET /api/google-calendar/callback`
* `GET /api/google-calendar/status`
* `POST /api/google-calendar/events`

The routes are now available instead of returning `404 Not Found`.

## Scope

This PR focuses specifically on the missing Google Calendar API routes and backend integration.

Full Google OAuth token persistence and production calendar synchronization can be implemented as a follow-up enhancement.

## Issue

Closes #[ISSUE_NUMBER]
fix: add missing Google Calendar backend routes
…-menu-addition

Feature : Added Hamburger menu for NavItems in Mobile/Tablet view in the Landing Page specifically
POST /api/resume/ats-match scores keyword overlap between a resume and a
job description with no AI/file upload. Matching lives in a pure,
unit-tested atsKeywordMatch helper that keeps tech tokens (c++, node.js)
intact.

Closes Canopus-Labs#2268
feat(resume): add deterministic ATS keyword-match endpoint
Backend: Model, controller, routes, and Zod validation for bookmarking
questions with tags, notes, difficulty rating, star/favorite, search,
filtering by category/difficulty, and usage statistics.

Frontend: React component with create form, searchable collection view,
inline note editing, star toggle, pagination, stats bar, and category
filtering.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
@github-actions

Copy link
Copy Markdown

Thank you for submitting your pull request, @karan-chaos! 🙌
We'll review it as soon as possible.
If there are any specific instructions or feedback regarding your PR, we'll provide them here.
Thanks again for your contribution to our project! 😊

@coderabbitai

coderabbitai Bot commented Aug 29, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 58 minutes.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3fbcae1f-c563-4112-a2f5-481e5518aeed

📥 Commits

Reviewing files that changed from the base of the PR and between 420348a and c9febf0.

📒 Files selected for processing (7)
  • backend/Input_validators/ValidateBookmark.js
  • backend/controllers/bookmarkController.js
  • backend/models/Bookmark.js
  • backend/routes/bookmarkRoutes.js
  • backend/server.js
  • frontend/src/components/BookmarkPanel.jsx
  • frontend/src/utils/apiPaths.js

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.

@github-actions github-actions Bot added the merge ready PR is mergeable and has no conflicts label Aug 29, 2026
@KaranUnique
KaranUnique changed the base branch from main to feature August 31, 2026 05:40
@KaranUnique
KaranUnique changed the base branch from feature to feature-2 August 31, 2026 05:40
@KaranUnique
KaranUnique merged commit 71203f3 into Canopus-Labs:feature-2 Aug 31, 2026
4 checks passed
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.

feat: add Question Bookmarks & Personal Notes