بناء منصة حجز الفنانين باستخدام Stripe Connect
بناء منصة حجز الفنانين مع Stripe Connect
لقد بنيت ثلاث منصات أسواق على مدار الستة أعوام الماضية، وقطاع حجز الترفيه هو أحد أكثر المجالات الرأسية إثارة للاهتمام - وصعوبة - للحصول عليها بشكل صحيح. أنت تتعامل مع نوعين مختلفين جداً من المستخدمين (الفنانون الذين يكرهون الأعمال الإدارية ومخططو الفعاليات الذين يحتاجون إلى الموثوقية)، والحجوزات الحساسة للوقت، والتسعير المتغير، ودراما الإلغاء، والسؤال الأبدي "من يحتفظ بالمال؟" دعني أشرح لك كيفية بناء أحد هذه الأشياء بالفعل.
سوق الترفيه الحي المباشر مجزأة. GigSalad بها أكثر من 110,000 فنان. GigMasters تحقق تقريباً 47 مليون دولار سنوياً في الولايات المتحدة وكندا وحدها. Gigstarter توسعت عبر 8 دول أوروبية. لكن معظم هذه المنصات تم بناؤها منذ سنوات باستخدام مكدسات تقنية قديمة، وهناك فرصة حقيقية لبناء شيء أفضل - خاصة إذا أتقنت بنية الدفع من اليوم الأول باستخدام Stripe Connect.

جدول المحتويات
- فهم نموذج السوق ثنائية الجانب
- اختيار مكدس التكنولوجيا الخاص بك
- نمذجة البيانات لأدلة الفنانين
- البحث والتصفية والاستكشاف
- Stripe Connect: العمود الفقري للدفع
- بنية تدفق الحجز
- التعامل مع النزاعات والإلغاءات والاسترجاعات
- نماذج التحقق النقدي التي تعمل بالفعل
- بناء الثقة: المراجعات والتحقق والضمان
- الأداء واعتبارات التوسع
- الأسئلة الشائعة
فهم نموذج السوق ثنائية الجانب
السوق ثنائية الجانب لديها مشكلة الدجاجة والبيضة محفورة في الحمض النووي لها. تحتاج إلى فنانين لجذب العملاء، وعملاء لجذب الفنانين. قبل أن تكتب سطراً واحداً من التعليمات البرمجية، تحتاج إلى تحديد أي جانب ستقوم ببذره أولاً.
للحجز الترفيهي، أود أن أوصي دائماً تقريباً ببذر جانب العرض (الفنانون) أولاً. إليك السبب: الفنانون لديهم الدافع للظهور في أي مكان قد يجلب لهم عروضاً. من ناحية أخرى، لن يزور مخططو الفعاليات منصتك إلا إذا كان هناك بالفعل كتلة حرجة من الموهبة للاستعراض.
رحلات المستخدم الأساسية
جانب الفنان:
- الاشتراك وإنشاء ملف تعريف (السيرة الذاتية والصور ومقاطع الفيديو والعينات الصوتية)
- تعيين التوفر والتسعير ومناطق الخدمة
- تلقي استفسارات الحجز أو الرد على نشرات العرض
- قبول الحجوزات والحصول على الدفع بعد الفعالية
- بناء السمعة من خلال المراجعات
جانب العميل:
- البحث عن الفنانين حسب النوع والموقع والتاريخ والميزانية
- عرض الملفات الشخصية ومشاهدة شرائط العرض والاستماع إلى العينات
- إرسال الاستفسارات أو الحجز مباشرة
- الدفع من خلال المنصة (مع الأموال المحتفظ بها في الضمان)
- ترك مراجعة بعد الفعالية
تجلس المنصة في الوسط، وتيسر الاكتشاف والاتصال والدفع والثقة.
اختيار مكدس التكنولوجيا الخاص بك
هنا لدي آراء قوية. بالنسبة إلى أسواق مثل هذه، تريد مكدساً يتعامل مع المحتوى الديناميكي بشكل جيد، ويدعم الميزات في الوقت الفعلي (المراسلة وتحديثات التوفر)، ويمنحك المرونة اللازمة لبناء منطق حجز مخصص.
| المكون | الموصى به | السبب |
|---|---|---|
| الواجهة الأمامية | Next.js (App Router) | SSR لـ SEO على ملفات الفنانين، React للتدفقات التفاعلية للحجز |
| API الخلفية | Next.js API Routes أو خدمة Node.js منفصلة | Stripe webhooks، منطق الحجز، المصادقة |
| قاعدة البيانات | PostgreSQL (عبر Supabase أو Neon) | البيانات العلائقية تناسب نماذج الأسواق بشكل مثالي |
| CMS | Sanity أو Payload CMS | ملفات الفنانين تحتاج محتوى منظم مع الوسائط |
| المصادقة | Clerk أو NextAuth.js | المصادقة المستندة إلى الأدوار (فنان مقابل عميل مقابل مسؤول) |
| البحث | Meilisearch أو Algolia | البحث الفقيه السريع عبر الأنواع والمواقع والأسعار |
| الدفع | Stripe Connect | مصمم خصيصاً لدفعات السوق |
| تخزين الملفات | Cloudflare R2 أو AWS S3 | عينات صوتية ومقاطع فيديو وصور صحافية |
| الاستضافة | Vercel أو Cloudflare Pages | العرض على الحافة لتحميل ملفات الفنانين بسرعة |
إذا كنت مهتماً بالذهاب في طريق تطوير Next.js، فهذا ما أوصي به لمعظم الفرق. لا يمكن التغلب على مزيج مكونات الخادم لصفحات دليل الفنانين الحرجة من حيث SEO ومكونات العميل لنماذج الحجز التفاعلية.
بالنسبة للفرق التي تريد صفحات ثابتة سريعة جداً للجزء الدليل والجزر الديناميكية للحجز، يستحق النظر في Astro أيضاً - خاصة إذا كان جانب الدليل من المنصة مليئاً بالمحتوى.

