aboutsummaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)Author
9 daysfix(frontend): prevent layout shift in feed sidebar during loadingHEADv0.7.3mainnsfisis
Show "All feeds" button immediately and load individual feeds asynchronously via internal Suspense boundary, avoiding the spinner-to-content shift that occurred with the outer Suspense wrapper. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
9 daysfeat(asset): update iconsnsfisis
12 daysMerge pull request #5 from nsfisis/claude/fix-mobile-feed-menu-TEr3nnsfisis
Move responsive styling from FeedSidebar to parent containers
12 daysfix(frontend): hide loading spinner on mobile when feed sidebar is hiddenClaude
The Suspense fallback (LoadingSpinner) was visible on mobile even though FeedSidebar itself had `hidden md:block`. Move the responsive hiding classes to a wrapper div so both the spinner and the sidebar are hidden on mobile screens. https://claude.ai/code/session_01Nfc9gnkDPgnXZwEWyGrb9U
2026-02-15feat(frontend): filter feed sidebar by read/unread viewv0.7.2nsfisis
Unread sidebar now only shows feeds with unread articles. Read sidebar shows all feeds but hides the unread count badge. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15fix(frontend): hide feed sidebar on mobile for better readabilitynsfisis
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15fix(docker): update Dockerfile for REST API migrationv0.7.1nsfisis
Replace obsolete graphql schema copy with openapi spec, add type generation step before frontend build, and use npm ci for reproducibility.
2026-02-14Merge pull request #4 from nsfisis/claude/add-typescript-ci-npm-EQxbGv0.7.0nsfisis
Add typespec dependency installation to CI workflow
2026-02-14CI: Run npm ci for typespec directory in addition to frontendClaude
Add a step to install typespec dependencies and include typespec/package-lock.json in the Node.js npm cache config. https://claude.ai/code/session_01B4MXDojJtKKnXC57YTJbt2
2026-02-14feat(feed): auto-discover feed URLs from HTML pagesnsfisis
When an HTML page is provided instead of a direct feed URL, parse <link rel="alternate"> tags to find RSS/Atom feeds. Atom is preferred over RSS when both are present. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14refactor(frontend): migrate state management to jotai and jotai-tanstack-querynsfisis
Replace React Context + manual useEffect data fetching with jotai atoms for state management and jotai-tanstack-query for server state caching. - Add jotai, jotai-tanstack-query, @tanstack/query-core dependencies - Create atoms for auth (primitive + action), feeds (suspense query), and articles (infinite query with cursor-based pagination) - Wire up Provider, HydrateQueryClient, and StoreInitializer in main.tsx - Migrate all components from useAuth() context to jotai atoms - Replace manual fetch logic in FeedSidebar/FeedList with feedsAtom - Replace usePaginatedArticles hook with articlesInfiniteAtom - Add queryClient.invalidateQueries() after mutations for automatic cache refresh - Add ErrorBoundary and LoadingSpinner components for Suspense support - Remove callback prop chains (onFeedAdded, onFeedChanged, etc.) in favor of query invalidation Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14refactor: migrate API from GraphQL to REST (TypeSpec/OpenAPI)nsfisis
Replace the entire GraphQL stack (gqlgen, urql, graphql-codegen) with a TypeSpec → OpenAPI 3.x pipeline using oapi-codegen for Go server stubs and openapi-fetch + openapi-typescript for the frontend client. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13feat: add feed sidebar and cursor-based paginationnsfisis
Add a feed sidebar to /unread and /read pages for filtering articles by feed, and replace the fixed 100-article limit with cursor-based pagination using a "Load more" button. Backend: - Add PageInfo, ArticleConnection types and pagination args to GraphQL - Replace GetUnreadArticles/GetReadArticles with parameterized queries - Add GetFeedUnreadCounts query and composite index - Add shared pagination helper in resolver Frontend: - Add FeedSidebar component with unread count badges - Add usePaginatedArticles hook for cursor-based fetching - Update ArticleList with Load more button and single-feed mode - Use ?feed=<id> query parameter for feed filtering Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09Merge pull request #3 from nsfisis/claude/create-claude-md-HcQ4Unsfisis
Add CLAUDE.md documentation for project setup and structure
2026-02-09Add CLAUDE.md with project conventions and commandsClaude
https://claude.ai/code/session_011oeZCDaNFcsxnbRsWRju9t
2026-02-05feat: add license filensfisis
2026-02-01refactor: extract feed fetch and sync logic into shared feed packagensfisis
Consolidate duplicated feed fetching and article syncing code from AddFeed resolver and fetchOneFeed into reusable feed.Fetch and feed.Sync functions. This unifies behavior (10s timeout, article updates) across both call sites. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22feat(ci): run CI on pull requestsv0.6.0nsfisis
2026-01-12Merge pull request #2 from nsfisis/claude/deduplicate-feed-items-JDLw3nsfisis
Prevent duplicate feed items with same GUID
2026-01-12refactor: remove unused GetAllArticleGUIDs queryClaude
2026-01-12refactor: deduplicate articles at insertion time instead of query timeClaude
Change deduplication strategy from query-time (ROW_NUMBER window function) to insertion-time (global guid check before insert). Benefits: - Simpler queries without CTE/window functions - Consistent read state (no duplicate articles to manage) - Better query performance (no per-query deduplication overhead) Changes: - Add CheckArticleExistsByGUID query for global guid lookup - Add migration to remove existing duplicate articles - Modify fetchOneFeed and AddFeed to skip duplicates on insert - Revert GetUnreadArticles/GetReadArticles to simple queries
2026-01-12feat: deduplicate feed items by guidClaude
Use ROW_NUMBER() window function to filter out duplicate articles with the same guid across different feeds. This ensures each guid appears only once in unread/read article lists. - Add idx_articles_guid index for PARTITION BY performance - Modify GetUnreadArticles and GetReadArticles queries with CTE
2026-01-11Merge pull request #1 from nsfisis/claude/add-ai-vibe-note-Wug1nnsfisis
Add AI collaboration note to project
2026-01-11docs: add AI & Vibe Coding note to READMEClaude
2025-12-07feat(frontend): update dependenciesv0.5.0nsfisis
2025-12-07refactor(graphql): change directory structurensfisis
2025-12-07feat(frontend): support PWAnsfisis
2025-12-04refactor(backend): move cmd_*.go to cmd packagev0.4.3nsfisis
2025-12-04feat(frontend): design updatensfisis
2025-12-04refactor(backend): move middleware.go to auth packagensfisis
2025-11-28feat(docker): Use distroless container as runtime containerv0.4.2nsfisis
2025-11-28refactor(backend): Move config.go to separate packagensfisis
2025-11-28fix(frontend): Fix login processingnsfisis
2025-11-08fix(frontend): Fix incorrect caching settingsv0.4.1nsfisis
2025-11-08refactor(frontend): Remove unused AuthContext.errornsfisis
2025-11-08refactor(frontend): Remove unnecessary GraphQL query callnsfisis
2025-11-08refactor(frontend): Reduce usage of useEffect()nsfisis
2025-11-08refactor(backend): Centralize environment variable loading in config.gonsfisis
2025-11-08refactor(frontend): Remove unnecessary setLocation() callnsfisis
2025-11-08refactor(frontend): Use Tailwind class instead of inlined stylensfisis
2025-11-08refactor(frontend): Simplify AuthContextTypensfisis
2025-11-08fix(frontend): Don't discard GraphQL errornsfisis
2025-11-08fix(frontend): Fix style of logout buttonnsfisis
2025-11-08feat(dev): Add .envrcv0.4.0nsfisis
2025-11-08feat: Support multi-usernsfisis
2025-10-27feat(backend): Make feeds.user_id column non-nullnsfisis
2025-10-27fix(build): Fix docker buildv0.3.5nsfisis
2025-10-27refactor(backend): split main.gov0.3.4nsfisis
2025-10-27feat(backend): create-user commandnsfisis
2025-10-27feat(backend): Create users tablensfisis