Présentation#
Workora est un script complet de place de marché freelance. Les clients publient des projets et reçoivent des propositions, ou achètent des services prêts à l’emploi. L’argent circule via un séquestre par jalons, chaque membre a un portefeuille et chaque paiement est enregistré dans un grand livre en partie double.
Le produit est en version 1.0.0, construit sur Laravel 13. Il comprend un site public, un espace membre et une administration, en anglais et en arabe.


Prérequis#
| Élément | Requis |
|---|---|
| PHP | 8.4 ou plus |
| Extensions PHP | bcmath, ctype, curl, fileinfo, gd (avec WebP), intl, mbstring, openssl, pdo_mysql, tokenizer, xml, zip. sodium n’est requis que pour les mises à jour signées. |
| Base de données | MySQL 8.0+ ou MariaDB 10.6+ (utf8mb4) |
| Serveur web | Apache, Nginx ou LiteSpeed avec HTTPS |
| Cron | Une tâche exécutée chaque minute |
Ni Node.js ni Composer ne sont nécessaires sur le serveur : le paquet contient ses dépendances et ses styles compilés.
Installation#
- Envoyez le contenu du dossier
1-Source/workorasur votre serveur. La racine web doit pointer vers le dossierpublic. - Créez une base MySQL vide et un utilisateur.
- Ouvrez
https://your-domain/installdans le navigateur. L’installateur vérifie le serveur puis demande la base de données, le nom et l’adresse du site, le fuseau horaire et le compte administrateur. - À la fin, il affiche la ligne cron à ajouter. Connectez-vous ensuite sur
/loginet ouvrez/admin.
Ligne de commande (facultatif)
php artisan app:install \
--db-name=workora --db-user=root --db-password=secret \
--app-name="My Marketplace" --app-url=https://example.com \
--admin-name="Admin" --admin-username=admin \
--admin-email=admin@example.com --admin-password="a-strong-password"
Ajoutez --create-database pour créer la base, et --demo pour des données fictives (sites de démo uniquement).
Tâche cron#
Une seule tâche fait tout tourner : e-mails et notifications différés, libération automatique des contrats, expiration des projets, renouvellement des abonnements, rappels de réunions, statistiques d’avis, rapprochement nocturne du grand livre et sauvegardes.
* * * * * cd /path/to/workora && php artisan schedule:run >> /dev/null 2>&1
La page Santé de l’administration indique si le planificateur a tourné récemment.
Premiers pas#
- Réglages → Général : nom du site, logo texte, devise de base (à choisir avant le lancement), e-mail de contact, fuseau horaire, pays par défaut.
- Apparence : thème, couleurs, logo, icône, largeur, sections d’accueil, bandeau cookies.
- Langues : activez les langues, choisissez la langue par défaut et relisez les traductions.
- Paiements : activez les passerelles et réglez commission, dépôt et règles de retrait.
- E-mail : configurez SMTP et envoyez un message de test.
- Contenu : modifiez pages, FAQ, blog et témoignages.
- Catégories : ajustez les 14 catégories et 125 sous-catégories à votre niche.


Paiements#
Activez chaque moyen dans Réglages → Paiements. Chacun affiche l’adresse de webhook à enregistrer chez le prestataire.
| Moyen | Remarques |
|---|---|
| Stripe | Cartes. Clé secrète et secret de signature du webhook. Adresse : /webhooks/stripe |
| PayPal | Sandbox ou réel ; identifiant client, secret et identifiant de webhook. Adresse : /webhooks/paypal |
| Paystack, Razorpay, Flutterwave | Clés et secrets de webhook ; adresses sous /webhooks/{gateway} |
| Virement bancaire | Vos coordonnées ; les membres envoient un justificatif que l’équipe approuve |
Les dépôts ont un minimum et un maximum. Les retraits se font par PayPal ou coordonnées bancaires, avec minimum, frais facultatif, délai de rétention facultatif et plafond de demandes ouvertes.
E-mail#
Configurez Réglages → E-mail avec un serveur SMTP et envoyez un message de test. D’ici là, les messages sont écrits dans le journal. Les notifications sont différées et envoyées par cron en une minute. Les membres choisissent les catégories reçues dans leurs réglages de notifications.
Apparence et thèmes#
Administration → Apparence contrôle tout le visuel sans code : un des huit thèmes, couleurs principale et d’accent, nuance de gris, arrondis, police, ombres, style de l’en-tête et de la barre latérale, mode de couleur (clair, sombre, auto). Envoyez un logo (avec variante sombre) et une icône.
Mise en page : largeur standard, large ou pleine, et densité des cartes. Accueil : activez ou non les sections (bande de catégories, chiffres, pourquoi nous, meilleurs freelances, projets, témoignages, bannières), choisissez le nombre de lignes de catégories et défilement ou grille. Les membres choisissent leur mode de couleur, et le thème si vous l’autorisez.


