307 Commits

Author SHA1 Message Date
Yuan 138c8a67f2 fix(auth): allow unauthenticated mode when auth is disabled (#234) 2026-03-03 21:32:01 +08:00
Yuan 946f8f69ab Improve article drawer word wrapping (#229) 2026-02-28 20:18:00 +08:00
Yuan 950b379676 fix(frontend): improve accessibility and interaction semantics (#221)
* fix(frontend): improve keyboard-safe feed actions and icon labels

* fix(frontend): label form controls and harden input UX metadata

* fix(frontend): use link semantics and stabilize image layout

* fix(frontend): localize accessibility labels for assistive text

* chore: update deps

* fix(frontend): avoid nested button in feed list item

* fix(frontend): separate feed row selection from settings action

* fix(frontend): align route and state handling with React best practices
v1.1.1
2026-02-23 13:47:50 +08:00
Yuan d50dad3b2a fix(backend): support legacy OIDC callback path
Add a compatibility route for /oidc/callback so OIDC logins still complete when deployments omit the /api prefix in redirect_uri. Clarify the canonical callback URL in docs and env examples to prevent future misconfiguration.
2026-02-23 12:12:19 +08:00
Yuan 8f8e5f2e20 fix(backend): accept Kubernetes-style FUSION_PORT values
Parse FUSION_PORT from either a numeric value or a service-link URL so Fusion starts in Kubernetes namespaces where FUSION_PORT is auto-injected.
2026-02-23 11:56:18 +08:00
Yuan 31d4beec78 fix(security): rate-limit Fever auth and validate feed mark ids
Apply login limiter checks to the Fever endpoint so repeated invalid api_key attempts are throttled, and reject non-positive feed ids for mark=feed to avoid silent no-op success responses.

Refs: https://github.com/0x2E/fusion/issues/136
v1.1.0
2026-02-22 16:02:58 +08:00
Yuan dcd0940f6c fix(backend): improve Fever API client compatibility
Align Fever endpoints and payload semantics with common clients by fixing mark/read flows, adding before-based read markers, and completing feeds/items/favicons responses for stable sync behavior.

Refs: https://github.com/0x2E/fusion/issues/136
2026-02-22 15:58:19 +08:00
Yuan c80879de98 refactor(backend): apply go fix updates for Go 1.26 2026-02-21 11:58:24 +08:00
Yuan add5db2522 fix(frontend): restore scroll behavior in feed views v1.0.0 v1.0.0-beta.3 2026-02-14 15:43:23 +08:00
Yuan f6a868a345 fix(frontend): align content headers with sidebar
Extract a shared content header and use it across article/feed pages. Pin top bars to a fixed, non-shrinking height so header borders stay aligned with the sidebar logo rail.
2026-02-14 15:36:29 +08:00
Yuan 62301ea572 feat(backend): migrate feed runtime pull state to fetch_state
Move pull metadata to feed_fetch_state and unify scheduler decisions around next_check_at with a global FUSION_PULL_MAX_BACKOFF cap. This keeps feed core data stable while making retry/cache-aware pulling behavior explicit across API, docs, and frontend types.
2026-02-14 15:25:43 +08:00
Yuan 8ca4d9e461 docs: clarify default backward-compatibility policy 2026-02-13 20:37:48 +08:00
Yuan 1e1a2b97f9 feat(frontend): open feed from article detail header 2026-02-13 20:26:03 +08:00
Yuan 311bb831af fix(frontend): keep toggled articles visible until refresh
Preserve list context after read/star toggles so accidental actions remain recoverable in-session instead of disappearing immediately under filtered views.
2026-02-13 20:22:35 +08:00
Yuan 5fa5b424c1 fix(security): harden external URL handling and frontend headers
Restrict rendered/opened article links and media URLs to safe external protocols, and apply baseline security headers on frontend responses.\n\nRefs #208
2026-02-13 18:58:39 +08:00
Yuan 0919a68a93 feat(frontend): add Google Reader-style shortcuts and help entry points v1.0.0-beta.2 2026-02-12 22:24:18 +08:00
Yuan 3bcf7b765b feat(frontend): add i18n infrastructure and translation coverage
Introduce shared locale messages with lazy loading across key frontend screens and persist user language preferences. Add i18n dictionary validation in scripts/CI and document the feature and check command in README.
2026-02-12 21:43:59 +08:00
Yuan 80c09d7901 feat(frontend): persist locale and page size preferences so reading settings survive reloads 2026-02-12 19:49:02 +08:00
Yuan f74d2d071e chore(docker): temporarily run as root for legacy data migration
Keep the container running as root until existing /data database files owned by root are migrated, avoiding startup write-permission failures.
2026-02-12 01:26:01 +08:00
Yuan 565ac5cf19 fix: normalize backend output path in release script v1.0.0-beta.1 2026-02-12 01:03:56 +08:00
Yuan e22d8791eb chore: update deps 2026-02-12 00:41:21 +08:00
Yuan caae09f519 fix(frontend): generate route tree before typecheck 2026-02-12 00:40:21 +08:00
Yuan ad25dde50f refactor (#210)
* init refactor plan

* remove old files

* api design

* implement store layer

* implement api

* Add comments for store package

* init frontend

* implement pull service

* use slog

* two column layout

* new design

* fix env var

* fix

* stabilize store tests and query ordering

* remove settings.local.json and update .gitignore to exclude .claude

* improve layout and styling in sidebar and settings dialog

* add group management modal

* add feed management

* add OPML import and export

* use favicon

* fix article list

* fix

* fix ui

* search debounce

* fix ui

* store states in url

* fix: resolve nested button hydration error in ArticleItem

* edit feed

* filter items by group

* fix ui

* fade unread count

* add confirmation dialog for feed deletion and bold key names in confirmations

* fix search

* add optional OIDC authentication support

Allow self-hosted users to integrate with SSO providers (Authelia, Keycloak, etc.)
via OIDC. Enabled by setting FUSION_OIDC_ISSUER and related env vars. Uses PKCE S256
for security. When disabled, behavior is unchanged — login page shows password only.

* add article content processing with link, image, and tracking pixel handling

* replace goreleaser with shell script for cross-platform builds

Remove .goreleaser.yaml and add a `release` command to scripts.sh that
builds 6 platform combos (linux/darwin/windows × amd64/arm64), creates
zip archives with LICENSE/README, and generates sha256 checksums.

Update release workflow to use scripts.sh + gh CLI instead of
goreleaser-action. All build paths updated for backend/ subdirectory.

* implement feed discovery with feedfinder and feed selection

Replace placeholder feed validation with real RSS/Atom discovery so users can pick the correct feed URL before subscribing.

* standardize icon button sizes and improve responsive layout

* auto-fill empty site_url and keep OPML htmlUrl metadata

* add feed management page

* fix about panel

* responsive optimization

* fix search dialog result display and article drawer blank issue

- Add unique value props to CommandItems to prevent cmdk deduplication
- Use getFeedById from store instead of searching within search results
- Fetch article from API when not found in store (e.g. opened from search)

* improve AGENTS.md

* use tanstack-query

* harden auth config and optimize feed pulling

* optimize frontend route loading and lint compliance

Split heavy pages into lazy-loaded route modules to reduce initial bundle size and keep startup responsive. Also fix lint blockers in search/login flows and align ESLint rules with shadcn ui exports.

* harden feed networking and improve store query performance

* expand backend tests and unify test helpers

* fix unstable fallback GUID generation for feed items

* update docs

* simplify command responses with 204 and 202 statuses

* enforce foreign keys in initial sqlite schema

* use upstream static icons for frontend branding

* refactor ci

* add gray fallback for missing feed favicons

* highlight AI-free value in README

* enhance frontend PWA install and update flow

Expose browser install prompts in settings and add service worker update handoff so users can install Fusion and apply new versions without manual cache clearing.

* add robust legacy sqlite migration path

Automatically detect pre-migration schemas and rebuild them into the current schema so upgrades preserve user data safely and idempotently.

* embed frontend build artifacts into backend binary

* fix login flow for empty-password setups

* fix gin server mode to release

* fix

* add visibility logs for database migrations

* fix starred button background in dark mode

* align gin HTTP logging with slog output

* optimize user guidance

* refactor reader routes to path-based state

* update screenshots
2026-02-12 00:29:58 +08:00
Fovir c3661b9c85 chore: upgrade svelte (#209) 2026-01-18 13:04:34 +08:00
Yuan 423a30b2a7 docs: update 2025-08-16 12:11:11 +08:00
rook1e 1045843e31 chore: update Node.js version to 24 in CI and Dockerfile 2025-08-06 22:30:06 +08:00
Yuan 914283bc12 chore: migrate to vite 7 (#190) 2025-08-06 22:25:29 +08:00
Copilot c87c038278 Fix Safari iOS URL.parse compatibility issue causing TypeError when opening news articles (#188)
* Initial plan

* Initial exploration of issue #186 - Safari iOS URL.parse compatibility

Co-authored-by: 0x2E <29594728+0x2E@users.noreply.github.com>

* Fix Safari iOS URL.parse compatibility issue #186

Co-authored-by: 0x2E <29594728+0x2E@users.noreply.github.com>

* Remove frontend/package-lock.json from PR as requested

Co-authored-by: 0x2E <29594728+0x2E@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: 0x2E <29594728+0x2E@users.noreply.github.com>
2025-07-28 00:35:41 +08:00
rook1e 650554cf16 chore: update deps 2025-06-29 11:20:44 +08:00
rook1e 78f7d28215 chore: update i18n 2025-06-29 11:16:02 +08:00
Martin Grubinger 1afffadfbb add share action for items. (#176)
* add share action for items.

- adds a new button to share the link of an item using native navigator.share
- only shows the button when share API is supported
- adds a shortcut (s)
- add localizations for en+de, others missing

* remove keyboard shortcut for share action #171

* add remaining translations for share action #171

---------

Co-authored-by: Martin Grubinger <martin.grubinger@geizhals.at>
2025-06-29 11:11:43 +08:00
Dawid 47b113176c Add Polish translations (#178)
* Chore: Create PL translations

* Add Polish support to index.ts

* Add missing translation

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* CR fixes

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-05-18 12:42:01 +08:00
林阿莱 017a8a7772 Add Catalan localization (#175)
* Update index.ts

Add Catalan

* Create ca.ts

Add Catalan localization

* Update ca.ts
2025-05-13 19:02:14 +08:00
Yuan c965c2e817 fix: add qemu setup (#164) 2025-05-01 00:04:45 +08:00
rook1e f289296c78 doc: fix highlight 2025-04-30 22:58:29 +08:00
Yuan 6a4e99d0fa update CI (#163)
* cross-compile in ci

* build docker image for main branch

* default to github registry
2025-04-30 22:52:09 +08:00
Yuan 74b4d0d35d fix: trigger load re-run when item filter updates (#161)
* update deps

* fix: trigger load re-run when item filter updates
v0.9.8
2025-04-30 14:54:49 +08:00
rook1e 3d377e8853 fix: refresh data after deleting feed 2025-04-28 23:18:37 +08:00
Yuan de223e6991 fix: use update time if item does not have a publish time (#159) 2025-04-28 20:37:30 +08:00
Yuan e0938da00b feat: redirect to the feed page after creation (#155) v0.9.7 2025-04-26 16:59:15 +08:00
Yuan 5f527b57a7 Extract feedfinder (#154)
* refactor: extract feedfinder to a standalone package

* fix: increase timeout for feed validation to improve reliability
2025-04-26 15:59:57 +08:00
Yuan b83b868fc7 Fix UI (#153)
* use invalidateAll() to reduce complexity

* remove useless loading placeholder

* refactor: update sidebar using global states
2025-04-26 15:34:51 +08:00
Yuan bc8109fe39 refactor: replace zap log with slog (#150)
* refactor: replace zap log with slog

* fix
v0.9.6
2025-04-25 17:18:25 +08:00
Yuan 5c98073f9f feat: display items by group (#149) 2025-04-25 16:28:45 +08:00
Yuan 103ece629f feat: display unread count in sidebar (#147)
* udpate deps

* feat: display unread count in sidebar
2025-04-25 13:29:27 +08:00
Yuan 4c79b2b2fa Fix http proxy (#144)
* update deps

* make the sniff package independent

* rename sniffer to feedfinder for  a more neutral meaning

* allow setting Proxy when creating a feed
2025-04-24 01:18:44 +08:00
rook1e 9897ffcfd7 chore: use github-release-style changelog format 2025-04-17 12:15:01 +08:00
Yuan fe792df780 Refactor mark_all_as_read to handle "all" and "current page" options separately (#138)
* update deps

* refactor mark_all_as_read to handle "all" and "current page" options separately

* add page_size input
v0.9.5
2025-04-16 17:20:01 +08:00
Devin Buhl c476a00429 ci: Publish container image to GitHub Container Registry (#137)
* ci: support pushing to GitHub Container Registry

In addition to Dockerhub, images will also be published to GHCR.

Fixes: #135

* update build push action

* lower-case repository due to ghcr reqs
2025-04-10 22:40:12 +08:00
rook1e 5f7ff3b8af docs: add contributing guidelines (#117) v0.9.4 2025-04-06 15:27:41 +08:00