尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Oewang is a personal finance tracker for everyone. AI-powered insights, simple transaction input, automatic categorization, receipts, wallets, and more.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Track daily money without manual spreadsheets.
oewang is a personal finance tracker for everyone. AI-powered insights, simple transaction input, automatic categorization, receipts, wallets, and more.
• Transactions - Daily income and expenses, organized and categorized
• AI Assistant - Ask anything about your finances in plain language
• Invoices - Professional invoices, payments tracked automatically
• Vault - Receipts and documents, organized and secure
• Multi-currency - Support for 150+ currencies
• Integrations - Telegram, and more coming soon查看完整 README ↗Track daily money without manual spreadsheets.
oewang is a personal finance tracker for everyone. AI-powered insights, simple transaction input, automatic categorization, receipts, wallets, and more.
apps/ai, OpenAI-onlyapps/workerapps/native# Install dependencies
bun install
# Copy environment variables
cp .env.example .env
# Run migrations
bun run migrate
# Start development servers
bun run dev
All env vars live in a single root .env file. Never create .env files inside apps/* or packages/* — Turborepo surfaces them via turbo.json → globalEnv.
Copy the example and fill in your values:
cp .env.example .env
| Variable | Required | Description |
|---|---|---|
NODE_ENV | Yes | development | test | production |
DATABASE_URL | Yes | PostgreSQL connection string |
JWT_SECRET | Yes | HS256 signing secret — min 32 chars |
ENCRYPTION_KEY | Yes | AES-256-GCM key — exactly 32 chars |
All URL configuration uses NEXT_PUBLIC_* vars — they work on both the client (Next.js static replacement) and server (Bun/Node reads them as regular env vars). No separate APP_URL / API_BASE_URL duplicates needed.
| Variable | Required | Description |
|---|---|---|
NEXT_PUBLIC_API_URL | Yes | Base URL of apps/api — without a trailing /v1 (e.g. http://localhost:3002). Used for OAuth callbacks, webhook registration, and the axios client. |
NEXT_PUBLIC_APP_URL | Yes | URL of apps/app (e.g. http://localhost:3000). Used for invite links and OAuth redirects. |
NEXT_PUBLIC_ADMIN_URL | Yes | URL of apps/admin |
NEXT_PUBLIC_WEBSITE_URL | No | URL of apps/website |
API_PORT | No | Port the API listens on (default 3002) |
Local dev
NEXT_PUBLIC_API_URL=http://localhost:3002 NEXT_PUBLIC_APP_URL=http://localhost:3000 NEXT_PUBLIC_ADMIN_URL=http://localhost:3001 NEXT_PUBLIC_WEBSITE_URL=http://localhost:3003Tunnel / production
NEXT_PUBLIC_API_URL=https://3002.yourtunnel.com NEXT_PUBLIC_APP_URL=https://app.oewang.com NEXT_PUBLIC_ADMIN_URL=https://console.oewang.com NEXT_PUBLIC_WEBSITE_URL=https://oewang.com
| Variable | Description |
|---|---|
REDIS_URL | redis://localhost:6379 — ioredis TCP connection, local or production |
| Variable | Required | Description |
|---|---|---|
JWT_EXPIRES_IN | No | Token lifetime (default 7d) |
GOOGLE_CLIENT_ID | No | Google OAuth — login via Google |
GOOGLE_CLIENT_SECRET | No | Google OAuth secret |
GITHUB_CLIENT_ID | No | GitHub OAuth — login via GitHub |
GITHUB_CLIENT_SECRET | No | GitHub OAuth secret |
All AI logic lives in apps/ai (Python/FastAPI) and is OpenAI-only —
no Anthropic/Gemini fallback chain.
| Variable | Description |
|---|---|
OPENAI_API_KEY | OpenAI API key (sk-proj-...) |
Used by apps/api vault uploads. Works with MinIO (local), Cloudflare R2, AWS S3, or any S3-compatible provider.
| Variable | Default | Description |
|---|---|---|
BUCKET_ENDPOINT | — | S3 endpoint URL |
BUCKET_REGION | us-east-1 | Bucket region |
BUCKET_ACCESS_KEY_ID | — | Access key |
BUCKET_SECRET_ACCESS_KEY | — | Secret key |
BUCKET_NAME | — | Bucket name |
Local:
docker compose up -dstarts MinIO on:9000. SetBUCKET_ENDPOINT=http://localhost:9000.
| Variable | Description |
|---|---|
TELEGRAM_BOT_TOKEN | Bot token from @BotFather |
TELEGRAM_WEBHOOK_SECRET | Optional shared secret for webhook signature verification |
NEXT_PUBLIC_TELEGRAM_BOT_USER | Bot username shown in the connect dialog (default OewangBot) |
You can reuse the same OAuth client as Google login. The Gmail service falls back to GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET automatically when the Gmail-specific vars are not set.
| Variable | Description |
|---|---|
GOOGLE_GMAIL_CLIENT_ID | Gmail-specific client ID — optional if GOOGLE_CLIENT_ID is set |
GOOGLE_GMAIL_CLIENT_SECRET | Gmail-specific client secret — optional if GOOGLE_CLIENT_SECRET is set |
One-credential setup (recommended): leave
GOOGLE_GMAIL_CLIENT_IDandGOOGLE_GMAIL_CLIENT_SECRETunset and add the following to the same OAuth client used for login:
- Redirect URI:
{API_BASE_URL}/v1/integrations/gmail/oauth-callback- Scopes on the OAuth consent screen:
gmail.readonly,userinfo.email
| Variable | Description |
|---|---|
MICROSOFT_CLIENT_ID | Azure app registration client ID |
MICROSOFT_CLIENT_SECRET | Azure app registration client secret |
Redirect URI to register:
{API_BASE_URL}/v1/integrations/outlook/oauth-callbackRequired API permissions:Mail.Read,User.Read,offline_access
The API exposes an MCP server at /mcp with a full OAuth 2.0 authorization flow. All OAuth endpoints are served directly from the API at {API_BASE_URL}/oauth/* — no separate app URL is required.
Requires: API_BASE_URL (for discovery documents and OAuth redirect URIs).
To connect ChatGPT: Apps → Add → Server URL →
{API_BASE_URL}/mcp
| Variable | Description |
|---|---|
RESEND_API_KEY | Resend API key (re_...) — used for transactional emails |
Indonesian payment gateway. Required for invoice payments and subscriptions.
| Variable | Description |
|---|---|
MAYAR_API_URL | https://api.mayar.club/hl/v1 |
MAYAR_API_KEY | Mayar API key |
MAYAR_WEBHOOK_TOKEN | Webhook verification token |
| Variable | Description |
|---|---|
CURRENCYFREAKS_API_KEY | CurrencyFreaks key — used for exchange rate sync |
| Variable | Default | Description |
|---|---|---|
SENTRY_DSN | — | Sentry DSN for apps/api error tracking |
SENTRY_AUTH_TOKEN | — | Sentry auth token for source map uploads |
NEXT_PUBLIC_SENTRY_DSN | — | Sentry DSN for Next.js apps |
LOG_LEVEL | info | Pino log level: trace | debug | info | warn | error | fatal |
LOG_PRETTY | true | Pretty-print logs in development |
LOGS_DIR | — | Directory for log file output |
| Variable | Description |
|---|---|
PLAYWRIGHT_USER | Test account email for Playwright E2E suite |
PLAYWRIGHT_PASS | Test account password |
For the full env var reference (including production webhook and third-party payment setup), see docs/ENV_VARS.md.
| App | Description | Port |
|---|---|---|
apps/app | Main application | 3000 |
apps/admin | Admin dashboard | 3001 |
apps/api | REST API (ElysiaJS) | 3002 |
apps/website | Marketing website | 3003 |
apps/ai | AI service (FastAPI/Python) | 3004 |
apps/worker | Background jobs (Go/asynq) | 3005 |
apps/native | Mobile app (Flutter) | — |
MIT
© 2026 Latoe. All rights reserved.