Shioaji Pro
為 agent 交易鋪路:交易終端全程由 coding agent 打造,介面 100% 開源、桌面版內建 AI Agent 與全套專業下單面板 — 這個終端就是能力證明。
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A simple Splitwise-style PWA for friends and family. Create groups, invite people with Google or Apple sign-in, add expenses with flexible or itemized splits, scan receipts, and settle up.
gemini-3.5-flash-lite) for receipt/expense parse — optionalcp .env.example .env.local
Create a Neon project (or add Neon from the Vercel Marketplace) and paste DATABASE_URL / DATABASE_URL_UNPOOLED into .env.local.
Create a Google OAuth client:
http://localhost:3000/api/auth/callback/google.env.localAUTH_SECRET with openssl rand -base64 32Sign in with Apple is production-only. Apple rejects http://localhost, so local and verify sign-in keep using Google or the gated credentials form. Leave AUTH_APPLE_ID and AUTH_APPLE_SECRET empty unless you are configuring the production deployment (see below).
Optional: add GOOGLE_API_KEY from Google AI Studio for receipt scan and expense text parse. The app runs without it; scan/parse fail with a clear error if the key is missing.
Optional: add a private Vercel Blob store for receipt photos.
BLOB_READ_WRITE_TOKEN from the store into .env.local.Install and migrate:
npm install
npm run db:migrate
npm run dev
For UI work you can run the app against a throwaway Postgres in Docker, signed in as a seeded user. It needs Docker, plus AUTH_SECRET in .env.local (a default is used if it's missing). It never touches the Neon database in .env.local.
npm run local:db # start Postgres on :54330, migrate, seed demo data
npm run local:dev # http://localhost:3100/signin → Verify sign-in (prefilled)
The seed signs you in as Vince. It includes a group "Tahoe trip" (you, Alex, and a placeholder Bob), a solo group "Just me", and friends Sam and Kim who aren't in any group. npm run local:db:reset wipes the data and reseeds. local:dev uses its own port and .next-local, so it can run next to npm run dev.
To screenshot a page at phone size (uses your installed Chrome):
npm run local:shot -- /g/local-group-trip/expenses/new \
--click "Enter manually" --fill "Amount=24" --out form.png [--light]
| Script | Description |
|---|---|
npm run dev | Start Next.js |
npm run local:db | Start the local Docker Postgres, migrate, and seed |
npm run local:dev | Start Next.js against the local database with one-tap sign-in |
npm run local:shot | Screenshot a local page at phone size |
npm run build | Production build (does not migrate) |
npm run vercel-build | Vercel build: migrate on production, then next build |
npm run db:generate | Generate Drizzle migrations |
npm run db:migrate | Apply migrations locally |
npm run db:studio | Open Drizzle Studio |
npm test | Run unit tests (database tests skip without TEST_DATABASE_URL) |
Concurrency and migration tests need a dedicated Postgres server. Each suite creates and drops its own database there; never point TEST_DATABASE_URL at a shared or production database.
docker run -d --name splitwiser-test-db -e POSTGRES_PASSWORD=postgres -p 54329:5432 postgres:16-alpine
TEST_DATABASE_URL=postgres://postgres:postgres@localhost:54329/postgres npm test
New accounts require a group invitation link, and total accounts are capped (500 by default). See DEPLOY.md for how to inspect and change the cap.
AUTH_SECRET, AUTH_GOOGLE_ID, AUTH_GOOGLE_SECRET. For Sign in with Apple on production, also set AUTH_APPLE_ID (Services ID) and AUTH_APPLE_SECRET (JWT from npx auth add apple, using the Team ID, Key ID, and .p8 — do not commit the key). The secret expires in at most 6 months; rotate it and redeploy before it lapses. Apple rejects localhost, and Vercel preview URLs cannot share the production Services ID.GOOGLE_API_KEY for receipt/expense AI parse (app runs without it; scan fails gracefully if missing).https://<your-domain>/api/auth/callback/googleAUTH_REDIRECT_PROXY_URL to your production URL.Vercel runs vercel-build instead of build. When VERCEL_ENV is production, that script applies pending Drizzle migrations with DATABASE_URL_UNPOOLED, then runs next build. If the migration fails, the build fails and Vercel keeps serving the previous deployment.
Preview, development, and local npm run build never migrate. Preview deployments can point at the production database, so they must not change it.
A migration that drops or rewrites data fails the production build unless that file contains:
-- allow-destructive: <reason>
The check looks for DROP TABLE, DROP COLUMN, RENAME, ALTER COLUMN ... TYPE, TRUNCATE, and DELETE FROM without a WHERE. See DEPLOY.md.
See DEPLOY.md for a more detailed checklist.
Scanned receipts are compressed in the browser, uploaded to a private Vercel Blob store, and served only through /api/receipts/[expenseId] after a group-membership check. Neon stores a pathname pointer, never image bytes. Public Blob URLs are not used.
Private / personal use.