نمذجة البيانات لأدلة الفنانين
الحصول على نموذج البيانات الصحيح مبكراً يوفر عليك أشهراً من إعادة البناء لاحقاً. إليك ما وجدته يعمل بشكل جيد لأسواق الترفيه:
-- ملف الفنان الأساسي
CREATE TABLE artists (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id),
stripe_account_id TEXT, -- حساب Stripe Connect
display_name TEXT NOT NULL,
slug TEXT UNIQUE NOT NULL,
bio TEXT,
headline TEXT,
profile_image_url TEXT,
base_price_cents INTEGER,
price_type TEXT CHECK (price_type IN ('per_hour', 'per_event', 'custom')),
travel_radius_miles INTEGER,
is_verified BOOLEAN DEFAULT FALSE,
is_featured BOOLEAN DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- وسم النوع/الفئة (متعدد إلى متعدد)
CREATE TABLE artist_genres (
artist_id UUID REFERENCES artists(id),
genre_id UUID REFERENCES genres(id),
PRIMARY KEY (artist_id, genre_id)
);
-- مناطق الخدمة
CREATE TABLE artist_service_areas (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
artist_id UUID REFERENCES artists(id),
city TEXT,
state TEXT,
country TEXT,
lat DECIMAL(10, 8),
lng DECIMAL(11, 8)
);
-- تقويم التوفر
CREATE TABLE artist_availability (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
artist_id UUID REFERENCES artists(id),
date DATE NOT NULL,
status TEXT CHECK (status IN ('available', 'booked', 'blocked')),
UNIQUE (artist_id, date)
);
-- أصول الوسائط
CREATE TABLE artist_media (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
artist_id UUID REFERENCES artists(id),
media_type TEXT CHECK (media_type IN ('image', 'video', 'audio')),
url TEXT NOT NULL,
thumbnail_url TEXT,
title TEXT,
sort_order INTEGER DEFAULT 0
);
لاحظ stripe_account_id على جدول الفنانين. هذا هو معرف الحساب المتصل من Stripe Connect - ستحتاج إليه لكل دفعة. المزيد عن قريب.
الفئات ذات الأهمية
بناءً على ما يعمل في منصات مثل GigSalad و ShowBird (8,000+ فنان عبر 45+ فئة) و StarClinch (14 فئة، 17,000+ فنان)، إليك الفئات التي تدفع أكثر الحجوزات:
- الفرق الحية (فرق الزفاف، فرق الأغطية، فرق الجاز)
- الموسيقيون المنفردون (عازفو الجيتار والبيانو والكمان)
- مغنيو الموسيقى
- المغنيون والفنانون الصوتيون
- الفرق الكلاسيكية (رباعيات الأوتار والفرق الموسيقية)
- أعمال تحية
- الكوميديانيون
- الساحرون وفناني الفنون المتنوعة
- ظهور المشاهير
- الميسرون والمضيفون
لا تحاول أن تكون كل شيء عند الإطلاق. اختر 3-4 فئات، احكم منطقة جغرافية، ثم توسع.
البحث والتصفية والاستكشاف
البحث هو الميزة الفاصلة بين النجاح والفشل لأي أسواق دليلية. إذا لم يتمكن العملاء من العثور على الفنان المناسب في أقل من 30 ثانية، فسيغادرون.
مرشحات البحث الأساسية
- النوع/الفئة: مختار متعدد مع فئات فرعية
- الموقع: البحث الجغرافي المستند إلى النطاق ("فرق الجاز ضمن 50 ميل من أوستن")
- توفر التاريخ: عرض الفنانين المتاحين فقط في تاريخ الفعالية الخاص بالعميل
- نطاق السعر: منزلق بحد أدنى وأقصى
- التقييم: مرشح التقييم النجمي الأدنى
- تم التحقق منه فقط: تبديل للفنانين المتحققين
بالنسبة لمحرك البحث نفسه، أود أن أذهب مع Meilisearch على Algolia للبناء الجديد. إنه مفتوح المصدر، قابل للاستضافة ذاتياً، والبحث الفقيه ممتاز. Algolia يعمل أيضاً لكن التكاليف تزداد بسرعة كلما نما الفهرس الخاص بك - عند 1 دولار أو أكثر لكل 1000 طلب بحث على خططهم المدفوعة.
// مثال: استعلام Meilisearch للبحث عن الفنان
const results = await searchClient.index('artists').search(query, {
filter: [
`genres IN ["jazz", "blues"]`,
`base_price_cents >= 15000`,
`base_price_cents <= 75000`,
`_geoRadius(30.2672, -97.7431, 80467)`, // 50 ميل من أوستن
],
sort: ['rating:desc', 'booking_count:desc'],
facets: ['genres', 'price_range', 'rating'],
hitsPerPage: 20,
});
توفر التاريخ هو أصعب مرشح. لا تريد دفع بيانات التوفر إلى فهرس البحث الخاص بك والحفاظ عليها متزامنة. بدلاً من ذلك، احصل على مجموعة أوسع من Meilisearch، ثم قم بالتصفية حسب التوفر في طبقة التطبيق الخاصة بك باستخدام استعلام قاعدة البيانات. إنها خطوة إضافية، لكنها تحافظ على فهرس البحث الخاص بك نظيفاً.
Stripe Connect: العمود الفقري للدفع
هنا يصبح الأمر حقيقياً. Stripe Connect هو الخيار الصحيح لسوق ترفيهي ثنائي الجانب. لقد قيمت البدائل (PayPal للأسواق و Adyen للمنصات و Mangopay) و Stripe Connect يفوز في تجربة المطور والتوثيق والتغطية العالمية.
أي نوع من أنواع Stripe Connect؟
يقدم Stripe ثلاثة أنواع من حسابات Connect. بالنسبة لمنصة حجز الفنان، إليك التفصيل:
| نوع الحساب | عبء KYC | الوصول إلى لوحة التحكم | الأفضل لـ |
|---|---|---|---|
| معياري | يتعامل Stripe مع KYC | الفنان يحصل على لوحة تحكم Stripe الكاملة | المنصات حيث يريد الفنانون السيطرة |
| إكسبرس | يتعامل Stripe مع KYC | لوحة تحكم محدودة ومدمجة | معظم الأسواق (موصى به) |
| مخصص | أنت تتعامل مع KYC | لا شيء - أنت تبني كل شيء | منصات التسمية البيضاء |
اذهب مع حسابات Express. يتم إدراج الفنانين بسرعة (يتعامل Stripe مع التحقق من الهوية)، فهم يحصلون على لوحة تحكم محدودة لعرض دفعاتهم، وتحتفظ بالسيطرة على تدفق الدفع. حسابات مخصصة مفرطة إلا إذا كنت تبني حلاً للتسمية البيضاء.
إدراج الفنانين في Stripe Connect
// إنشاء حساب Stripe Connect Express لفنان جديد
import Stripe from 'stripe';
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
export async function createConnectAccount(artistId: string, email: string) {
const account = await stripe.accounts.create({
type: 'express',
email,
capabilities: {
card_payments: { requested: true },
transfers: { requested: true },
},
business_type: 'individual',
metadata: {
artist_id: artistId,
},
});
// تخزين معرف الحساب
await db.artists.update({
where: { id: artistId },
data: { stripe_account_id: account.id },
});
// توليد رابط الإدراج
const accountLink = await stripe.accountLinks.create({
account: account.id,
refresh_url: `${process.env.APP_URL}/artists/onboarding/refresh`,
return_url: `${process.env.APP_URL}/artists/onboarding/complete`,
type: 'account_onboarding',
});
return accountLink.url;
}
معالجة دفع الحجز
المفهوم الأساسي هنا هو رسوم المقصد. يدفع العميل منصتك، وتقسم Stripe الأموال تلقائياً - رسم منصتك يبقى معك، والباقي يذهب إلى حساب الفنان المتصل.
export async function createBookingPayment(
bookingId: string,
amountCents: number,
artistStripeAccountId: string,
platformFeePercent: number = 15
) {
const platformFeeCents = Math.round(amountCents * (platformFeePercent / 100));
const paymentIntent = await stripe.paymentIntents.create({
amount: amountCents,
currency: 'usd',
application_fee_amount: platformFeeCents,
transfer_data: {
destination: artistStripeAccountId,
},
metadata: {
booking_id: bookingId,
},
// احتفظ بالرسوم - لا تلتقطها بعد (سلوك يشبه الضمان)
capture_method: 'manual',
});
return paymentIntent;
}
لاحظ capture_method: 'manual'. هذا أمر بالغ الأهمية لمنصة حجز. أنت تصرح بالرسوم عندما يتم تأكيد الحجز، لكن لا تلتقط (تأخذ فعلاً المال) إلا أقرب إلى تاريخ الفعالية أو بعد الفعالية. يمنحك هذا وظيفة تشبه الضمان دون بناء ضمان فعلي.
قيد مهم: يجب التقاط الالتقاط اليدوي على Stripe في غضون 7 أيام من التفويض. للأحداث الأبعد، ستحتاج إلى نهج مختلف - اشحن وديعة على الفور والرصيد أقرب إلى الفعالية، أو استخدم نمط الرسوم والتحويلات المنفصلة من Stripe حيث تشحن العميل على الفور لكن تؤجل التحويل إلى الفنان.
رسوم Stripe Connect (2025)
رسوم Stripe الحالية لـ Connect:
- معالجة قياسية: 2.9% + $0.30 لكل معاملة
- رسم Connect: 0.25% إضافية + $0.25 لكل دفعة إلى الحسابات المتصلة (Express/Custom)
- الدفعات الفورية: 1% من مبلغ الدفعة (اختياري، الفنانون يحبونها)
لذا على حجز بقيمة 2000 دولار برسم منصة بنسبة 15% (300 دولار)، تبدو الرياضيات كالتالي:
- يدفع العميل: 2000 دولار
- معالجة Stripe: ~58.30 دولار (2.9% + $0.30)
- رسم المنصة: 300 دولار
- رسم دفعة Connect: ~5.25 دولار (0.25% من 1700 دولار + $0.25)
- يتلقى الفنان: ~1636.45 دولار
ستريد أن تكون شفافاً بشأن من يمتص رسوم Stripe. تقوم معظم المنصات إما بإدراجها في رسم المنصة أو تمريرها للعميل كـ "رسم الخدمة".
بنية تدفق الحجز
إليك تدفق الحجز الذي وجدته يعمل بشكل أفضل لمنصات الترفيه:
يبحث العميل → يعرض ملف الفنان → يتحقق من التوفر →
يرسل الاستفسار (اختياري) → يقدم طلب الحجز →
يراجع الفنان ويقبل → يتم تفويض بطاقة العميل →
تحدث الفعالية → منصة التقاط الدفع → يتم دفع الفنان
نقاش الاستفسار مقابل الحجز الفوري
تستخدم بعض المنصات (مثل GigSalad) نموذج الاستفسار أولاً حيث يرسل العملاء رسالة ويحصلون على عرض سعر مخصص. والبعض الآخر يسمح بالحجز الفوري بأسعار مدرجة. توصيتي؟ ادعم كليهما.
- الحجز الفوري: للفنانين ذوي التسعير الواضح والثابت (مثل "DJ لمدة 4 ساعات: 800 دولار"). معدل تحويل أعلى.
- الاستفسار/العرض: للفعاليات المخصصة (مثل "فرقة من 10 قطع لحفل شركة"). قيمة حجز متوسطة أعلى.
اسمح للفنانين باختيار النموذج الذي يفضلونه في إعداداتهم.
آلة الحالة للحجوزات
تحتاج الحجوزات إلى حالات واضحة. أستخدم نمط آلة الحالة:
const BOOKING_STATES = {
INQUIRY: 'inquiry', // أرسل العميل رسالة
QUOTED: 'quoted', // أرسل الفنان سعراً
PENDING: 'pending', // قدم العميل حجزاً (في انتظار الفنان)
ACCEPTED: 'accepted', // قبل الفنان
PAYMENT_AUTHORIZED: 'authorized', // تم تفويض البطاقة
CONFIRMED: 'confirmed', // أكد كلا الجانبين
IN_PROGRESS: 'in_progress', // الفعالية جارية
COMPLETED: 'completed', // انتهت الفعالية، تم التقاط الدفع
CANCELLED: 'cancelled', // إلغاء أي من الطرفين
DISPUTED: 'disputed', // رفع العميل نزاعاً
REFUNDED: 'refunded', // تم إصدار استرجاع
} as const;
كل انتقال حالة يؤدي إلى إجراءات محددة: رسائل بريد إلكترونية وعمليات Stripe وتحديثات التقويم وما إلى ذلك.
التعامل مع النزاعات والإلغاءات والاسترجاعات
هذا هو الجزء الذي لا أحد يريد التفكير فيه، لكنه سيأكلك إذا لم تخطط له.
طبقات سياسة الإلغاء
اسمح للفنانين بتعيين سياساتهم الخاصة للإلغاء من طبقات محددة مسبقاً:
| السياسة | 30+ يوم قبل | 14-30 يوم | 7-14 يوم | أقل من 7 أيام |
|---|---|---|---|---|
| مرن | استرجاع كامل | استرجاع كامل | استرجاع 50% | لا استرجاع |
| معتدل | استرجاع كامل | استرجاع 50% | استرجاع 25% | لا استرجاع |
| صارم | استرجاع 50% | استرجاع 25% | لا استرجاع | لا استرجاع |
تستخدم منصات مثل GEM نهج خزانة الضمان - يتم الاحتفاظ بالأموال حتى انتهاء الفعالية. يمكنك تقريب هذا باستخدام الرسوم والتحويلات المنفصلة من Stripe: اشحن العميل على الفور، لكن قم بالتحويل إلى الفنان فقط بعد الفعالية. هذا يمنحك السيطرة الكاملة على توقيت الاسترجاع.
عدم ظهور الفنان
السيناريو الكابوسي. إذا لم يظهر فنان، فستحتاج إلى:
- استرجع العميل فوراً بالكامل
- خصم من حساب الفنان المتصل إذا تم دفعه بالفعل (يدعم Stripe Connect التحويلات العكسية)
- الوضع علامة على حساب الفنان
- احتمال تعويض العميل من صندوق تأمين المنصة
بناء نظام إبلاغ حيث يمكن للعملاء الإشارة إلى عدم الظهور في غضون 24 ساعة من الفعالية.
نماذج التحقق النقدي التي تعمل بالفعل
بناءً على ما تفعله أفضل المنصات في 2025:
| النموذج | مثال | الإيجابيات | السلبيات |
|---|---|---|---|
| عمولة لكل حجز | 10-20% رسم منصة | الإيرادات تتسع مع الحجوزات | يكره الفنانون الرسوم العالية، يذهبون خارج المنصة |
| اشتراكات طبقات | Gigstarter: مجاني / €9.99/شهر / €14.95/شهر | إيرادات متكررة يمكن التنبؤ بها | يصعب البيع للفنانين الجدد |
| رسوم الرصاص | الدفع لكل استفسار تم استقباله | احتكاك منخفض للفنانين | يمكن أن يبدو غير أخلاقي إذا لم تتحول الرصاصات |
| القوائم المميزة | GigMasters: $30-40/شهر لـ Pro/Featured | بيع إضافي سهل | يمكن أن تخفف جودة البحث |
| هجين | قائمة مجانية + عمولة + طبقات premium | تدفقات إيرادات متعددة | التعقيد |
أود أن أبدأ بنموذج عمولة (رسم منصة بنسبة 12-15% على جانب الفنان ورسم خدمة بنسبة 5-8% على جانب العميل) وأضيف طبقات الاشتراك بمجرد حصولك على الجر. إجمالي منصة بنسبة 17-23% متوافق مع معايير الصناعة.
بناء الثقة: المراجعات والتحقق والضمان
الثقة كل شيء في سوق حيث يدفع شخص ما 2000 دولار أو أكثر لفرقة زفاف لم يشاهدوها أبداً مباشرة.
مستويات التحقق
- التحقق من البريد الإلكتروني: أساسي، يحصل الجميع على هذا
- التحقق من الهوية: تم فحص جواز السفر الحكومي (يتعامل Stripe Connect مع هذا أثناء الإدراج)
- تم التحقق من الخلفية: خدمة جهة خارجية مثل Checkr
- تم التحقق من المنصة: مراجعة يدوية من فريقك (يقوم StarClinch بهذا مع موظفي التحقق المخصصين)
نظام المراجعة
اسمح فقط بالمراجعات من الحجوزات المكتملة. هذا يمنع المراجعات المزيفة ويضمن أن كل مراجعة تمثل معاملة حقيقية. عرض التقييم المجمع وتفاصيل المراجعات الفردية.
// أنشئ مراجعة فقط إذا كان الحجز مكتملاً
async function submitReview(bookingId: string, rating: number, text: string) {
const booking = await db.bookings.findUnique({ where: { id: bookingId } });
if (booking.status !== 'completed') {
throw new Error('Can only review completed bookings');
}
if (booking.reviewed_at) {
throw new Error('Booking already reviewed');
}
return db.reviews.create({
data: {
booking_id: bookingId,
artist_id: booking.artist_id,
client_id: booking.client_id,
rating,
text,
},
});
}
الأداء واعتبارات التوسع
صفحات ملف الفنان هي صفحاتك عالية الحركة وأكثر أهمية لـ SEO. كل ملف فنان هو بشكل أساسي صفحة هبوط يجب أن تصنفها لعمليات البحث مثل "فرقة جاز للاستئجار في شيكاغو".
استراتيجية SSR + ISR
مع Next.js، استخدم الإعادة الثابتة الإضافية لملفات الفنانين:
// app/artists/[slug]/page.tsx
export async function generateStaticParams() {
const artists = await db.artists.findMany({
select: { slug: true },
where: { is_active: true },
});
return artists.map((a) => ({ slug: a.slug }));
}
export const revalidate = 3600; // إعادة التحقق كل ساعة
هذا يمنحك أداء صفحة ثابتة مع بيانات طازجة. تحديثات العروض والتسعير والتوفر على دورة التحقق التالية.
لصفحات البحث/الدليل، يكون SSR أكثر منطقية لأن المحتوى يتغير بناءً على المرشحات والموقع. استخدم البث مع Suspense لإظهار قشرة الصفحة على الفور أثناء تحميل نتائج البحث.
إذا كنت توازن بين أطر عمل مختلفة لهذا النوع من المشاريع، فلدى فريقنا خبرة عميقة في كل من Next.js و Astro - يعتمد الخيار الصحيح على مدى ديناميكية تدفقات الحجز مقابل مدى ثقل محتوى دليلك.
تحسين CDN والوسائط
يرفع الفنانون صوراً عالية الدقة وفيديو. تحتاج:
- خط أنابيب تحسين الصور (مكون Next.js Image + Cloudflare Images أو imgix)
- استضافة فيديو على خدمة مخصصة (Mux أو Cloudflare Stream أو Bunny Stream)
- توليد الموجة الصوتية والبث (WaveSurfer.js على الواجهة الأمامية)
لا تخدم التحميلات الخام. معالجة كل شيء على الجانب الخادمي إلى تنسيقات محسنة.
الأسئلة الشائعة
كم يكلف بناء منصة حجز فنان؟ عادة ما يعمل MVP الأساسي مع ملفات الفنان والبحث وتدفق الحجز وتكامل Stripe Connect بحوالي 40,000-80,000 دولار مع فريق تطوير ذي خبرة، أو 3-5 أشهر من وقت البناء. منصة كاملة الميزات مع المراسلة وتطبيقات الهاتف المحمول والبحث المتقدم يمكن أن تعمل بـ 150,000 دولار+. إذا كنت تريد التحدث عن التفاصيل، تحقق من صفحة التسعير الخاصة بنا لكيفية نطاق مشاريع الأسواق.
لماذا استخدم Stripe Connect بدلاً من بناء تقسيمات الدفع يدوياً؟ يتعامل Stripe Connect مع الأجزاء الصعبة: التحقق من KYC/الهوية للفنانين في 40+ دول، تقرير ضريبة 1099 للفنانين الأمريكيين الذين يكسبون أكثر من 600 دولار، جدولة الدفع التلقائية، ومعالجة المراجعات. بناء هذا بنفسك يستغرق فريقاً مخصصاً 6+ أشهر ويعرضك لخطر تنظيمي. الرسم 0.25% + $0.25 لكل دفعة يستحق كل ذلك.
ما معدل العمولة النموذجي لمنصات حجز الترفيه؟ تفرض معظم المنصات بين 10-20% على جانب الفنان ورسم خدمة عميل 5-10%. تعمل GigSalad و GigMasters في هذا النطاق. تتقاضى Gigstarter بشكل ملحوظ صفر عمولة وتتحقق من خلال طبقات الاشتراك (€9.99-€14.95/شهر). معدلك المثالي يعتمد على سوقك - يمكن للترفيه في حفلات الزفاف أن يحافظ على عمولات أعلى من حفلات الحانات.
كيف تتعامل مع توفر الفنان وتمنع الحجوزات المزدوجة؟ قم بتطبيق نظام توفر يعتمد على التقويم حيث يحتفظ الفنانون بالتواريخ كمتاحة أو محجوزة أو محجوزة. عندما يتم تأكيد الحجز، قم بحجب ذلك التاريخ تلقائياً. استخدم قيود فريدة على مستوى قاعدة البيانات على (artist_id، التاريخ) لمنع حالات السباق. بالنسبة للفنانين الذين يقومون بعروض متعددة يومياً (مثل DJs)، أضف فتحات زمنية إلى نموذج التوفر بدلاً من الكتل اليومية الكاملة.
هل يجب أن أبني دليل قائم على CMS بدون رأس أم قاعدة بيانات مخصصة بالكامل؟ أفضل نهج هجين. استخدم CMS بدون رأس للمحتوى الافتتاحي (منشورات المدونة وأدلة المدينة ودرجات الفئات التي تدفع حركة SEO) وقاعدة بيانات PostgreSQL مخصصة للبيانات العاملة (الحجوزات والدفع والتوفر والمراجعات). محاولة تشغيل منطق الحجز من خلال CMS وصفة للألم.
كيف أحصل على أول 100 فنان على منصتي؟ الوصول المباشر يعمل. قم بكشط دلائل الموسيقيين العامة ومواقع بائعي حفلات الزفاف والقوائم المحلية للفعاليات. أرسل بريداً إلكترونياً للفنانين برسالة قيمة واضحة - قائمة مجانية ولا تكلفة مقدماً وستدفع الحجوزات إليهم. قدم لأول 50 فنان شارة "عضو مؤسس" ورسوم عمولة منخفضة دائماً. شراكة مع مدارس موسيقى محلية والأماكن. أول 100 عمل يدوي، فترة.
ماذا عن الدفع الدولي والعملات المتعددة؟ يدعم Stripe Connect الدفعات في 40+ دول و 135+ عملة. عندما يتم حجز فنان في ألمانيا من قبل عميل في الولايات المتحدة، يتعامل Stripe مع تحويل العملة تلقائياً. ستدفع رسم صرف Stripe (تقريباً 1% أعلى من المعالجة القياسية)، لكن هذا أرخص بكثير من بناء دعم متعدد العملات بنفسك. قم بتعيين رسم المنصة الخاص بك بعملة العميل واترك Stripe تتعامل مع التحويل إلى عملة الفنان المحلية.
كيف أحمي من الاحتيال على سوق ثنائي الجانب؟ طبقات متعددة: التحقق من الهوية المدمج من Stripe Connect للفنانين، Stripe Radar للكشف عن احتيال الدفع على جانب العميل، مراجعة يدوية للحجوزات عالية القيمة (أكثر من 5000 دولار)، فحوصات السرعة (الحسابات التي تجري حجوزات سريعة)، وفترة انتظار قبل دفعات الفنان (3-7 أيام بعد انتهاء الفعالية). فترة الانتظار هي أكبر حماية لك - فهي تمنح العملاء وقتاً للإبلاغ عن المشاكل قبل رحيل الأموال من منصتك.