doombuy commited on
Commit
0685d84
Β·
verified Β·
1 Parent(s): c5a1bcd

Project Title:

Browse files

βš™οΈ Marketplace Platform for Digital Codes & Vouchers (Gift Cards, Codes, Digital Products, Crypto Payments)

πŸ“ Project Description

Build a full-feature digital marketplace platform similar to BuySellVouchers.com that allows users to browse, buy, sell, and manage digital codes and products with instant delivery, crypto payment support (including USDT TRC20/ERC20), REST API, and high-performance Laravel + PHP + MySQL architecture.

Base requirements:

Backend: PHP (clean, scalable, secure)

Frontend: Laravel Blade + Vue.js/TailwindCSS optional

Database: MySQL

API: REST API for all user actions, admin actions, and mobile app integration

Payments: Crypto (USDT, BTC, ETH, USDC, etc.) + traditional options

Optional: Web3 wallet integration for payments

πŸ“Œ Core Features
🧠 1. User Account & Authentication

User registration/login (email, phone, social login)

Email/phone verification

Two-factor authentication (2FA)

Account dashboard with transaction history

Wallet balance management (crypto wallets inside system)

πŸ“¦ 2. Product Catalog & Search

Large dynamic product catalog

Categories + filters (price, region, type, popularity)

Instant search bar

Product tags, sorting, featured promos

Multi-language support πŸ‡¬πŸ‡§πŸ‡ͺπŸ‡ΈπŸ‡«πŸ‡·πŸ‡¦πŸ‡ͺ (suggested)

πŸ’° 3. Crypto Payment Gateway (USDT & Others)

Accept USDT trc20/ERC20/BEP20

Integrate payment gateway or on-chain confirmations

Automatically detect deposit confirmation

Convert stablecoin to internal balance

Optional: PayPal, Stripe, Card, Bank transfers

Accept multiple cryptos: Bitcoin, Ethereum, Litecoin, etc.

πŸ›’ 4. Orders & Instant Delivery

Checkout system with instant code delivery after payment

Email & on-screen delivery of digital codes

Delivery retries & expiration management

Delivery status tracking

🧾 5. Seller Marketplace

Allow users to become sellers

Sell digital products and codes

Seller verification

Seller dashboard

Seller balance & withdrawal system

Commission system (low fees like 1–1.2%)

πŸ›‘οΈ 6. Dispute & Escrow System

Escrow holding buyer’s crypto until delivery is verified

24-hour dispute window

Dispute resolution interface

Refund flows & seller penalties

πŸ§‘β€πŸ’Ό 7. Admin Panel (Super Powerful)

Build an enterprise-level admin panel with:

πŸ”Ή Dashboard

User stats (active users, revenue, trades)

Sales performance graphs

Crypto flow & wallets

Tickets & disputes load analysis

πŸ”Ή User Management

User list (buyers & sellers)

Edit/ban users

Wallet adjustments

πŸ”Ή Product Management

Approve/reject listings

Edit product details & categories

Bulk product importer

πŸ”Ή Orders & Transactions

View orders & payments

Manually re-trigger delivery

Refund tools

CSV export reports

πŸ”Ή Wallet & Crypto Tech

Blockchain node integration monitoring

Deposit & withdrawal queue

Manual settlement tools

Fees configuration

πŸ”Ή Support & Notifications

Support ticket hub

Send email & push notifications

Pre-made auto replies

πŸ”Ή Security

Admin roles & permissions

Audit logs

IP & activity logs

πŸ‘€ 8. User Dashboard

User side dashboard must include:

Wallet balance & top-up history

Activate codes (automated)

Purchase history & invoice downloads

Support ticket system

Profile & KYC (optional)

Referral program & commissions

Dynamic coupon & promo codes

πŸ†˜ 9. Support System

Ticket system (User ↔ Support)

Ticket categories & priority

Admin reply templates

Attachments & status tracking

Email notifications

🧠 10. REST API

Build complete API for:

Authentication

Product listing & details

Cart & checkout

Crypto deposit tracking (Webhooks)

Delivery endpoint

Support tickets

Dashboard analytics

Include API documentation (Swagger / OpenAPI)

πŸ› οΈ Architecture Requirements

Laravel 10+ backend

RESTful API

MySQL optimized with indexes

Redis queue processing for instant deliveries & payments

Websocket notifications (optional)

Automated Cron jobs for settlement & retries

Blockchain payment listener microservice (Node.js optional)

🧩 Integrations Suggested

Crypto payment processors (CoinPayments, NOWPayments, BTCPay Server)

Email (Mailchimp / SMTP)

SMS OTP if needed

Admin metrics (Google Analytics / internal)

πŸ§ͺ Extra Enhancements

Multi-currency price display

Mobile responsive UI

Geo-region currency & payment filters

Product review & rating system

Seller rating & badges

Product analytics & bestseller section

