Skip to content

Déployé par mes soins sur Netlify (front) et Railway (back + DB), Task Connect est une plateforme web de mise en relation entre particuliers et prestataires de services à domicile. L’application gère les annonces, les profils différenciés (clients et jobbers) et propose une interface responsive. Stack : React, Node.js, Express, MySQL.

License

Notifications You must be signed in to change notification settings

nadir-ammisaid/Task-Connect

 
 

Repository files navigation

Français Français   |   English English

Français Français

Task Connect

Task Connect est une plateforme web collaborative qui met en relation des particuliers avec des prestataires de services du quotidien (bricolage, ménage, jardinage, aide à domicile, etc.).
L'application permet de publier des tâches/missions, d'y répondre via des offres, de consulter des avis et de gérer les profils utilisateurs dans un environnement sécurisé.

Projet personnel réalisé en suivant une architecture MVC propre et modulaire.

Ce projet repose sur une stack moderne et une base de données relationnelle robuste avec des contraintes d’intégrité (clés étrangères, CHECK, ON DELETE CASCADE), permettant d’assurer la fiabilité des données et la scalabilité de l’application.

🔗 Découvrez le projet en ligne : www.taskconnect.fr

💬 Vos avis m'intéressent - n'hésitez pas à me faire part de vos retours ou suggestions !

Ce projet est basé sur le monorepo JS proposé par la Wild Code School (v7.1.7), pré-configuré avec des outils de qualité industrielle :

  • Concurrently : Exécution simultanée de plusieurs commandes dans un seul terminal
  • Husky : Exécution de commandes spécifiques déclenchées par des événements Git
  • Vite : Alternative performante à Create-React-App
  • Biome : Alternative à ESLint et Prettier pour la qualité du code
  • Supertest : Tests des serveurs HTTP en Node.js

Schéma visuel de l'architecture du projet (MVC)

sequenceDiagram
    box Web Client
    participant React as React
    participant Fetcher as Fetcher
    end
    box Web Server
    participant Express as Express
    participant Module as Module
    end
    box DB Server
    participant DB as MySQL Server
    end

    React-)Fetcher: event
    activate Fetcher
    Fetcher-)Express: requête (HTTP)
    activate Express
    Express-)Module: appel
    activate Module
    Module-)DB: requête SQL
    activate DB
    DB--)Module: données
    deactivate DB
    Module--)Express: json
    deactivate Module
    Express--)Fetcher: réponse HTTP
    deactivate Express
    Fetcher--)React: render
    deactivate Fetcher
Loading

Stack

  • Client : React + TypeScript + Vite
  • Serveur : Node.js + Express + MySQL
  • CSS3 : Styling avec CSS
  • Upload : Gestion d’image via Multer
  • Authentification sécurisée via JWT (cookie httpOnly + SameSite) et hashage argon2 (à implémenter bientôt)
  • Hébergement : Frontend sur Netlify, Backend (API & base de données) sur Railway

Fonctionnalités principales

  • Création, consultation, modification et suppression de tâches/tasks
  • Upload d’image lors de la création de tâches
  • Interface responsive adaptée aux écrans mobile et desktop
  • Authentification sécurisée avec gestion de session (à implémenter bientôt)
  • Système d’offres (un tasker peut répondre à une mission) (à implémenter bientôt)
  • Avis et notation (avec contraintes de validité et protections anti-abus) (à implémenter bientôt)
  • Accès restreint aux utilisateurs connectés (à implémenter bientôt)

Démarrer le projet

Utilisateurs Windows

Assurez-vous de lancer ces commandes dans un terminal Git pour éviter les problèmes de formats de nouvelles lignes :

git config --global core.eol lf
git config --global core.autocrlf false

Installation

  1. Installez le plugin Biome dans VSCode et configurez-le

  2. Cloner le dépôt :

    git clone git@github.com:nadir-ammisaid/Task-Connect.git
    cd task-connect
  3. Installer les dépendances :

    npm install
  4. Configurer les fichiers .env :

    • Vous pouvez copier les fichiers .env.sample comme modèles (ne les supprimez pas)

    • client/.env

      VITE_API_URL=http://localhost:3310/api
      
    • server/.env

      DB_HOST=localhost
      DB_USER=root
      DB_PASSWORD=motdepasse
      DB_NAME=task_connect
      JWT_SECRET=supersecretkey
      FRONT_URL=http://localhost:5173
      
  5. Lancer le projet :

    npm run dev

Arborescence du projet (monorepo)

