33800 Docs

← Retour

Proposition : NeedFinder v3 - Expansion Multi-Domaines + Backfill + Discoveries

Date : 23/01/2026 15:51 Status : EN ATTENTE VALIDATION

Objectif

Transformer NeedFinder en outil complet de détection d'opportunités :

  1. Backfill 6 mois - Récupérer l'historique des posts
  2. Multi-domaines - Santé, finance, éducation... pas que tech
  3. Réactiver Discoveries - arXiv, HuggingFace, GitHub (code existe, tables supprimées)
  4. Matching Besoins ↔ Découvertes - Lier les problèmes aux solutions potentielles

État actuel

Sources actives

Source API Limite actuelle
Reddit /r/{sub}/new.json?limit=100 ~100 posts récents
HackerNews askstories.json + topstories.json ~200 stories actuelles

Sources désactivées (code existe)

Source Fichier Table requise
arXiv collectors/arxiv.ts discoveries, discovery_sources
HuggingFace collectors/huggingface.ts discoveries, discovery_sources
GitHub Trending collectors/github-trending.ts discoveries, discovery_sources

Nouvelles sources à ajouter

Source Type API Couverture
PubMed Papers médicaux NCBI E-utilities Santé, pharma, bio
medRxiv/bioRxiv Preprints santé API REST Santé/Bio avant peer-review
Nature News Publications majeures RSS/Scraping Toutes sciences
ScienceDaily Vulgarisation RSS Grand public
WHO News Santé publique RSS/API Annonces OMS
ProductHunt Startups/Produits API GraphQL Nouveaux services
SSRN Papers sociales RSS/API Économie, droit, sciences sociales
Google Scholar Papers tous domaines SerpAPI/Scraping Multi-domaines

Tables actuelles

sources, posts, needs, mentions, need_mentions, detected_needs, raw_posts, collection_logs

Tables manquantes

discoveries, discovery_sources, need_discovery_matches

Plan d'implémentation

Phase 1 : Backfill historique (6 mois)

1.1 Reddit via Pullpush.io

// Nouveau endpoint avec paramètre since
POST /api/backfill/reddit
{
  "since": "2025-07-23",  // 6 mois
  "subreddits": ["SomebodyMakeThis", "AppIdeas", ...]
}

// API Pullpush
https://api.pullpush.io/reddit/search/submission?subreddit={sub}&after={timestamp}&size=500

1.2 HackerNews via Algolia

// Nouveau endpoint
POST /api/backfill/hn
{
  "since": "2025-07-23"
}

// API Algolia HN
https://hn.algolia.com/api/v1/search_by_date?tags=ask_hn&numericFilters=created_at_i>{timestamp}

Phase 2 : Extension multi-domaines

2.1 Nouveaux subreddits par domaine

Domaine Subreddits
Santé HealthIT, diabetes, ChronicPain, mentalhealth, Supplements, Biohackers
Finance personalfinance, FinancialPlanning, povertyfinance, UKPersonalFinance, smallbusiness
Éducation learnprogramming, languagelearning, GetStudying, HomeschoolRecovery, Teachers
Productivité productivity, GetMotivated, DecidingToBeBetter, selfimprovement
Parents Parenting, beyondthebump, Mommit, daddit
Seniors AgingParents, eldercare, retirement
Accessibilité disability, deaf, Blind, accessibility
Environnement ZeroWaste, sustainability, homestead

2.2 Nouveaux patterns de détection

const HEALTH_PATTERNS = [
  /is there (a|an) app for (tracking|managing|monitoring)/i,
  /how do (you|people) (manage|track|deal with)/i,
  /wish (my doctor|there was a way)/i,
  /frustrated with (my|the) (insurance|healthcare|medication)/i,
];

const FINANCE_PATTERNS = [
  /is there (a|an) (app|tool|way) to (budget|track|save)/i,
  /how do you (save|invest|budget)/i,
  /looking for (a|an) (financial|budgeting|investment)/i,
];

// etc. pour chaque domaine

Phase 3 : Réactivation Discoveries

3.1 Créer les tables manquantes

