Shioaji Pro
에이전트를 위한 거래 터미널: 코딩 에이전트가 전부 구축, UI 100% 오픈소스, 데스크톱에 AI 에이전트와 전문 주문 패널 내장
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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.