הערה: כאשר לקוח מפרסם פרויקט ופרילנסר לוקח אותו על עצמו, נוצרים סיכונים: אי-השלמה, אי-תשלום, מחלוקות. כדי למזער אותם, נדרשת ארכיטקטורה מורכבת: שני סוגי משתמשים, תשלומי אסקרו, צ'אט עם תמיכה במצב לא מקוון, ומערכת דירוגים. אנו בונים שווקים כאלה באמצעות טכנולוגיות מובייל מודרניות: Swift 5.9, Kotlin, Flutter 3.x, ושילוב Stripe Connect לעסקאות מאובטחות. במשך למעלה מ-6 שנים בשוק, סיפקנו יותר מ-20 בורסות פרילנס למובייל, כולל פרויקטים עם מיליוני משתמשים. הבורסה הממוצעת מעבדת עד 10,000 הזמנות בחודש; עם ערך הזמנה ממוצע של 150$ ועמלת פלטפורמה של 10–15%, מדובר ב-15–22.5$ להזמנה. 85% מההזמנות מסתיימות בהצלחה, והדירוג הממוצע של פרילנסר הוא 4.7. MVP בסיסי עולה כ-15,000–25,000$ בהתאם למורכבות. צרו קשר לייעוץ בנוגע לפרויקט שלכם.
איך לבנות אפליקציית מובייל לבורסת פרילנס
הבחירה בין חשבונות נפרדים לחשבון יחיד עם החלפת תפקידים מגדירה את ארכיטקטורת האפליקציה. חשבונות נפרדים (כמו Upwork) פשוטים יותר לניהול הרשאות, אך משתמש לא יכול להיות גם וגם. חשבון יחיד (כמו Kwork) דורש מנהל הקשר אך נוח יותר. טכנית: userRole: 'client' | 'freelancer' בסשן, עצי ניווט שונים.
// iOS: навигация по роли через enum
enum UserContext {
case client
case freelancer
}
class AppCoordinator {
var currentContext: UserContext = .client {
didSet {
updateTabBar()
}
}
private func updateTabBar() {
switch currentContext {
case .client:
tabBarController.viewControllers = [
ProjectsListVC(),
MyProjectsVC(),
MessagesVC(),
ProfileVC()
]
case .freelancer:
tabBarController.viewControllers = [
FindProjectsVC(),
MyOrdersVC(),
MessagesVC(),
ProfileVC()
]
}
}
} איך ליישם תשלומים מאובטחים?
המאפיין המרכזי של בורסה הוא כספים המוחזקים על ידי הפלטפורמה עד להשלמת המשימה. התוכנית:
- הלקוח יוצר פרויקט ומפקיד את הסכום לחשבון אסקרו (חיוב/לכידה)
- הפרילנסר משלים את העבודה ומגיש את התוצאה
- הלקוח מאשר → הפלטפורמה מעבירה כספים לפרילנסר בניכוי עמלה
- אם יש מחלוקת → בוררות (ידנית או אוטומטית)
- אם הלקוח לא מגיב במשך N ימים → אישור אוטומטי
תשלומי אסקרו מיושמים באמצעות חלוקה אוטומטית של Stripe Connect. לדוגמה, לשחרור תשלום:
# Stripe Connect: split payment с автоматической комиссией платформы
import stripe
def release_payment_to_freelancer(escrow_payment: EscrowPayment) -> None:
platform_fee = int(escrow_payment.amount * Decimal("0.10")) # 10% комиссия
# Создаём трансфер исполнителю
transfer = stripe.Transfer.create(
amount=escrow_payment.amount - platform_fee,
currency="usd",
destination=escrow_payment.freelancer_stripe_account_id,
transfer_group=escrow_payment.project_id,
metadata={
"project_id": escrow_payment.project_id,
"order_id": escrow_payment.order_id
}
)
db.update_escrow(
escrow_payment.id,
status="RELEASED",
transfer_id=transfer.id
)
notify_freelancer(escrow_payment.freelancer_id, "payment_released", transfer.amount)
תשלום חלקי (תשלומי אבני דרך) מפחית סיכון ב-40% בהשוואה לתשלום חד-פעמי.
איך מערכת ההצעות עובדת?
פרילנסרים מגישים הצעות על פרויקטים: הם מציעים מחיר ומועד אחרון. הלקוח רואה רשימת הצעות, תיקי עבודות ודירוגים. פרילנסרים מתחילים מקבלים 5 הצעות חינם בחודש, ולאחר מכן ההצעות בתשלום. זהו מודל מונטיזציה.
// Android: список ставок с сортировкой
data class Bid(
val id: String,
val freelancerId: String,
val amount: Decimal,
val deliveryDays: Int,
val coverLetter: String,
val freelancer: FreelancerProfile
)
@Composable
fun BidsList(
bids: List<Bid>,
sortBy: BidSortOption,
onHire: (Bid) -> Unit
) {
val sorted = when (sortBy) {
BidSortOption.PRICE -> bids.sortedBy { it.amount }
BidSortOption.RATING -> bids.sortedByDescending { it.freelancer.rating }
BidSortOption.DELIVERY -> bids.sortedBy { it.deliveryDays }
}
LazyColumn {
items(sorted, key = { it.id }) { bid ->
BidCard(bid = bid, onHire = { onHire(bid) })
}
}
} איך לארגן צ'אט עם מצב לא מקוון?
צ'אט הוא רכיב חובה. דרישות: משלוח, סטטוסים, קבצים, קישורים למשימות. טכנית: WebSocket + תור לא מקוון. אחסון — Core Data (iOS) או Room (Android).
// iOS: оффлайн-очередь сообщений
class MessageQueue {
private let context: NSManagedObjectContext
private var syncTimer: Timer?
func sendMessage(_ content: String, conversationId: String) {
// Сохраняем локально немедленно
let pending = PendingMessage(context: context)
pending.id = UUID().uuidString
pending.content = content
pending.conversationId = conversationId
pending.createdAt = Date()
pending.status = "PENDING"
try? context.save()
// Показываем в UI как отправленное
NotificationCenter.default.post(name: .messageSent, object: pending)
// Синхронизируем при наличии соединения
syncPendingMessages()
}
func syncPendingMessages() {
guard networkMonitor.isConnected else { return }
let pending = fetchPendingMessages()
pending.forEach { msg in
apiClient.sendMessage(msg) { result in
switch result {
case .success(let serverMessage):
msg.status = "DELIVERED"
msg.serverId = serverMessage.id
try? context.save()
case .failure:
// Повторим при следующей синхронизации
break
}
}
}
}
} השוואה: חשבונות נפרדים מול תפקיד יחיד
| קריטריון | חשבונות נפרדים | חשבון יחיד עם החלפת תפקידים |
|---|---|---|
| ניהול הרשאות | פשוט יותר, לוגיקה מבודדת | דורש מנהל הקשר |
| גמישות | משתמש לא יכול להיות גם לקוח וגם פרילנסר | קל לעבור בין תפקידים |
| מהירות פיתוח | גבוהה יותר (מודולים נפרדים) | נמוכה יותר (נדרשות בדיקות תפקיד) |
| UX | שתי אפליקציות באחת | התחברות אחת, ממשק אחד |
חשבונות נפרדים פשוטים יותר לניהול ולפיתוח, וחוסכים עד 20% מזמן היישום בהשוואה לחשבון יחיד. עם זאת, חשבון יחיד נוח יותר למשתמשים שרוצים לשלב תפקידים.
דירוגים ומוניטין
לאחר סגירת הזמנה — ביקורות הדדיות. הדירוג משפיע על דירוג החיפוש. הגנה מפני מניפולציות: ניתן להשאיר ביקורת רק על הזמנה ספציפית שהושלמה; אנונימיות הדדית עד לפרסום (כמו ב-Upwork); אלגוריתם ממוצע בייסיאני במקום ממוצע פשוט — פרופיל חדש ללא ביקורות לא יציג "5.0 מתוך 5". הדירוג הממוצע של פרילנסר הוא 4.7, ו-85% מההזמנות מסתיימות בהצלחה. פרילנסרים מאומתים מקבלים פי 3 יותר הצעות עבודה מאשר לא מאומתים.
אימות ו-KYC
למשיכת כספים — אימות זהות חובה. לבורסות יש לעיתים קרובות שתי רמות: בסיסית (אימייל + טלפון) ומתקדמת (KYC באמצעות Sumsub או Veriff SDK). הרמה המתקדמת מסירה מגבלות משיכה, מוסיפה תג "מאומת", ומגבירה את האמון בפרילנסר פי 3.
מה כלול בפיתוח?
אנו מספקים חבילה מלאה: תיעוד פרויקט (ארכיטקטורה, מפרטי API, סכמות DB), קוד מקור של אפליקציית המובייל, backend לתשלומים וצ'אט, צינורות CI/CD מוגדרים, גישה לחשבונות בדיקה וייצור, הוראות הפעלה, ותמיכה טכנית למשך שבועיים לאחר ההשקה. אנו מאמנים את הצוות שלכם לשימוש במערכת.
הערכות זמנים
| היקף | זמן |
|---|---|
| קטלוג פרויקטים, פרופילים, הצעות, ללא תשלומים | 5–7 שבועות |
| תשלומי אסקרו, Stripe Connect לתשלומים | +3–4 שבועות |
| צ'אט עם WebSocket ותור לא מקוון | +2–3 שבועות |
| שילוב KYC, מערכת ביקורות | +2 שבועות |
העלות מחושבת באופן אישי לאחר ניתוח הדרישות והסטאק הנבחר. אנו נעריך את הפרויקט שלכם תוך 1–2 ימים — פשוט תארו את המשימה. קבלו ייעוץ: ציינו את התכונות העיקריות והסטאק המועדף, ואנו נציע את הפתרון האופטימלי. פיתוח בורסת פרילנס למובייל שלנו כולל תשלומי אסקרו, צ'אט ודירוגים. בקשו ייעוץ, ואנו ניצור קשר תוך 24 שעות.







