├── .gitignore ├── LICENSE ├── README.md ├── assets ├── chrome-bug.css ├── components.css └── main.css ├── components ├── Features.js ├── Layout.js ├── Pricing.js ├── PricingSnippet.js ├── SEOMeta.js ├── Testimonials.js ├── icons │ ├── AnimIcon.js │ ├── DownArrow.js │ ├── Github.js │ ├── Google.js │ ├── LandingImageOne.js │ ├── Logo.js │ ├── LoomIcon.js │ ├── Open.js │ ├── ReactIcon.js │ ├── ReactIconDark.js │ ├── Stripe.js │ ├── StripeConnect.js │ └── Twitter.js └── ui │ ├── AdminNavbar │ ├── AdminDesktopNav.js │ ├── AdminMobileNav.js │ └── AdminNavItems.js │ ├── Button.js │ ├── Footer.js │ ├── Forms │ └── CampaignForm.js │ ├── Input │ ├── Input.js │ ├── Input.module.css │ └── index.js │ ├── LoadingDots │ ├── LoadingDots.js │ ├── LoadingDots.module.css │ └── index.js │ ├── Modal.js │ ├── Navbar.js │ ├── SetupProgress.js │ ├── SimpleNav.js │ └── StripeDisconnectNotice.js ├── emails └── inviteAffiliate.js ├── jsconfig.json ├── next.config.js ├── package-lock.json ├── package.json ├── pages ├── _app.js ├── _document.js ├── api │ ├── affiliates │ │ ├── accept-team-invite.js │ │ ├── check-team-invites.js │ │ ├── delete-team-user.js │ │ ├── get-team-data.js │ │ ├── get-team-details.js │ │ ├── get-team-name.js │ │ ├── get-team-usage.js │ │ └── invite.js │ ├── create-checkout-session.js │ ├── create-portal-link.js │ ├── customer-events.js │ ├── embedData.js │ ├── get-account-details.js │ ├── get-stripe-id.js │ ├── subscribe.js │ ├── v1 │ │ ├── campaign-details.js │ │ ├── convert-referral.js │ │ ├── record-impression.js │ │ └── verify-company.js │ └── webhooks.js ├── changelog.js ├── dashboard │ ├── [companyId] │ │ ├── affiliates │ │ │ ├── index.js │ │ │ └── invite.js │ │ ├── campaigns │ │ │ ├── [campaignId] │ │ │ │ ├── edit.js │ │ │ │ └── index.js │ │ │ ├── index.js │ │ │ └── new.js │ │ ├── index.js │ │ ├── settings.js │ │ └── setup │ │ │ ├── add.js │ │ │ ├── campaign.js │ │ │ ├── currency.js │ │ │ ├── index.js │ │ │ ├── stripe.js │ │ │ └── verify.js │ ├── add-company.js │ ├── create-team.js │ ├── index.js │ ├── plan.js │ └── stripe-verify.js ├── index.js ├── pricing.js ├── reset-password.js ├── signin.js └── signup.js ├── postcss.config.js ├── public ├── affiliate-screenshot.webp ├── android-chrome-192x192.png ├── android-chrome-256x256.png ├── apple-touch-icon.png ├── browserconfig.xml ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── fonts │ ├── TTInterfaces-Bold.woff │ ├── TTInterfaces-Bold.woff2 │ ├── TTInterfaces-Medium.woff │ ├── TTInterfaces-Medium.woff2 │ ├── TTInterfaces-Regular.woff │ └── TTInterfaces-Regular.woff2 ├── invite-screenshot.webp ├── js │ └── reflio.min.js ├── mstile-150x150.png ├── og.png ├── platform-screenshot.webp ├── reflio-logo.png ├── safari-pinned-tab.svg ├── site.webmanifest ├── standard-embed.png └── testimonials │ ├── _thunk_.jpeg │ ├── briansaetre.jpeg │ ├── foliofed.jpeg │ └── maxwellcdavis.jpeg ├── schema.sql ├── scripts └── reflio.js ├── tailwind.config.js ├── utils ├── AffiliateContext.js ├── CampaignContext.js ├── CompanyContext.js ├── email-builder-inner.js ├── email-builder-server.js ├── helpers.js ├── sendEmail.js ├── setupStepCheck.js ├── stripe-client.js ├── stripe-helpers.js ├── stripe.js ├── supabase-admin.js ├── supabase-client.js ├── useDatabase.js └── useUser.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /.cache/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env.local 30 | .env.development.local 31 | .env.test.local 32 | .env.production.local 33 | 34 | # vercel 35 | .vercel 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
Create a referral program without breaking the bank.
8 | 9 | 10 | 11 | > NOTE: Reflio is under active development. Please visit our website (Reflio.com) to stay up to date with the latest info about our go-live date, information on contributing and more. 12 | 13 | Reflio puts digital privacy first and is proudly open-source. All referrals are processed through European-owned infrastructure, and our company is registered in the UK. With Reflio, referrals located in the EU are automatically required to confirm their consent before a cookie is set. 14 | 15 |{feature.name}
63 |90 | 91 | {priceString} 92 | 93 | 94 | {' '}/{billingInterval} 95 | 96 |
97 | { 98 | billingInterval === 'year' && 99 | 100 | Limited time only: SAVE 40% 101 | 102 | } 103 |No hidden fees. No complicated plans.
11 |Perfect for establised web apps and production environments.
16 |100% free to setup and start collecting submissions. Suitable for indie makers and smaller companies.
33 |Great stuff - a space that needs a cost effective product!
11 |Reflio.com by @richiemcilroy is privacy conscious and doesn't break the bank. It's still in beta but I'm excited about it.
18 |Fun idea. I've been looking for an affordable service like this too. Wasn't impressed by the market's current offerings the last time I looked. Great domain name too!
25 |Richie, I've just seen this thread on Reflio. Great idea and it looks mint!
32 |📢 We're currently in public beta!
20 |Your Stripe account is no longer connected and is not sending data. Please reconnect your account so that no data is missed, and referral data is tracked.
11 |Your source for recent updates to Reflio
12 |54 | Email 55 | | 56 |57 | Campaign 58 | | 59 |60 | Impressions 61 | | 62 |63 | Revenue 64 | | 65 |66 | Signup Method 67 | | 68 |69 | Status 70 | | 71 |
---|---|---|---|---|---|
77 |
78 |
82 |
79 | {affiliate?.invited_user_id}
80 |
81 | |
83 |
84 | {
85 | affiliate?.campaign_name ?
86 | {affiliate?.campaign_name}
87 | :
88 | This campaign was either deleted or no longer exists. 89 | } 90 | |
91 |
92 | {affiliate?.impressions} 93 | |
94 |
95 | $0 96 | |
97 | 98 | {affiliate?.invite_email === 'manual' ? 'Public signup' : 'Manual invite'} 99 | | 100 |101 | 102 | {affiliate?.accepted === true ? 'Active' : 'Invited' } 103 | 104 | | 105 |
{activeCampaign?.commission_type === 'percentage' ? `${activeCampaign?.commission_value}% commission on all paid referrals.` : `${activeCompany?.company_currency}${activeCampaign?.commission_value} commission on all paid referrals.`}
74 |77 | Affiliates can join your campaign using the link below: 78 |
79 |87 | If you'd prefer to manually invite your affiliates, you can invite them here. 88 |
89 |You have no new commissions.
103 |You have no affiliates.
115 |63 | Campaign 64 | | 65 |66 | Affiliates 67 | | 68 |69 | Revenue 70 | | 71 |
---|---|---|
77 | {
78 | campaign?.default_campaign === true &&
79 |
80 | Default Campaign
81 |
82 | }
83 |
84 | {campaign?.commission_type === 'percentage' ? `${campaign?.commission_value}% commission on all paid referrals` : `${activeCompany?.company_currency}${campaign?.commission_value} commission on all paid referrals`} 85 |
86 |
93 |
87 | New affiliates can join at
88 | |
94 | 95 | 0 affiliates 96 | | 97 |$0 USD | 98 |
Paste the following JavaScript snippet into your website's {``}
tag
To track a referral conversion your website, you need to run the {`reflio('convert)`}
function when you are creating the Stripe customer. This process usually happens on a thank you page, via the Stripe API in your backend or some other callback that occurs after the Stripe checkout has been completed.
Your first campaign is ready.
41 |Campaign name:
43 |{userCampaignDetails[0]?.campaign_name}
44 |Commission:
47 | { 48 | userCampaignDetails[0]?.commission_type === "percentage" ? 49 |{userCampaignDetails[0]?.commission_value}%
50 | : 51 |{activeCompany?.company_currency}{userCampaignDetails[0]?.commission_value}
52 | } 53 |{userCampaignDetails[0]?.commi}
54 |Your Stripe account is connected.
40 |Account name:
42 |{activeCompany?.stripe_account_data?.business_profile?.name}
43 |Stripe ID:
46 |{activeCompany?.stripe_id}
47 |{submissions?.length} of {planDetails === 'free' ? '15' : '∞'} submissions received.
90 |{userCompanyDetails?.length} of {planDetails === 'free' ? '1' : '∞'} companies created.
91 | { 92 | planDetails === 'free' && 93 |Upgrade to PRO for $14/month to unlock unlimited submissions, unlimited companies, automatic console errors & more.
94 | } 95 |{error}
80 |