-- Sources de découvertes
CREATE TABLE discovery_sources (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name VARCHAR(50) UNIQUE NOT NULL,  -- 'arxiv', 'huggingface', 'github'
  description TEXT,
  api_url TEXT,
  last_collected_at TIMESTAMPTZ,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

-- Découvertes (papers, modèles, repos)
CREATE TABLE discoveries (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  source_id UUID REFERENCES discovery_sources(id),
  external_id VARCHAR(255) NOT NULL,
  external_url TEXT,
  title TEXT NOT NULL,
  description TEXT,
  category VARCHAR(100),
  tags TEXT[],
  tech_stack TEXT[],
  downloads INTEGER DEFAULT 0,
  upvotes INTEGER DEFAULT 0,
  impact_score INTEGER,
  novelty_score INTEGER,
  accessibility_score INTEGER,
  published_at TIMESTAMPTZ,
  last_seen_at TIMESTAMPTZ DEFAULT NOW(),
  created_at TIMESTAMPTZ DEFAULT NOW(),
  UNIQUE(source_id, external_id)
);

-- Matching besoins ↔ découvertes
CREATE TABLE need_discovery_matches (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  need_id UUID REFERENCES needs(id),
  discovery_id UUID REFERENCES discoveries(id),
  match_score INTEGER,  -- 0-100
  match_reason TEXT,
  is_validated BOOLEAN DEFAULT FALSE,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  UNIQUE(need_id, discovery_id)
);

-- Insérer les sources
INSERT INTO discovery_sources (name, description, api_url) VALUES
  ('arxiv', 'Papers scientifiques', 'https://export.arxiv.org/api/query'),
  ('huggingface', 'Modèles ML open source', 'https://huggingface.co/api'),
  ('github', 'Repos trending', 'https://api.github.com');

3.2 Étendre arXiv au-delà de l'informatique

const ARXIV_CATEGORIES = [
  // Existants (CS)
  'cs.AI', 'cs.LG', 'cs.CL', 'cs.CV', 'cs.CR', 'cs.DB', 'cs.SE',
  // Santé
  'q-bio.QM',  // Quantitative Methods
  'q-bio.NC',  // Neurons and Cognition
  'stat.ML',   // Machine Learning (stats)
  // Finance
  'q-fin.PM',  // Portfolio Management
  'q-fin.RM',  // Risk Management
  'econ.GN',   // General Economics
];

3.3 Modifier le scheduler

// scheduler.ts - Ajouter au cycle
import { collectArxiv } from '../collectors/arxiv';
import { collectHuggingFace } from '../collectors/huggingface';
import { collectGitHubTrending } from '../collectors/github-trending';
import { matchNeedsToDiscoveries } from '../services/matcher';

async function runFullCycle() {
  // 1. Collect needs (Reddit + HN)
  await runCollection();

  // 2. Analyze needs (Ollama)
  await runAnalysis();

  // 3. Collect discoveries (arXiv + HF + GitHub)
  await collectArxiv();
  await collectHuggingFace();
  await collectGitHubTrending();

  // 4. Match needs to discoveries (Ollama)
  await matchNeedsToDiscoveries();
}

Phase 4 : Matching IA (besoins ↔ découvertes)

Nouveau service matcher.ts

export async function matchNeedsToDiscoveries(): Promise<void> {
  // 1. Récupérer les besoins non matchés (score > 50)
  const needs = await sql`
    SELECT * FROM needs
    WHERE opportunity_score >= 50
    AND id NOT IN (SELECT need_id FROM need_discovery_matches)
    LIMIT 20
  `;

  // 2. Récupérer les découvertes récentes
  const discoveries = await sql`
    SELECT * FROM discoveries
    WHERE created_at > NOW() - INTERVAL '30 days'
  `;

  // 3. Pour chaque besoin, demander à Ollama de trouver les découvertes pertinentes
  for (const need of needs) {
    const prompt = `
      Besoin utilisateur: "${need.need_statement}"
      Catégorie: ${need.category}

      Découvertes récentes:
      ${discoveries.map(d => `- ${d.title}: ${d.description}`).join('\n')}

      Quelles découvertes pourraient répondre à ce besoin ?
      Répondre en JSON: [{"discovery_id": "...", "score": 0-100, "reason": "..."}]
    `;

    // Envoyer à ai-orchestrator
    const matches = await analyzeWithOllama(prompt);

    // Sauvegarder les matches
    for (const match of matches) {
      await sql`
        INSERT INTO need_discovery_matches (need_id, discovery_id, match_score, match_reason)
        VALUES (${need.id}, ${match.discovery_id}, ${match.score}, ${match.reason})
      `;
    }
  }
}

Phase 5 : Dashboard enrichi

Nouvelles pages

Nouveaux endpoints API

GET /api/discoveries?source=arxiv&category=health&limit=50
GET /api/matches?minScore=70
GET /api/opportunities (besoins avec matches)

Résumé des modifications

Fichier Action
src/collectors/reddit.ts Ajouter subreddits multi-domaines
src/collectors/hackernews.ts Pas de changement
src/collectors/arxiv.ts Étendre catégories
src/collectors/huggingface.ts Pas de changement
src/collectors/github-trending.ts Pas de changement
src/collectors/backfill.ts NOUVEAU - Pullpush + Algolia
src/services/matcher.ts NOUVEAU - Matching IA
src/cron/scheduler.ts Ajouter discoveries + matching
src/index.ts Nouveaux endpoints
migrations/003_discoveries.sql NOUVEAU - Tables discoveries

Estimation

Phase Complexité
1. Backfill Moyenne (API externes)
2. Multi-domaines Faible (config)
3. Discoveries Moyenne (tables + scheduler)
4. Matching Élevée (prompts IA)
5. Dashboard Faible (pages HTML)

Risques

  1. Rate limits API - Pullpush/Reddit peuvent bloquer si trop de requêtes
  2. Volume données - 6 mois de backfill = potentiellement 100k+ posts
  3. Coût IA - Matching requiert beaucoup d'appels Ollama
  4. Qualité matching - Les résultats dépendent des prompts

Questions

  1. Ordre de priorité des phases ?
  2. Domaines prioritaires (santé en premier ?) ?
  3. Profondeur backfill (6 mois ou plus/moins) ?
  4. Fréquence du matching (chaque cycle ou quotidien) ?

Validation requise