πŸ“Š Security & Compliance

KYC/AML optional

Rate limit APIs

Two-factor authentication

OTP / Email confirmation login

Secure wallet storage

Cold/hot wallet segregation for crypto

πŸ“Œ Reference Behaviors from BuySellVouchers

Use this as a benchmark:

βœ”οΈ Global crypto payment support (USDT, BTC, ETH, USDC)
βœ”οΈ Marketplace with buyer/seller roles & low fees
βœ”οΈ Instant delivery + 24-h confirmation window
βœ”οΈ Multilingual support possible
βœ”οΈ Diverse digital products catalog

πŸ“Œ Deliverables

βœ… Full Marketplace with Admin & User dashboards
βœ… Crypto Payment & Wallet System
βœ… REST API Documentation
βœ… MySQL DB Schema + Optimized Performance
βœ… Complete Laravel & PHP Backend
βœ… Frontend Laravel UI

🎯 End Goal

Create a scalable, secure, professional digital marketplace that can be monetized, marketed globally, supports crypto payments (including USDT), with full admin control & automated workflows β€” exactly like the best voucher marketplaces online today.

README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Cryptovoucherverse
3
- emoji: ⚑
4
- colorFrom: blue
5
- colorTo: pink
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
  ---
2
+ title: CryptoVoucherVerse πŸš€
3
+ colorFrom: gray
4
+ colorTo: green
5
+ emoji: 🐳
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite-v3
10
  ---
11
 
