Wednesday, January 8, 2025

Comparing payment provider fees and features: a breakdown of few popular options

As I prepare to launch my new product, I’ve been evaluating several payment providers (LemonSqueezy, Paddle and PayPro Global) to find the best fit for my needs. To simplify the process, I created this document to consolidate all the relevant details about fees, affiliate commissions, payout methods, and other critical features in one place. By comparing these aspects across platforms, I aim to make an informed decision—and help others do the same.

LemonSqueezy

Fees

LemonSqueezy fee details.

Platform Fees

Their base fee is 5% + $0.50. Additionally to that, they charge:

+0.5% for subscription payments
+1.5% for international (outside of the US) transactions
+1.5% for PayPal transactions

So for example, the total fee for international subscription via PayPal would be 8.5% + $0.50.

Affiliates and Affiliate Fees

They have an affiliate fee of 3% for each sale done through affiliate referral.
They also deduct 2% from affiliate commission. 

For subscriptions, affiliates earn a commission on the initial sale, as well as on all recurring charges, as long as the customer remains subscribed. 

LemonSqueezy affiliate platform.

Payouts and Payout Fees

For payouts via Stripe:

  • Free for bank accounts in the US
  • 1% per payout for bank accounts outside the US

For Payouts via PayPal:

  • A flat fee of $0.50 per payout for accounts in the US
  • 3% capped at $30 per payout for accounts outside the US

Payout schedule is twice a month and minimum payout threshold is $50.

Paddle

  • They advertise invoicing as a separate service. Customer invoicing is not done automatically.
  • They say that they are working with two affiliate platforms, FirstPromoter and Rewardful, but that they don’t have direct affiliate programs.
  • Contact form doesn't allow duck.com email addresses.

Fees

Platform Fees

Their base fee is 5% + $0.50. There are no additional fees. For subscriptions under $10, they charge a flat 10% fee.

Payouts and Payout Fees

No any additional payout fees, supported payout methods are: PayPal, Payoneer, Bank/Wire transfer. Payout schedule is once a month and minimum payout threshold is $100.

PayPro Global

They have an affiliate system, it can be set up both for the first order only, or for recurring subscriptions. They support tier commissions too.

Fees

If a chargeback occurs, there is a chargeback fee of $15, regardless of the transaction amount.

Platform Fees

Their fee is 4.9% + $1. There is a separate fee for transactions under $10, and it is $0.90. There are no additional fees.

Payouts and Payout Fees

Payouts are once a month. The minimum payout threshold is $400 USD. Payout fee depends on the method:

  • Payoneer pre-paid card – $2 USD
  • Wire Transfer – $21 USD
  • ACH (North America) – $3 USD
  • PayPal For US & Canada – Free
  • PayPal Internationally – 2% (max $20 USD fee)

What to ask your potential payment provider

In case you want to prospect another payment provider, here is a list of additional questions that are mandatory to have answers to:

  • What are the payout fees?
  • What payout methods are supported?
  • What is the minimum payout threshold?
  • What is the payout schedule?
  • Is there any special pricing for microtransactions, e.g., products under $10?
  • Are there any affiliate fees?
  • How is the affiliate commission for subscriptions set up: only for the first charge or for all recurring charges?




Sunday, January 5, 2025

2024. u retrovizoru: Knjiški pregled

U 2024. godini pročitao sam 17 knjiga. Prema statistikama GoodReads-a, kojeg koristim od 2016. godine, čini se da mi je to gornji godišnji limit. Ali dobro je da nađem vremena i za to. Od tih 17 knjiga, izdvojio bih i preporučio sljedeće četiri:

Štorije od žalosti, Drago Orlić

Preporuka iz jedne epizode Explore. Zbirka životnih pričica temeljenih na stvarnim događajima i ljudima. Mjesto radnje je Istra, a period obuhvaća od kraja 19. do kraja 20. stoljeća. Svaka štorija je upečatljiva i osobna, a prikazuje i širi društveni kontekst tog podneblja u tom vremenu. Mene su štorije podsjetile na uratke braće Taviani. Da su braća živa, miritalo bi da ih i ekraniziraju. I to nitko drugi nego oni.

Što nam serviraju: zašto je gotovo sve što ste čuli o hrani pogrešno, Tim Spector

Originalni naslov knjige je Spoon-Fed: Why Almost Everything We’ve Been Told About Food is Wrong.

Zanimljivo je da je ova knjiga preporuka jednog hrvatskog 'političara', katolibana i antivaksera. Ne, ne pratim njegovu inače dijareju na društvenim mrežama, nego jednog od njegovih kritičara, pa je posredno tim putem ta preporuka dospjela i do mene. Naslov knjige je poprilično točan, barem u mom osobnom slučaju, jer knjiga razotkriva niz poprilično uvriježenih i lažnih mitova o prehrani. Napisao ju je profesor genetičke epidemiologije i stručnjak za mikrobiom crijeva. Obavezno je pročitajte ako vodite računa o vlastitom zdravlju.

