La page /matching du projet BisoMapTech affiche des projets tech congolais et les met en relation avec les talents disponibles. Le frontend est déjà prêt et tourne avec des données fictives en attendant que cette table existe dans Supabase. Une fois les étapes ci-dessous effectuées, les vraies données s'afficheront automatiquement.
Dans l'éditeur SQL de Supabase (SQL Editor → New Query), coller et exécuter :
create table public.projects (
id uuid primary key default gen_random_uuid(),
title text not null,
description text not null,
tech_stack text[] not null default '{}',
budget text,
duration text,
collab_mode text,
open_to_collaboration boolean not null default true,
location text,
project_type text check (project_type in ('Startup', 'Public', 'ONG', 'Personnel')),
priority text,
author_id uuid not null references public.profiles(id) on delete cascade,
created_at timestamptz not null default now(),
updated_at timestamptz not null default now()
);Note : La colonne
author_idréférence la tableprofilesdéjà existante. La suppression d'un profil entraîne la suppression en cascade de ses projets.
-- Activer Row Level Security
alter table public.projects enable row level security;
-- Tout le monde peut lire les projets ouverts à la collaboration
create policy "Projets visibles publiquement"
on public.projects for select
using (open_to_collaboration = true);
-- Seul l'auteur peut créer un projet
create policy "Auteur peut créer"
on public.projects for insert
with check (auth.uid() = author_id);
-- Seul l'auteur peut modifier son projet
create policy "Auteur peut modifier"
on public.projects for update
using (auth.uid() = author_id);
-- Seul l'auteur peut supprimer son projet
create policy "Auteur peut supprimer"
on public.projects for delete
using (auth.uid() = author_id);Pour que les requêtes restent rapides même avec beaucoup de projets :
create index on public.projects (author_id);
create index on public.projects (open_to_collaboration, created_at desc);Activer d'abord l'extension si elle ne l'est pas déjà (Database → Extensions → moddatetime), puis :
create trigger set_projects_updated_at
before update on public.projects
for each row
execute procedure moddatetime(updated_at);Après exécution, vérifier dans Table Editor que :
- La table
projectsapparaît bien - Les colonnes correspondent au schéma ci-dessus
- RLS est activé (cadenas fermé visible dans l'interface)
Pour tester rapidement avec une ligne :
-- Insérer un projet de test (remplacer l'UUID par un vrai author_id depuis profiles)
insert into public.projects (title, description, tech_stack, open_to_collaboration, author_id)
values (
'Projet de test',
'Description du projet de test.',
array['React', 'TypeScript'],
true,
(select id from public.profiles limit 1)
);
-- Vérifier que la ligne est visible
select * from public.projects;Une fois la table créée, aucun changement de code n'est nécessaire. Le service src/lib/project-service.ts tente automatiquement de charger les projets depuis Supabase et bascule sur les données fictives seulement si la table est absente ou vide. Dès que des projets sont insérés, ils apparaissent dans l'onglet Projets de /matching.
La jointure suivante est déjà câblée dans le frontend pour afficher l'auteur de chaque projet :
profiles!projects_author_id_fkey(id, username, full_name, avatar_url)
| Étape | Action | Obligatoire |
|---|---|---|
| 1 | Créer la table projects |
✅ Oui |
| 2 | Activer RLS + politiques | ✅ Oui |
| 3 | Créer les index | Recommandé |
| 4 | Trigger updated_at |
Recommandé |
| 5 | Vérification / test | Conseillé |