Langues et RTL#
Langues liste les langues actives. Ajoutez-en une depuis un modèle ou par son code, choisissez sa direction et son drapeau, puis ouvrez Traduire pour modifier chaque texte dans un tableau recherchable, importer/exporter du JSON et voir ce qui manque. Catégories, compétences, pages, blog et FAQ se traduisent dans l’éditeur de chaque élément.
La mise en page bascule entièrement en RTL pour les langues concernées. Chaque langue a son URL indexable (?lang=fr) avec liens hreflang et plan du site multilingue.
Fonctionnement de l’argent#
- Le client finance un jalon depuis son portefeuille et l’argent passe en séquestre.
- Le freelance livre ; le client approuve (le paiement est libéré moins la commission), demande des révisions ou ouvre un litige. Sans réaction du client, le paiement est libéré automatiquement après le délai fixé.
- Chaque mouvement est une écriture équilibrée du grand livre en partie double. Une tâche nocturne prouve que portefeuilles, séquestre et revenus concordent.
Commission
Fixez le taux de la plateforme dans Réglages → Paiements, une commission minimale par paiement (facultatif), un taux différent par catégorie et un taux réduit par abonnement. Priorité : abonnement, puis catégorie, puis défaut. Un contrat garde le taux de sa création.
Membres et modération#
Les rôles d’équipe (admin, modérateur, finance, support) ont des droits limités à leurs besoins ; les comptes d’équipe exigent la double authentification. Dans Utilisateurs, recherchez, suspendez ou bannissez des membres et attribuez des rôles. Projets et services peuvent être relus avant publication ; avis et signalements ont leurs files ; l’équipe tranche les litiges avec une note enregistrée.
Contenu et SEO#
Gérez pages, blog, FAQ et témoignages dans Contenu, tous traduisibles. Workora génère un plan du site avec variantes de langue, balises canonical, Open Graph, données structurées pour les services et règles robots. Les pages publiques sont rapides et adaptées au cache.
Abonnements, Connects et limites#
Trois moyens indépendants de monétiser et de réguler l’activité ; utilisez-en un ou tous :
- Connects : les propositions coûtent des crédits. Définissez le prix, les crédits gratuits, la taille et le prix du pack.
- Abonnements : forfaits mensuels qui donnent des Connects, réduisent la commission et modifient les limites.
- Limites (Réglages → Limites et abonnements) : activez au choix propositions par jour, semaine ou mois, nombre de services, éléments de portfolio et contrats actifs. Les membres sans abonnement reçoivent les valeurs gratuites ; chaque abonnement a les siennes (0 = sans limite).
Les membres voient leur consommation sur la page des abonnements et sont prévenus à l’atteinte d’une limite.


Profils, portfolio et vérification#
Les freelances bâtissent la confiance avec titre, compétences, tarif horaire, liens, expériences, formations, certificats et langues (onglet CV), un portfolio qu’ils modifient, masquent, mettent en avant et réordonnent, et un CV imprimable sur /u/username/resume. La jauge de force du profil montre ce qui manque.
Vérification : e-mail, photo de profil et identité (passeport, carte ou permis). Les documents sont ré-encodés et stockés sur le disque privé ; seule l’équipe les voit dans Administration → Vérifications, où elle approuve ou refuse avec motif. La vérification du téléphone est affichée « bientôt ». Vous pouvez exiger une identité vérifiée avant le premier retrait.


Messagerie et réunions#
La messagerie offre la liste des conversations, le chat et un panneau latéral avec la personne, le projet, les commandes, les contrats, les réunions et les fichiers partagés, chacun menant à sa page. Les messages arrivent en direct, avec accusés de lecture et pièces jointes. Avant tout contrat, e-mails, numéros et liens sont masqués pour protéger votre commission (modifiable).
Réunions : chaque partie peut planifier une réunion : choisissez l’heure (affichée dans le fuseau de chacun), la durée et un lien Zoom, Google Meet, Teams, Webex, Jitsi, Whereby ou Skype (ou créez une salle Jitsi gratuite). L’invitation apparaît en carte avec accepter, refuser, ajouter au calendrier (ics) et un bouton Rejoindre actif 15 minutes avant. Les deux parties reçoivent un rappel. Dans Réglages → Messages et fichiers, vous pouvez désactiver les réunions ou autoriser tout lien https.