Životinjska farma, George Orwell

Brutalna kritika brutalne politike Sovjetskog Saveza. "Sve životinje jednake, ali neke životinje su jednakije od drugih", vrijedi na žalost kod nas i danas. Jer naši su vodeći političari, iako su neki od njih kasnije promijenili boje, ipak bili mladi i perspektivni komunistički lideri, pa njihova percepcija vlastite uloge, uloge medija i gospodarstva nije puno drugačija od percepcije koju imaju svinje iz Orwellove farme. Zna se na koga mislim. Oink, oink.

Predvidljivo iracionalni: nevidljive sile koje upravljaju našim odlukama, Dan Ariely

Originalni naslov knjige je Predictably Irrational: The Hidden Forces That Shape Our Decisions.

Na naše odluke utječu očekivanja, emocije, društvene norme i drugi nevidljivi faktori. Sustavno činimo iste pogreške – precjenjujemo ono što imamo, preplaćujemo ili podcjenjujemo ono što nemamo, odgađamo bitne odluke, itd. Svi ti obrasci su predvidljivi, a ne nasumični. Ova knjiga govori o tome kako ih prepoznati i donositi bolje odluke u životu.

Sve spomenute knjige imate u gradskoj knjižnici, a godišnja članarina je manja od €15. Vjerojatno jedna od najboljih investicija za ovu godinu. Jedna od najboljih, a možda i najbolja investicija za ovu godinu. Navali narode.

Saturday, January 4, 2025

Software development on a touch phone (2)

Continuing on my previous post Software development on a touch phone (1), I’m excited to share that my Bluetooth keyboard has finally arrived! I’m still getting used to its dimensions and unfamiliar layout. Additionally, I’ve set up Neovim and even added a GitHub Copilot plugin. The results are promising—check out the images and video below!

Rate my setup:
$0.96 Bluetooth keyboard (AliExpress welcome deal)
$1.20 Phone stand
$40 Second hand Nokia 6.1 (with charger!)
$0 LineageOS + Termux + Neovim + GitHub Copilot




Thursday, January 2, 2025

Converting webm video to mp4 on Ubuntu

Ubuntu's built-in screen recorder saves videos in WebM format. Some social media platforms do not support it, so you might find yourself needing to convert them to MP4 format. Make sure you have FFmpeg installed first:

sudo apt install ffmpeg

After that, it's just a one-liner (command line parameters are explained below):

ffmpeg -i video_file.webm -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -r 30 video_file.mp4

-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" is a workaround for videos whose dimensions are not even numbers.

-r 30 sets the rate to 30 frames per second. You can set your own value here. FFmpeg actually keeps the frame rate of the original file, though it might get confused in case it is a variable rate.

Monday, December 30, 2024

Building a browser extension

2024.12.18:

Started a new project! This time it's AI enabled browser extension. Although I have already launched two projects using the OpenAI API (SEO Meta Description AI and Novine.eu), plus one project that was abandoned, this is my first experience creating an extension.

Browser usage statistics suggest that I should start with a Chrome. However, as a Firefox user who is unwilling to switch my primary browser, I'll also develop the extension for Firefox in parallel.

To make the project more intriguing, I have decided to use JavaScript for the backend, which is also a new challenge for me. Previously I have developed backends only in PHP (during the time when PHP hosting was the most affordable), Java (since the launch of Google App Engine) and Python (since Google App Engine began supporting it).

Stay tuned, I hope this project will gross more than just peanuts. 😂 😭

2024.12.20:

✅ First backend version deployed
✅ Prototype extension developed for both Chrome and Firefox
✅ Did 81 push-ups

Time to conduct extensive tests, i.e., eat my own dog food.

2024.12.21:

✅ Came up with the extension icon.
✅ Decided to use MongoDB (another new technology for me).
✅ Implemented rudimentary user management.

Apparently, I have stepped into the ME.N of the MERN tech stack.

2024.12.22:

You are right, those corners were too sharp. Here is the smoothed version. 


Spent a day optimizing 45 lines of JavaScript code that were supposed to work in all circumstances, only to find out moments ago that all those lines can be replaced with:

document.execCommand("insertText", false, newText)

The catch: that call is deprecated.

2024.12.23:

✅ Deploying the database on MongoDB Atlas and connecting it to GoogleAppEngine.
✅ Adding cron jobs for user management.

2024.12.24:

✅ Implementing keyboard shortcuts for those who prefer not to click to open the context menu.

The shortcuts are Alt+Shift+P and Alt+Shift+I; you can start memorizing them. 🙂 It seems that’s it regarding the core functionality; what remains is the landing page and integration with a payment processor.

