211 Commits

Author SHA1 Message Date
DIYgod 2b32696e3a fix: translate the auth server's answer to too many sign-up, link or reset emails
Sign-up, sign-in links, password resets, verification and email change emails now answer 429
TOO_MANY_REQUESTS. Desktop, mobile and the web login pages show it translated, Electron sign-up
shows its refusals at all, and mobile's reset mail from settings no longer claims it was sent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 07:47:54 +08:00
DIYgod 8e771fdd5e fix(web): say why a sign-in link or a provider sign-in was refused
A sign-in link for a 2FA account now comes back with ?error=TWO_FACTOR_REQUIRED, and provider
sign-ins pass errorCallbackURL, so account_not_linked returns to the app instead of the API's
error page. The web app and the login page show the reason, translated, and drop the parameter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 07:47:54 +08:00
DIYgod c51c066b5a fix(desktop): bundle the SN Pro font files in production builds
Choosing SN Pro as the global or content font did nothing on the web:
the production Tailwind pass rewrites the whole stylesheet and drops the
font CSS's relative url()s, so no font file was emitted and each request
got index.html. The font CSS is now imported from JS on its own, in the
renderer and the SSR client.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 15:07:41 +08:00
DIYgod 77450d935b fix(ssr): show the signed-in user on the login page
The user provider writes the session user in an effect of the same
commit that mounts the login page's avatar, and jotai 3 subscribes
after that commit, so the avatar kept reading no user and the signed-in
view never showed who was signed in. Read whoami with
useAtomValueRawSync.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 08:48:42 +08:00
DIYgod 70ccaf2de2 fix(ssr): retry the CJK font after it fails to load for previews
The share preview worker cached its font list on the first image even
when loading the CJK font from R2 had failed, so after one R2 error the
worker rendered every preview without it until it restarted, leaving
Chinese and Japanese titles without glyphs in images cached for an hour.
Keep the list only once the CJK font is in it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:17:59 +08:00
DIYgod 3e348d45c8 fix(landing): let people zoom the website and share pages
The landing site and the share pages told the browser not to allow zoom
(user-scalable=no, maximum-scale=1), so people with low vision couldn't
pinch to zoom the home, download, pricing or share pages, which fails
WCAG 1.4.4. Keep the device width and initial scale only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:14:06 +08:00
DIYgod 2af0fd860e fix(ssr): keep entry images in the natural tab order and silent
Every entry image on the share pages had tabIndex 1, so the first Tab
presses went through all images before the header, the Follow button
and the links, and the images had no alt text, so screen readers read
their URLs. The placeholder's aspect ratio was also inverted. Make only
clickable images focusable in the normal order, give the illustrations
an empty alt and use width over height.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:13:46 +08:00
DIYgod 7dee764043 fix(ssr): skip deleted feeds on a shared list
A list keeps the ids of feeds that were deleted since, which the API
returns no data for, and the shared list page read the missing feed's
id and crashed with an application error. Show only the feeds that
still exist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:13:08 +08:00
DIYgod 2bd1b03c90 fix(ssr): answer 404 for missing share pages and show why they failed
Share pages only recognized not found errors from ofetch, but the API
client throws FollowAPIError, so missing feeds, lists and profiles were
served with status 200 and indexed as soft 404s. In the browser the feed
page then kept spinning and the list page stayed blank, also when the
API failed for another reason.