Chat de support#
Les membres ouvrent Support pour parler à votre équipe ; les visiteurs utilisent le formulaire de contact et reçoivent la réponse par e-mail. Dans Administration → Support, filtrez par statut, sujet, priorité et responsable, attribuez les conversations, écrivez des notes privées, insérez des réponses enregistrées et suivez le délai de première réponse et les notes. À la clôture, le membre note l’aide reçue.
Parrainage, coupons et notifications#
Le parrainage est actif par défaut : le parrain gagne une prime quand le membre invité termine un contrat payé. Les membres ont une page de partage avec boutons copier et partager, visites et résultats ; réglez la prime, le cadeau de bienvenue et le contrat minimum dans Réglages → Parrainage, et consultez les totaux dans Administration → Parrainage. Les coupons créditent le portefeuille une fois par membre, avec plafonds et expiration.
Les notifications ont une cloche, un centre avec filtres, lu/non lu et suppression. Les freelances règlent des alertes de projets par catégorie et mots-clés.
Application installable (PWA)#
Le site publie un manifeste et un petit service worker qui ne met en cache que le CSS, le JavaScript compilés et la page hors ligne, jamais les pages des membres. Les téléphones proposent Ajouter à l’écran d’accueil aux couleurs et au nom de votre marque.
API REST#
Une API JSON en lecture seule est fournie. Activez-la dans Réglages → Général. Les membres créent des jetons depuis la page Sécurité (affichés une fois, stockés hachés, expiration facultative). Envoyez Authorization: Bearer wk_... ; chaque jeton est limité à 60 requêtes par minute. Les montants sont des entiers en unités mineures avec le code de devise.
| Route | Retourne |
|---|---|
GET /api/v1/me | Profil du titulaire du jeton |
GET /api/v1/categories | Catégories et sous-catégories |
GET /api/v1/gigs et /gigs/{id} | Services publiés (filtres q, category) |
GET /api/v1/projects et /projects/{id} | Projets publics ouverts |
GET /api/v1/wallet, /orders, /contracts, /notifications | Données du titulaire du jeton |
curl -H "Authorization: Bearer wk_your_token" https://your-site.example/api/v1/gigs?q=logoSauvegardes et santé#
Une sauvegarde quotidienne de la base et une sauvegarde hebdomadaire complète (avec fichiers) s’exécutent par planification et sont listées dans Santé, où vous pouvez les télécharger. Cette page vérifie aussi PHP, extensions, permissions, planificateur, file d’attente, grand livre et espace disque. Définissez le chemin de mysqldump dans .env (BACKUP_MYSQLDUMP) s’il n’est pas dans le PATH.
Mise à jour#
- Sauvegardez la base et les fichiers.
- Ouvrez Administration → Mises à jour, envoyez le paquet signé et relisez le résumé.
- Appliquez. Workora vérifie la signature, copie les nouveaux fichiers, lance les migrations et vide les caches.
.env, envois et réglages sont conservés.
Sans l’extension sodium, mettez à jour à la main : envoyez les nouveaux fichiers par-dessus les anciens puis lancez php artisan migrate --force et php artisan optimize:clear.
Données de démo et site de démonstration#
php artisan app:demo ajoute membres, projets et services fictifs à toute installation ; --full remplit chaque sous-catégorie. Pour une démo publique, définissez DEMO_MODE=true dans .env et lancez php artisan demo:reset ; le cron la réinitialise chaque heure. En mode démo, une bannière affiche les comptes d’essai avec connexion en un clic, et les actions dangereuses (réglages, équipe, mises à jour, sauvegardes, vrais paiements) sont bloquées. Définissez DEMO_PURCHASE_URL pour afficher un bouton Acheter.
Liste de contrôle sécurité#
- Servez tout en HTTPS et gardez
APP_DEBUG=false. - Gardez le dossier de l’application hors de la racine web publique ou interdisez-y l’accès.
- L’équipe doit utiliser la double authentification.
- Gardez
.envprivé et sauvegardez-le séparément. - Utilisez un mot de passe fort pour la base et limitez son accès au serveur.
- Installez ClamAV et définissez
CLAMSCAN_PATHpour analyser chaque envoi (facultatif). - Lancez
composer auditlors de la mise à jour des dépendances.
Inclus : CSP stricte avec nonce, limitation des actions sensibles, stockage privé des documents et pièces jointes, images ré-encodées, tests automatisés tentant d’accéder aux données d’autres membres et mises à jour signées Ed25519.
Dépannage#
| Problème | Solution |
|---|---|
| Page blanche ou erreur 500 | Consultez storage/logs/laravel.log. Vérifiez que storage et bootstrap/cache sont accessibles en écriture et que PHP est en 8.4+. |
| « Your Composer dependencies require PHP 8.4 » | Choisissez PHP 8.4 pour le domaine dans le panneau d’hébergement. |
| Styles manquants | La racine doit être public et son dossier build envoyé. |
| Images envoyées absentes | Créez le lien de stockage : public/storage vers storage/app/public. |
| E-mails non reçus | Vérifiez SMTP et que le cron tourne chaque minute. |
| Envois refusés | Augmentez upload_max_filesize et post_max_size. |
| Paiements en attente | Vérifiez que l’adresse de webhook est enregistrée chez la passerelle et joignable. |
Support et licence#
Workora est vendu sur CodeCanyon. Support et mises à jour suivent la politique de support d’Envato, avec aide à l’installation et correction de bogues, sans travail sur mesure. Une plateforme qui facture des frais, commissions ou abonnements aux membres nécessite la licence étendue. Les composants tiers sont listés avec leurs licences dans le paquet.
Aucune section ne correspond à votre recherche.