2024.12.26:

As I wrap up the landing page, it's time to dive deeper into UX/UI. Excited to share my chosen color palette! Check out this fantastic palette generator.

Updated palette = updated product icon.


And here is the price table! Major second typescale with WCAG AAA contrasts. My favorite contrast checker: https://webaim.org/resources/contrastchecker/

2024.12.29:

While testing on Windows and using Chrome instead of Chromium, I discovered that the shortcut Alt+Shift+I is reserved and it opens a feedback from. It's a pity since the letters P and I correspond to the first letters of my extension's actions.

Additionally, I found that the extension is not working properly in the Reddit markdown editor (it works fine in the default editor) and in Blogger.

2024.12.30:

I have decided to keep the existing keyboard shortcuts for Firefox and, in Chrome, replace Alt+Shift+I with Alt+Shift+O. It's right between I and P, and my action name contains that letter as well. For a moment, I considered using Alt+Shift+1 and Alt+Shift+2 instead, but they are more challenging to type. Ctrl+Alt combinations are not allowed, as stated in the Key combination requirements for Chrome. In any case, it was my mistake not to check the existing Chrome keyboard shortcuts and Mozilla keyboard shortcuts before deciding on mine.

The prompt still doesn't take the character limit for a particular social network into consideration, and sometimes it interprets questions as instructions. Asking ChatGPT to improve the prompt for its own API did not help.

2024.12.31:

I successfully implemented text replacement for both Blogger and Reddit. The main challenge with Blogger was that the editable text was contained within an iframe, while Reddit presented complexities due to multiple shadowRoot element chainings. Extensive testing is essential to ensure that no negative side effects have been introduced.

2025.01.02:

As shown in the video below, the browser extension displays error messages inside a modal dialog layered over the web page. CSS is loaded remotely, and perhaps I'll also use remotely loaded HTML and JavaScript to completely customize the dialog without requiring the user to update the already installed extension.


UX/UI Tip 1: When designing modals, always add all possible options to close them: click outside, click on the '×' button in the top right corner, click on a 'Close' button, and use the 'Esc' key as well.

UX/UI Tip 2: Restore the previous focus once your modal is closed.

2025.01.05

As I am finishing the product, I have just found out that a competitor launched an extension with quite similar functionality two days ago. They have a total of five users. My competitor's low user numbers are depressing me.

2025.01.09

Added semantic elements to HTML.
✅ Added essential documents: Terms of Service, Privacy Notice, and Refund Policy.
✅ Connected the custom domain to Google App Engine.
✅ Submitted the domain to the e-commerce provider for approval.

Sunday, December 29, 2024

My neovim configuration for python development (3)

In a lighthearted moment, I decided to experiment with Android devices for development. I installed Termux and Neovim, and I’d like to share my current configuration:

set encoding=utf-8
set number
syntax enable
set noswapfile
set backspace=indent,eol,start

set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent
set fileformat=unix

set colorcolumn=80
highlight ColorColumn ctermbg=9

call plug#begin()

Plug 'catppuccin/nvim', { 'as': 'catppuccin' }
Plug 'morhetz/gruvbox'

Plug 'jiangmiao/auto-pairs'
Plug 'preservim/nerdtree'
Plug 'preservim/tagbar'
" Tagbar alternative
" Plug 'liuchengxu/vista.vim'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'sheerun/vim-polyglot'
Plug 'neoclide/coc.nvim', {'branch': 'release'}

call plug#end()

colorscheme catppuccin

" NERDTree
let NERDTreeQuitOnOpen=1
let g:NERDTreeMinimalUI=1
nmap <C-e> :NERDTreeToggle<CR>

" Tagbar
nmap <C-f> :TagbarToggle<CR>

" Tabs
let g:airline#extensions#tabline#enabled=1
let g:airline#extensions#tabline#fnamemode=':t'

nmap <C-PageUp> :bp<CR>
nmap <C-PageDown> :bn<CR>
nmap <C-w> :bd<CR>

" Autocomplete
inoremap <expr> <Tab> pumvisible() ? coc#_select_confirm() : "<Tab>"


Feel free to share your thoughts or any tips you might have for optimizing development on Android!


 



Wednesday, December 11, 2024

How to list PDF form field names using pyhton

Here’s a simple Python script that might come in handy. I used it for some experiments and am posting it here in case I need it again in the future. Feel free to use it as well!

import PyPDF2

# Open the PDF file
pdf_file = open("example.pdf", "rb")
pdf_reader = PyPDF2.PdfReader(pdf_file)

# Get the AcroFields
acro_fields = pdf_reader.get_fields()

print("Form Field Names:")
for field_name in acro_fields.keys():
print(f"- {field_name}")

# Close the PDF file
pdf_file.close()