Oracle3
Open-source trading engine and MCP server for prediction markets. Fee-aware no-arbitrage trading across related contracts, live on Kalshi, Polymarket and Solana or on paper.
Sell gift cards for USDT, Naira & Cedi.
Translation pending
FinanceTypeScript · JavaScriptGitHub @bhadmusfrancisOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A robust, cross-platform platform for selling gift cards for USDT, Naira (NGN), or Cedi (GHS) — similar to giftcardstonaira.com / noones.com.
• Web app (Next.js, App Router) — server-rendered, SEO-friendly, mobile-responsive + installable PWA (works like an app on phones).
• REST API (Express + Prisma + PostgreSQL).
• Shared package with the rate-text parser and rate calculator used by both.
The same API powers any future native mobile client (React Native / Expo) — all business logic lives server-side.Read the full README ↗A robust, cross-platform platform for selling gift cards for USDT, Naira (NGN), or Cedi (GHS) — similar to giftcardstonaira.com / noones.com.
The same API powers any future native mobile client (React Native / Expo) — all business logic lives server-side.
/sell-lowes-gift-card).The pasted rate is NGN per 1 unit of the card's face currency (the SLOW rate). For a card of amount A:
| Payout | Formula |
|---|---|
| Naira (NGN) | A × rate × (1 − 20%) |
| USDT | A × rate × (1 − 30%) ÷ NGN_per_USDT |
| Cedi (GHS) | A × rate × (1 − 30%) ÷ NGN_per_GHS |
All percentages and exchange rates are admin-configurable in Admin → Rates & cards.
The parser (packages/shared/src/rateParser.ts) understands the sample format:
===【Apple/iTunes】SLOW ===, ● US (200-500 in 100s) = 1092, ● US code (...) = 935 (e-code), inline brands ●【Doordash】(100-500) = 712, country→currency mapping, and SLOW/FAST de-duplication.
| Layer | Tech |
|---|---|
| Web | Next.js 14, React 18, TypeScript, Tailwind CSS, PWA |
| API | Node 20, Express, TypeScript, Prisma ORM, Zod |
| DB | PostgreSQL 16 |
| Auth | JWT, bcrypt, email verification |
| Nodemailer (SMTP) — Mailpit for local dev | |
| Push | Web Push (VAPID) + service worker |
| Uploads | Multer (local disk; swap for S3 in prod) |
GiftCard4Sale/
├─ apps/
│ ├─ api/ # Express + Prisma backend
│ │ ├─ prisma/ # schema.prisma + seed.ts
│ │ └─ src/
│ │ ├─ routes/ # auth, cards, trades, me, withdrawals, referrals, notifications, landing, admin
│ │ ├─ services/ # email, push, notify, wallet, payout, rateConfig, rateImport
│ │ └─ lib/ # auth, http, upload
│ └─ web/ # Next.js frontend
│ └─ src/app/ # public pages, dashboard/*, admin/*
├─ packages/
│ └─ shared/ # rate parser + calculator + shared types
├─ scripts/ # import-fb-posts.mjs (+ sample data)
├─ docker-compose.yml # postgres + mailpit
└─ .env.example
DATABASE_URL (keep ?sslmode=require). No Docker needed — skip npm run db:up.npm run db:up (also starts Mailpit for catching dev emails).Using a hosted DB? You can also point
SMTP_*at a real email provider (or a free SMTP service), since Mailpit only runs with the local Docker setup.
# from the project root
cp .env.example .env
cp .env.example apps/api/.env # the API + Prisma CLI read this one
Create apps/web/.env.local for the web app's public vars:
NEXT_PUBLIC_API_URL=http://localhost:4000
NEXT_PUBLIC_SITE_URL=http://localhost:3000
(Optional) generate web-push keys and paste them into .env / apps/api/.env:
npx web-push generate-vapid-keys
npm install
npm run db:up
# Mailpit UI (see verification/notification emails): http://localhost:8025
npm run build:shared
npm run db:migrate # creates tables
npm run db:seed # admin user + sample rates + sample landing pages
The seed prints the admin credentials (defaults: [email protected] / ChangeMe123!).
Shortcut:
npm run setupruns install → build:shared → db:up → migrate → seed.
# in one terminal
npm run dev:api # http://localhost:4000
# in another terminal
npm run dev:web # http://localhost:3000
Or run both together: npm run dev.
Facebook profile pages require login and cannot be scraped automatically. The workflow is:
https://web.facebook.com/share/p/1HNn7qJMHc/), write a unique rewrite of the content.sell-lowes-gift-card → https://www.giftcard4sale.com/sell-lowes-gift-card/.scripts/fb-posts.sample.json).[email protected] ADMIN_PASSWORD=ChangeMe123! \
node scripts/import-fb-posts.mjs ./scripts/fb-posts.sample.json
You can also create/edit pages individually in Admin → Landing pages. Linking a page to a card type embeds the live rate calculator on that page.
Set NODE_ENV=production (the API refuses to start with a weak JWT_SECRET in prod).
Built-in, just add env values:
CORS_ORIGINS), and rate limiting (auth/trade/withdrawal endpoints) are already wired in.S3_BUCKET (+ S3_*) to store card images in S3 / Cloudflare R2 / Supabase instead of local disk — no code change. Leave blank for local disk in dev.SMTP_* for a real provider (presets for Resend/Brevo/SES/Postmark/Gmail are in .env.example). Verify your domain (SPF/DKIM/DMARC).VAPID_* (npx web-push generate-vapid-keys).PAYOUT_PROVIDER=paystack (or flutterwave) + the secret key. When an admin marks an NGN withdrawal PAID, the transfer is sent automatically; manual (default) just records it.robots.txt, sitemap.xml (auto-includes card + landing pages), canonical URLs, JSON-LD, and a PWA icon are included.Operational steps:
npm run prisma:deploy on deploy.NEXT_PUBLIC_API_URL / NEXT_PUBLIC_SITE_URL at the live URLs.trust proxy in production.Still to add for a money platform (not code-blocked here):
services/payoutProvider.ts) — currently manual.RateConfig (NGN/USDT, NGN/GHS).Decimal; wallet changes are written through a single ledger (WalletTransaction) inside DB transactions.| Script | Description |
|---|---|
npm run setup | install + build shared + start db + migrate + seed |
npm run dev | run API + web together |
npm run dev:api / npm run dev:web | run individually |
npm run db:up | start Postgres + Mailpit |
npm run db:migrate | apply Prisma migrations |
npm run db:seed | seed admin, rates, landing pages |