Customer Engagement Platform for Email, Push Notifications, & SMS
모바일 푸시, 웹 푸시, SMS, 이메일, 인앱 메시징 분야 세계 최고, 200만 기업이 신뢰해 연간 120억 건 이상 전송
비즈니스용 AI 에이전트가 아웃바운드·광고·웹·채팅·리뷰 등을 담당하고 전문가가 검증합니다
An AI agent assigned to your business — outbound, ads, website, follow-up, chat, reviews, operations. A human expert checks everything it does. Try it free on a sample business.
마케팅TypeScript · PLpgSQLGitHub @2romanroyce8온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.