anti-gambling-trader-tw
免費開源的投資反詐、交易統計與自動化交易程式工具:預設 PaperBroker,提供 14 種券商/交易所選項;交易紀錄分析在本機執行。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Free, open-source personal finance app for tracking income, expenses, recurring bills, wallets, and spending by category.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Spendist is a free, open-source app for tracking personal income and expenses. Use it to see where your money goes, organize spending across wallets and categories, and keep a record of recurring bills.
Open Spendist · Getting started · Run locally · Documentation · Report a problem
Spendist is for people who want to record everyday spending and understand their household finances. It works in Polish and English, with light and dark themes. You can use the hosted application or run the open-source code yourself under the GPL-3.0 license.
There are no ads or data sales. You enter transactions yourself or import supported files; Spendist does not connect to your bank or make payments on your behalf.
Already have records? Import Spendist CSV or Kontomierz XLSX in Settings. The Transactions import also accepts Biedronka e-receipt JSON. These are specific formats, not a general bank-statement importer. You can export transactions as Spendist CSV from Settings.
Spendist is actively developed. If something is confusing or fails, open an issue with the steps to reproduce it. Remove financial records, personal information, and tokens from anything you share publicly.
@ng-icons/core, and Heroicons.pg_cron, pg_net, and Vault-backed scheduled jobs.dist/apps/web/browser.apps/web/ Angular app, Cloudflare Worker, public runtime env
apps/web-e2e/ Playwright end-to-end tests
apps/mcp/ MCP tools, resources, prompts, STDIO, and HTTP Worker
libs/data-access-* Generated/shared data access libraries
supabase/migrations/ Versioned database schema and RPC changes
supabase/functions/ Supabase Edge Functions
tools/scripts/ Local Supabase, type generation, and maintenance scripts
tools/docker/ Container runtime and guarded local orchestration
npm install
npm run supabase:init
npm run supabase:start
npm run db:push:local
npm run db:types:local
npm run start
The web app runs at http://localhost:4200.
Local Supabase uses an isolated project id (spendist-app) and ports:
55321553225532355324The npm run start script checks whether the local Supabase stack is available before starting nx serve web.
The Docker workflow runs the production Angular build locally while keeping the existing Supabase CLI configuration as the source of truth for migrations, Auth, Storage, Realtime, and Edge Functions.
Install the repository dependencies once, then start the full local stack:
npm install
npm run docker:up
The command starts the isolated local Supabase project, applies pending local migrations, obtains its public browser configuration, builds the web image, and runs it through Docker Compose. It rejects remote Supabase URLs and never reads production credentials.
Local services are available at:
http://localhost:4200http://127.0.0.1:55321http://127.0.0.1:55323http://127.0.0.1:55324Stop the app and Supabase without deleting local database volumes:
npm run docker:down
Useful diagnostics:
docker compose ps
docker compose logs -f web
npm run supabase:status
SPENDIST_PORT changes the host port and SPENDIST_IMAGE changes the image
name used by Compose. The guarded npm script supplies the Compose-only
SPENDIST_DOCKER_SUPABASE_* variables so an unrelated repository .env cannot
silently select a remote backend. The runtime image itself accepts
SUPABASE_URL and SUPABASE_PUBLISHABLE_KEY;
NG_APP_SUPABASE_FUNCTIONS_URL and NG_APP_BUILD_COMMIT are optional.
NG_APP_TURNSTILE_SITE_KEY (optional) shows a Cloudflare Turnstile check on
sign-up, sign-in and password recovery; set it only when captcha is enabled in
your Supabase Auth with the matching secret key. Never pass a service-role or
secret key to the browser image.
GitHub Actions validates the image for pull requests and publishes
linux/amd64 and linux/arm64 variants to
ghcr.io/spendist-app/spendist. The master image is tagged latest,
develop is tagged develop, and v* Git tags produce semantic-version tags.
npm run start # guarded local Supabase startup + Angular dev server
npm run docker:up # local Supabase + production web image
npm run docker:down # stop local containers and preserve database data
npm run docker:test # Docker orchestration unit tests
npm run build # production Angular build
npm run build:worker # Cloudflare Worker-ready production build
npm run test # Vitest unit tests for web
npm run test:recurring-edge # recurring scheduling unit tests
npm run lint # ESLint for web
npm run lint:oxlint # Nx Oxlint tasks plus strict repository-wide checks
npm run e2e # Playwright E2E suite
npm run format:check # Prettier check
npm run mcp:build # build the local STDIO MCP server
npm run mcp:test # focused MCP unit tests
npm run mcp:worker:check # production-config Cloudflare Worker dry-run
npm run mcp:worker:deploy # deploy the authenticated remote MCP Worker
Build the local server with npm run mcp:build. The STDIO process needs SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, and a user access token in SPENDIST_ACCESS_TOKEN; optional MCP_CLIENT_ID labels metadata-only mutation audit entries. Keep the token in the MCP host's secret environment settings, never in a committed config file.
Example command for Codex and other clients that support a command-based STDIO server:
node /absolute/path/to/spendist/dist/apps/mcp/main.mjs
The production remote endpoint is https://mcp.spendist.app/mcp and advertises OAuth protected-resource metadata. It serves the stable MCP 2026-07-28 stateless protocol and keeps a stateless 2025-era fallback for older compatible clients; STDIO negotiates either era per connection. Compatible remote clients should discover Supabase OAuth, dynamically register, use authorization code with PKCE, and send the resulting bearer token. At this early product stage there is no separate staging Worker: local tests protect development, while a small invited group validates OAuth, reads, audited mutations, and guarded deletion directly on production before access is expanded.
mcp.spendist.app is a proxied Cloudflare DNS hostname with a zone Worker Route attached to the separate spendist-mcp Worker, not an alias to the web application. The DNS record is managed in the zone, while npm run mcp:worker:deploy deploys the Worker and attaches its route. The production workflow supplies the Supabase URL, publishable key, and derived OAuth issuer through an ephemeral secrets file during the same deploy, then verifies the health and OAuth metadata endpoints.
The integration supports profiles, reference data, transactions, recurring payments, summaries, places, notifications, read-only Allowance, audit metadata, and portable JSON export. Imports, account credentials, avatars, account deletion, and Allowance mutations remain application-only. MCP entity deletion always requires prepare_delete followed by confirm_delete.
Supabase workflow:
npm run supabase:status
npm run db:push:local
npm run db:reset:local
npm run db:types:local
npm run supabase:vault:local
Production is configured for Cloudflare Workers in wrangler.toml:
spendist-appspendist.app/*apps/web/worker.tsdist/apps/web/browserDeploy with:
npm run build:worker
npm run deploy:worker
Remote Supabase schema changes are managed through versioned files in supabase/migrations and should be synced with the configured remote database before deployment.
Before opening a PR, run the relevant checks:
npm run lint
npm run lint:oxlint
npm run test
npm run build
Oxlint runs beside ESLint; ESLint still checks Angular templates. All enabled
anti-slop rules are errors, and npm run lint:oxlint requires zero errors and
warnings across the repository, including tools and Supabase Edge Functions. The rules
are vendored under tools/oxlint/anti-slop/ with their upstream revision and
license. Type assertions require a specific SAFETY: comment describing the
invariant checked by the code. There is no warning baseline.
For database or generated-type changes, also run:
npm run db:push:local
npm run db:types:local
Please report vulnerabilities privately as described in SECURITY.md.
Spendist is released under the GNU General Public License v3.0.