12
+ # Welcome to your new DeepSite project!
13
+ This project was created with [DeepSite](https://huggingface.co/deepsite).
components/ai-assistant.js ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomAiAssistant extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ .assistant-container {
7
+ background: linear-gradient(135deg, #f3f4f6, #e5e7eb);
8
+ border-radius: 16px;
9
+ overflow: hidden;
10
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
11
+ }
12
+
13
+ .assistant-header {
14
+ background: linear-gradient(90deg, #8b5cf6, #6366f1);
15
+ }
16
+
17
+ .typing-indicator span {
18
+ display: inline-block;
19
+ width: 8px;
20
+ height: 8px;
21
+ border-radius: 50%;
22
+ background-color: #8b5cf6;
23
+ margin: 0 2px;
24
+ animation: typing 1.4s infinite ease-in-out;
25
+ }
26
+
27
+ .typing-indicator span:nth-child(2) {
28
+ animation-delay: 0.2s;
29
+ }
30
+
31
+ .typing-indicator span:nth-child(3) {
32
+ animation-delay: 0.4s;
33
+ }
34
+
35
+ @keyframes typing {
36
+ 0%, 60%, 100% { transform: translateY(0); }
37
+ 30% { transform: translateY(-5px); }
38
+ }
39
+
40
+ .message-ai {
41
+ background-color: #f9fafb;
42
+ border-radius: 12px 12px 12px 0;
43
+ max-width: 80%;
44
+ }
45
+
46
+ .message-user {
47
+ background: linear-gradient(90deg, #8b5cf6, #6366f1);
48
+ color: white;
49
+ border-radius: 12px 12px 0 12px;
50
+ max-width: 80%;
51
+ margin-left: auto;
52
+ }
53
+
54
+ .input-field {
55
+ border: 2px solid #e5e7eb;
56
+ transition: border-color 0.3s ease;
57
+ }
58
+
59
+ .input-field:focus {
60
+ border-color: #8b5cf6;
61
+ outline: none;
62
+ }
63
+
64
+ .send-button {
65
+ background: linear-gradient(90deg, #8b5cf6, #6366f1);
66
+ transition: transform 0.3s ease;
67
+ }
68
+
69
+ .send-button:hover {
70
+ transform: scale(1.05);
71
+ }
72
+ </style>
73
+ <div class="assistant-container mb-16">
74
+ <div class="assistant-header px-6 py-4 flex items-center">
75
+ <div class="w-10 h-10 rounded-full bg-white flex items-center justify-center mr-3">
76
+ <i data-feather="cpu" class="text-purple-600"></i>
77
+ </div>
78
+ <div>
79
+ <h3 class="text-white font-bold">AI Shopping Assistant</h3>
80
+ <p class="text-purple-200 text-sm">Ready to help you find perfect products</p>
81
+ </div>
82
+ </div>
83
+
84
+ <div class="p-6">
85
+ <div class="chat-container mb-4 space-y-3">
86
+ <div class="message-ai p-4 inline-block">
87
+ <p>Hi there! I'm your AI shopping assistant. How can I help you today?</p>
88
+ </div>
89
+ <div class="typing-indicator hidden">
90
+ <span></span>
91
+ <span></span>
92
+ <span></span>
93
+ </div>
94
+ </div>
95
+
96
+ <div class="flex">
97
+ <input type="text" placeholder="Ask me anything about products..." class="input-field flex-grow rounded-l-full px-4 py-3">
98
+ <button class="send-button text-white px-6 py-3 rounded-r-full">
99
+ <i data-feather="send"></i>
100
+ </button>
101
+ </div>
102
+
103
+ <div class="mt-4 flex overflow-x-auto space-x-2 pb-2">
104
+ <button class="quick-question bg-purple-100 text-purple-800 px-3 py-1 rounded-full text-sm hover:bg-purple-200 transition-colors duration-300">
105
+ Best headphones?
106
+ </button>
107
+ <button class="quick-question bg-purple-100 text-purple-800 px-3 py-1 rounded-full text-sm hover:bg-purple-200 transition-colors duration-300">
108
+ Top deals today
109
+ </button>
110
+ <button class="quick-question bg-purple-100 text-purple-800 px-3 py-1 rounded-full text-sm hover:bg-purple-200 transition-colors duration-300">
111
+ Gift ideas
112
+ </button>
113
+ <button class="quick-question bg-purple-100 text-purple-800 px-3 py-1 rounded-full text-sm hover:bg-purple-200 transition-colors duration-300">
114
+ Tech trends
115
+ </button>
116
+ </div>
117
+ </div>
118
+ </div>
119
+ `;
120
+
121
+ // Add interactivity
122
+ const inputField = this.shadowRoot.querySelector('input');
123
+ const sendButton = this.shadowRoot.querySelector('.send-button');
124
+ const chatContainer = this.shadowRoot.querySelector('.chat-container');
125
+ const typingIndicator = this.shadowRoot.querySelector('.
components/crypto-selector.js ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CryptoSelector extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ .crypto-selector {
7
+ position: relative;
8
+ display: inline-block;
9
+ }
10
+ .selected-option {
11
+ display: flex;
12
+ align-items: center;
13
+ gap: 0.5rem;
14
+ padding: 0.5rem 1rem;
15
+ background: rgba(255,255,255,0.1);
16
+ border-radius: 1rem;
17
+ cursor: pointer;
18
+ transition: all 0.3s ease;
19
+ }
20
+ .selected-option:hover {
21
+ background: rgba(255,255,255,0.2);
22
+ }
23
+ .crypto-icon {
24
+ width: 24px;
25
+ height: 24px;
26
+ border-radius: 50%;
27
+ }
28
+ .dropdown {
29
+ position: absolute;
30
+ top: 100%;
31
+ right: 0;
32
+ background: white;
33
+ border-radius: 0.5rem;
34
+ box-shadow: 0 4px 12px rgba(0,0,0,0.1);
35
+ padding: 0.5rem;
36
+ min-width: 200px;
37
+ z-index: 100;
38
+ display: none;
39
+ }
40
+ .dropdown.open {
41
+ display: block;
42
+ }
43
+ .option {
44
+ display: flex;
45
+ align-items: center;
46
+ gap: 0.75rem;
47
+ padding: 0.5rem 1rem;
48
+ border-radius: 0.5rem;
49
+ cursor: pointer;
50
+ }
51
+ .option:hover {
52
+ background: #f3f4f6;
53
+ }
54
+ .option.active {
55
+ background: #e5e7eb;
56
+ }
57
+ </style>
58
+ <div class="crypto-selector">
59
+ <div class="selected-option">
60
+ <img src="https://cryptologos.cc/logos/tether-usdt-logo.png" class="crypto-icon">
61
+ <span>USDT</span>
62
+ <i data-feather="chevron-down" width="16"></i>
63
+ </div>
64
+ <div class="dropdown">
65
+ <div class="option active" data-currency="usdt">
66
+ <img src="https://cryptologos.cc/logos/tether-usdt-logo.png" class="crypto-icon">
67
+ <span>USDT</span>
68
+ </div>
69
+ <div class="option" data-currency="btc">
70
+ <img src="https://cryptologos.cc/logos/bitcoin-btc-logo.png" class="crypto-icon">
71
+ <span>Bitcoin</span>
72
+ </div>
73
+ <div class="option" data-currency="eth">
74
+ <img src="https://cryptologos.cc/logos/ethereum-eth-logo.png" class="crypto-icon">
75
+ <span>Ethereum</span>
76
+ </div>
77
+ <div class="option" data-currency="usdc">
78
+ <img src="https://cryptologos.cc/logos/usd-coin-usdc-logo.png" class="crypto-icon">
79
+ <span>USDC</span>
80
+ </div>
81
+ </div>
82
+ </div>
83
+ `;
84
+
85
+ const selectedOption = this.shadowRoot.querySelector('.selected-option');
86
+ const dropdown = this.shadowRoot.querySelector('.dropdown');
87
+ const options = this.shadowRoot.querySelectorAll('.option');
88
+
89
+ selectedOption.addEventListener('click', () => {
90
+ dropdown.classList.toggle('open');
91
+ });
92
+
93
+ options.forEach(option => {
94
+ option.addEventListener('click', () => {
95
+ options.forEach(opt => opt.classList.remove('active'));
96
+ option.classList.add('active');
97
+
98
+ const icon = option.querySelector('img').src;
99
+ const text = option.querySelector('span').textContent;
100
+
101
+ selectedOption.querySelector('img').src = icon;
102
+ selectedOption.querySelector('span').textContent = text;
103
+
104
+ dropdown.classList.remove('open');
105
+ this.dispatchEvent(new CustomEvent('currency-change', {
106
+ detail: { currency: option.dataset.currency }
107
+ }));
108
+ });
109
+ });
110
+
111
+ // Close dropdown when clicking outside
112
+ document.addEventListener('click', (e) => {
113
+ if (!this.contains(e.target)) {
114
+ dropdown.classList.remove('open');
115
+ }
116
+ });
117
+
118
+ feather.replace();
119
+ }
120
+ }
121
+
122
+ customElements.define('crypto-selector', CryptoSelector);
components/navbar.js ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomNavbar extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ .navbar {
7
+ backdrop-filter: blur(10px);
8
+ background-color: rgba(255, 255, 255, 0.8);
9
+ }
10
+
11
+ .nav-link {
12
+ position: relative;
13
+ }
14
+
15
+ .nav-link::after {
16
+ content: '';
17
+ position: absolute;
18
+ bottom: -2px;
19
+ left: 0;
20
+ width: 0;
21
+ height: 2px;
22
+ background: linear-gradient(90deg, #8b5cf6, #6366f1);
23
+ transition: width 0.3s ease;
24
+ }
25
+
26
+ .nav-link:hover::after {
27
+ width: 100%;
28
+ }
29
+
30
+ .ai-icon {
31
+ animation: pulse 2s infinite;
32
+ }
33
+
34
+ @keyframes pulse {
35
+ 0%, 100% { transform: scale(1); }
36
+ 50% { transform: scale(1.1); }
37
+ }
38
+ </style>
39
+ <nav class="navbar sticky top-0 z-50 border-b border-gray-200">
40
+ <div class="container mx-auto px-4 py-4 flex justify-between items-center">
41
+ <a href="/" class="flex items-center">
42
+ <span class="text-2xl font-bold bg-gradient-to-r from-purple-600 to-blue-500 bg-clip-text text-transparent">DoomBuy AI</span>
43
+ <span class="ml-2 px-2 py-1 bg-purple-100 text-purple-800 text-xs font-semibold rounded-full">BETA</span>
44
+ </a>
45
+
46
+ <div class="hidden md:flex space-x-8">
47
+ <a href="#" class="nav-link text-gray-700 hover:text-purple-600 font-medium">Home</a>
48
+ <a href="#" class="nav-link text-gray-700 hover:text-purple-600 font-medium">Products</a>
49
+ <a href="#" class="nav-link text-gray-700 hover:text-purple-600 font-medium">Categories</a>
50
+ <a href="#" class="nav-link text-gray-700 hover:text-purple-600 font-medium">Deals</a>
51
+ <a href="#" class="nav-link text-gray-700 hover:text-purple-600 font-medium">About</a>
52
+ </div>
53
+ <div class="flex items-center space-x-4">
54
+ <button class="p-2 rounded-full hover:bg-gray-100">
55
+ <i data-feather="search" class="text-gray-600"></i>
56
+ </button>
57
+ <button class="p-2 rounded-full hover:bg-gray-100">
58
+ <i data-feather="shopping-cart" class="text-gray-600"></i>
59
+ </button>
60
+ <wallet-connect></wallet-connect>
61
+ <button class="hidden md:block bg-gradient-to-r from-purple-600 to-blue-500 text-white px-4 py-2 rounded-full hover:shadow-lg transition-shadow duration-300">
62
+ Sign In
63
+ </button>
64
+ </div>
65
+ </div>
66
+ </nav>
67
+ `;
68
+ }
69
+ }
70
+
71
+ customElements.define('custom-navbar', CustomNavbar);
components/product-card.js ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomProductCard extends HTMLElement {
2
+ constructor() {
3
+ super();
4
+ this.attachShadow({ mode: 'open' });
5
+ }
6
+
7
+ static get observedAttributes() {
8
+ return ['title', 'price', 'rating', 'image', 'ai-tag'];
9
+ }
10
+
11
+ attributeChangedCallback(name, oldValue, newValue) {
12
+ this.render();
13
+ }
14
+
15
+ connectedCallback() {
16
+ this.render();
17
+ }
18
+
19
+ render() {
20
+ const title = this.getAttribute('title') || 'Product Name';
21
+ const price = this.getAttribute('price') || '99.99';
22
+ const rating = this.getAttribute('rating') || '4.5';
23
+ const image = this.getAttribute('image') || 'http://static.photos/technology/640x360/10';
24
+ const aiTag = this.getAttribute('ai-tag') || 'AI Recommended';
25
+
26
+ this.shadowRoot.innerHTML = `
27
+ <style>
28
+ .product-card {
29
+ transition: all 0.3s ease;
30
+ transform: translateY(0);
31
+ }
32
+
33
+ .product-image {
34
+ height: 200px;
35
+ transition: transform 0.5s ease;
36
+ }
37
+
38
+ .product-card:hover .product-image {
39
+ transform: scale(1.05);
40
+ }
41
+
42
+ .ai-tag {
43
+ background: linear-gradient(90deg, #8b5cf6, #6366f1);
44
+ animation: pulse 2s infinite;
45
+ }
46
+
47
+ @keyframes pulse {
48
+ 0%, 100% { opacity: 1; }
49
+ 50% { opacity: 0.8; }
50
+ }
51
+
52
+ .rating-stars {
53
+ color: #fbbf24;
54
+ }
55
+ </style>
56
+ <div class="product-card bg-white rounded-xl overflow-hidden shadow-md hover:shadow-xl cursor-pointer h-full flex flex-col">
57
+ <div class="relative overflow-hidden">
58
+ <img src="${image}" alt="${title}" class="product-image w-full object-cover">
59
+ <span class="ai-tag absolute top-3 right-3 text-white text-xs font-bold px-2 py-1 rounded-full">
60
+ ${aiTag}
61
+ </span>
62
+ </div>
63
+ <div class="p-4 flex-grow flex flex-col">
64
+ <h3 class="font-semibold text-lg mb-2">${title}</h3>
65
+ <div class="flex items-center mb-3">
66
+ <div class="rating-stars flex">
67
+ ${this.renderStars(parseFloat(rating))}
68
+ </div>
69
+ <span class="text-gray-600 text-sm ml-2">${rating}</span>
70
+ </div>
71
+ <div class="mt-auto flex justify-between items-center">
72
+ <div class="flex items-center gap-2">
73
+ <span class="text-xl font-bold text-purple-600">${price}</span>
74
+ <crypto-selector></crypto-selector>
75
+ </div>
76
+ <button class="bg-purple-100 text-purple-600 hover:bg-purple-600 hover:text-white px-3 py-1 rounded-full text-sm font-medium transition-colors duration-300">
77
+ Add to Cart
78
+ </button>
79
+ </div>
80
+ </div>
81
+ </div>
82
+ `;
83
+ }
84
+
85
+ renderStars(rating) {
86
+ let stars = '';
87
+ const fullStars = Math.floor(rating);
88
+ const hasHalfStar = rating % 1 >= 0.5;
89
+
90
+ for (let i = 0; i < fullStars; i++) {
91
+ stars += '<i data-feather="star" class="w-4 h-4 fill-current"></i>';
92
+ }
93
+
94
+ if (hasHalfStar) {
95
+ stars += '<i data-feather="star" class="w-4 h-4 fill-current" style="fill: url(#half-star)"></i>';
96
+ }
97
+
98
+ const emptyStars = 5 - fullStars - (hasHalfStar ? 1 : 0);
99
+ for (let i = 0; i < emptyStars; i++) {
100
+ stars += '<i data-feather="star" class="w-4 h-4"></i>';
101
+ }
102
+
103
+ return stars;
104
+ }
105
+ }
106
+
107
+ customElements.define('custom-product-card', CustomProductCard);
components/wallet-connect.js ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class WalletConnect extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ .wallet-btn {
7
+ background: linear-gradient(90deg, #3f51b5, #2196f3);
8
+ color: white;
9
+ border: none;
10
+ padding: 0.5rem 1rem;
11
+ border-radius: 1rem;
12
+ cursor: pointer;
13
+ display: flex;
14
+ align-items: center;
15
+ gap: 0.5rem;
16
+ font-weight: 500;
17
+ transition: all 0.3s ease;
18
+ }
19
+ .wallet-btn:hover {
20
+ transform: translateY(-2px);
21
+ box-shadow: 0 4px 8px rgba(0,0,0,0.1);
22
+ }
23
+ .wallet-icon {
24
+ width: 20px;
25
+ height: 20px;
26
+ }
27
+ .wallet-address {
28
+ font-family: monospace;
29
+ background: rgba(255,255,255,0.1);
30
+ padding: 0.2rem 0.5rem;
31
+ border-radius: 0.5rem;
32
+ font-size: 0.8rem;
33
+ }
34
+ </style>
35
+ <button class="wallet-btn">
36
+ <svg class="wallet-icon" viewBox="0 0 24 24">
37
+ <path fill="currentColor" d="M5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3M7,7A2,2 0 0,0 5,9V17A2,2 0 0,0 7,19H17A2,2 0 0,0 19,17V16H17V17H7V9H19V7H7Z" />
38
+ </svg>
39
+ Connect Wallet
40
+ </button>
41
+ `;
42
+
43
+ this.shadowRoot.querySelector('.wallet-btn').addEventListener('click', () => {
44
+ this.handleWalletConnect();
45
+ });
46
+ }
47
+
48
+ handleWalletConnect() {
49
+ // Simulate wallet connection
50
+ const btn = this.shadowRoot.querySelector('.wallet-btn');
51
+ btn.innerHTML = `
52
+ <svg class="wallet-icon" viewBox="0 0 24 24">
53
+ <path fill="currentColor" d="M5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3M7,7A2,2 0 0,0 5,9V17A2,2 0 0,0 7,19H17A2,2 0 0,0 19,17V16H17V17H7V9H19V7H7Z" />
54
+ </svg>
55
+ <span class="wallet-address">0x742d...35f1</span>
56
+ `;
57
+ }
58
+ }
59
+
60
+ customElements.define('wallet-connect', WalletConnect);
index.html CHANGED
@@ -1,19 +1,182 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>DoomBuy Reanimated | AI-Powered Shopping Experience</title>
7
+ <link rel="stylesheet" href="style.css">
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <script src="https://unpkg.com/feather-icons"></script>
10
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
11
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.4/gsap.min.js"></script>
12
+ <script src="components/navbar.js"></script>
13
+ <script src="components/product-card.js"></script>
14
+ <script src="components/ai-assistant.js"></script>
15
+ <script src="components/wallet-connect.js"></script>
16
+ <script src="components/crypto-selector.js"></script>
17
+ </head>
18
+ <body class="bg-gray-100 font-sans antialiased">
19
+ <custom-navbar></custom-navbar>
20
+
21
+ <main class="container mx-auto px-4 py-8">
22
+ <!-- Hero Section with AI Animation -->
23
+ <section class="hero relative overflow-hidden rounded-2xl mb-12">
24
+ <div class="absolute inset-0 bg-gradient-to-r from-purple-600 to-blue-500 opacity-90"></div>
25
+ <div class="relative z-10 py-20 px-8 text-center">
26
+ <h1 class="text-5xl font-bold text-white mb-6 animate-fadeIn">Welcome to the Future of Shopping</h1>
27
+ <p class="text-xl text-white mb-8 max-w-2xl mx-auto animate-fadeIn delay-100">AI-curated products with immersive animations for a next-gen experience</p>
28
+ <button class="bg-white text-purple-600 font-bold py-3 px-8 rounded-full hover:scale-105 transition-transform duration-300 animate-bounce">
29
+ Explore AI Collection
30
+ </button>
31
+ </div>
32
+ <div class="ai-particles absolute inset-0"></div>
33
+ </section>
34
+
35
+ <!-- AI Product Recommendations -->
36
+ <section class="mb-16">
37
+ <div class="flex justify-between items-center mb-8">
38
+ <h2 class="text-3xl font-bold text-gray-800">AI-Powered Recommendations</h2>
39
+ <div class="ai-loader flex items-center">
40
+ <div class="loader-dots"></div>
41
+ <span class="ml-2 text-purple-600">Analyzing your preferences...</span>
42
+ </div>
43
+ </div>
44
+
45
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
46
+ <custom-product-card
47
+ title="Quantum Headphones"
48
+ price="199.99"
49
+ rating="4.8"
50
+ image="http://static.photos/technology/640x360/1"
51
+ ai-tag="Best Audio Quality"
52
+ ></custom-product-card>
53
+
54
+ <custom-product-card
55
+ title="Neon Gaming Keyboard"
56
+ price="149.99"
57
+ rating="4.6"
58
+ image="http://static.photos/gaming/640x360/2"
59
+ ai-tag="Trending Now"
60
+ ></custom-product-card>
61
+
62
+ <custom-product-card
63
+ title="Holographic Smartwatch"
64
+ price="349.99"
65
+ rating="4.9"
66
+ image="http://static.photos/technology/640x360/3"
67
+ ai-tag="Editor's Choice"
68
+ ></custom-product-card>
69
+
70
+ <custom-product-card
71
+ title="AI Camera Drone"
72
+ price="499.99"
73
+ rating="4.7"
74
+ image="http://static.photos/technology/640x360/4"
75
+ ai-tag="Top Performer"
76
+ ></custom-product-card>
77
+ </div>
78
+ </section>
79
+
80
+ <!-- AI Shopping Assistant -->
81
+ <custom-ai-assistant></custom-ai-assistant>
82
+
83
+ <!-- Animated Categories -->
84
+ <section class="mb-16">
85
+ <h2 class="text-3xl font-bold text-gray-800 mb-8">Explore Categories</h2>
86
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-4">
87
+ <a href="#" class="category-card bg-white rounded-xl overflow-hidden shadow-md hover:shadow-xl transition-shadow duration-300">
88
+ <div class="h-40 bg-gradient-to-r from-blue-400 to-blue-600 flex items-center justify-center">
89
+ <i data-feather="smartphone" class="text-white w-12 h-12"></i>
90
+ </div>
91
+ <div class="p-4">
92
+ <h3 class="font-semibold text-lg">Electronics</h3>
93
+ <p class="text-gray-600">Cutting-edge tech</p>
94
+ </div>
95
+ </a>
96
+
97
+ <a href="#" class="category-card bg-white rounded-xl overflow-hidden shadow-md hover:shadow-xl transition-shadow duration-300">
98
+ <div class="h-40 bg-gradient-to-r from-purple-400 to-purple-600 flex items-center justify-center">
99
+ <i data-feather="watch" class="text-white w-12 h-12"></i>
100
+ </div>
101
+ <div class="p-4">
102
+ <h3 class="font-semibold text-lg">Wearables</h3>
103
+ <p class="text-gray-600">Smart fashion</p>
104
+ </div>
105
+ </a>
106
+
107
+ <a href="#" class="category-card bg-white rounded-xl overflow-hidden shadow-md hover:shadow-xl transition-shadow duration-300">
108
+ <div class="h-40 bg-gradient-to-r from-green-400 to-green-600 flex items-center justify-center">
109
+ <i data-feather="home" class="text-white w-12 h-12"></i>
110
+ </div>
111
+ <div class="p-4">
112
+ <h3 class="font-semibold text-lg">Smart Home</h3>
113
+ <p class="text-gray-600">Automated living</p>
114
+ </div>
115
+ </a>
116
+
117
+ <a href="#" class="category-card bg-white rounded-xl overflow-hidden shadow-md hover:shadow-xl transition-shadow duration-300">
118
+ <div class="h-40 bg-gradient-to-r from-red-400 to-red-600 flex items-center justify-center">
119
+ <i data-feather="cpu" class="text-white w-12 h-12"></i>
120
+ </div>
121
+ <div class="p-4">
122
+ <h3 class="font-semibold text-lg">Gaming</h3>
123
+ <p class="text-gray-600">Next-level play</p>
124
+ </div>
125
+ </a>
126
+ </div>
127
+ </section>
128
+ </main>
129
+
130
+ <script src="script.js"></script>
131
+ <script>
132
+ feather.replace();
133
+
134
+ // GSAP Animations
135
+ gsap.from(".hero h1", {
136
+ duration: 1,
137
+ y: 50,
138
+ opacity: 0,
139
+ ease: "power3.out"
140
+ });
141
+
142
+ gsap.from(".hero p", {
143
+ duration: 1,
144
+ y: 50,
145
+ opacity: 0,
146
+ ease: "power3.out",
147
+ delay: 0.3
148
+ });
149
+
150
+ gsap.from(".hero button", {
151
+ duration: 1,
152
+ y: 50,
153
+ opacity: 0,
154
+ ease: "power3.out",
155
+ delay: 0.6
156
+ });
157
+
158
+ // AI particles animation
159
+ const particles = document.querySelector('.ai-particles');
160
+ for (let i = 0; i < 30; i++) {
161
+ const particle = document.createElement('div');
162
+ particle.className = 'ai-particle absolute rounded-full';
163
+ particle.style.width = `${Math.random() * 10 + 5}px`;
164
+ particle.style.height = particle.style.width;
165
+ particle.style.background = `rgba(255, 255, 255, ${Math.random() * 0.5 + 0.1})`;
166
+ particle.style.left = `${Math.random() * 100}%`;
167
+ particle.style.top = `${Math.random() * 100}%`;
168
+ particles.appendChild(particle);
169
+
170
+ gsap.to(particle, {
171
+ x: `${Math.random() * 100 - 50}px`,
172
+ y: `${Math.random() * 100 - 50}px`,
173
+ duration: Math.random() * 10 + 5,
174
+ repeat: -1,
175
+ yoyo: true,
176
+ ease: "sine.inOut"
177
+ });
178
+ }
179
+ </script>
180
+ <script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
181
+ </body>
182
+ </html>
script.js ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ document.addEventListener('DOMContentLoaded', () => {
2
+ // Initialize AI assistant
3
+ const aiAssistant = document.querySelector('custom-ai-assistant');
4
+
5
+ // Simulate AI loading recommendations
6
+ setTimeout(() => {
7
+ const loader = document.querySelector('.ai-loader');
8
+ if (loader) {
9
+ loader.innerHTML = '<span class="text-green-600">Recommendations ready!</span>';
10
+ }
11
+ }, 3000);
12
+
13
+ // Add hover effects to product cards
14
+ const productCards = document.querySelectorAll('custom-product-card');
15
+ productCards.forEach(card => {
16
+ card.addEventListener('mouseenter', () => {
17
+ gsap.to(card, {
18
+ y: -5,
19
+ duration: 0.3,
20
+ boxShadow: '0 10px 25px -5px rgba(0, 0, 0, 0.1)',
21
+ ease: "power2.out"
22
+ });
23
+ });
24
+
25
+ card.addEventListener('mouseleave', () => {
26
+ gsap.to(card, {
27
+ y: 0,
28
+ duration: 0.3,
29
+ boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1)',
30
+ ease: "power2.out"
31
+ });
32
+ });
33
+ });
34
+
35
+ // Animate category cards on scroll
36
+ const observer = new IntersectionObserver((entries) => {
37
+ entries.forEach(entry => {
38
+ if (entry.isIntersecting) {
39
+ gsap.from(entry.target, {
40
+ duration: 0.6,
41
+ opacity: 0,
42
+ y: 20,
43
+ ease: "back.out(1.7)",
44
+ delay: 0.1 * Array.from(entry.target.parentNode.children).indexOf(entry.target)
45
+ });
46
+ observer.unobserve(entry.target);
47
+ }
48
+ });
49
+ }, { threshold: 0.1 });
50
+
51
+ document.querySelectorAll('.category-card').forEach(card => {
52
+ observer.observe(card);
53
+ });
54
+ });
style.css CHANGED
@@ -1,28 +1,101 @@
1
- body {
2
- padding: 2rem;
3
- font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif;
4
  }
5
 
6
- h1 {
7
- font-size: 16px;
8
- margin-top: 0;
9
  }
10
 
11
- p {
12
- color: rgb(107, 114, 128);
13
- font-size: 15px;
14
- margin-bottom: 10px;
15
- margin-top: 5px;
16
  }
17
 
18
- .card {
19
- max-width: 620px;
20
- margin: 0 auto;
21
- padding: 16px;
22
- border: 1px solid lightgray;
23
- border-radius: 16px;
24
  }
25
 
26
- .card p:last-child {
27
- margin-bottom: 0;
28
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @keyframes fadeIn {
2
+ from { opacity: 0; transform: translateY(20px); }
3
+ to { opacity: 1; transform: translateY(0); }
4
  }
5
 
6
+ @keyframes bounce {
7
+ 0%, 100% { transform: translateY(0); }
8
+ 50% { transform: translateY(-10px); }
9
  }
10
 
11
+ @keyframes pulse {
12
+ 0%, 100% { opacity: 1; }
13
+ 50% { opacity: 0.5; }
 
 
14
  }
15
 
16
+ .animate-fadeIn {
17
+ animation: fadeIn 1s ease-out forwards;
 
 
 
 
18
  }
19
 
20
+ .delay-100 {
21
+ animation-delay: 0.1s;
22
  }
23
+
24
+ .delay-200 {
25
+ animation-delay: 0.2s;
26
+ }
27
+
28
+ .animate-bounce {
29
+ animation: bounce 2s infinite;
30
+ }
31
+
32
+ .hero {
33
+ height: 500px;
34
+ background-image: url('http://static.photos/technology/1200x630/5');
35
+ background-size: cover;
36
+ background-position: center;
37
+ }
38
+
39
+ .ai-particles {
40
+ pointer-events: none;
41
+ }
42
+
43
+ .loader-dots {
44
+ display: inline-block;
45
+ position: relative;
46
+ width: 80px;
47
+ height: 20px;
48
+ }
49
+
50
+ .loader-dots div {
51
+ position: absolute;
52
+ width: 10px;
53
+ height: 10px;
54
+ border-radius: 50%;
55
+ background: #8b5cf6;
56
+ animation-timing-function: cubic-bezier(0, 1, 1, 0);
57
+ }
58
+
59
+ .loader-dots div:nth-child(1) {
60
+ left: 8px;
61
+ animation: loader-dots1 0.6s infinite;
62
+ }
63
+
64
+ .loader-dots div:nth-child(2) {
65
+ left: 8px;
66
+ animation: loader-dots2 0.6s infinite;
67
+ }
68
+
69
+ .loader-dots div:nth-child(3) {
70
+ left: 32px;
71
+ animation: loader-dots2 0.6s infinite;
72
+ }
73
+
74
+ .loader-dots div:nth-child(4) {
75
+ left: 56px;
76
+ animation: loader-dots3 0.6s infinite;
77
+ }
78
+
79
+ @keyframes loader-dots1 {
80
+ 0% { transform: scale(0); }
81
+ 100% { transform: scale(1); }
82
+ }
83
+
84
+ @keyframes loader-dots3 {
85
+ 0% { transform: scale(1); }
86
+ 100% { transform: scale(0); }
87
+ }
88
+
89
+ @keyframes loader-dots2 {
90
+ 0% { transform: translate(0, 0); }
91
+ 100% { transform: translate(24px, 0); }
92
+ }
93
+
94
+ .category-card:hover i {
95
+ transform: scale(1.2);
96
+ transition: transform 0.3s ease;
97
+ }
98
+
99
+ .category-card i {
100
+ transition: transform 0.3s ease;
101
+ }