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.