Treat API 404s as not found and pass other API statuses on, and show
the not found page or a translated retry view on the feed and list
pages, sharing the profile page's view.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:12:17 +08:00
DIYgod 8bc17a456f fix(ssr): render share previews for feeds with an ICO icon
Feed, list and user preview images embedded any image/* response as
the avatar. Feeds without an image use their site's favicon, often an
ICO file, which the renderer can't draw, so the whole preview failed
and the route answered 404; feeds like Hacker News had no preview when
shared. Any API failure was also reported as 404.

Embed only formats the renderer draws, render again with the initials
if the avatar still fails, and answer 404 only for a missing feed or
list, letting other API failures surface as server errors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:08:39 +08:00
DIYgod cd2074c724 fix(ssr): render shared list entries with their own feeds
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 00:04:33 +08:00
DIYgod 2f392594d5 chore(deps): refresh dependencies and verify affected app flows 2026-09-22 16:20:40 +08:00
DIYgod 110960a6f0 fix(ssr): restore shared user profiles 2026-07-25 15:06:20 +08:00
DIYgod cf224d63f5 fix(ssr): escape hydration data in inline scripts 2026-07-25 12:38:49 +08:00
DIYgod 1158281f59 chore(deps): update frontend dependencies (#5038)
* chore(deps): update frontend dependencies

* fix(ci): format OTA verification commands
2026-07-10 22:36:12 +08:00
DIYgod e1daec3013 feat(power): restrict power usage to wallet 2026-04-30 14:23:23 +08:00
DIYgod d3aa46e358 fix: extend API request timeout 2026-04-24 12:51:05 +08:00
DIYgod 5bf010e804 fix(ota): harden store sync and observability 2026-04-15 11:20:31 +08:00
DIYgod c3076d2171 fix(ssr): route dist-external assets (#4956) 2026-04-03 14:51:07 +08:00
DIYgod 1571396fb6 fix: upgrade sdk packages and align app types (#4950) 2026-04-02 09:03:57 +00:00
DIYgod 338164b68c fix(web): remove openpanel and fix ssr manifest 2026-03-17 18:17:39 +08:00
DIYgod b5ab3e08b6 feat(cloudflare): split desktop and ssr workers 2026-03-17 16:51:45 +08:00
DIYgod fa7ce0f011 fix(cli): use npx latest and restore login flow 2026-03-17 12:18:24 +08:00
DIYgod 3f31f505f8 fix: restore frontend ci for better-auth upgrade 2026-03-16 21:35:14 +08:00
DIYgod 397049014f fix: upgrade better-auth client compatibility 2026-03-16 21:14:41 +08:00
DIYgod 49f69f4d19 feat(cli): support browser-based auth login (#4887) 2026-02-27 16:51:58 +08:00
DIYgod 5e26d1d33d feat(landing): merge landing app into monorepo (#4881) 2026-02-26 11:33:16 +08:00
DIYgod afddc8e846 fix(ssr): use VITE_API_URL and VITE_WEB_URL only (#4874) 2026-02-24 14:20:27 +08:00
DIYgod a491a82b58 fix(ssr): disable tsdown inlineOnly check for worker build (#4870)
The worker build intentionally bundles all dependencies (noExternal: ["**"])
for Cloudflare Workers. Set inlineOnly: false to suppress the error that
causes the build to exit with code 1.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 21:04:33 +08:00
DIYgod 81c5b9f2e0 chore(infra): migrate desktop web to Cloudflare (#4869)
* 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>
2026-02-22 20:58:17 +08:00
DIYgod 0859f56ad4 chore: update workspace dependencies and lockfile (#4838)
* chore: update workspace dependencies

- bump dependencies across desktop, mobile, ssr, and internal packages

- refresh pnpm lockfile

- apply type compatibility fixes required by upgraded packages

* fix(ssr): prevent tsdown CI warning from failing build

- set inlineOnly to false in tsdown config

* style: format files for CI prettier check

- apply prettier formatting to files reported by format:check

* fix(mobile): downgrade reanimated for rn 0.79 ios build
2026-02-13 16:04:13 +08:00
DIYgod 95b0da87a4 refactor: remove deprecated features (referral, invitations, memory, wallet) (#4812)
Remove the following modules and features:
- Referral/invitation system across desktop, mobile, and SSR
- AI memory management (SaveMemoryCard, ManageMemoryCard, UserMemorySection)
- Daily reward claim and reward description modal
- Activity points and level display in wallet
- Related query files and imports

Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
2026-01-18 16:22:10 +08:00
DIYgod 3d21eab3f0 chore: update ai sdk to v6.0.5 (#4790) 2026-01-01 15:52:02 +08:00
DIYgod 45568d010f chore: remove list power pricing ui 2025-12-15 12:58:39 +08:00
Stephen Zhou 2d0fa19e14 feat: read secure image setting from server 2025-11-20 17:09:15 +08:00
DIYgod 0ee62fa042 feat: remove onboarding feed references and update settings 2025-11-18 14:14:33 +08:00
Stephen Zhou 0b806fcf07 fix: increase timeout for now 2025-11-17 11:18:24 +08:00
DIYgod eebc33bdd3 fix: update hoverMarkUnread setting to false in default settings 2025-11-15 21:11:44 +08:00
DIYgod e4f5e173e9 feat: hide grecaptcha badge in styles 2025-11-14 21:22:09 +08:00
DIYgod 94c3b91699 feat: replace hcaptcha with recaptcha-v3 2025-11-14 21:09:10 +08:00
DIYgod e59f98e85d feat: subscription limit warning 2025-11-12 11:45:12 +08:00
Stephen Zhou 36fd41cd1a build(ssr): output path 2025-11-11 11:33:59 +08:00
Stephen Zhou 03c0cc54b5 chore: downgrade linkedom 2025-11-08 15:17:47 +08:00
DIYgod 3492de2c3c fix: downgrade vite version from 7.2.0 to 7.1.11 2025-11-06 21:55:28 +08:00
DIYgod 68fb09eb03 chore: update dependencies (#4667)
* chore: update dependencies

* Implement code changes to enhance functionality and improve performance
2025-11-06 21:09:46 +08:00
Innei e1e43bfd4a style: update header and login card styles for improved UI
- Enhanced header button styles for better visual consistency.
- Increased width of the card in the forget password and reset password pages for improved layout.
- Removed unnecessary button component from the card title for a cleaner design.

Signed-off-by: Innei <tukon479@gmail.com>
2025-10-31 15:28:04 +08:00
Innei 220702c456 Revert "chore: update API URLs to use folo.is domain"
This reverts commit ad75a1e47b.

Signed-off-by: Innei <tukon479@gmail.com>
2025-10-30 17:06:20 +08:00
Innei ad75a1e47b chore: update API URLs to use folo.is domain
Signed-off-by: Innei <tukon479@gmail.com>
2025-10-29 22:54:53 +08:00
DIYgod d0a7ca9db1 fix: types 2025-10-29 21:28:17 +08:00
DIYgod f40170e9ac fix: electron dev 2025-10-22 15:10:08 +08:00