SmileQWQ 6dbc8169f1 fix: align remaining value and compose env defaults
- compute subscription remaining value from the current cycle's paid amount, actual remaining days, and original package days while always excluding the current business day and still allowing gifted days to push the ratio above 100%
- keep future prepaid cycles from inflating current-cycle detail metrics and cover fallback, gifted-day, and current-day exclusion cases with focused API unit and integration tests
- wire DEFAULT_APP_LOCALE into the api-only compose file and align the full compose API environment block with regression coverage
2026-06-02 10:27:09 +08:00

SubTracker Logo

SubTracker

Manage subscriptions, renewal reminders, budgets, logos, and Wallos migrations in one self-hosted dashboard.

GitHub release GitHub stars License: GPL v3

简体中文 · Local development · Deployment · Deployment guide · Releases

The current main branch ships with Docker / Docker Compose deployment. If you need Cloudflare Worker serverless deployment, use the lite branch, where the Worker-specific workflows, deployment notes, and runtime adaptations are maintained.

Quick Start

Deploy with the install script

curl -fsSL https://raw.githubusercontent.com/Smile-QWQ/SubTracker/main/scripts/install.sh | bash
  • Full mode is recommended for most users.
  • The installer now asks you to choose Simplified Chinese or English at the start. You can still force it with --lang zh or --lang en.
  • Release artifacts support both x86 and ARM.
  • See DEPLOYMENT.md for the full deployment flow.

Run locally

npm install
npm run prisma:generate
npm run prisma:push
npm run prisma:seed
npm run dev

Default addresses:

  • Web: http://127.0.0.1:5173
  • API: http://127.0.0.1:3001

Default credentials:

  • Username: admin
  • Password: admin

Screenshots

Dashboard

Dashboard

More views

Subscriptions Spending
Subscriptions Spending
AI recognition Wallos import
AI recognition Wallos import

Features

  • Subscription management: create, edit, renew, pause, disable, and restore subscriptions; review renewal history; and manage larger collections with tags, multi-tag filtering, custom ordering, search, bulk status updates, and bulk deletion.
  • Reminder rules: define reminders before renewal, on the renewal day, and after expiration with the days&time; format; override defaults per subscription; and preview the resulting trigger schedule before saving.
  • Statistics and budgets: normalize multi-currency subscriptions into a base currency, track spending totals and trends, inspect tag and status breakdowns, review the next 30 days of renewals, compare auto-renew ratios, and configure monthly, yearly, or per-tag budgets.
  • AI assistance: extract subscription details from text or images into the form, and generate an AI summary on the statistics page.
  • Calendar and overview: view subscriptions in a calendar, track upcoming renewals from a dedicated list, and use the dashboard for a consolidated overview.
  • Notifications: send reminders through Webhook, SMTP / Resend email, PushPlus, Telegram Bot, ServerChan, Gotify, Bark, NotifyX, and Apprise.
  • Logos and assets: upload logos, reuse saved local logos, search online, and preserve or match logos during Wallos ZIP imports when possible.
  • Backup and migration: import Wallos JSON, SQLite, and ZIP backups, and export, inspect, import, or restore native SubTracker ZIP backups.
  • Multi-currency tools: maintain exchange-rate data, convert values into the base currency, and use the built-in currency converter.
  • Login and session controls: support remember-me sessions, default-password change reminders, and rate limiting after repeated login failures.
  • Interface: support Simplified Chinese and English, light, dark, and system themes, with a sticky desktop sidebar and independently scrollable content.

Tech Stack

  • Frontend: Vue 3, Vite, TypeScript, Naive UI, Pinia, TanStack Query, ECharts
  • Backend: Fastify, Prisma, SQLite, Zod, node-cron

Local Development

1. Install dependencies

npm install

2. Copy the API environment template

cp apps/api/.env.example apps/api/.env

3. Initialize the database

npm run prisma:generate
npm run prisma:push
npm run prisma:seed

4. Start the dev environment

npm run dev

After the first login, changing the default admin password is strongly recommended. Login attempts are rate-limited after too many failures.

Useful Commands

npm run dev
npm run build
npm run lint
npm test

Deployment

Use the install script for the smoothest setup:

curl -fsSL https://raw.githubusercontent.com/Smile-QWQ/SubTracker/main/scripts/install.sh | bash

The script downloads release artifacts, prepares the deployment directory, and lets you choose between:

  • Full deployment (full): deploy web and API together with the published frontend image
  • API-only deployment (api): deploy only the API container and host the web assets yourself

Full deployment is the recommended default.

On first startup, the API container initializes the SQLite schema automatically.

If you want to use Apprise, deploy an Apprise API instance separately and point SubTracker to it in Settings → Notifications → Apprise. The default SubTracker compose files do not make Apprise a hard dependency.

Updating

For routine upgrades:

docker compose pull
docker compose up -d

If you use API-only mode, you also need to download and replace the extracted contents of subtracker-web-dist.zip.

You only need to rerun the install script when:

  • deploying for the first time
  • rebuilding the deployment directory
  • switching between api and full
  • adopting a newer deployment template or updated .env defaults

See DEPLOYMENT.md for the complete guide.

Release Artifacts

Each release currently provides:

  • subtracker-web-dist.zip: frontend static assets
  • ghcr.io/smile-qwq/subtracker-api: API Docker image
  • ghcr.io/smile-qwq/subtracker-web: frontend image used in full deployment

All published images support both x86 and ARM architectures.

License

This project is released under the GNU General Public License v3.0 (GPLv3).

Acknowledgements

Thanks to the following projects and ecosystems:

Star History

Star History Chart

Description
一个现代化的自托管订阅管理器,支持标签分类、预算洞察、续费提醒、Wallos 导入、AI 辅助录入和多币种管理。
Readme GPL-3.0 4.8 MiB
Languages
TypeScript 72.1%
Vue 26%
Shell 1.6%
JavaScript 0.1%
Dockerfile 0.1%
Other 0.1%