Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Phase 3: Implement bookmarks + application tracker (/my-list)

未关闭
#33 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
55/100
Issue 类型
功能
描述清晰度
描述清楚
活跃度
活跃
技术栈
supabase, typescript

调研方向

Start with the bookmarks schema in src/db/schema.ts lines 66-81, the non-functional control in src/components/directory/resource-card.tsx lines 90-92, and the existing auth flow in src/proxy.ts and src/lib/supabase. Then review the planned entry points in src/app/my-list/page.tsx, src/app/my-list/actions.ts, and src/lib/resources.ts. Done means authenticated users can save resources, edit all four statuses from the card and /my-list, and see the specified empty state.

由索引模型根据 Issue 内容生成。

描述

enhancement

Description

Implement the bookmarks and application tracker feature as specified in PRD §8.7. This is a P1 requirement for Phase 3.

Acceptance Criteria (from PRD §8.7)

  • Sign up/in via Supabase Auth (email + Google OAuth) — already implemented in /submit
  • "Save" icon on every card → adds to /my-list
  • Status pill per saved resource: Interested / Applied / Got it / Rejected — updates from the card itself, no separate page needed

Current State

  • Database schema already has bookmarks table with status enum ['interested', 'applied', 'got_it', 'rejected'] (src/db/schema.ts lines 66-81)
  • Supabase Auth plumbing already in place: src/lib/supabase/{server,client}.ts, src/proxy.ts
  • /submit page already has Google + email-link sign-in working
  • ResourceCard has a non-functional bookmark button (line 90-92 in resource-card.tsx)

Implementation Plan

  1. Bookmark API/Server Actions:
    • Create server actions for: add bookmark, update status, remove bookmark
    • Location: src/app/my-list/actions.ts or similar
  2. /my-list page:
    • Protected route (requires auth)
    • Show user's bookmarks grouped by status
    • Allow status changes inline (pill buttons)
  3. ResourceCard integration:
    • Make bookmark button functional
    • Show current status if bookmarked
    • Allow status change from card (dropdown or pill cycle)
  4. Auth protection:
    • Use existing src/proxy.ts pattern for /my-list route
    • Or use Server Component auth check

Files to Create/Modify

  • src/app/my-list/page.tsx (new) - main tracker page
  • src/app/my-list/actions.ts (new) - Server Actions for bookmark CRUD
  • src/components/directory/resource-card.tsx - functional bookmark button
  • src/proxy.ts - add /my-list to matcher for auth redirect
  • src/lib/resources.ts - add getUserBookmarks(), toggleBookmark(), updateBookmarkStatus()

Database Schema (already exists)

bookmarks: {
  userId: uuid (references auth.users)
  resourceId: integer (references resources.id)
  status: 'interested' | 'applied' | 'got_it' | 'rejected'
  createdAt: timestamp
  PK: (userId, resourceId)
}

UX Notes

  • Status pills on card: clicking cycles through states or opens small popover
  • /my-list shows all bookmarks with inline status editing
  • Empty state: "Save resources to track them here"
  • Reuse existing UI patterns (shadcn/ui Badge, Select, etc.)
主要语言
TypeScript
星标
1
派生
6
平均合并
11 小时 16 分钟
30 天内合并 PR
16

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

Your-Voldemort/StudentStack 的其他 Issue

查看 Your-Voldemort/StudentStack 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。