Date : 13/01/2026 17:05 Duree : ~45 min Statut : TERMINE
Transformer NeedFinder d'un collecteur IT en detecteur d'opportunites multi-domaines avec tracking de persistance.
Avant : 8 subreddits (IT uniquement) Apres : 27 subreddits sur 7 domaines
| Domaine | Subreddits | Posts collectes |
|---|---|---|
| tech | SomebodyMakeThis, AppIdeas, indiehackers, startups, SideProject, webdev, selfhosted, Entrepreneur | 176 |
| work | freelance, digitalnomad, WorkOnline | 36 |
| health | loseit, fitness, ADHD, sleep, mentalhealth | 35 |
| productivity | productivity, getdisciplined, declutter | 34 |
| finance | personalfinance, frugal, FIRE, povertyfinance | 24 |
| education | GetStudying, languagelearning | 20 |
| family | Parenting, NewParents | 17 |
Total : 342 posts (vs 157 avant)
Nouvelles tables SQL :
-- Historique quotidien des mentions
CREATE TABLE need_history (
id SERIAL PRIMARY KEY,
need_id UUID REFERENCES detected_needs(id),
snapshot_date DATE NOT NULL,
mention_count INTEGER,
total_engagement INTEGER,
avg_score DECIMAL(5,2),
UNIQUE(need_id, snapshot_date)
);
-- Tendances calculees
CREATE TABLE need_trends (
id SERIAL PRIMARY KEY,
need_id UUID REFERENCES detected_needs(id) UNIQUE,
trend_type VARCHAR(20), -- rising, stable, declining, spike
persistence_score INTEGER, -- 0-100
growth_rate DECIMAL(5,2),
days_active INTEGER
);
Fonctions PostgreSQL :
calculate_persistence_score(need_id) - Score 0-100 basé sur jours actifscalculate_trend_type(need_id) - Détecte rising/stable/declining/spikeVue opportunités :
CREATE VIEW opportunity_matrix AS
SELECT *,
CASE
WHEN persistence_score >= 70 AND opportunity_score >= 60 THEN 'high_opportunity'
WHEN persistence_score >= 50 AND opportunity_score >= 40 THEN 'medium_opportunity'
ELSE 'emerging'
END as opportunity_level
FROM detected_needs;
| Endpoint | Description |
|---|---|
| GET /api/stats | Stats avec breakdown par domaine et persistance |
| GET /api/needs?domain=X&min_persistence=Y | Filtrage par domaine/persistance |
| GET /api/opportunities?level=high | Besoins haute opportunité |
| GET /api/trending | Besoins rising ou spike |
| GET /api/needs/:id/history | Historique d'un besoin |
| Fichier | Modification |
|---|---|
| src/collectors/reddit.ts | 27 subreddits, 7 domaines, patterns enrichis |
| src/collectors/hackernews.ts | Schema public, table raw_posts |
| src/cron/scheduler.ts | recordDailySnapshot() apres collecte |
| src/db/client.ts | Schema public |
| src/index.ts | API v2 avec endpoints persistance |
| docker-compose.yml | Network supabase_default |
Container : needfinder-collector-dev (dev-portainer) Port : 5200 Network : supabase_default (acces direct PostgreSQL) Schedule : Toutes les 6h (00h, 06h, 12h, 18h UTC)
# Stats avec domaines
curl http://192.168.1.51:5200/api/stats | jq '.domains'
# Besoins trending
curl http://192.168.1.51:5200/api/trending
# Besoins haute persistance
curl "http://192.168.1.51:5200/api/needs?min_persistence=50"