Signal real intent
+Your deposit proves this isn't another spray-and-pray blast. You're demonstrating that the conversation is worth pursuing.
+diff --git a/src/components/blocked-email.css b/src/components/blocked-email.css index 37fa48a..735fce5 100644 --- a/src/components/blocked-email.css +++ b/src/components/blocked-email.css @@ -94,3 +94,440 @@ transform: scale(1.02); transition: transform 0.3s; } + +/* Hero Section */ +.deposit-page .hero-section { + text-align: center; + margin-bottom: 1.5rem; + padding: 1.5rem 1rem; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + color: white; + border-radius: 12px; +} + +.deposit-page .hero-subtitle { + font-size: 1.25rem; + margin-top: 1rem; +} + +/* Status Card */ +.status-card { + background: #f8f9fa; + padding: 1rem; + border-radius: 8px; + margin-bottom: 1rem; + border-left: 4px solid #1188E6; + color: #333; +} + +/* Steps */ +.how-it-works { + margin: 1rem 0; +} + +.steps { + display: flex; + flex-direction: column; + gap: 1rem; + margin-top: 1rem; +} + +.step { + display: flex; + gap: 1rem; + align-items: flex-start; +} + +.step-number { + background: #1188E6; + color: white; + width: 36px; + height: 36px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-weight: bold; + flex-shrink: 0; +} + +.step-content strong { + display: block; + margin-bottom: 0.5rem; + color: #2c3e50; +} + +.step-content p { + margin: 0; + color: #666; +} + +/* Guarantee Box */ +.guarantee-box { + background: #d4edda; + border: 2px solid #28a745; + padding: 1rem; + border-radius: 8px; + margin: 1rem 0; +} + +.guarantee-box h4 { + margin-top: 0; + color: #155724; +} + +/* Why This Works */ +.why-this-works { + background: #e7f3ff; + padding: 1rem; + border-radius: 8px; + margin: 1rem 0; +} + +/* CTA Section */ +.cta-section { + background: #f8f9fa; + padding: 1.5rem; + border-radius: 12px; + text-align: center; + margin: 1.5rem 0; +} + +.cta-buttons { + display: flex; + gap: 1rem; + justify-content: center; + margin: 1rem 0; + flex-direction: row; +} + +.learn-more-btn.primary { + background: #1188E6; + color: white; + font-size: 1.1rem; + padding: 1rem 2rem; + min-width: 200px; + flex: 1; + max-width: 250px; +} + +.learn-more-btn.secondary { + background: #6c757d; + color: white; + font-size: 1.1rem; + padding: 1rem 2rem; + min-width: 200px; + flex: 1; + max-width: 250px; +} + +.refund-reminder { + color: #28a745; + font-size: 0.95rem; + margin-top: 1rem; +} + +/* Trust Section */ +.trust-section { + margin: 1.5rem 0; + padding: 1.5rem; + background: white; + border-radius: 8px; +} + +.trust-points { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.5rem; + margin-top: 1rem; +} + +.trust-point { + text-align: center; +} + +.trust-point .icon { + font-size: 2.5rem; + display: block; + margin-bottom: 0.5rem; +} + +.trust-point strong { + display: block; + margin-bottom: 0.5rem; + color: #2c3e50; +} + +.trust-point p { + color: #666; + font-size: 0.9rem; + margin: 0; +} + +/* Inspiration Section */ +.inspiration-section { + background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); + color: white; + padding: 1.5rem; + border-radius: 12px; + margin: 1.5rem 0; +} + +.inspiration-section a { + color: white; + text-decoration: underline; + font-weight: bold; +} + +/* Success Message */ +.success-message { + background: #d4edda; + border: 2px solid #28a745; + padding: 1.5rem; + border-radius: 12px; + text-align: center; + margin: 1.5rem 0; +} + +.success-message h3 { + color: #155724; + margin-top: 0; +} + +@media (max-width: 768px) { + .cta-buttons { + flex-direction: column; + align-items: center; + } + + .learn-more-btn.primary, + .learn-more-btn.secondary { + min-width: 280px; + max-width: 100%; + flex: none; + } + + .trust-points { + grid-template-columns: 1fr; + } +} + +/* Dark Mode Support */ +@media (prefers-color-scheme: dark) { + .status-card { + background: var(--color-background); + color: var(--color-text); + border-left-color: var(--fyncom-blue); + } + + .how-it-works h3, + .status-card h3 { + color: var(--color-text); + } + + .step-content strong { + color: var(--color-text); + } + + .step-content p { + color: var(--color-text); + opacity: 0.8; + } + + .guarantee-box { + background: var(--fyncom-darkest-cyan); + border-color: var(--karmacall-green); + color: var(--color-text); + } + + .guarantee-box h4 { + color: var(--karmacall-green); + } + + .why-this-works { + background: var(--fyncom-darkest-cyan); + color: var(--color-text); + } + + .why-this-works h4 { + color: var(--color-text); + } + + .cta-section { + background: var(--color-background); + color: var(--color-text); + } + + .cta-section h3 { + color: var(--color-text); + } + + .trust-section { + background: var(--color-background); + color: var(--color-text); + } + + .trust-section h3 { + color: var(--color-text); + } + + .trust-point strong { + color: var(--color-text); + } + + .trust-point p { + color: var(--color-text); + opacity: 0.8; + } + + .success-message { + background: var(--fyncom-darkest-cyan); + border-color: var(--karmacall-green); + color: var(--color-text); + } + + .success-message h3 { + color: var(--karmacall-green); + } +} + +/* Manual Dark Mode Support */ +:root[data-theme="dark"] .status-card { + background: var(--color-background); + color: var(--color-text); + border-left-color: var(--fyncom-blue); +} + +:root[data-theme="dark"] .how-it-works h3, +:root[data-theme="dark"] .status-card h3 { + color: var(--color-text); +} + +:root[data-theme="dark"] .step-content strong { + color: var(--color-text); +} + +:root[data-theme="dark"] .step-content p { + color: var(--color-text); + opacity: 0.8; +} + +:root[data-theme="dark"] .guarantee-box { + background: var(--fyncom-darkest-cyan); + border-color: var(--karmacall-green); + color: var(--color-text); +} + +:root[data-theme="dark"] .guarantee-box h4 { + color: var(--karmacall-green); +} + +:root[data-theme="dark"] .why-this-works { + background: var(--fyncom-darkest-cyan); + color: var(--color-text); +} + +:root[data-theme="dark"] .why-this-works h4 { + color: var(--color-text); +} + +:root[data-theme="dark"] .cta-section { + background: var(--color-background); + color: var(--color-text); +} + +:root[data-theme="dark"] .cta-section h3 { + color: var(--color-text); +} + +:root[data-theme="dark"] .trust-section { + background: var(--color-background); + color: var(--color-text); +} + +:root[data-theme="dark"] .trust-section h3 { + color: var(--color-text); +} + +:root[data-theme="dark"] .trust-point strong { + color: var(--color-text); +} + +:root[data-theme="dark"] .trust-point p { + color: var(--color-text); + opacity: 0.8; +} + +:root[data-theme="dark"] .success-message { + background: var(--fyncom-darkest-cyan); + border-color: var(--karmacall-green); + color: var(--color-text); +} + +:root[data-theme="dark"] .success-message h3 { + color: var(--karmacall-green); +} + +/* Badge styling for v2 */ +.badge { + display: inline-flex; + align-items: center; + padding: 0.5rem 1rem; + background: var(--color-background); + color: var(--color-text); + border: 1px solid var(--color-bar); + border-radius: 20px; + font-size: 0.875rem; + font-weight: 500; +} +/* FAQ Section */ +.faq-section { + margin-top: 2rem; + padding: 1.5rem; + background: #f8f9fa; + border-radius: 8px; +} +.faq-content { + margin-top: 1rem; +} +.faq-item { + margin-bottom: 1rem; +} +.faq-question { + font-weight: bold; + cursor: pointer; +} +.faq-answer { + margin-top: 0.5rem; + padding-left: 1rem; +} +@media (prefers-color-scheme: dark) { + .faq-section { + background: var(--color-background); + color: var(--color-text); + } + .faq-section h3 { + color: var(--color-text); + } + .faq-question { + color: var(--color-text); + } + .faq-answer { + color: var(--color-text); + opacity: 0.85; + } +} +:root[data-theme="dark"] .faq-section { + background: var(--color-background); + color: var(--color-text); +} +:root[data-theme="dark"] .faq-section h3 { + color: var(--color-text); +} +:root[data-theme="dark"] .faq-question { + color: var(--color-text); +} +:root[data-theme="dark"] .faq-answer { + color: var(--color-text); + opacity: 0.85; +} \ No newline at end of file diff --git a/src/components/make-a-deposit-v3.css b/src/components/make-a-deposit-v3.css new file mode 100644 index 0000000..c218463 --- /dev/null +++ b/src/components/make-a-deposit-v3.css @@ -0,0 +1,566 @@ +.deposit-page { + background: linear-gradient(180deg, rgba(var(--fyncom-blue-rgb), 0.08) 0%, rgba(255, 255, 255, 0.95) 40%, var(--color-background) 100%); + min-height: 100vh; +} + +.deposit-main { + max-width: 1100px; + margin: 0 auto; + padding: 4rem 1.5rem 5rem; + display: flex; + flex-direction: column; + gap: 4rem; +} + +.deposit-hero { + background: linear-gradient(135deg, var(--fyncom-darkest-cyan) 0%, rgba(var(--fyncom-blue-rgb), 0.92) 55%, rgba(19, 220, 236, 0.85) 100%); + color: #fff; + padding: 3rem; + border-radius: 28px; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 2.5rem; + position: relative; + overflow: hidden; + box-shadow: 0 30px 60px rgba(0, 0, 0, 0.2); +} + +.deposit-hero::after { + content: ""; + position: absolute; + inset: 0; + background: radial-gradient(circle at top right, rgba(255, 255, 255, 0.35), transparent 55%), + radial-gradient(circle at bottom left, rgba(0, 0, 0, 0.22), transparent 60%); + mix-blend-mode: screen; + pointer-events: none; +} + +.hero-copy, +.hero-card { + position: relative; + z-index: 1; +} + +.hero-copy { + display: flex; + flex-direction: column; + gap: 1.25rem; +} + +.hero-eyebrow { + font-size: 0.95rem; + letter-spacing: 0.32rem; + text-transform: uppercase; + opacity: 0.85; + margin: 0; +} + +.hero-title { + font-size: clamp(2.4rem, 4vw, 3.2rem); + line-height: 1.05; + margin: 0; +} + +.hero-subtitle { + font-size: 1.1rem; + line-height: 1.65; + margin: 0; + max-width: 36ch; +} + +.hero-personalization { + display: flex; + flex-wrap: wrap; + gap: 0.75rem; + margin: 0.6rem 0 1.2rem; +} + +.hero-pill { + display: inline-flex; + align-items: center; + padding: 0.45rem 0.9rem; + border-radius: 999px; + background: rgba(255, 255, 255, 0.2); + border: 1px solid rgba(255, 255, 255, 0.25); + font-size: 0.85rem; + font-weight: 600; + letter-spacing: 0.01em; + color: #fff; +} + +.deposit-actions { + display: flex; + flex-wrap: wrap; + gap: 0.85rem; + align-items: center; +} + +.deposit-actions .learn-more-btn { + border-radius: 999px; + padding: 0.85rem 1.9rem; + font-size: 1rem; + font-weight: 600; + letter-spacing: 0.01em; + text-transform: none; + box-shadow: 0 12px 28px rgba(0, 0, 0, 0.25); + transition: transform 0.2s ease, box-shadow 0.2s ease; +} + +/* ensure deposit action buttons have enough room for text */ +.deposit-actions .learn-more-btn { + min-width: 180px; + display: inline-flex; + justify-content: center; + align-items: center; + overflow: visible; +} + +.deposit-actions .learn-more-btn:hover { + transform: translateY(-2px); + box-shadow: 0 18px 30px rgba(0, 0, 0, 0.3); +} + +.deposit-assurance { + font-size: 0.95rem; + line-height: 1.6; + opacity: 0.9; + margin: 0; + max-width: 40ch; +} +.deposit-assurance a { + color: #fff !important; + text-decoration-color: rgba(255, 255, 255, 0.8); +} + +.deposit-trust-bar { + display: flex; + flex-wrap: wrap; + gap: 0.9rem; + margin-top: 0.75rem; + font-size: 0.85rem; + opacity: 0.85; +} + +.deposit-trust-badge { + padding: 0.35rem 0.85rem; + border-radius: 999px; + background: rgba(255, 255, 255, 0.18); + border: 1px solid rgba(255, 255, 255, 0.22); + backdrop-filter: blur(6px); +} + +.hero-card { + background: rgba(255, 255, 255, 0.15); + border-radius: 22px; + padding: 2.25rem; + display: flex; + flex-direction: column; + gap: 1.5rem; + backdrop-filter: blur(12px); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.35); +} + +.hero-card h3 { + margin: 0; + font-size: 1.3rem; + text-transform: uppercase; + letter-spacing: 0.12rem; + opacity: 0.95; +} + +.hero-card-body { + display: flex; + flex-direction: column; + gap: 1.25rem; +} + +.hero-card .html-dynamic { + text-align: left; + font-size: 1rem; + line-height: 1.7; +} + +.hero-card .html-dynamic p { + margin-bottom: 0.85rem; +} + +.hero-card .html-dynamic .emphasis { + color: #fff; + text-shadow: 0 0 18px rgba(255, 255, 255, 0.3); +} + +.hero-card-stats { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); + gap: 0.9rem; +} + +.hero-card-stat { + background: rgba(0, 0, 0, 0.25); + border-radius: 16px; + padding: 0.85rem 1rem; + display: flex; + flex-direction: column; + gap: 0.35rem; + font-size: 0.95rem; +} + +.hero-card-stat-label { + text-transform: uppercase; + letter-spacing: 0.08rem; + font-size: 0.75rem; + opacity: 0.7; +} + +.hero-card-stat-value { + font-size: 1.15rem; + font-weight: 700; +} + +.hero-checklist { + list-style: none; + padding: 0; + margin: 0; + display: grid; + gap: 0.65rem; +} + +.hero-checklist li { + display: flex; + gap: 0.7rem; + align-items: flex-start; + font-size: 0.98rem; + line-height: 1.6; +} + +.hero-checklist li::before { + content: "\2713"; + color: var(--fyncom-yellow); + font-weight: 700; + margin-top: 0.05rem; +} + +.deposit-section { + display: flex; + flex-direction: column; + gap: 1.75rem; +} + +.deposit-section header { + display: flex; + flex-direction: column; + gap: 0.75rem; + max-width: 680px; +} + +.deposit-section header h2 { + font-size: clamp(2rem, 3vw, 2.45rem); + margin: 0; + color: var(--fyncom-darkest-cyan); +} + +.deposit-section header p { + margin: 0; + font-size: 1.05rem; + line-height: 1.75; + color: rgba(0, 0, 0, 0.72); +} + +.deposit-info-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); + gap: 1.5rem; +} + +.deposit-info-card { + background: linear-gradient(160deg, rgba(var(--fyncom-blue-rgb), 0.09) 0%, rgba(255, 255, 255, 0.95) 100%); + border: 1px solid rgba(var(--fyncom-blue-rgb), 0.2); + border-radius: 20px; + padding: 1.75rem; + display: flex; + flex-direction: column; + gap: 0.75rem; + box-shadow: 0 18px 35px rgba(0, 0, 0, 0.08); +} + +.deposit-info-card h3 { + margin: 0; + font-size: 1.2rem; + color: var(--fyncom-darkest-cyan); +} + +.deposit-info-card p { + margin: 0; + font-size: 1rem; + line-height: 1.7; +} + +.deposit-steps-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + gap: 1.5rem; +} + +.deposit-step-card { + background: #fff; + border-radius: 22px; + padding: 1.9rem 1.75rem; + border: 1px solid rgba(0, 0, 0, 0.07); + box-shadow: 0 15px 35px rgba(0, 0, 0, 0.07); + display: flex; + flex-direction: column; + gap: 1rem; +} + +.deposit-step-number { + width: 46px; + height: 46px; + border-radius: 50%; + display: grid; + place-items: center; + background: rgba(var(--fyncom-red-rgb), 0.12); + color: var(--fyncom-red); + font-weight: 700; + font-size: 1.2rem; +} + +.deposit-step-card h3 { + margin: 0; + font-size: 1.15rem; + color: var(--fyncom-darkest-cyan); +} + +.deposit-step-card p { + margin: 0; + font-size: 0.98rem; + line-height: 1.7; +} + +/* links inside step copy should be white on gradient background */ +.deposit-step-card p a { + color: #fff !important; + text-decoration-color: rgba(255, 255, 255, 0.8); +} + +.deposit-testimonial { + background: linear-gradient(140deg, rgba(var(--fyncom-blue-rgb), 0.15) 0%, rgba(255, 255, 255, 0.95) 100%); + border-radius: 24px; + padding: 2.5rem; + border: 1px solid rgba(var(--fyncom-blue-rgb), 0.15); + box-shadow: 0 20px 40px rgba(0, 0, 0, 0.12); + position: relative; + overflow: hidden; +} + +.deposit-testimonial::before { + content: "\201C"; + position: absolute; + top: -35px; + left: -5px; + font-size: 9rem; + color: rgba(var(--fyncom-blue-rgb), 0.15); + font-family: Georgia, serif; +} + +.deposit-testimonial blockquote { + margin: 0; + font-size: 1.15rem; + line-height: 1.8; + color: rgba(0, 0, 0, 0.75); + position: relative; + z-index: 1; +} + +.deposit-testimonial cite { + display: block; + margin-top: 1.5rem; + font-style: normal; + font-weight: 600; + color: var(--fyncom-darkest-cyan); +} + +.deposit-cta-card { + background: linear-gradient(120deg, rgba(var(--fyncom-red-rgb), 0.85) 0%, rgba(var(--fyncom-blue-rgb), 0.85) 100%); + border-radius: 26px; + padding: 2.75rem; + color: #fff; + display: grid; + gap: 1.35rem; + box-shadow: 0 25px 60px rgba(0, 0, 0, 0.25); +} + +.deposit-cta-card h2 { + margin: 0; + font-size: clamp(2rem, 3vw, 2.5rem); +} + +.deposit-cta-card p { + margin: 0; + font-size: 1.05rem; + line-height: 1.7; + max-width: 52ch; +} + +.deposit-cta-actions { + display: flex; + flex-wrap: wrap; + gap: 0.85rem; +} + +.deposit-cta-actions .cta-link-secondary { + display: inline-flex; + align-items: center; + gap: 0.4rem; + padding: 0.85rem 1.4rem; + border-radius: 999px; + border: 1px solid rgba(255, 255, 255, 0.5); + color: #fff; + text-decoration: none; + font-weight: 600; + transition: background 0.2s ease; +} + +.deposit-cta-actions .cta-link-secondary:hover { + background: rgba(255, 255, 255, 0.18); +} + +.deposit-whitepaper { + display: grid; + gap: 1.5rem; +} + +.deposit-whitepaper p { + margin: 0; + font-size: 1.02rem; + line-height: 1.75; +} + +@media (max-width: 960px) { + .deposit-main { + padding: 3.5rem 1.25rem 4rem; + } + + .deposit-hero { + padding: 2.4rem; + } +} + +@media (max-width: 640px) { + .deposit-main { + padding: 3rem 1rem; + } + + .deposit-hero { + padding: 2rem; + border-radius: 22px; + display: flex; + flex-direction: column; + gap: 1.75rem; + overflow: visible; + } + + .hero-title { + font-size: clamp(2rem, 8vw, 2.8rem); + } + + .deposit-actions .learn-more-btn { + width: 100%; + justify-content: center; + } + + .hero-card { + padding: 1.9rem; + } + + .deposit-trust-bar { + flex-direction: column; + align-items: flex-start; + } + + .hero-personalization { + flex-direction: column; + align-items: stretch; + gap: 0.6rem; + } + + .hero-pill { + width: 100%; + justify-content: center; + } +} + +@media (prefers-color-scheme: dark) { + .deposit-page { + background: linear-gradient(180deg, rgba(0, 53, 84, 0.65) 0%, rgba(0, 0, 0, 0.85) 100%); + } + + .hero-title, + .deposit-section header h2, + .hero-card h3, + .deposit-info-card h3, + .deposit-step-card h3 { + color: rgba(var(--fyncom-red-rgb), 0.9); + } + + .hero-personalization { + gap: 0.65rem; + } + + .hero-pill { + background: rgba(var(--fyncom-red-rgb), 0.18); + border-color: rgba(var(--fyncom-red-rgb), 0.32); + color: rgba(255, 255, 255, 0.92); + } + + .hero-subtitle, + .deposit-assurance, + .deposit-info-card, + .deposit-info-card p, + .deposit-step-card, + .deposit-step-card p, + .hero-checklist li { + color: rgba(255, 255, 255, 0.78); + } + + .deposit-section header p, + .deposit-whitepaper p { + color: rgba(255, 255, 255, 0.75); + } + + .hero-card .html-dynamic, + .hero-card .html-dynamic p { + color: rgba(255, 255, 255, 0.85); + } + + .deposit-trust-badge { + background: rgba(255, 255, 255, 0.12); + border-color: rgba(255, 255, 255, 0.18); + } + + .deposit-info-card { + background: linear-gradient(155deg, rgba(255, 255, 255, 0.08) 0%, rgba(19, 220, 236, 0.05) 100%); + border-color: rgba(255, 255, 255, 0.1); + box-shadow: 0 18px 35px rgba(0, 0, 0, 0.5); + } + + .deposit-step-card { + background: rgba(0, 0, 0, 0.55); + border-color: rgba(255, 255, 255, 0.1); + box-shadow: 0 18px 35px rgba(0, 0, 0, 0.55); + } + + .deposit-testimonial { + background: linear-gradient(140deg, rgba(255, 255, 255, 0.05) 0%, rgba(0, 0, 0, 0.65) 100%); + border-color: rgba(255, 255, 255, 0.12); + box-shadow: 0 18px 35px rgba(0, 0, 0, 0.65); + } + + .deposit-testimonial blockquote, + .deposit-testimonial cite { + color: rgba(255, 255, 255, 0.82); + } + + .deposit-cta-card p { + color: rgba(255, 255, 255, 0.88); + } +} diff --git a/src/pages/make-a-deposit-v1.js b/src/pages/make-a-deposit-v1.js new file mode 100644 index 0000000..c7b1e68 --- /dev/null +++ b/src/pages/make-a-deposit-v1.js @@ -0,0 +1,305 @@ +import React, { useState, useEffect } from "react" +import Header from "../components/header" +import Footer from "../components/footer" +import "../components/white-paper.css" +import "../components/blocked-email.css" +import "../components/contact.css" +import { useLocation } from "@reach/router" +import whitePaper from "../../static/pdfs/fyncom-Original-White-Paper-For-KarmaCall-Update.pdf" +import Seo from "../components/seo" +import PdfContent from "../components/PdfContent" +import { MakeADepositModal } from "../components/Modal" +import { logEvent } from "../utils/analytics" + +const MakeADepositV1 = () => { + const [blockedEmailDetails, setBlockedEmailDetails] = useState(null) + const location = useLocation() + const [dynamicMessage, setDynamicMessage] = useState("") + const [isModalOpen, setIsModalOpen] = useState(false) + const [urlToExecute, setUrlToExecute] = useState(null) + const [stripeUrl, setStripeUrl] = useState("") + + const toggleModal = () => { + setIsModalOpen(!isModalOpen) + logEvent("Deposit", "Toggle Nano Deposit Modal", isModalOpen ? "Close" : "Open") + } + + useEffect(() => { + const searchParams = new URLSearchParams(location.search) + const blockedEmailId = searchParams.get("depositId") + console.log("deposit ID is %s", blockedEmailId) + if (blockedEmailId) { + getBlockedEmailDetails(blockedEmailId) + } + }, [location]) + + useEffect(() => { + if (urlToExecute) { + window.location.href = urlToExecute + } + }, [urlToExecute]) + + const getBlockedEmailDetails = async blockedEmailId => { + let newUrl = `${process.env.GATSBY_API_URL}email/blocked/${blockedEmailId}` + try { + const response = await fetch(newUrl, { + method: "GET", + headers: { + "Content-Type": "application/json", + Accept: "application/json", + }, + }) + + if (response.ok) { + const data = await response.json() + const depositPaid = data.depositPaid + console.log("deposit paid status: " + depositPaid) + + if (depositPaid) { + // provide extra info - we'll handle this later as it's an edge case for now + } + setBlockedEmailDetails(data) + + // Format the deposit amount properly (avoiding scientific notation) + const formattedAmount = formatDepositAmount(data.recipientMin) + + const newMessage = data.depositPaid + ? `
` + : `Your email from ${data.senderEmail} to ${data.recipientEmail} was automatically filtered.
+This moves your email to their main inbox instantly
+Your message goes to the top of their inbox
+If they respond within ${data.daysDeadline} days, you pay nothing
+You only pay if ${data.recipientEmail} doesn't respond within ${data.daysDeadline} days. + Most people respond within 24-48 hours, so you'll likely get your full deposit back.
+This micro-deposit proves you're a real person with a genuine message, not spam. It helps ${data.recipientEmail} + prioritize legitimate emails while earning a small reward for managing their inbox effectively.
++ Remember: Full refund if they respond within {blockedEmailDetails.daysDeadline} days +
+ {isModalOpen &&Loading email details...
++ Make a tiny deposit. Get immediate attention. Pay nothing if they respond. +
++ You're here because someone is using FynCom's email filtering system. Your message was automatically moved to a secondary folder, but you can + get it prioritized! +
+This moves your email to their main inbox instantly
+Your message goes to the top of their inbox
+If they respond within their deadline, you pay nothing
++ You only pay if the recipient doesn't respond within their specified timeframe. Most people respond within 24-48 hours, so you'll likely get + your full deposit back. +
++ This micro-deposit proves you're a real person with a genuine message, not spam. It helps email recipients prioritize legitimate messages while + earning a small reward for managing their inbox effectively. +
+Processed through Stripe & Nano crypto
+Your email moves to their inbox immediately
+Tiny amounts that prove you're real
++ Tired of spam in your own inbox? You can use this same system! Sign up at app.fyncom.com to + filter your emails and earn rewards when genuine senders reach out to you. +
+We asked ourselves this question and built a solution. Here's how we're fixing communication for everyone.
++ Our approach creates trust between strangers with shared interests using tiny "proof-of-intent" deposits. Read our original white paper that became{" "} + our first patent, powers our KarmaCall app, and + forms the foundation of FynCom. +
++ Unknown senders stake a tiny deposit to reach the main inbox. If the recipient engages, the sender gets it back. If not, the user keeps it. Simple. +
+Fetching your deposit details…
+{error}
++ From {details.senderEmail} to {details.recipientEmail} +
+Pay the deposit to move this email to the recipient's {labelName} immediately.
++ If they respond within {deadlineDays} days, your deposit is automatically refunded. +
+If there's no response, the recipient keeps a portion as a reward for their time.
++ Remember: Full refund if they respond within {deadlineDays} days +
+ {isModalOpen &&It's an economic good‑faith signal that discourages spam. If the recipient engages, you're refunded automatically.
++ Paste your depositId from the link to see your sender/recipient details and complete a deposit. No worries—if they reply, + you're refunded. +
+ +Stake a small, refundable amount to signal good faith.
+Your email moves to the main inbox instantly.
+If they respond within the window, you get it back.
++ Spam is cheap to send. A refundable deposit flips the economics—only serious senders stake it. If it's not useful, the user keeps a portion. +
+ +Prefer crypto? Use Nano (XNO) via the app wallet.
+Processed through Stripe & Nano crypto
+Your email moves to their inbox immediately
+Tiny amounts that prove you're real
++ Tired of spam in your own inbox? You can use this same system! Sign up at app.fyncom.com to + filter your emails and earn rewards when genuine senders reach out to you. +
++ If there's no response in the refund window, the recipient keeps a portion of the deposit as a reward for their time. +
+Known contacts are automatically whitelisted—no deposit needed.
+Deposits are processed through trusted providers, and refunds are automatic based on recipient engagement.
+You're here because someone you're emailing protects their inbox with FynCom refundable deposits.
+Send a quick, fully refundable deposit to fast-track your note into their main inbox. When they reply, every cent comes right back to you.
` + ) + const [isModalOpen, setIsModalOpen] = useState(false) + + const toggleModal = () => { + setIsModalOpen(!isModalOpen) + logEvent("Deposit", "Toggle Nano Deposit Modal", isModalOpen ? "Close" : "Open") + } + + useEffect(() => { + const searchParams = new URLSearchParams(location.search) + const blockedEmailId = searchParams.get("depositId") + if (blockedEmailId) { + getBlockedEmailDetails(blockedEmailId) + } + }, [location]) + + const getBlockedEmailDetails = async blockedEmailId => { + const apiUrl = `${process.env.GATSBY_API_URL}email/blocked/${blockedEmailId}` + try { + const response = await fetch(apiUrl, { + method: "GET", + headers: { + "Content-Type": "application/json", + Accept: "application/json", + }, + }) + + if (!response.ok) { + throw new Error("Failed to fetch email details") + } + + const data = await response.json() + const depositPaid = data.depositPaid + const secondaryLabel = data.emailLabel ? data.emailLabel : "FynFiltered" + const fynMail = "FynMail" + + setBlockedEmailDetails(data) + + const senderEmail = data.senderEmail || data.senderEmailRaw || "you" + const thankYouMessage = `Thanks for sending the $${data.recipientMin} deposit for ${data.recipientEmail}.
+We're alerting them now so they can reply and release your refund. You can manage everything inside app.fyncom.com.
` + + const invitationMessage = `Your message from ${senderEmail} is ready for ${data.recipientEmail}, but it's waiting in ${secondaryLabel}.
+Send a fully refundable $${data.recipientMin} deposit to move it to their main inbox with a verified ${fynMail} badge. If they reply within ${data.daysDeadline} days, the funds return to you instantly.
` + + setDynamicMessage(depositPaid ? thankYouMessage : invitationMessage) + } catch (error) { + console.error("ERROR", error) + } + } + + const buildStripeUrl = () => { + if (!blockedEmailDetails) { + return STRIPE_CHECKOUT_URL + } + + const queryParts = [] + + if (blockedEmailDetails.senderEmailRaw) { + queryParts.push(`prefilled_email=${encodeURIComponent(blockedEmailDetails.senderEmailRaw)}`) + } + + if (blockedEmailDetails.blockedEmailLogId) { + queryParts.push(`client_reference_id=${encodeURIComponent(blockedEmailDetails.blockedEmailLogId)}`) + } + + const queryString = queryParts.join("&") + return queryString ? `${STRIPE_CHECKOUT_URL}?${queryString}` : STRIPE_CHECKOUT_URL + } + + const renderPaymentButton = () => { + const stripeUrl = buildStripeUrl() + + return ( + <> + + {isModalOpen &&Refundable deposits powered by FynCom
+{heroSubtitleText}
+ {blockedEmailDetails && ( ++ Deposits stay in secure escrow until the conversation moves forward. No reply? You decide what happens next inside{" "} + app.fyncom.com. +
+Refundable deposits flip outreach from interruption to invitation. Show you respect their focus and they'll reciprocate.
+Your deposit proves this isn't another spray-and-pray blast. You're demonstrating that the conversation is worth pursuing.
+Busy people filter ruthlessly. A refundable deposit switches the frame from "stranger" to "partner" and earns a thoughtful read.
+When they reply, you get your money back. If they decline, they can keep the deposit as a fair trade for their time and attention.
+Three simple steps move your message from the sidelines to the spotlight.
+Use Stripe or Nano to post the refundable deposit. We secure the funds and attach the verified FynMail badge to your message.
++ Your note leaps to the top of {recipientPossessive} inbox, and we notify {recipientDisplay} that a serious sender is waiting. +
++ If they respond within {responseDeadlineText}, the deposit returns to you instantly. Manage every step from{" "} + + app.fyncom.com + + . +
++ "Inboxes finally feel balanced. People who value our time reach us instantly, and the rest learn to respect the process." + - Team FynCom ++
Use the same trust engine to protect your community, marketplace, or sales outreach program. We'll help you launch in days, not months.
+ ++ Ever wonder why spam persists? Our original whitepaper breaks down the incentives and shows how refundable deposits make legitimate outreach win. + Take a peek and imagine this framework inside your own product. +
+Your email (${data.senderEmail}) to ${data.recipientEmail} landed in their - ${data.labelName}, but was moved to a secondary inbox, ${secondaryLabel}, - because they don't know you. -
-${data.recipientEmail} requires a $${data.recipientMin} - refundable deposit for your email to move to their main inbox and be marked as ${fynMail}. If you pay - this deposit, ${data.recipientEmail} will be notified and they will immediately see your email. If - ${data.recipientEmail} responds to your FynMail within ${data.daysDeadline} days, - you will get your deposit back. Then you may manage your deposit refund by accessing app.fyncom.com. -
` - setDynamicMessage(newMessage) - } else { - throw new Error("Failed to fetch email details") - } - } catch (error) { - console.error("ERROR", error) - } + // Show nothing until variant is determined + if (!variant) { + return null } - // Function to render the payment button or any other elements based on the blocked email details - function renderPaymentButton() { - if (blockedEmailDetails) { - console.log("data is here from {}", blockedEmailDetails) - // Render your button and use the details from blockedEmailDetails - const stripeUrl = `https://buy.stripe.com/fZe5obgilbJa5lm001?prefilled_email=${blockedEmailDetails.senderEmailRaw}&client_reference_id=${blockedEmailDetails.blockedEmailLogId}` - // todo - only use this if you plan to show a button to everyone that visits this page. - const stripeUrlDefault = `https://buy.stripe.com/fZe5obgilbJa5lm001` - return ( - <> - logEvent("Deposit", "Click", "Stripe Deposit")} - > - Deposit cash - - - {isModalOpen &&- Still here? Why not read something interesting? Ever get annoying calls? Emails? DMs? Read below to find out how we're helping fix that problem by - getting people paid to block scam / spam and respond to good messages. -
-...and how can I stop scams, but get useful outreach?
-
- That's the thought that started FynCom on a journey of exploring an emerging market based in "communications + currency" to create trust between
- strangers with shared interests. Here's our paper we wrote to record our thought process - it later became{" "}
- our 1st patent, app, and is the basis for how we
- came to be. Thanks for reading!
- - Team FynCom
-