Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
PayNudge는 Stripe·UPI·은행·QR을 통해 청구서 기한 전·후에 자동으로 결제 알림 이메일을 발송합니다
PayNudge automatically emails clients escalating payment reminders for invoices you've sent — before and after the due date, via Stripe, UPI, bank, or QR.
금융TypeScript · HTMLGitHub @Anmol-Gup온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Track invoices you've already sent and automatically email escalating, polite
payment reminders — via Stripe, UPI, bank transfer, or a QR code — until
they're paid. Not a full invoicing/accounting app: you invoice however you
already do; PayNudge just tracks due dates, payment status, and chases follow-up.README 전문 보기 ↗Track invoices you've already sent and automatically email escalating, polite payment reminders — via Stripe, UPI, bank transfer, or a QR code — until they're paid. Not a full invoicing/accounting app: you invoice however you already do; PayNudge just tracks due dates, payment status, and chases follow-up.
draft →
sent/overdue/partially_paid → paid/void. Drafts never get reminders.client_name, invoice_number,
amount, amount_due (reflects partial payments), due_date,
payment_link, days_overdue, upi_id, bank_details — live preview
while editing. Pause/resume or send-now per invoice; both auto-hide once
every step's already been sent./stripe-webhook?uid=<id>) + signing
secret, so payments land directly in their account and auto-confirm without
PayNudge ever holding a Stripe key on their behalf.draft/sent/overdue/partially_paid) but keeps paid/void invoices
as history, just unlinked from the client.React + TypeScript + Tailwind + Vite · Supabase (Postgres, Auth, Edge Functions, Storage) · Nodemailer (any SMTP) · Stripe (client Payment Links + PayNudge's own Billing Portal)
npm install
cp .env.example .env # VITE_SUPABASE_URL / VITE_SUPABASE_ANON_KEY
npm run dev
Provision a real Supabase project before the frontend does much:
npx supabase login
npx supabase link --project-ref <your-project-ref>
npx supabase db push # tables, RLS, default reminder sequence + free plan trigger
Then set secrets and deploy the edge functions:
npx supabase secrets set --env-file supabase/.env # your own copy, git-ignored
npx supabase functions deploy send-reminders
npx supabase functions deploy stripe-webhook
npx supabase functions deploy create-portal-session
SMTP (SMTP_HOST/PORT/SECURE/USER/PASSWORD, REMINDER_FROM_EMAIL) is used
only by send-reminders. Auth emails (confirm/reset) are sent by Supabase
itself — configure Custom SMTP and add <domain>/dashboard +
<domain>/reset-password to Redirect URLs in the Supabase dashboard, or
confirmation/reset links won't redirect right in production.
Stripe: STRIPE_SECRET_KEY is only for PayNudge's own subscription
billing portal — client payments need no key, since users bring their own
Payment Link + webhook secret (entered in Payment settings).
send-reminders needs a daily call with no body and an x-cron-secret header
matching CRON_SECRET. Either use Supabase's dashboard cron scheduler, or
pg_cron + pg_net:
select cron.schedule('send-reminders-daily', '0 9 * * *', $$
select net.http_post(
url := 'https://<project-ref>.supabase.co/functions/v1/send-reminders',
headers := jsonb_build_object('x-cron-secret', '<CRON_SECRET value>')
);
$$);
The in-app "Send reminder now" button calls the same function with
{ invoice_id }, authenticated as the owner, bypassing the day-offset gate
(but not the paused check).
Full invoice/PDF generation, multi-currency, team accounts, SMS/WhatsApp reminders, recurring invoices, paid-plan checkout.