task-connect/
├── client/
│   ├── public/
│   └── src/
│       ├── assets/
│       ├── components/
│       ├── context/
│       ├── pages/
│       ├── services/
│       └── types/
│   ├── App.tsx
│   ├── main.tsx
│   ├── vite.config.ts
│   └── tsconfig.json
│
├── server/
│   ├── bin/
│   ├── database/
│   │   ├── fixtures/
│   │   ├── client.ts
│   │   └── schema.sql
│   ├── public/
│   │   ├── assets/
│   │   └── uploads/
│   ├── src/
│   │   ├── modules/
│   │   │   ├── task/
│   │   │   ├── user/
│   │   │   ├── offer/
│   │   │   ├── review/
│   │   │   └── category/
│   │   ├── types/
│   │   ├── app.ts
│   │   ├── main.ts
│   │   └── router.ts
│   ├── tests/
│   ├── jest.config.js
│   └── tsconfig.json

Routes principales de l'API

Méthode Route Description
GET /api/tasks Récupérer la liste des tâches
POST /api/tasks Créer une tâche (avec image)
GET /api/tasks/:id Détail d’une tâche
PUT /api/tasks/:id Modifier une tâche existante
DELETE /api/tasks/:id Supprimer une tâche existante
DELETE /api/tasks/:id Suppression d’une tâche
GET /api/categories Liste des catégories disponibles
--- --- ---
bientôt: --- ---
--- --- ---
POST /api/login Connexion utilisateur
GET /api/me Profil connecté
POST /api/offers Envoi d’une offre
GET /api/reviews/tasker/:id Avis pour un tasker
POST /api/reviews Création d’un avis

Variables d'environnement

client/.env

VITE_API_URL=http://localhost:3310/api

server/.env

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=root
DB_NAME=task_connect
JWT_SECRET=supersecretkey
CLIENT_URL=http://localhost:3000

Sécurité

  • Requêtes SQL préparées via mysql2/promise
  • Authentification JWT stockée en cookie httpOnly avec SameSite=Strict (à implémenter bientôt)
  • Hashage sécurisé des mots de passe avec argon2 (à implémenter bientôt)
  • Middleware verifyToken pour protéger les routes sensibles (à implémenter bientôt)
  • Vérifications côté client et serveur (à implémenter bientôt)

Auteur

Projet personnel développé en autonomie par Nadir AMMI SAID, pour approfondir mes compétences en développement full-stack.
🔗 Découvrez le projet en ligne : www.taskconnect.fr

💬 Vos avis m'intéressent - n'hésitez pas à me faire part de vos retours ou suggestions !
📩 Vous pouvez me contacter directement sur LinkedIn : https://www.linkedin.com/in/nadir-ammisaid/

Contribution

Pour contribuer au projet :

  1. Fork le dépôt
  2. Clone votre fork sur votre machine locale
  3. Créez une nouvelle branche pour votre fonctionnalité (git switch -c feature/votre-fonctionnalite)
  4. Commit vos modifications (git commit -m 'Ajout de fonctionnalité')
  5. Push vers votre branche (git push origin feature/votre-fonctionnalite)
  6. Créez une Pull Request sur le dépôt principal

Bonnes pratiques :

  • Exécutez npm run check avant de pousser vos modifications
  • Ajoutez des tests pour toute nouvelle fonctionnalité
  • Suivez les principes SOLID pour une architecture de code propre et maintenable



English English

Task Connect

Task Connect is a collaborative web platform that connects individuals with everyday service providers (handyman, cleaning, gardening, home assistance, etc.).
The application allows users to post tasks/missions, respond to them via offers, consult reviews, and manage user profiles in a secure environment.

Personal project built following a clean and modular MVC architecture.

This project relies on a modern stack and a robust relational database with integrity constraints (foreign keys, CHECK, ON DELETE CASCADE), ensuring data reliability and application scalability.

🔗 Discover the project online: www.taskconnect.fr

💬 Your feedback matters - don't hesitate to share your thoughts or suggestions!

This project is based on the JS monorepo proposed by Wild Code School (v7.1.7), pre-configured with industrial quality tools:

  • Concurrently: Simultaneous execution of multiple commands in a single terminal
  • Husky: Execution of specific commands triggered by Git events
  • Vite: High-performance alternative to Create-React-App
  • Biome: Alternative to ESLint and Prettier for code quality
  • Supertest: Testing of HTTP servers in Node.js

Visual diagram of the project architecture (MVC)

sequenceDiagram
    box Web Client
    participant React as React
    participant Fetcher as Fetcher
    end
    box Web Server
    participant Express as Express
    participant Module as Module
    end
    box DB Server
    participant DB as MySQL Server
    end

    React-)Fetcher: event
    activate Fetcher
    Fetcher-)Express: requête (HTTP)
    activate Express
    Express-)Module: appel
    activate Module
    Module-)DB: requête SQL
    activate DB
    DB--)Module: données
    deactivate DB
    Module--)Express: json
    deactivate Module
    Express--)Fetcher: réponse HTTP
    deactivate Express
    Fetcher--)React: render
    deactivate Fetcher
Loading

