Skip to content

Commit 66c8641

Browse files
authored
Merge pull request #86 from JakobAIOdev/feature/oneclick-buy-paypal
Feature/oneclick buy paypal
2 parents 510168a + 2571b19 commit 66c8641

19 files changed

Lines changed: 2847 additions & 188 deletions

File tree

README.md

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ You can test Vintrack live at:
5252
- **Default role:** New accounts are assigned **Free**
5353
- **Important:** Persistent server proxies are not guaranteed on the demo instance, so reliability may vary over time
5454

55-
5655
---
5756

5857
## Why Vintrack?
@@ -65,6 +64,7 @@ Built for resellers who need speed. Open-sourced for the community.
6564
- **Anti-detection** — TLS fingerprint rotation with proxy support
6665
- **Granular filters** — price, size, category, brand, color, and country/region
6766
- **Direct Interaction** — Like items, send offers, and message sellers from the dashboard
67+
- **Experimental checkout tooling** — oneclick reserve button and checkout-link history for controlled PayPal checkouts
6868
- **Full dashboard** — no CLI needed, everything from the browser
6969
- **One-command deploy**`docker compose up` and you're live
7070

@@ -73,10 +73,13 @@ Built for resellers who need speed. Open-sourced for the community.
7373
## Features
7474

7575
### Real-Time Monitoring
76+
7677
Create unlimited monitors with custom search queries. Each monitor polls the Vinted API independently with configurable intervals (default: 1.5s). Results are deduplicated via Redis — you'll never see the same item twice.
7778

7879
### Advanced Filters
80+
7981
Fine-tune every monitor with:
82+
8083
- **Search query** — keyword-based filtering
8184
- **Price range** — min/max price boundaries
8285
- **Categories** — over 900+ Vinted categories supported
@@ -87,29 +90,49 @@ Fine-tune every monitor with:
8790
- **Region** — choose the Vinted market per monitor (e.g. `vinted.de`, `vinted.hu`, `vinted.fr`)
8891

8992
### Vinted Account Linking & Interactions
93+
9094
Link your Vinted account directly in the dashboard to interact with listings without leaving Vintrack:
95+
9196
- **Like / Unlike items** — one-click like/unlike from the feed or monitor view
9297
- **Send Offers** — make price offers directly to sellers (with built-in 60% minimum price validation)
9398
- **Message Sellers** — start a conversation or ask questions instantly
99+
- **Experimental PayPal checkout** — available via the experimental feed action and checkout-link history, using the shipping address and checkout data already stored in your linked Vinted account
94100
- **Multi-Image Preview** — view extra images and high-res gallery directly in the dashboard
95101
- **Account management** — link/unlink with region selection (12 EU markets)
96102
- **Token Refresh** — support for `refresh_token` to maintain sessions long-term
97103
- **Status monitoring** — see your linked account status, username, and domain at a glance
98104

99105
To link your account, grab your `access_token_web` (and optionally `refresh_token`) from Vinted's DevTools and paste it in the Account page.
100106

107+
### Experimental Buy Disclaimer
108+
109+
Vintrack includes an experimental buy module for controlled checkout tests. It is intentionally separated from the normal monitoring workflow.
110+
111+
- The buy module is experimental and may break when Vinted changes authentication or checkout protection.
112+
- Use a dedicated buy account for this module, not your main personal Vinted account.
113+
- The PayPal checkout flow uses the shipping address, checkout details, and payment context already stored on your linked Vinted account.
114+
- Vintrack opens the returned PayPal payment link, but it does not fully complete the purchase inside Vintrack itself.
115+
- Vintrack does not replace or override your delivery address in this flow.
116+
- A valid `refresh_token_web` is strongly recommended, otherwise automatic session recovery may fail.
117+
- Use the experimental buy actions only if you understand that they may reserve an item before the PayPal step is completed.
118+
101119
### Discord Notifications
120+
102121
Rich embed webhooks sent instantly when a new item is found:
122+
103123
- Item image, title, price (including fees), size, condition
104124
- Seller region & rating (enriched via HTML scraping)
105125
- Direct buy link + app deep link + dashboard link
106126
- Per-webhook toggle — pause without deleting
107127

108128
### Live Feed
129+
109130
Server-Sent Events (SSE) stream items directly to the dashboard in real-time. See every new listing appear the moment it's detected — no manual refresh needed.
110131

111132
### Proxy System
133+
112134
Two-tier proxy architecture designed for scale:
135+
113136
- **Server proxies** — shared pool for premium users
114137
- **User proxy groups** — BYOP (Bring Your Own Proxies) for free users
115138
- Automatic rotation with `tls-client` TLS fingerprint spoofing
@@ -118,6 +141,7 @@ Two-tier proxy architecture designed for scale:
118141
- Note: `vinted.co.uk` does not support IPv6 proxies. Use IPv4 proxies for UK monitors.
119142

