Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
194 commits
Select commit Hold shift + click to select a range
726a312
feat(tracker): integrate PostHog analytics and enhance tracking capab…
Innei Jun 5, 2025
49b876f
fix(tracker): refactor user property management and language detection
Innei Jun 5, 2025
85122fb
feat(toolbar): simply default entry tool commands
Innei Jun 5, 2025
1569172
chore: increase transition duration for fade animation
lawvs Jun 6, 2025
2ed9f70
feat(settings): enhance UI labels and descriptions for clarity
Innei Jun 6, 2025
02763ff
chore(settings): add descriptions to appearance settings and adjust l…
Innei Jun 6, 2025
83697ce
fix(entry-list): ThumbnailImage border radius
Innei Jun 6, 2025
2438f07
feat(modal): Add some settings to enable two-factor authentication wh…
Innei Jun 6, 2025
e05fc74
feat(settings): enhance appearance settings with descriptions and lay…
Innei Jun 6, 2025
e0ff343
feat(settings): enhance data export functionality and UI improvements
Innei Jun 6, 2025
0f68eca
fix: ensure pager list is always visible on Android to prevent blank …
lawvs Jun 6, 2025
3b3f280
chore: adjust copy
Innei Jun 7, 2025
3be9af2
fix: lint
lawvs Jun 7, 2025
86b2d08
fix: wrap code highlight theme selector in a view for layout consistency
lawvs Jun 7, 2025
6cb4a3e
fix: improve purchaseAmount handling for better null checks
lawvs Jun 7, 2025
5a2f8fc
fix: tweak styles for android
lawvs Jun 7, 2025
8f37d44
Merge pull request #3883 from RSSNext/sync/main-to-dev-20250608
DIYgod Jun 8, 2025
b833864
fix(meta-handler): update URL handling in injectMetaHandler to includ…
Innei Jun 8, 2025
d7e2703
feat: add loading state to entry thumbnail
lawvs Jun 8, 2025
2dc9daa
Merge pull request #3889 from RSSNext/sync/main-to-dev-20250609
DIYgod Jun 9, 2025
8fe3b37
docs: update changelog
DIYgod Jun 9, 2025
ec28399
docs: update contributor acknowledgment in changelog
DIYgod Jun 9, 2025
c578bda
fix(desktop): update unread count labels and descriptions for appeara…
kovsu Jun 9, 2025
7db6dd2
refactor(desktop): update import to use shared utils module (#3892)
kovsu Jun 9, 2025
6dcf038
fix: SquareImage not showing
lawvs Jun 9, 2025
a92bdb8
feat(user-profile): integrate user lists and subscriptions in profile…
Innei Jun 9, 2025
0750ebf
feat(footer): redesign PoweredByFooter with structured links and soci…
Innei Jun 9, 2025
33fb011
fix(markdown): update markdown rendering to use TextInput for heading…
Innei Jun 9, 2025
9f63483
feat(upgrade): add linkifyChangelog utility and update changelog rend…
Innei Jun 9, 2025
051ac49
chore: ignore type error for now
hyoban Jun 9, 2025
f0cdcaa
Revert "chore: ignore type error for now"
hyoban Jun 9, 2025
507a525
feat(profile): add user profile with bio, website, and social links
Innei Jun 9, 2025
b934d65
chore(profile): extract social media constants and functions into a s…
Innei Jun 9, 2025
4d7c01c
refactor(profile): simplify user profile modal layout and enhance use…
Innei Jun 9, 2025
ad7d191
fix: adjust some style (#3896)
huanfe1 Jun 10, 2025
e03d1ec
fix(profile): fix input box not fully width (#3898)
cscnk52 Jun 10, 2025
d39f95c
fix(desktop): can update list after create list
Innei Jun 10, 2025
c7607de
fix: unfollow before list delete
Innei Jun 10, 2025
228b4b0
feat(profile): redesign user profile modal
Innei Jun 10, 2025
0fd9298
fix(desktop): fix switch sub hotkey scope
Innei Jun 10, 2025
e6b905c
fix(list): update fetchOwnedLists to include query parameter
Innei Jun 10, 2025
d3b65ac
fix(language-selector):remove language description label on onboardin…
Innei Jun 10, 2025
784a95c
refactor(desktop): use database and store from shared package (#3897)
hyoban Jun 11, 2025
c2e0c3d
fix(mobile): auto delete database when migrate fail
hyoban Jun 11, 2025
d3f889a
refactor(desktop): use translation and readability from shared store …
hyoban Jun 11, 2025
f325da0
fix(desktop): translate content for social media
hyoban Jun 11, 2025
fa99d6f
fix(mobile): database migration (#3903)
hyoban Jun 11, 2025
b82da59
fix(mobile): catch database clone
hyoban Jun 11, 2025
0c5e7f2
fix(mobile): render entry list for every view in page list
hyoban Jun 11, 2025
68e1c24
chore(mobile): remove default for inbox secret column
hyoban Jun 11, 2025
95616e2
feat(profile): enhance user profile editing capabilities
Innei Jun 11, 2025
8c0a5be
feat(profile): add social media icons and links to user header banner
Innei Jun 11, 2025
5a63521
style(entry-list): update AspectRatioImage component with dynamic siz…
Innei Jun 11, 2025
b89c027
feat(ai-summary): implement selectable text sheet for AI summary copying
Innei Jun 11, 2025
d8f76c5
refactor(glow-effect): remove GlowEffect view and integrate animation…
Innei Jun 11, 2025
a6678c4
fix(desktop): add feed fetch
hyoban Jun 11, 2025
1864548
fix: wait entry content for translation
hyoban Jun 11, 2025
8d6489f
refactor: remove duplicated fetchEntryContentByStream
hyoban Jun 11, 2025
547a4fd
feat(mobile): lightbox (#3882)
lawvs Jun 12, 2025
b9936b8
fix: bring back changes in create and update list
hyoban Jun 12, 2025
cb4ed60
fix: adjust layout for ThumbnailImage
lawvs Jun 12, 2025
eb24166
chore: use localStorage for dev database
hyoban Jun 12, 2025
03cfbbc
chore: still use sqlite in db for electron
hyoban Jun 12, 2025
f928707
feat(desktop): export sqlite database
hyoban Jun 12, 2025
be45c9b
chore: export db name
hyoban Jun 12, 2025
52dd557
refactor(desktop): remove old database and service (#3911)
hyoban Jun 12, 2025
37ec87b
fix(discover): borken style in discover page (#3905)
kovsu Jun 12, 2025
a42ae14
feat(settings): add 'Hide Extra Badge' option to appearance settings …
Innei Jun 12, 2025
20d8590
fix(auth): add support for dark mode icons in login components
Innei Jun 12, 2025
70255af
refactor(dock): implement PollingManager for unread count updates, fi…
Innei Jun 12, 2025
0741d75
fix(docs): the link to the stars badge has been replaced (#3912)
Olexandr88 Jun 12, 2025
24cf4ce
chore(deps): bump stefanzweifel/git-auto-commit-action from 5 to 6 (#…
dependabot[bot] Jun 12, 2025
b69ead1
fix: update schema
Innei Jun 12, 2025
745abec
fix: update UI components and improve keyboard handling
Innei Jun 12, 2025
9801006
refactor: electron bundle all language to fix #3909
Innei Jun 12, 2025
b326501
chore: unify i18n resolve in dev
Innei Jun 12, 2025
e3f27dd
fix: text shift in TextInput for android
lawvs Jun 12, 2025
4523c10
fix: follow feed screen layout shift
lawvs Jun 12, 2025
4fa8731
fix: update icon colors to use theme color in follow feed
lawvs Jun 12, 2025
182adb3
fix: reset service
hyoban Jun 13, 2025
24ae065
fix: sort entries by publishedAt and insertedAt
hyoban Jun 13, 2025
c6fb520
fix(desktop): more reading history
hyoban Jun 13, 2025
711b0f1
fix: store time as timestamp_ms
hyoban Jun 13, 2025
e386a72
fix: all timestamp_ms for database
hyoban Jun 13, 2025
ec0d861
refactor: optimize entry selection in ListItem component
Innei Jun 13, 2025
cf72753
feta: redesign image previewer, fixed #3884
Innei Jun 13, 2025
d6bdcee
fix: hide entry navigation button in no timeline view
Innei Jun 13, 2025
65ebf9e
fix: sqlite wasm in electron production (#3920)
hyoban Jun 13, 2025
8f6113b
chore: update user database with character limits for fields
Innei Jun 13, 2025
3578188
fix(ssr):can't follow system theme switch issuse (#3917)
0-o0 Jun 13, 2025
b6bccdf
refactor: update layout structure in SubviewLayout and enhance render…
Innei Jun 13, 2025
1ac1d46
fix: mobile subview overflow, fixed #3886
Innei Jun 13, 2025
1ad0312
fix: remove coop & coep header, use localStorage for web for now
hyoban Jun 13, 2025
146d9b4
fix: fallback to OPFS_SAH when SharedArrayBuffer isn't available (#3924)
hyoban Jun 14, 2025
4ffc026
refactor: improve ThumbnailImage layout
lawvs Jun 14, 2025
fa78bad
fix: replace View with Animated.View for animations in ImageView comp…
lawvs Jun 14, 2025
e5b8705
fix: enhance text selection support for Android in summary
lawvs Jun 15, 2025
f161297
fix: sqlocal multi tab support (#3943)
hyoban Jun 16, 2025
f5e9c9c
docs: update mobile app development steps in contributing guide (#3938)
kingsword09 Jun 16, 2025
cca1a9f
fix: icon can't follow theme switch correctly (#3922)
0-o0 Jun 16, 2025
9af1b0e
feat: don't show the group entries when click the > button on desktop…
cscnk52 Jun 16, 2025
2ba7dde
feat(locales): update zh-CN translations (#3941)
ericyzhu Jun 16, 2025
3d82854
fix(desktop): sync dock badge with unread count
hyoban Jun 16, 2025
c5afb83
fix(desktop): update dock badge handling based on UI settings
Innei Jun 16, 2025
9febfef
fix(desktop): ui stuck when setting unread count
hyoban Jun 16, 2025
5395746
refactor(desktop): use summary from store package (#3944)
hyoban Jun 16, 2025
95b23c3
refactor: move image sync service to mobile, bring hydration back
hyoban Jun 16, 2025
1ace5ea
refactor(action): replace ActionCard with RuleCard and restructure ac…
Innei Jun 16, 2025
394d00f
feat: support share actions and import from clipboard
Innei Jun 16, 2025
c9dc642
feat(action): add empty state placeholder for action rules
Innei Jun 16, 2025
671750b
fix(action): action button group with dynamic labels and disabled states
Innei Jun 16, 2025
5ddf4b8
refactor(action): enhance ActionSetting layout and styling
Innei Jun 16, 2025
f9aca60
refactor(ui): re-design rsshub page ui
Innei Jun 16, 2025
7b3ec02
feat(ui): enhance user interface with new components and layout impro…
Innei Jun 16, 2025
423f129
refactor(entry-content): handle entry actions, fixed #3841
Innei Jun 16, 2025
ed752c5
refactor(ui): extract shared ui components
Innei Jun 16, 2025
67180d3
fix(marquee): improved antimate effect (#3937)
cscnk52 Jun 16, 2025
704c11d
feat(discover): add SimpleDiscoverModal for enhanced feed discovery
Innei Jun 16, 2025
5ff76b5
fix(desktop): the expanded state is reset
hyoban Jun 17, 2025
e0f03e1
fix(desktop): update sqlocal, better compatibility, use opfs sah
hyoban Jun 17, 2025
072f503
refactor(feed): optimize feed display and error handling
Innei Jun 17, 2025
4953caf
feat(header): re-design share header
Innei Jun 17, 2025
bd4a921
feat(share): group un-categorized subscription
Innei Jun 17, 2025
e25451a
fix: prevent image rendering error in ThumbnailImage
lawvs Jun 17, 2025
8130bbc
feat(avatar-upload): implement avatar upload modal and related functi…
Innei Jun 17, 2025
71dc626
fix: simplify NoContent component usage in EntryContent
lawvs Jun 18, 2025
b72ab7d
fix(avatar-upload): cropping functionality keep aspect
Innei Jun 18, 2025
c51639b
chore(settings): add avatar update feedback with success and error no…
Innei Jun 18, 2025
7e3e1c7
feat(avatar-upload): add preset cropping options in AvatarUploadModal
Innei Jun 18, 2025
472ee72
fix(parse-html): add TypeScript ignore for math node handling
Innei Jun 18, 2025
7a74ebe
fix(desktop): excludePrivate not working for local change
hyoban Jun 18, 2025
1de43e1
fix(desktop): enhance scroll behavior when navigating between Discove…
kovsu Jun 18, 2025
e3deb2e
fix(dayjs): fix relative time not follow language change (#3932)
cscnk52 Jun 18, 2025
f108a45
feat: delete or rename category for mobile, improve local data update…
hyoban Jun 18, 2025
8f66d91
feat: changeCategoryView for mobile, better local data update
hyoban Jun 18, 2025
c5bb563
chore: fix import in web app html-render
hyoban Jun 18, 2025
b5478d8
chore: add typecheck for rn-micro-web-app
hyoban Jun 18, 2025
f01baf9
fix: enhance NativeWebView to handle window opening and improve URL p…
lawvs Jun 19, 2025
102d8bf
fix: update GroupedInsetListCard style for improved android layout
lawvs Jun 19, 2025
079b0fe
fix: adjust shadow style for header elevation in SubviewLayoutInner
Innei Jun 19, 2025
fd7f57e
fix: update header shadow style and clean up user query logic
Innei Jun 19, 2025
69851eb
fix: add color prop to User3CuteReIcon in Trending component
lawvs Jun 19, 2025
524ad05
feat: enhance scroll interactions in TimelineSelector (#3952)
lawvs Jun 19, 2025
8a4edf9
fix: get folder feed ids
hyoban Jun 19, 2025
d71b2e8
fix: use batch api for change category view
hyoban Jun 19, 2025
8a65dda
refactor: `<Media />` with improved image source handling and error m…
Innei Jun 19, 2025
15b8d79
fix: local data update for batchUpdateSubscription
hyoban Jun 19, 2025
2ea0725
feat: enhance media preview with drag-to-close functionality and anim…
Innei Jun 19, 2025
2c04919
fix: can not follow list in preview, close #3895
hyoban Jun 19, 2025
f3487ac
fix: entries stream 401 (#3959)
hyoban Jun 19, 2025
27021df
refactor: Introduce WindowManager for centralized window management
Innei Jun 19, 2025
61d5611
fix: adjust padding in Wrapper component top inset in windows app
Innei Jun 19, 2025
b6ec2a0
feat: implement application lifecycle and window management
Innei Jun 19, 2025
710622a
feat: add filter video length action (#3960)
pseudoyu Jun 19, 2025
1d83313
feat: add vite-plugin-route-builder for dynamic route generation
Innei Jun 19, 2025
f372b2f
refactor: migrate from tsup to tsdown for build process
Innei Jun 19, 2025
e65a5f8
fix: update isDev environment variable to use NODE_ENV
Innei Jun 19, 2025
e8dd69e
fix: prevent link navigation for image-only children
lawvs Jun 19, 2025
1e13fda
chore: update hono type
hyoban Jun 20, 2025
20858f6
chore: do not ignore generated-routes.ts to pass type check
hyoban Jun 20, 2025
eb3f663
refactor: improve action config type safe
hyoban Jun 20, 2025
ab9dd3c
chore: ignore generated-routes.ts in prettier
hyoban Jun 20, 2025
018f371
chore: ignore generated-routes.ts in eslint
hyoban Jun 20, 2025
b3dfeee
refactor: restrict value in action config type
hyoban Jun 20, 2025
e54cb16
chore: add OPFS Explorer extension
hyoban Jun 20, 2025
447ad32
fix: show main window when hide to active
Innei Jun 20, 2025
73f8011
feat: re-design toast style
Innei Jun 20, 2025
9f0e752
feat: update vite-plugin-route-builder and related configurations
Innei Jun 20, 2025
6d76d6b
chore: update dependencies and improve type safety
Innei Jun 20, 2025
412dfe4
feat: add header button design system documentation
Innei Jun 20, 2025
f9595ff
fix: compatible with android for summary modal
lawvs Jun 20, 2025
6a7ebd2
chore(mobile): upgrade dependencies for mobile (#3971)
lawvs Jun 21, 2025
de8eac8
fix(link): fix link start with '.' don't handle proper
cscnk52 Jun 22, 2025
a76eb27
fix: simplify
cscnk52 Jun 22, 2025
36f05b6
Merge pull request #3978 from cscnk52/link
Innei Jun 23, 2025
fbe1de4
fix: wrap SelectableTextSheet in a View to prevent rendering errors o…
lawvs Jun 23, 2025
0a012dc
fix: prevent unnecessary scroll when not dragging in PagerList
lawvs Jun 23, 2025
4baf1fa
chore: fix inconsistent versions of expo-sqlite
DIYgod Jun 23, 2025
c474c9c
Merge pull request #3984 from RSSNext/sync/main-to-dev-20250623
DIYgod Jun 23, 2025
d74cea5
fix: lint
DIYgod Jun 23, 2025
5927697
chore: format
DIYgod Jun 23, 2025
f95124c
chore: downgrade electron-forge
hyoban Jun 23, 2025
82952b0
fix: can not play tts, close #3877
hyoban Jun 23, 2025
22e988c
Merge branch 'dev' into sync/main-to-dev-20250623
Innei Jun 23, 2025
2dba4d5
Merge pull request #3988 from RSSNext/sync/main-to-dev-20250623
Innei Jun 23, 2025
bcf4f78
release(mobile): release v0.2.2
Innei Jun 23, 2025
abbc8ca
fix: collection is not up to date (#4009)
hyoban Jun 26, 2025
8836522
fix: clear collection form entries fetch
hyoban Jun 26, 2025
2bbe512
fix: try credentials: "omit"
hyoban Jun 26, 2025
1d13370
fix: tweak style for proper layout on Android
lawvs Jun 23, 2025
1f7a2c8
fix: update content view class name in SafeNavigationScrollView usage
lawvs Jun 24, 2025
36b8cde
refactor: improve layout in TimelineViewSelector
lawvs Jun 24, 2025
b844df5
docs(mobile): update changelog
DIYgod Jun 28, 2025
fc6f2a3
chore(mobile): update version
DIYgod Jun 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
27 changes: 27 additions & 0 deletions .cursor/rules/app.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
description:
globs:
alwaysApply: true
---
You are writing a UI modernized, AI-driven, user-friendly RSS reader.

This project is a monorepo for web front-end electron and React Native.

Using Stack:

## For Web/Electron Render

- React 19
- Framer Motion (Lazy motion, you should use `m`)
- Jotai
- Zustand
- Indexeddb
- TailwindCSS 3

Before starting, you need to know the current technical stack structure and the construction of the monorepo. Read tailwindcss to understand the design style.

## For React Native

- React 19
- Expo
- Expo Module Core (Some Native modules included)
112 changes: 112 additions & 0 deletions .cursor/rules/base.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
---
description:
globs:
alwaysApply: true
---
# Role

Act as a highly experienced software developer and coding assistant. You are proficient in all major programming languages and frameworks. Your user is an independent developer working on personal or freelance projects. Focus on generating high-quality code, optimizing performance, and debugging issues.

---

# Objective

Efficiently assist the user in writing and improving code, proactively solving technical issues without needing repeated prompting. Focus on the following core tasks:

- Writing code
- Optimizing code
- Debugging and issue resolution

Ensure all solutions are clearly explained and easy to understand.

---

## Phase 1: Initial Assessment

1. When the user requests a task, check for existing documentation (e.g., `README.md`) to understand the project.
2. If no documentation is found, generate a `README.md` with project features, usage instructions, and key configuration parameters.
3. Use all available context (uploaded files, existing code) to ensure technical alignment with the user's needs.

---

## Phase 2: Implementation

### 1. Clarify Requirements
- Confirm user requirements clearly. Ask questions when uncertain.
- Suggest the simplest effective solutions, avoiding unnecessary complexity.

### 2. Writing Code
- Review existing code and outline implementation steps.
- Choose the appropriate language and framework. Follow best practices (e.g., SOLID principles).
- Write clean, readable, and commented code.
- Optimize for clarity, maintainability, and performance.
- Include unit tests when applicable.
- Follow standard language-specific style guides (e.g., PEP 8 for Python, Airbnb for JavaScript).

### 3. Debugging and Issue Resolution
- Diagnose problems methodically to identify root causes.
- Clearly explain the issue and proposed fix.
- Keep the user informed of progress and adapt quickly to changes.

---

## Phase 3: Completion and Summary

1. Summarize key changes and improvements.
2. Highlight potential risks, edge cases, or performance concerns.
3. Update documentation (e.g., `README.md`) accordingly.

---

# Best Practices

### Sequential Thinking (Step-Based Problem Solving Framework)

Use the [Sequential Thinking](https://github.com/smithery-ai/reference-servers/tree/main/src/sequentialthinking) tool to guide step-by-step problem solving, especially for complex, open-ended tasks.

- Break tasks into **thought steps** using the Sequential Thinking protocol.
- For each step, follow this structure:
1.**Define the current goal or assumption** (e.g., "Evaluate authentication options", "Refactor state handling").
2.**Use a suitable MCP tool** based on context (e.g., `search_docs`, `code_generator`, `error_explainer`).
3.**Record the result/output** clearly.
4.**Determine the next thought step** and continue.

- When uncertainty exists:
- Explore multiple solution paths using "branch thinking".
- Compare trade-offs or competing strategies.
- Allow rollback or edits to previous thought steps.

- Use metadata such as:
-`thought`: current thought text
-`thoughtNumber`: current step index
-`totalThoughts`: number of expected steps

- Encourage interactive feedback and continuous iteration throughout the sequence.

### Context7 (Up-to-Date Documentation Integration)

Utilize [Context7](https://github.com/upstash/context7) to fetch and integrate the latest, version-specific documentation and code examples directly into your development environment.

-**Purpose**: Ensure that AI-generated code references current APIs and best practices, reducing errors from outdated information.

-**Usage**:
1.**Invoke Context7**: Add `use context7` to your prompt to trigger Context7's integration.
2.**Fetch Documentation**: Context7 retrieves relevant, up-to-date documentation snippets for the libraries or frameworks in use.
3.**Integrate Snippets**: Incorporate the fetched code examples and documentation into your codebase as needed.

-**Integration**:
- Compatible with MCP clients like Cursor, Windsurf, Claude Desktop, and others.
- Configure your MCP client to include Context7 as a server, enabling seamless access to documentation within your development workflow.

-**Benefits**:
- Reduces reliance on outdated training data.
- Minimizes code hallucinations and deprecated API usage.
- Enhances code accuracy and relevance.

---

# Communication

- Ask questions when clarification is needed.
- Remain concise, technical, and helpful.
- Include inline code comments where necessary.
2 changes: 1 addition & 1 deletion .cursor/rules/color.mdc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
description:
globs:
globs: apps/desktop/**/*,packages/internal/components/**/*
alwaysApply: false
---
# UIKit Colors for Tailwind CSS
Expand Down
135 changes: 135 additions & 0 deletions .cursor/rules/header-button-design.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
---
description:
globs:
alwaysApply: false
---
# Header Button Design System

When creating header buttons for media previews, overlays, or modal interfaces, follow this modern glass morphism design pattern:

## Design Principles

### 1. Glass Morphism Style
- Use semi-transparent backgrounds: `bg-black/20` or `bg-white/10`
- Apply backdrop blur: `backdrop-blur-md`
- Add subtle borders: `border border-white/10` for depth
- Include shadow layers: `shadow-lg shadow-black/25`

### 2. Perfect 1:1 Circular Design
- Always use `size-10` (40px × 40px) for consistent sizing
- Apply `rounded-full` for perfect circular shape
- Ensure proper centering with `flex items-center justify-center`

### 3. Layered Depth Effects
```tsx
{/* Glass effect overlay */}
<div className="absolute inset-0 rounded-full bg-gradient-to-t from-white/5 to-white/20 opacity-0 transition-opacity duration-300 hover:opacity-100" />

{/* Icon container */}
<div className="center relative z-10 flex">{children}</div>

{/* Subtle inner shadow for depth */}
<div className="absolute inset-0 rounded-full shadow-inner shadow-black/10" />
```

### 4. Interactive Animation
- Use Framer Motion `m.button` for smooth animations
- Scale on hover: `whileHover={{ scale: 1.1 }}`
- Scale on tap: `whileTap={{ scale: 0.95 }}`
- Spring transitions: `stiffness: 400, damping: 30`

### 5. Opacity and Visibility
- Start hidden: `opacity-0`
- Show on group hover: `group-hover/left:opacity-100`
- Use `transition-all duration-300 ease-out` for smooth reveals

## Implementation Pattern

```tsx
const HeaderButton: FC<{
description?: string
onClick: () => void
className?: string
children: React.ReactNode
}> = ({ description, onClick, className, children }) => {
return (
<Tooltip>
<TooltipTrigger asChild>
<m.button
type="button"
onClick={(e) => {
e.stopPropagation()
onClick()
}}
className={cn(
// Base styles with modern glass morphism - perfect 1:1 circle
"pointer-events-auto relative flex size-10 items-center justify-center rounded-full",
"bg-black/20 text-white backdrop-blur-md",
// Border and shadow for depth
"border border-white/10 shadow-lg shadow-black/25",
// Opacity and transition
"opacity-0 transition-all duration-300 ease-out group-hover/left:opacity-100",
// Text size
"text-lg",
className,
)}
initial={{ scale: 1 }}
whileHover={{
scale: 1.1,
backgroundColor: "rgba(255, 255, 255, 0.15)",
borderColor: "rgba(255, 255, 255, 0.2)",
}}
whileTap={{ scale: 0.95 }}
transition={{
type: "spring",
stiffness: 400,
damping: 30,
}}
>
{/* Glass effect overlay */}
<div className="absolute inset-0 rounded-full bg-gradient-to-t from-white/5 to-white/20 opacity-0 transition-opacity duration-300 hover:opacity-100" />

{/* Icon container */}
<div className="center relative z-10 flex">{children}</div>

{/* Subtle inner shadow for depth */}
<div className="absolute inset-0 rounded-full shadow-inner shadow-black/10" />
</m.button>
</TooltipTrigger>
{description && (
<TooltipPortal>
<TooltipContent>{description}</TooltipContent>
</TooltipPortal>
)}
</Tooltip>
)
}
```

## Special Variants

### Close Button (Danger State)
```tsx
className="!bg-red-600/30 !border-red-500/20 !opacity-100 hover:!bg-red-600/50"
```

### Navigation Buttons (Carousel Controls)
- Use smaller sizes: `size-8` for mobile, `lg:size-10` for desktop
- Position absolutely with proper spacing: `left-2 lg:left-4`
- Maintain same glass morphism principles

## Usage Guidelines

1. **Always use with tooltips** for accessibility
2. **Include stopPropagation** on click handlers to prevent modal dismissal
3. **Make description optional** for navigation buttons that don't need tooltips
4. **Use consistent icon sizing**: `text-lg` for standard, `lg:text-xl` for larger variants
5. **Apply proper z-index**: `z-[100]` for overlay buttons
6. **Group hover patterns**: Use `group-hover/left:opacity-100` for contextual visibility

## Icons
- Always use icons from `@/icons` directory (project standard)
- Common patterns: `i-mgc-close-cute-re`, `i-mgc-external-link-cute-re`, `i-mgc-download-2-cute-re`
- Navigation: `i-mingcute-left-line`, `i-mingcute-right-line`

This design system ensures consistent, modern, and accessible header buttons across all media preview and overlay interfaces.
12 changes: 12 additions & 0 deletions .cursor/rules/rn.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
description:
globs: apps/mobile/**/*
alwaysApply: false
---
1. This is an app written in React native.

2. You need to use @/apps/mobile/icons for icons, do not use other icon libraries.

3. You need to use NativewindCSS to write styles, not external StyleSheet.create.

4. You need to use https://github.com/Innei/apple-uikit-colors/tree/main/packages/react-native-uikit-colors for color design.
2 changes: 1 addition & 1 deletion .cursor/rules/web-component.mdc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
description:
globs:
globs: apps/desktop/layer/renderer/src/**/*
alwaysApply: false
---
You need to find the available UI components in the project.
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/auto-fix-lint-format-commit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:

- name: Commit and push changes
if: steps.check_changes.outputs.has_changes == 'true' || env.has_changes == 'true'
uses: stefanzweifel/git-auto-commit-action@v5
uses: stefanzweifel/git-auto-commit-action@v6
with:
commit_message: "chore: auto-fix linting and formatting issues"
commit_options: "--no-verify"
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/build-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:
- "**"
paths:
- "apps/desktop/**"
- "packages/**"
- "pnpm-lock.yaml"
- ".github/workflows/build-desktop.yml"
workflow_dispatch:
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ jobs:
cache: "pnpm"
- name: Install dependencies
run: pnpm install
- name: Build web and SSR server
run: |
npm exec turbo run Folo#build:web @follow/ssr#build
- name: Format, Lint and Typecheck
run: |
export NODE_OPTIONS="--max_old_space_size=16384"
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,6 @@ vite.config.*.mjs

apps/desktop/src/renderer/dev-dist
tsconfig.tsbuildinfo
buildServer.json
buildServer.json

**/**/generated-routes.ts
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ apps/mobile/android
apps/mobile/ios
apps/mobile/native/example

generated-routes.ts
10 changes: 8 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,20 @@ To develop in the mobile app, follow these steps:
cd apps/mobile
```

2. Build and install Folo(dev) app from source: (This step will take a while and only need to be done once)
2. Copy the example environment variables file:

```sh
cp .env.example .env
```

3. Build and install Folo(dev) app from source: (This step will take a while and only need to be done once)

```sh
pnpm expo prebuild --clean # Optional
pnpm run ios
```

3. Run the development server:
4. Run the development server:

```sh
pnpm run dev
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<img src="https://github.com/user-attachments/assets/6997a236-3df3-49d5-98a4-514f6d1a02c4" height="60" />
<br />
<br />
<a href="https://github.com/RSSNext/Folo/graphs/contributors"><img src="https://img.shields.io/github/stars/RSSNext/Follow?color=ffcb47&labelColor=black&style=flat-square&logo=github&label=Stars" /></a>
<a href="https://github.com/RSSNext/Folo/stargazers"><img src="https://img.shields.io/github/stars/RSSNext/Follow?color=ffcb47&labelColor=black&style=flat-square&logo=github&label=Stars" /></a>
<a href="https://github.com/RSSNext/Folo/graphs/contributors"><img src="https://img.shields.io/github/contributors/RSSNext/Folo?style=flat-square&logo=github&label=Contributors&labelColor=black" /></a>
<a href="https://status.follow.is/" target="_blank"><img src="https://status.follow.is/api/badge/18/uptime?color=%2344CC10&labelColor=black&style=flat-square"/></a>
<a href="https://github.com/RSSNext/Folo/releases"><img src="https://img.shields.io/github/downloads/RSSNext/Folo/total?color=369eff&labelColor=black&logo=github&style=flat-square&label=Downloads" /></a>
Expand Down
3 changes: 3 additions & 0 deletions apps/desktop/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@ VITE_OPENPANEL_CLIENT_ID=
VITE_OPENPANEL_API_URL=

VITE_EDITOR=cursor

VITE_PUBLIC_POSTHOG_KEY=
VITE_PUBLIC_POSTHOG_HOST=
4 changes: 4 additions & 0 deletions apps/desktop/changelog/0.5.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,7 @@
- “Mark as read” button is now perfectly centred (#3836)
- Entry list no longer displays stale cached items (0a167ac)
- Squashed numerous shortcut-key bugs

## Thanks

Special thanks to external contributors @ericyzhu @kovsu @yeeway0609 @cscnk52 for their valuable contributions
Loading
Loading