Customer Engagement Platform for Email, Push Notifications, & SMS
The world's leader for mobile push notifications, web push, SMS, email and in-app messaging. Trusted by 2 million+ businesses to send 12 billion+ messages per…
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
AI Presence Optimization for local and service businesses. $200/year, no monthly subscription.
• Framework: Next.js 14 (App Router, TypeScript)
• Styling: Tailwind CSS
• Database / Auth: Supabase (Postgres + Row Level Security + Supabase Auth)
• Payments: Manual proof-of-payment — Cash App, PayPal, or Zelle, confirmed by an admin
• Email: Resend (wired for future transactional email; not yet called anywhere)
How payments actually work (read this first)檢視完整 README ↗AI Presence Optimization for local and service businesses. $200/year, no monthly subscription.
Cash App and Zelle have no merchant API or webhook for one-off payments like this — there is no programmatic way to know money arrived. PayPal does have a real merchant API, but to keep all three payment methods consistent, this app treats all three the same way:
/pay.SFB-7K2Q9X) and shows
payment instructions (your Cash App tag / PayPal.me / Zelle contact from
env vars)./admin/payments as pending. You check the actual
Cash App / PayPal / Zelle account for a matching payment + reference
code, then click Confirm (or Reject with a reason)./onboarding unlocks for that customer — the intake
wizard is gated on payments.status = 'confirmed' for their account.There is deliberately no way to "guess" this into automation — false confirmation would mean giving away the service for free.
app/page.tsx) — full marketing site matching the approved
preview: hero, search-vs-AI comparison, top-5 shortlist simulator, signal
diagram, myth-busting cards, animated AI Presence Score, 14-day process,
audit scope grid, platform band (with required non-affiliation
disclaimer), $200/year pricing card, FAQ, final CTA, footer disclaimer.
The pricing CTA links to /pay.app/pay/page.tsx + app/api/payments/**) — account
creation, method selection, reference code generation, and proof
submission. See above.app/onboarding/page.tsx + app/api/onboarding/route.ts)
— 5-step intake (Business → Location → Services → Presence →
Competition). Server-side gate redirects to /pay unless the signed-in
user has a confirmed payment; the API route re-checks this before
creating anything.app/dashboard/**) — Overview (status tracker,
score, renewal date), AI Presence Score, Findings, Recommendations,
Presence Report, Billing, Support. All server-rendered from Supabase with
RLS enforcing that customers only see their own data.app/admin/**) — customer list, per-project detail page
with controls to change project status, record scores, add findings, add
recommendations, publish the final report, and leave internal notes;
plus /admin/payments to confirm or reject pending submissions.
Gated by public.users.role = 'admin' in middleware and again in every
/api/admin/** route handler.supabase/schema.sql) — every table from the spec's
database_models list (with payments reshaped for the manual-review
flow — see schema comments), with RLS policies scoping customer access
to their own data and admin access to everything.Supabase
supabase/schema.sql in the SQL editor.update public.users set role = 'admin' where email = '[email protected]';
(the row is created automatically the first time that user signs up — insert it manually first if you need admin access before that).Payment contacts
Environment variables
.env.example to .env.local and fill in every value.Install & run
npm install
npm run dev
Deploy to Cloudflare Pages/Workers
This project is set up for OpenNext's Cloudflare adapter
(@opennextjs/cloudflare + wrangler), which runs full Next.js SSR —
including the Node-dependent bits (Supabase service-role calls,
cookie-based middleware) — on Cloudflare's Workers runtime via the
nodejs_compat flag already set in wrangler.jsonc.
npm install
# Log in to Cloudflare once (opens a browser to authorize wrangler)
npx wrangler login
# Secrets — do NOT put these in wrangler.jsonc, since that file can end
# up committed to git:
npx wrangler secret put SUPABASE_SERVICE_ROLE_KEY
npx wrangler secret put RESEND_API_KEY
# NEXT_PUBLIC_* values (including the payment contact strings) are
# already set as plain "vars" in wrangler.jsonc — edit them there, or
# override per-environment in the Cloudflare dashboard under Settings >
# Variables.
# Build with OpenNext, then deploy
npm run cf:deploy
sfb-connect.<your-subdomain>.workers.dev URL.sfbconnect.com. Since the domain's DNS already lives on Cloudflare,
this provisions the CNAME/proxy record for you automatically — no
manual DNS edits needed.NEXT_PUBLIC_APP_URL to https://sfbconnect.com once the
custom domain is live./pay to see it), and notifying you when a new payment needs review./pay's proof form for actual file uploads.npm run cf:previewAlternative: this is also a completely standard Next.js app, so it
deploys to Vercel with zero changes if you'd rather not use the Workers
runtime — just don't run the cf:* scripts or add the OpenNext/wrangler
files in that case.