* chore(infra): migrate desktop web from Vercel to Cloudflare Workers
Replaces separate Vercel deployments (follow SPA + follow-external-ssr) with unified Cloudflare Workers + Assets deployment. Implements meta tag injection, OG image generation, and environment variable management in Hono-based Worker. Adds GitHub Actions CI/CD for automatic deployment on push to dev/main branches.
- Replace Fastify with Hono for Cloudflare Workers compatibility
- Create Worker entry point with SSR routes and SPA fallback
- Add AsyncLocalStorage-based request context shim
- Implement WASM-based OG image rendering with R2 font storage
- Split SPA and SSR routing: /share/* and auth routes use SSR, others fallback to SPA
- Add Cloudflare wrangler configuration with dev/prod environments
- Create GitHub Actions workflow for automated deployments
- Add build scripts for font data and WASM patching
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(ssr): exclude worker files from typecheck and fix tsdown config
Worker-specific files (*.worker.ts) use Cloudflare Workers types and
generated modules that aren't available during the main tsc typecheck.
Exclude them from tsconfig since they're only used via tsdown aliases.
Also fix broken path.resolve reference in tsdown.worker.config.ts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(path): change path package to pathe
* fix: handle special chat in filename, fixed
#3342
- Integrated @sindresorhus/slugify to format file names based on titles.
- Updated pnpm-lock.yaml to include new dependencies.
- Minor adjustments in package.json files to ensure consistency.
Signed-off-by: Innei <tukon479@gmail.com>
* fix: add eslint rule for use pathe first
* refactor: useWhoami from user store (#4061)
* refactor: useWhoami from user store
* update
* update
* update
* update
* return all
* fix: invalidate entries query after unsubscribe
* feat: implement imperative modal (#4041)
* feat: implement ImperativeModalProvider with modal context and controls
* fix: make onClose prop optional for bottom modal
* chore: add ImperativeModalProvider to context providers
* feat: wrap BottomModal content in KeyboardAvoidingView for better keyboard handling
* chore: add polyfill for Promise.withResolvers
* fix: wrap ImperativeModal in a View and update onClose to accept modal ID
* feat: implement ImperativeModal with context and modal control hooks
* refactor: redesign imperative modal with root-siblings
* fix: wrap BottomModal in a View to resolve rendering issues on Android
* refactor: replace Alert.prompt with modalPrompt for category creation and renaming
* fix(desktop): show login modal when auth fail
* feat: invalidate entry readability cache
* refactor: long press to open text select sheet for ai summary
* feat: new domain folo.is
* fix: enhance auth client with mobile-specific headers (#4064)
* feat(desktop): add missing i18n key (#4066)
* feat: update twitter handle
* docs: use google play badge
* feat: add hideAvatar prop to ProfileSettingForm for conditional avatar display
Signed-off-by: Innei <tukon479@gmail.com>
* docs: update images
* feat(ssr): add Google Analytics tracking to index.html
- Integrated Google Tag Manager for enhanced tracking and analytics capabilities.
- Added asynchronous loading of gtag.js and configuration for tracking ID G-DZMBZBW3EC.
Signed-off-by: Innei <tukon479@gmail.com>
* chore: Update Japanese Languages (#4078)
* chore: update ja.json
* chore: update 6 ja.json files
chore: update and bump 6 ja.json files.
* chore: update error/ja.json
fix locale/error/ja.json
* chore: auto-fix linting and formatting issues
* chore: update app/ja.json
* chore: update ja.json
* chore: update ja.json
* chore: update ja.json and tested local.
* chore: update ja.json
update settings/ja.json
* feat(i18n): update Japanese locale files with new error messages and dialog options
* chore(vscode): set default formatter for JSON and JSONC files
* Remove JSON and JSONC formatter settings
so sorry, @hyoban 😢
Perhaps my local settings are in. I have restored it to the original. Thanks for your kindness.
You have always been a great help.
* chore: auto-fix linting and formatting issues
* chore: update ja.json
sync and update settings/ja.json
* chore: update Japanese translations for clarity and consistency
* chore: update some ja.json
* chore(locales): update Japanese translations with new entry actions and settings
* fix: update Japanese translations for user actions and login prompts
* feat(locales): add Japanese translations for login and registration features
* feat(locales): update Japanese translations for RSSHub and related settings
* chore: auto-fix linting and formatting issues
* feat(i18n): update Japanese locale with new toolbar customization and profile link social fields
* feat(locales): update Japanese translations for search results and two-factor authentication
* feat: 日本語ローカライズの更新
---------
Co-authored-by: dai <dai@users.noreply.github.com>
Co-authored-by: Innei <i@innei.in>
Co-authored-by: Innei <Innei@users.noreply.github.com>
* feat(desktop): real user deletion
* feat(mobile): real user deletion
* feat(settings): add accent color customization and update UI components
- Introduced accent color setting to allow users to customize the app's interface.
- Updated various components to utilize the new accent color, including buttons, sliders, and text elements.
- Added translations for accent color settings in English, Japanese, and Chinese.
- Refactored related styles in Tailwind CSS configuration to support the new accent color feature.
Signed-off-by: Innei <tukon479@gmail.com>
* fix: update text styling for feed parameters message
* feat: use insertedBefore for mark above read
* feat(mobile): use insertedBefore for mark above read
* fix: improved lightbox component for iOS (#4089)
* feat: replace Image component with ProxyImage for improved performance and styling
* fix: update Image component style prop
* fix: improved layout in ImageItem component
* feat: integrate animated ref for media preview in EntryPictureItem
* fix: option can not be press when out of screen in the FlatList
* fix: lint
* fix: types
* fix: update lock
* fix: lint
* chore: auto-fix linting and formatting issues
---------
Signed-off-by: Innei <tukon479@gmail.com>
Co-authored-by: Innei <tukon479@gmail.com>
Co-authored-by: Stephen Zhou <38493346+hyoban@users.noreply.github.com>
Co-authored-by: Whitewater <me@waterwater.moe>
Co-authored-by: lawvs <18554747+lawvs@users.noreply.github.com>
Co-authored-by: DIYgod <i@diygod.me>
Co-authored-by: Konv Suu <2583695112@qq.com>
Co-authored-by: dai <dosada@gmail.com>
Co-authored-by: dai <dai@users.noreply.github.com>
Co-authored-by: Innei <i@innei.in>
Co-authored-by: Innei <Innei@users.noreply.github.com>
* chore: fix prettier error
* refactor: migrate to ES modules and update global constants handling
- Changed the global constants definition to use Object.assign for better clarity.
- Replaced usage of `isDev` with `__DEV__` throughout the codebase for consistency.
- Updated imports to use ES module syntax, including dynamic imports where necessary.
- Removed the deprecated `env.ts` file and adjusted related logic in the build scripts.
- Ensured compatibility with ES module format in various files, including Vite and API client configurations.
Signed-off-by: Innei <tukon479@gmail.com>
* refactor(api): migrate handler to ES module syntax
- Updated the API handler to use ES module export syntax.
- Removed commented-out configuration for Node.js runtime.
Signed-off-by: Innei <tukon479@gmail.com>
* feat(404): enhance 404 page with animations and improve accessibility
- Replaced `motion` components with `m` shorthand for better readability.
- Introduced animation controls for various elements on the 404 page to enhance user experience.
- Updated the glitch text array for consistency.
- Adjusted layout and styling for improved visual presentation.
- Removed unused `framer-lazy-feature` file and updated `MotionProvider` to use `domMax` for performance optimization.
Signed-off-by: Innei <tukon479@gmail.com>
* feat(og): replace Folo text with SVG logo in OGCanvas component
- Updated the OGCanvas component to replace the static "Folo" text with a new LogoText SVG component for improved branding.
- Added the LogoText function that defines the SVG structure for the logo.
Signed-off-by: Innei <tukon479@gmail.com>
* refactor(tsdown): update font imports to use dynamic loading
- Modified font imports in `tsdown.config.ts` to utilize dynamic loading with `then` for improved performance and error handling.
- Introduced a no-operation function to handle the promise resolution of font imports.
Signed-off-by: Innei <tukon479@gmail.com>
* refactor(404): replace Jotai provider with RootProviders for improved context management
- Updated the 404 component to use `RootProviders` instead of the Jotai store provider for better context handling.
- Simplified the component structure while maintaining functionality.
Signed-off-by: Innei <tukon479@gmail.com>
---------
Signed-off-by: Innei <tukon479@gmail.com>