Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
인도 기업용 GST 준수 전문 청구 소프트웨어로 견적·세금계산서 작성, 결제 추적, 공급업체 관리, 작업별 수익 확인을 한 곳에서 제공합니다
Professional GST-compliant invoicing software for Indian businesses. Create quotations, tax invoices, track payments, manage vendors and see per-job profit — all in one place.
금융TypeScript · HTMLGitHub @ajayrohit03온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Multi-tenant quotation and invoice SaaS for small businesses in India, built with GST
(CGST/SGST/IGST) rules in mind. See InvoiceFlow-spec.md and
InvoiceFlow-build-prompt-final.md for the full
product spec and implementation plan.
Next.js (App Router) + TypeScript, Tailwind CSS + shadcn/ui, Prisma against Supabase
Postgres, Supabase Storage, Clerk auth, Resend for email, react-pdf for PDF export.
1. Copy .env.example to .env and fill in real Supabase, Clerk, and Resend
credentials.
2. Install dependencies:
3. Apply the checked-in migrations to your Supabase database:README 전문 보기 ↗Multi-tenant quotation and invoice SaaS for small businesses in India, built with GST
(CGST/SGST/IGST) rules in mind. See InvoiceFlow-spec.md and
InvoiceFlow-build-prompt-final.md for the full
product spec and implementation plan.
Next.js (App Router) + TypeScript, Tailwind CSS + shadcn/ui, Prisma against Supabase Postgres, Supabase Storage, Clerk auth, Resend for email, react-pdf for PDF export.
Copy .env.example to .env and fill in real Supabase, Clerk, and Resend
credentials.
Install dependencies:
npm install
Apply the checked-in migrations to your Supabase database:
npx prisma migrate deploy
(Use npx prisma migrate dev instead once you start changing
schema.prisma yourself — it diffs against the database and writes a new
migration file.)
Run the dev server:
npm run dev
Open http://localhost:3000.
Each business member has a role — owner, admin, or staff — plus an optional
position in a manager/report hierarchy (reportsToId on BusinessMember). Owner and
Admin see every document unconditionally; Staff visibility is scoped by hierarchy
(themselves and, if they have direct reports, their reports' documents too — see
docs/hierarchy-access-control-design.md).
"Manager" is never a stored role — it's derived live from whether a member has active
direct reports (lib/auth/permissions.ts).
Permission (what a member can do) and scope (which records they can see) are
independent axes — see docs/permission-layer-design.md.
Route handlers call requirePermission() / requireBusinessAdmin() /
requireBusinessOwner() from lib/auth/ to enforce both.
New members join by accepting an emailed invitation (never by "add member by email")
— see docs/invitation-onboarding-design.md
for the token/expiry/rate-limit design.
Sent documents can be shared via a public, unauthenticated link scoped to the
business's own subdomain ({business-slug}.{apex domain}/public/documents/{token}).
See docs/public-share-subdomains-design.md
for the slug generation/collision handling and why the subdomain isn't resolved in
middleware.
app/ routes: (auth), (app) [dashboard, quotations, invoices, customers,
products, settings], onboarding, invitations, invite/[token],
public/documents/[token], api
components/ ui (shadcn), layout, dashboard, documents, customers, products, settings
lib/ auth, business (hierarchy/slug/subdomain), db, tax, documents,
invitations, pdf, email, rate-limit, validation, storage, env
prisma/ schema.prisma, migrations
docs/ design docs for hierarchy/permissions/invitations/public sharing
Business logic (tax calculations, authorization, document calculations) lives in
lib/, not inside React components. Every tenant-owned query must be scoped by
businessId; use requireAuth() / requireBusiness() / requireBusinessOwner() /
requireBusinessAdmin() / requirePermission() from lib/auth/session.ts and
lib/auth/permissions.ts (or the redirect-on-failure *ForPage() variants in
lib/auth/page.ts) to get it — see lib/auth/.