120143
### Multi-User & Roles
144+
121145
Built-in role system with Discord OAuth:
122146
| Role | Server Proxies | Own Proxies | Admin Panel |
123147
|------|:-:|:-:|:-:|
@@ -198,6 +222,7 @@ Need help, want to exchange setups with other users, or report a bug?
198222
```
199223

200224
**Data flow:**
225+
201226
1. User creates a monitor via the dashboard
202227
2. Go Worker detects the new monitor within 5s and starts a goroutine
203228
3. Goroutine polls Vinted API through rotating proxies
@@ -209,18 +234,18 @@ Need help, want to exchange setups with other users, or report a bug?
209234

210235
## Tech Stack
211236

212-
| Layer | Technology | Purpose |
213-
|-------|-----------|---------|
214-
| **Frontend** | Next.js 16, React 19, Tailwind CSS 4, shadcn/ui | Dashboard & UI |
215-
| **Backend** | Next.js Server Actions, API Routes | API & auth |
216-
| **Worker** | Go 1.25, tls-client, goroutines | High-perf scraping |
217-
| **Vinted Service** | Go 1.25, TLS client, Redis sessions | Account linking & item actions |
218-
| **Database** | PostgreSQL 15 + Prisma ORM | Persistent storage |
219-
| **Cache** | Redis 7 | Deduplication & SSE pub/sub |
220-
| **Auth** | NextAuth.js v5 (Discord OAuth2) | Authentication |
221-
| **Proxy** | tls-client with SOCKS4/5 & HTTP(S) | Anti-detection |
222-
| **Reverse Proxy** | Caddy 2 | Auto HTTPS via Let's Encrypt |
223-
| **Deployment** | Docker Compose | One-command orchestration |
237+
| Layer | Technology | Purpose |
238+
| ------------------ | ----------------------------------------------- | ------------------------------ |
239+
| **Frontend** | Next.js 16, React 19, Tailwind CSS 4, shadcn/ui | Dashboard & UI |
240+
| **Backend** | Next.js Server Actions, API Routes | API & auth |
241+
| **Worker** | Go 1.25, tls-client, goroutines | High-perf scraping |
242+
| **Vinted Service** | Go 1.25, TLS client, Redis sessions | Account linking & item actions |
243+
| **Database** | PostgreSQL 15 + Prisma ORM | Persistent storage |
244+
| **Cache** | Redis 7 | Deduplication & SSE pub/sub |
245+
| **Auth** | NextAuth.js v5 (Discord OAuth2) | Authentication |
246+
| **Proxy** | tls-client with SOCKS4/5 & HTTP(S) | Anti-detection |
247+
| **Reverse Proxy** | Caddy 2 | Auto HTTPS via Let's Encrypt |
248+
| **Deployment** | Docker Compose | One-command orchestration |
224249

225250
---
226251

@@ -317,6 +342,7 @@ Contributions are welcome! Here's how:
317342
5. Open a Pull Request
318343

319344
Please make sure to:
345+
320346
- Follow existing code style
321347
- Test your changes with `docker compose up --build`
322348
- Update documentation if needed

apps/control-center/package.json

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,40 @@
11
{
2-
"name": "control-center",
3-
"version": "1.2.3",
4-
"private": true,
5-
"scripts": {
6-
"dev": "next dev",
7-
"build": "next build",
8-
"start": "next start",
9-
"lint": "eslint"
10-
},
11-
"dependencies": {
12-
"@auth/prisma-adapter": "^2.11.1",
13-
"@prisma/client": "^5.10.2",
14-
"class-variance-authority": "^0.7.1",
15-
"clsx": "^2.1.1",
16-
"ioredis": "^5.9.3",
17-
"lucide-react": "^0.563.0",
18-
"next": "16.1.6",
19-
"next-auth": "^5.0.0-beta.30",
20-
"next-themes": "^0.4.6",
21-
"radix-ui": "^1.4.3",
22-
"react": "19.2.3",
23-
"react-dom": "19.2.3",
24-
"sonner": "^2.0.7",
25-
"tailwind-merge": "^3.4.0"
26-
},
27-
"devDependencies": {
28-
"@tailwindcss/postcss": "^4",
29-
"@types/node": "^20",
30-
"@types/react": "^19",
31-
"@types/react-dom": "^19",
32-
"eslint": "^9",
33-
"eslint-config-next": "16.1.6",
34-
"prisma": "^5.10.2",
35-
"shadcn": "^3.8.4",
36-
"tailwindcss": "^4",
37-
"tw-animate-css": "^1.4.0",
38-
"typescript": "^5"
39-
}
2+
"name": "control-center",
3+
"version": "1.2.4",
4+
"private": true,
5+
"scripts": {
6+
"dev": "next dev",
7+
"build": "next build",
8+
"start": "next start",
9+
"lint": "eslint"
10+
},
11+
"dependencies": {
12+
"@auth/prisma-adapter": "^2.11.1",
13+
"@prisma/client": "^5.10.2",
14+
"class-variance-authority": "^0.7.1",
15+
"clsx": "^2.1.1",
16+
"ioredis": "^5.9.3",
17+
"lucide-react": "^0.563.0",
18+
"next": "16.1.6",
19+
"next-auth": "^5.0.0-beta.30",
20+
"next-themes": "^0.4.6",
21+
"radix-ui": "^1.4.3",
22+
"react": "19.2.3",
23+
"react-dom": "19.2.3",
24+
"sonner": "^2.0.7",
25+
"tailwind-merge": "^3.4.0"
26+
},
27+
"devDependencies": {
28+
"@tailwindcss/postcss": "^4",
29+
"@types/node": "^20",
30+
"@types/react": "^19",
31+
"@types/react-dom": "^19",
32+
"eslint": "^9",
33+
"eslint-config-next": "16.1.6",
34+
"prisma": "^5.10.2",
35+
"shadcn": "^3.8.4",
36+
"tailwindcss": "^4",
37+
"tw-animate-css": "^1.4.0",
38+
"typescript": "^5"
39+
}
4040
}

0 commit comments

Comments
 (0)