OpenChart
Claude·Codex와 함께하는 무료 데스크톱 차트 도구. 알림 설정·차트 움직임 분석·데이터 제공자 선택
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Multi-tenant SaaS for gold & silver pawnbrokers to manage pledges, interest, valuation, risk, and customer records.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A multi-tenant SaaS for gold and silver pawnbrokers (pledge shops) in India.
Shop owners record customer pledges of jewellery against loans, track accruing interest, monitor loan-to-value risk against live metal prices, manage an inventory of items acquired through pledge sales and direct purchases, keep a task list, and share a read-only portal with each customer. Access is gated behind a Razorpay subscription. Most UI strings and all printed receipts are in Hindi.
Every shop's data is isolated: each API route resolves the signed-in user to an internal user id and scopes all queries by it.
Note: middleware lives in proxy.ts — Next.js 16 renamed middleware.ts.
Requires Node 22 and a PostgreSQL database.
npm ci
# create a .env file — variable names are listed below (there is no .env.example)
npx prisma generate
npx prisma migrate dev # apply migrations
npx prisma db seed # seeds the 10 default pledge item types
npm run dev # http://localhost:3000
The seed is idempotent and contains no personal data — it only creates the
system-default PledgeItemType rows.
npx tsc --noEmit # the primary gate
npm test # vitest — interest, LTV, and customer-risk logic
npm run lint
npm run build # only needed for build-time issues
CI (.github/workflows/ci.yml) runs typecheck, test, and lint on push and PR to
main. It does not run a build.
After any schema change, run npx prisma generate and clear the Turbopack cache
(rm -rf .next) before restarting the dev server — a stale client plus a cached
chunk produces confusing runtime errors.
Names only. Never commit values; .env* is gitignored.
Database
DATABASE_URL — used by both the app runtime and the Prisma CLIDIRECT_URL — convention for direct/unpooled migrations; nothing reads it as currently wiredClerk
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEYWEBHOOK_SECRET — Svix signing secret for the Clerk user webhookNEXT_PUBLIC_CLERK_* redirect URL variablesRazorpay
NEXT_PUBLIC_RAZORPAY_KEY_IDRAZORPAY_KEY_SECRETRAZORPAY_WEBHOOK_SECRETRAZORPAY_PLAN_HALF_YEARLYRAZORPAY_PLAN_YEARLYCloudinary
CLOUDINARY_CLOUD_NAMECLOUDINARY_API_KEYCLOUDINARY_API_SECRETOther
NEXT_PUBLIC_BASE_URLALPHA_VANTAGE_API_KEY — USD→INR rate for metal price conversionCRON_SECRET — 32+ characters; guards the cron endpointsCRON_SECRET and RAZORPAY_WEBHOOK_SECRET must be non-empty. Secret checks
fail closed and compare in constant time, so an empty value blocks the endpoint
rather than weakening it.
Two cron endpoints, with different auth headers:
# metal prices — every 2 hours
curl -s https://<host>/api/cron/update-prices -H "Authorization: Bearer <CRON_SECRET>"
# risk evaluation — daily
curl -s -X POST https://<host>/api/cron/evaluate-risk -H "x-cron-secret: <CRON_SECRET>"
Trigger update-prices once manually after a first deploy so metal prices are
seeded and LTV isn't blank for the first hour.
Read CLAUDE.md first. It documents the hard invariants — tenant scoping, money and weight precision, server-derived valuation inputs, webhook signature verification, audit-record immutability — each of which has been the source of a real incident. Treat a violation as a bug.
This repository is private and must stay private: its git history contains real customer data from an early ledger import.