Stack

  • Client: React + TypeScript + Vite
  • Server: Node.js + Express + MySQL
  • CSS3: Styling with CSS
  • Upload: Image management via Multer
  • Secure authentication via JWT (httpOnly cookie + SameSite) and argon2 hashing (to be implemented soon)
  • Hosting: Frontend on Netlify, Backend (API & database) on Railway

Main Features

  • Create, view, edit, and delete tasks
  • Image upload when creating tasks
  • Responsive interface adapted for mobile and desktop screens
  • Secure authentication with session management (to be implemented soon)
  • Offer system (a tasker can respond to a mission) (to be implemented soon)
  • Reviews and ratings (with validity constraints and anti-abuse protections) (to be implemented soon)
  • Restricted access for logged-in users (to be implemented soon)

Getting Started

Windows Users

Make sure to run these commands in a Git terminal to avoid line ending issues:

git config --global core.eol lf
git config --global core.autocrlf false

Installation

  1. Install the Biome plugin in VSCode and configure it

  2. Clone the repository:

    git clone git@github.com:nadir-ammisaid/Task-Connect.git
    cd task-connect
  3. Install dependencies:

    npm install
  4. Configure .env files:

    • You can copy the .env.sample files as templates (do not delete them)

    • client/.env

      VITE_API_URL=http://localhost:3310/api
      
    • server/.env

      DB_HOST=localhost
      DB_USER=root
      DB_PASSWORD=password
      DB_NAME=task_connect
      JWT_SECRET=supersecretkey
      FRONT_URL=http://localhost:5173
      
  5. Launch the project:

    npm run dev

Arborescence du projet (monorepo)

task-connect/
├── client/
│   ├── public/
│   └── src/
│       ├── assets/
│       ├── components/
│       ├── context/
│       ├── pages/
│       ├── services/
│       └── types/
│   ├── App.tsx
│   ├── main.tsx
│   ├── vite.config.ts
│   └── tsconfig.json
│
├── server/
│   ├── bin/
│   ├── database/
│   │   ├── fixtures/
│   │   ├── client.ts
│   │   └── schema.sql
│   ├── public/
│   │   ├── assets/
│   │   └── uploads/
│   ├── src/
│   │   ├── modules/
│   │   │   ├── task/
│   │   │   ├── user/
│   │   │   ├── offer/
│   │   │   ├── review/
│   │   │   └── category/
│   │   ├── types/
│   │   ├── app.ts
│   │   ├── main.ts
│   │   └── router.ts
│   ├── tests/
│   ├── jest.config.js
│   └── tsconfig.json

Routes principales de l'API

Method Route Description
GET /api/tasks Get task list
POST /api/tasks Create a task (with image)
GET /api/tasks/:id Task details
PUT /api/tasks/:id Edit an existing task
DELETE /api/tasks/:id Delete an existing task
DELETE /api/tasks/:id Task deletion
GET /api/categories List of available categories
--- --- ---
soon : --- ---
--- --- ---
POST /api/login User login
GET /api/me Connected profile
POST /api/offers Submit an offer
GET /api/reviews/tasker/:id Reviews for a tasker
POST /api/reviews Create a review

Environment variables

client/.env

VITE_API_URL=http://localhost:3310/api

server/.env

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=root
DB_NAME=task_connect
JWT_SECRET=mySuperSecret
CLIENT_URL=http://localhost:3000

Sécurité

  • Prepared SQL queries via mysql2/promise
  • JWT authentication stored in httpOnly cookie with SameSite=Strict (to be implemented soon)
  • Secure password hashing with argon2 (to be implemented soon)
  • verifyToken middleware to protect sensitive routes (to be implemented soon)
  • Client and server-side validations (to be implemented soon)

Author

Personal project independently developed by Nadir AMMI SAID to deepen my full-stack development skills.
🔗 Discover the project online: www.taskconnect.fr

💬 Your feedback matters - don't hesitate to share your thoughts or suggestions!
📩 You can contact me directly on LinkedIn: https://www.linkedin.com/in/nadir-ammisaid/

Contribution

To contribute to the project:

  1. Fork the repository
  2. Clone your fork to your local machine
  3. Create a new branch for your feature (git switch -c feature/your-feature)
  4. Commit your changes (git commit -m 'Add feature')
  5. Push to your branch (git push origin feature/your-feature)
  6. Create a Pull Request on the main repository

Best practices:

  • Run npm run check before pushing your changes
  • Add tests for any new feature
  • Follow SOLID principles for clean and maintainable code architecture

About

Déployé par mes soins sur Netlify (front) et Railway (back + DB), Task Connect est une plateforme web de mise en relation entre particuliers et prestataires de services à domicile. L’application gère les annonces, les profils différenciés (clients et jobbers) et propose une interface responsive. Stack : React, Node.js, Express, MySQL.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 68.8%
  • CSS 27.8%
  • HTML 1.4%
  • Dockerfile 1.3%
  • Other 0.7%