diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..1b25905 --- /dev/null +++ b/.env.example @@ -0,0 +1,25 @@ +VITE_API_BASE_URL= +VITE_DEV_PROXY_TARGET=http://localhost:3000 + +# Marketing site config +VITE_FREE_OTPS=500 +VITE_SANDBOX_FREE_OTPS=500 +VITE_LIVE_FREE_OTPS=100 +VITE_PRICE_PER_OTP=0.20 +VITE_BENCHMARK_SMS_PRICE_PER_OTP=0.45 +VITE_BENCHMARK_SMS_PLATFORM_FEE=999 +VITE_BENCHMARK_MANAGED_PRICE_PER_OTP=0.70 +VITE_BENCHMARK_MANAGED_PLATFORM_FEE=2499 +VITE_DELIVERY_RATE_PERCENT=98 +VITE_OPEN_RATE_PERCENT=98 +VITE_BENCHMARK_SMS_OPEN_RATE_PERCENT=20 +VITE_EMAIL_OPEN_RATE_PERCENT=22 +VITE_AVG_DELIVERY_TIME_SECONDS=2 +VITE_OTP_SLIDER_MIN=10 +VITE_OTP_SLIDER_MAX=10000 +VITE_OTP_SLIDER_DEFAULT=1000 +VITE_OTPS_SENT_LABEL=10,000+ +VITE_BUSINESSES_LABEL=50+ +VITE_RATE_LIMIT_SEND=100 req / min +VITE_RATE_LIMIT_VERIFY=120 req / min +VITE_RATE_LIMIT_RESEND=60 req / min / id diff --git a/.gitignore b/.gitignore index 9a5aced..47f98f0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,139 +1,48 @@ -# Logs -logs +# dependencies +node_modules/ + +# build outputs +dist/ +build/ +coverage/ + +# logs +logs/ *.log npm-debug.log* yarn-debug.log* yarn-error.log* +pnpm-debug.log* lerna-debug.log* -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files +# environment files .env .env.* !.env.example -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files +# caches .cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public +.parcel-cache/ +.nyc_output/ +.eslintcache +.stylelintcache +*.tsbuildinfo -# vuepress build output -.vuepress/dist +# editor / OS +.vscode/ +.vscode-test/ +.idea/ +.DS_Store +Thumbs.db -# vuepress v2.x temp and cache directory -.temp -.cache +# misc +*.tmp +*.temp +*.pid +*.seed +*.pid.lock +*.tgz -# Sveltekit cache directory -.svelte-kit/ - -# vitepress build output -**/.vitepress/dist - -# vitepress cache directory -**/.vitepress/cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# Firebase cache directory -.firebase/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v3 -.pnp.* -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions - -# Vite logs files +# vite timestamp files vite.config.js.timestamp-* vite.config.ts.timestamp-* diff --git a/index.html b/index.html new file mode 100644 index 0000000..f9cbfe0 --- /dev/null +++ b/index.html @@ -0,0 +1,16 @@ + + +
+ + +
+ {code}
+
+ )
+}
+
+export function CodeBlock({ code, language = 'javascript' }) {
+ const [copied, setCopied] = useState(false)
+
+ const handleCopy = () => {
+ navigator.clipboard.writeText(code).then(() => {
+ setCopied(true)
+ setTimeout(() => setCopied(false), 2000)
+ })
+ }
+
+ return (
+ + {a} +
++ Built for developers who care about reliability, security, and simplicity. +
++ {shortDescription(desc)} + {desc} +
++ The simplest OTP API for developers. No SMS costs, {marketingConfig.deliveryRatePercent}% delivery rate. + Integrate in minutes with our Node.js & Python SDKs. +
+ + {/* CTAs */} +👋 Hello! {typed} + {typed.length < fullText.length && ( + + )} +
+ {typed.length >= fullText.length && ( ++ Three simple steps and your users receive WhatsApp OTPs reliably. +
++ {desc} +
++ Pay only for what you send. No monthly fees, no hidden charges. +
++ Estimate your monthly spend based on usage +
+ ++
+ "{text}" +
+ ++ Secure · Encrypted · Developer First +
+{code}
+ + Separate sandbox/live keysets. Up to {keyLimitPerMode} per mode and {keyLimitTotal} total. +
+
+
Track name, creation, usage, last used time, and cost by key.
++ The secret is shown only once. Copy it or download it immediately. +
+Making OTP verification simple, fast, and reliable
+ ++ Veriflo was built by MetatronCube Software Solutions with one goal: to make WhatsApp OTP verification as simple as possible for developers. We noticed that most authentication solutions were over-engineered, expensive, or unreliable. We decided to change that. +
+We built Veriflo because developers deserve better:
++ We believe difficult problems should have simple solutions. Every decision we make is guided by how it affects the developer experience. +
++ No hidden fees, no surprise charges. You know exactly what you're paying for, and we keep it affordable at scale. +
++ Your users depend on OTP codes. We take 98% delivery rates seriously and work tirelessly to maintain them. +
++ Our team is here to help. Fast support, detailed documentation, and real humans who understand your needs. +
++ The Veriflo team consists of experienced engineers who've built authentication systems at scale. We know the pain points because we've lived them. Every feature we add, every API endpoint we design, and every documentation page we write is done with developers in mind. +
++ Ready to integrate WhatsApp OTP verification? Get {" "} + + started with our documentation + + , grab a starter file for your language, and ship in minutes. Questions? {" "} + + reach out to our team + + . +
++ Monitor API performance and OTP delivery rates over time. +
++ Manage quotas, purchase live credits, and track approvals in one place. +
+Select bundle and pay via UPI.
+Have questions or feedback? We'd love to hear from you.
+ +Chat with our support team in real-time
++ We provide 24/7 support via email. Response times are typically within 2 hours during business hours (9 AM - 6 PM IST). +
++ Most developers can integrate Veriflo in under 5 minutes. We provide SDKs, starter files, and clear documentation to get you up and running fast. +
++ Yes! For high-volume users and enterprise needs, email sales@veriflo.app to discuss custom plans and dedicated support. +
++ We accept all major credit cards, UPI, and bank transfers. For enterprise customers, we can discuss alternative arrangements. +
++ Check out our comprehensive documentation, or reach out to our team directly. We're always happy to help. +
+ ++ Veriflo lets you send OTP verification codes via WhatsApp. Follow these steps to integrate in under 5 minutes. +
+ ++ Create an account at app.veriflo.app. You'll get {marketingConfig.sandboxFreeOtps} sandbox OTPs + {marketingConfig.liveFreeOtps} live OTPs instantly. +
++ All API requests require a Bearer token in the Authorization header. +
+
+ 🔑
+
+ Get your API key from the dashboard at
+ app.veriflo.app/dashboard/api-key
+
+
+ Send an OTP to any WhatsApp number. +
+/v1/otp/send
+
+ Verify the OTP entered by your user against the requestId.
+
/v1/otp/verify
+ + Resend an OTP using an existing requestId (resets expiry timer). +
+/v1/otp/resend
+ {desc}
++ Install fast, copy a starter, and ship with the language your backend already uses. +
+ ++ Official SDKs for Node.js and Python. REST starter downloads for other backend languages. +
++ Installation, setup, and download links are always available here so you can start from the package manager or grab a ready-made starter file. +
++ Rate limits are applied per API key to ensure fair usage and prevent spam. +
+| Endpoint | +Limit | +
|---|---|
| {endpoint} | +{limit} | +
+ 💡 Rate limit headers (X-RateLimit-Limit, X-RateLimit-Remaining) are included in every API response.
+
+ Minimal setup and test flow for OTP integration. +
+
+ {getCodeForTab(activeTab)}
+
+ + Fast check from dashboard. In sandbox, only your registered number is allowed. +
++ Design your WhatsApp OTP template and configure delivery webhooks. +
++ We will POST a JSON payload when delivery succeeds or fails. +
++ {renderedMessage} +
+ + {/* Timestamp */} ++ Registered Number: {formatDisplayPhone(registeredPhone)} +
++ {settings.environment_mode === 'sandbox' + ? 'Sandbox mode is locked to this number only. Any other recipient will be rejected by the backend.' + : 'Live mode removes the sandbox restriction and allows delivery to other valid WhatsApp numbers.'} +
++ {settings.environment_mode === 'live' + ? <>Live monthly usage: {liveUsedThisMonth} / {liveMonthlyLimit}> + : <>Sandbox monthly usage: {sandboxUsedThisMonth} / {sandboxMonthlyLimit}>} +
++ Mode changes apply only after clicking Save Configuration. +
+Current health, latency envelope, and latest request state.
++ Start free, switch to pay-as-you-go in production, and scale volume without hidden platform fees. + Delivery stays fast at under {formatSecondsText(marketingConfig.avgDeliveryTimeSeconds)} and pricing stays transparent. +
+| Provider | +Per OTP | +Platform Fee | +Total Monthly | +Delivery | +
|---|---|---|---|---|
|
+ {row.provider}
+ {row.note}
+ |
+ {formatInr(row.perOtp)} | +{formatInr(row.platformFee, 0)} | +{formatInr(row.total)} | +{row.deliveryRate} | +
+ Benchmarks are illustrative market assumptions for same-volume business comparisons. Update env values to reflect your exact competitor quotes. +
+| + {h} + | + ))} +|
|---|---|
| + {feature} + | + {vals.map((val, j) => ( ++ {val} + | + ))} +
Last updated: March 2026
+ ++ MetatronCube Software Solutions ("we", "our", or "us") operates the Veriflo service. This Privacy Policy explains our practices regarding the collection, use, and protection of your personal information. +
+We collect information you provide directly, including:
+We use the information we collect to:
++ We implement industry-standard security measures to protect your information, including encryption, secure data storage, and access controls. However, no method of transmission over the internet is 100% secure. +
++ We retain your personal information for as long as necessary to provide our services and fulfill the purposes outlined in this policy, or as required by law. OTP logs are retained for operational and compliance purposes. +
++ We do not sell your personal information. We may share data with service providers who assist in operating our service, including payment processors and hosting providers, under strict confidentiality agreements. +
+You have the right to:
++ If you have questions about this Privacy Policy or our privacy practices, please contact us at privacy@veriflo.app. +
++ Manage your personal information and security preferences. +
++ You are currently logged in. Sign out to close your current dashboard session on this device. +
+Last updated: March 2026
+ ++ By accessing and using the Veriflo service (the "Service"), you agree to be bound by these Terms of Service. If you do not agree to these terms, please do not use the Service. +
++ Veriflo provides WhatsApp OTP (One-Time Password) delivery services for authentication and security purposes. Our service allows you to send OTP verification codes to your users via WhatsApp. +
+You are responsible for:
+You agree not to use the Service to:
+Your account is subject to rate limits:
+Excessive or abusive usage may result in account suspension.
++ You agree to pay all fees according to your chosen plan. We bill on a pay-as-you-go basis unless otherwise agreed. Payment failure may result in service suspension. +
++ The Service is provided "as is" without warranties of any kind, express or implied. We do not guarantee uninterrupted service, error-free delivery, or specific results. OTP delivery depends on WhatsApp availability and user connectivity. +
++ To the fullest extent permitted by law, MetatronCube Software Solutions shall not be liable for indirect, incidental, special, or consequential damages arising from your use of the Service. +
++ We may suspend or terminate your account if you violate these terms, engage in fraudulent activity, or misuse the Service. You may terminate your account at any time. +
++ We may update these Terms of Service at any time. Continued use of the Service after changes constitutes acceptance of the new terms. +
++ If you have questions about these Terms of Service, please contact us at legal@veriflo.app. +
++ Configure business rules, global limits, and pricing structures. +
++ Platform-wide trace of all OTP delivery attempts. +
+Configure billing collection details used by all users in Billing page.
++ View all registered users, suspend accounts, and grant credits. +
+
+ Monitor and manage the whatsapp-web.js puppeteer session.
+
Connected to WhatsApp Web API
+ ++ Scan with WhatsApp to link Node backend. +
+Confirm the account email, verify the WhatsApp OTP, and choose a new password.
+Sign in to your dashboard
+Minimal setup. Verify WhatsApp, then finish the account.
+