Ecommerce Template
Next.js·React 등으로 만든 최신 전자상거래 템플릿
셀프는 Gumroad·LemonSqueezy 대안으로, VPS에 10분만에 설치하고 플랫폼 수수료·구독 없이 데이터를 직접 보관합니다
Self-hosted alternative to Gumroad and LemonSqueezy. Set up on your VPS in 10 minutes. No platform fees, no subscriptions, your data stays yours.
커머스TypeScript · PLpgSQLGitHub @jurczykpawel온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Self-hosted platform for selling digital products and capturing leads. Stripe payments, Supabase auth, Next.js 15.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Self-hosted platform for selling and protecting digital products
An alternative to Gumroad, LemonSqueezy, Paddle. Zero platform fees.
Admin Dashboard: revenue analytics, sales trends, and product management
Sellf gives you complete control over your digital product business. No monthly fees to platforms. No revenue sharing. Your data stays on your infrastructure.README 전문 보기 ↗Self-hosted platform for selling and protecting digital products
An alternative to Gumroad, LemonSqueezy, Paddle. Zero platform fees.
🚀 Live Demo · Documentation · Quick-Start Guide · Contributing · Issues
Sellf gives you complete control over your digital product business. No monthly fees to platforms. No revenue sharing. Your data stays on your infrastructure.
trial_days, card collected upfront, charge after trial)<PaymentElement> + SetupIntent. No redirect to a separate Stripe-hosted portalrefund_period_days. Refund of the first invoice auto-cancels at period endduration (once / repeating N cycles / forever) for promotional pricingsubscription.created, subscription.updated, subscription.canceled, subscription.trial_ending, subscription.renewal_upcoming, invoice.paid, invoice.payment_failed). Plug into n8n, Make, Listmonk, or your own mailerenable_waitlist toggle. Inactive product + waitlist on = signup form. Inactive + waitlist off = 404 (so you can hide work-in-progress products without leaks)waitlist.signup event. Plug into n8n, Make, Listmonk, or any mailer to send confirmation emails and tag subscribers per product<script> tag on any external site (modal/inline/button variants, per-product snippet, show-price and button-label customization)products:read, users:write, *, ...)sort_by, sort_order), OpenAPI 3.1 specFor the complete feature list, see FEATURES.md.
Sellf connects to your own Stripe account. You are the seller, payments go directly to you. No middleman, no revenue sharing.
| Platform | Fees | Monthly Cost | You Keep |
|---|---|---|---|
| Sellf + Stripe | ~3.4% (Stripe only) | ~$340 | $9,660 |
| Paddle | 5% + 3.5% + $0.30 | ~$880 | $9,120 |
| LemonSqueezy | 5% + 3.5% + $0.30 | ~$880 | $9,120 |
| Gumroad | 10% + 2.9% + $0.30 | ~$1,290 | $8,710 |
That's $950/month saved vs Gumroad, $11,400/year back in your pocket.
Platforms like Paddle, LemonSqueezy, and Gumroad act as the Merchant of Record (MoR): they process payments on your behalf and handle tax compliance. Sellf takes a different approach:
| MoR (Paddle, LS, Gumroad) | Sellf + Own Stripe | |
|---|---|---|
| Platform fees | 5–10% of revenue | $0 |
| Payment processing | Included in platform fee | ~2.9% + 30¢ (Stripe pricing) |
| Tax calculation | Handled by MoR | Optional via Stripe Tax (+0.5%) |
| Tax filing & remittance | Handled by MoR | Your responsibility |
| Customer data | Held by the MoR platform | Fully yours |
| Vendor lock-in | Customer and payment data tied to platform | No. Self-hosted, fully portable. |
| Platform risk | Account freezes, shutdowns possible | None. You control everything. |
When does tax compliance become relevant?
For EU-based sellers, the VAT One Stop Shop (OSS) threshold is €10,000/year in cross-border B2C sales. Below this, you only handle VAT in your own country. Above it, you register for OSS (a single EU-wide filing) and can use Stripe Tax to automate calculations.
Growth path:
Note: This is general information, not tax advice. Tax obligations depend on your country, business type, and revenue. Consult a qualified tax professional for your specific situation.
Try Sellf without installing anything: demo.sellf.app
4242 4242 4242 4242)| Products: manage pricing, status, and visibility | Storefront: your public store with free & premium products |
| Checkout: one-page purchase with upsells and tax fields | Settings: 5 theme presets with live preview |
| Dashboard (dark mode) | Products (dark mode) |
# 1. Clone
git clone https://github.com/jurczykpawel/sellf.git
cd sellf
# 2. Start database
npx supabase start
# 3. Install & configure
cd admin-panel
bun install
cp .env.example .env.local # Edit with your keys
# 4. Run
bun run dev
Open http://localhost:3000. The first registered user becomes admin.
cd admin-panel
bun run build
bun start
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router, Turbopack) |
| Language | TypeScript 5.9 |
| Database | Supabase (PostgreSQL + Auth + Realtime) |
| Styling | Tailwind CSS 4 |
| Payments | Stripe (Checkout Sessions, Elements, Webhooks) |
| Testing | Playwright E2E + Vitest/Bun unit tests |
| i18n | next-intl (EN, PL) |
sellf/
├── admin-panel/ # Next.js app (main codebase)
│ ├── src/
│ │ ├── app/ # App Router (pages, API routes)
│ │ ├── components/# React components (admin, checkout, UI)
│ │ ├── lib/ # Services, utils, Stripe, Supabase
│ │ ├── messages/ # i18n (EN, PL)
│ │ └── types/ # TypeScript definitions
│ └── tests/ # Playwright E2E + Vitest unit
├── mcp-server/ # MCP server for Claude Desktop
├── supabase/ # Migrations, seed data, RPC functions
├── bruno/ # API collection (Bruno client)
├── scripts/ # Utility scripts
└── docs/ # Deployment guides
All integrations can be configured via the admin panel (encrypted storage) or environment variables.
| Integration | Admin Panel | Env Variables | Notes |
|---|---|---|---|
| Stripe | ✓ | ✓ | Visual wizard available |
| GUS REGON (PL) | ✓ | - | Polish company auto-fill |
| Currency Rates | ✓ | ✓ | ECB free, or paid providers |
| Google Tag Manager | ✓ | - | Container ID |
| Facebook Pixel | ✓ | - | Pixel ID + CAPI token |
See FEATURES.md for details on all integrations.
👋 First time setting up an online store? Read the QUICK-START guide — it's a click-by-click walkthrough that gets you online in ~20 minutes using only your web browser. No terminal, no programming.
Already done this before? The Vercel/Netlify buttons above lead to the deploy form. See the detailed deploy guide for what to paste into each field. For just the Supabase database part, see Supabase setup.
Self-hosting on your own server: see Coolify (easiest self-hosted), Mikrus / VPS (cheap VPS via PM2), or Full-Stack (full Docker Compose with self-hosted Supabase).
| Guide | Best For |
|---|---|
| Quick-Start | First-time deploy via the Vercel button (recommended for non-technical users, $0/month to start) |
| VPS / mikr.us | Cheapest path — your own Linux VPS (~$1-5/month, requires terminal) |
| Coolify | Self-hosted with a nice dashboard, ~$9/month on Hetzner |
| All deployment options | Docker, Full-Stack, PM2 Cluster, and other advanced setups |
Server requirements: Sellf alone runs on 384 MB RAM. Benchmarked at 0 errors under 30 concurrent users on a $9/year VPS. No Docker needed — plain Node.js + PM2.
| File | Description |
|---|---|
| 📖 docs.sellf.app | Full searchable documentation (Quick Start, Deployment, API, Configuration) |
| FEATURES.md | Complete feature list with roadmap |
| Quick Start | Beginner-friendly deploy guide (browser-only, ~20 min) |
| Deployment | All deployment paths with decision tree |
| Stripe Testing Guide | Testing payments locally |
| BACKLOG.md | Development roadmap |
| mcp-server/README.md | MCP Server setup guide |
Full roadmap: BACKLOG.md
├── 3,519 unit tests + broad Playwright E2E coverage
├── 90+ API routes (v1 REST API + admin + public)
├── 36 database tables
├── 73 RPC functions
├── 92 RLS policies
├── MCP Server (45 tools, 4 resources, 6 prompts)
└── 2 languages (EN, PL)
Sellf is free and source-available. If it saves you money on platform fees, consider supporting development by buying Sellf Pro — it removes the "Powered by Sellf" watermark and unlocks the Theme Editor.
| Tier | Price | What it unlocks |
|---|---|---|
| Free | $0 | Everything core — unlimited products, sales, buyers (Elastic License 2.0) |
| Registered | $0 | + payment CSV export (free key from sellf.app) |
| Pro | $59 one-time | + remove "Powered by Sellf" branding, Theme Editor, granular API-key scopes |
| Business | Talk to us | Custom / enterprise — [email protected] |
Contributions are welcome! See CONTRIBUTING.md for development setup and guidelines.
Ways to contribute:
Sellf handles sensitive data (Stripe API keys, payment transactions, user accounts), so security is treated as a first-class requirement, not an afterthought.
What we do:
.env.local on your server. The only outbound calls Sellf makes are to Supabase, Stripe, and an anonymous, opt-out telemetry ping (no PII, no revenue, no domain) you can switch off with one env varHttpOnly + Secure cookies, Content-Type validation, rate limiting on all public endpoints, webhook signature verificationYour Stripe keys stay on your server. Sellf is fully self-hosted — there is no SaaS component, no cloud dependency, and no way for anyone (including us) to access your credentials.
See SECURITY.md for reporting vulnerabilities.
Sellf sends anonymous, opt-out usage telemetry about once a day so we can see which features get used and on what runtimes — the same model as n8n's diagnostics. It runs only in production on a public host (never on localhost or private/dev hosts) and prints a one-line notice on boot.
What we collect: software and runtime versions, coarse host buckets (CPU/RAM band, OS, arch), feature flags (which integrations are enabled), and coarse capped counts of products, users, and transactions — plus a random per-instance id and your license tier.
What we never collect: no emails or customer rows, no revenue or amounts, no raw domain, no license key, no IP address — no PII of any kind. The wire payload is validated before every send: the top level and the identity block are strict (no extra or PII fields can ride there), while the deployment and metrics sections are curated coarse maps — deployment is a fixed set of coarsened keys plus a curated flags object, and metrics holds numeric counts only, so no string can sneak in. Reports are retained for 120 days, then deleted.
Because the data is anonymous and contains no personal data, no DPA is required for Sellf telemetry.
Opting out (env-only — there is no in-app toggle): set either of these in .env.local and restart:
SELLF_TELEMETRY_DISABLED=true
# or
SELLF_TELEMETRY_ENABLED=false
You can also point telemetry at your own receiver with TELEMETRY_URL=https://your-receiver/v1/ingest (must be https). Full details: Telemetry & Privacy.
Built with Next.js, Supabase, Stripe, Tailwind CSS, Playwright, Vitest, and next-intl.
Sellf takes 0% commission, so there's no platform fee funding development. If it's making you money, you can pour me a glass:
Elastic License 2.0 (source-available, not OSI open source). See LICENSE for details.