An 18-hour half-life for mixed launch feeds A developer built LaunchSignal, a public feed that merges Product Hunt, Hacker News, and GitHub launches into a single ranked list. The ranking uses a heat formula with an 18-hour half-life, and source-native scores to normalize different platforms. The project is live at launchsignal.ai/feed. Product Hunt, Hacker News, and GitHub do not speak the same language. One is votes in a 24-hour window, one is comments on a Show HN, one is stars on a repo that may have been created last month. I wanted a single public list of what just shipped — not another idea-validation landing page that is a different product at launchsignal.io . The ranking bet is boring on purpose: heat = score × exp −hours / 18 Eighteen hours is a guess. Too short and GitHub never shows up. Too long and yesterday's PH winner sits on the homepage all week. Score is source-native: PH's public feed has no vote count I can trust, so every PH row starts at 12; HN is points + 0.4 × comments; GitHub is 2 × stars + forks. Then the same decay hits all three. GitHub Search taught me not to get clever. A long OR query came back 422. The surviving query is short: created recently, plus ai OR llm OR gpt OR openai OR claude OR gemini . If that source dies, the board still has HN and PH. Recency and heat, nothing else — no classifier. Live list same payload as JSON : https://launchsignal.ai/feed https://launchsignal.ai/feed If you have mixed a vote-based feed with a star-based one, what half-life did you keep?