{"id":299,"date":"2026-08-01T11:54:29","date_gmt":"2026-08-01T03:54:29","guid":{"rendered":"https:\/\/ph.listeningo.cn\/index.php\/2026\/08\/01\/2026-07-31\/"},"modified":"2026-08-01T11:54:29","modified_gmt":"2026-08-01T03:54:29","slug":"2026-07-31","status":"publish","type":"post","link":"https:\/\/ph.listeningo.cn\/index.php\/2026\/08\/01\/2026-07-31\/","title":{"rendered":"PH\u70ed\u699c | 2026-07-31"},"content":{"rendered":"<p><!DOCTYPE html><br \/>\n<html lang=\"zh-CN\"><br \/>\n<head><br \/>\n    <meta charset=\"UTF-8\"><br \/>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><br \/>\n    <title>Product Hunt \u6bcf\u65e5\u70ed\u699c 2026-07-31<\/title><\/p>\n<style>\n        \/* --- \u5168\u5c40\u91cd\u7f6e\u4e0e\u5b57\u4f53 --- *\/\n        :root {\n            --ph-orange: #FF6154;\n            --text-main: #21293C;\n            --text-secondary: #4B587C;\n            --bg-ai: #F7F7F9;\n            --border-color: #E6E6E6;\n        }<\/p>\n<p>        body {\n            font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif;\n            color: var(--text-main);\n            background-color: #ffffff;\n            line-height: 1.6;\n            margin: 0;\n            padding: 20px;\n        }<\/p>\n<p>        .container {\n            max-width: 800px;\n            margin: 0 auto;\n        }<\/p>\n<p>        \/* --- \u5361\u7247\u6837\u5f0f --- *\/\n        .app-card {\n            border-bottom: 1px solid var(--border-color);\n            padding-bottom: 40px;\n            margin-bottom: 40px;\n        }<\/p>\n<p>        \/* --- 1. \u5934\u90e8\u533a\u57df --- *\/\n        .app-header {\n            display: flex;\n            align-items: flex-start;\n            gap: 16px;\n            margin-bottom: 20px;\n        }<\/p>\n<p>        .rank {\n            font-size: 24px;\n            font-weight: 300;\n            color: #999;\n            min-width: 30px;\n            padding-top: 4px;\n        }<\/p>\n<p>        .title-group {\n            flex: 1;\n        }<\/p>\n<p>        .app-title {\n            font-size: 24px;\n            font-weight: 800;\n            margin: 0 0 4px 0;\n            color: var(--text-main);\n            text-decoration: none;\n            display: inline-block;\n        }<\/p>\n<p>        .app-title:hover {\n            color: var(--ph-orange);\n            text-decoration: underline;\n        }<\/p>\n<p>        .vote-btn {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            border: 1px solid var(--border-color);\n            border-radius: 8px;\n            padding: 8px 12px;\n            background: #fff;\n            min-width: 60px;\n            box-shadow: 0 1px 2px rgba(0,0,0,0.05);\n        }<\/p>\n<p>        .vote-arrow {\n            color: var(--ph-orange);\n            font-size: 14px;\n            margin-bottom: -2px;\n        }<\/p>\n<p>        .vote-count {\n            font-weight: 600;\n            font-size: 14px;\n        }<\/p>\n<p>        \/* --- 2. \u5347\u7ea7\u7248\u5a92\u4f53\u753b\u5eca (\u5173\u952e\u4fee\u6539) --- *\/\n        .media-gallery {\n            display: flex;\n            gap: 16px;\n            overflow-x: auto; \/* \u5141\u8bb8\u6a2a\u5411\u6eda\u52a8 *\/\n            padding-bottom: 16px; \/* \u7559\u51fa\u6eda\u52a8\u7a7a\u95f4 *\/\n            scroll-snap-type: x mandatory; \/* \u6eda\u52a8\u5438\u9644\u6548\u679c *\/\n            -webkit-overflow-scrolling: touch; \/* iOS \u5e73\u6ed1\u6eda\u52a8 *\/\n            margin-bottom: 20px;<\/p>\n<p>            \/* \u9690\u85cf\u9ed8\u8ba4\u6eda\u52a8\u6761\u4f46\u4fdd\u7559\u529f\u80fd (Firefox) *\/\n            scrollbar-width: thin;\n            scrollbar-color: #ddd transparent;\n        }<\/p>\n<p>        \/* Webkit \u6eda\u52a8\u6761\u6837\u5f0f\u4f18\u5316 *\/\n        .media-gallery::-webkit-scrollbar {\n            height: 6px;\n        }\n        .media-gallery::-webkit-scrollbar-track {\n            background: transparent;\n        }\n        .media-gallery::-webkit-scrollbar-thumb {\n            background-color: #eee;\n            border-radius: 10px;\n        }<\/p>\n<p>        .media-item-wrapper {\n            flex: 0 0 auto; \/* \u9632\u6b62\u88ab\u538b\u7f29 *\/\n            width: 80%;     \/* \u79fb\u52a8\u7aef\u9ed8\u8ba4\u9732\u51fa\u4e00\u70b9\u4e0b\u4e00\u5f20\uff0c\u63d0\u793a\u53ef\u6ed1\u52a8 *\/\n            max-width: 500px; \/* \u684c\u9762\u7aef\u6700\u5927\u5bbd\u5ea6 *\/\n            aspect-ratio: 16\/9; \/* \u7edf\u4e00\u6bd4\u4f8b *\/<\/p>\n<p>            position: relative;\n            border-radius: 12px;\n            overflow: hidden;\n            border: 1px solid rgba(0,0,0,0.08);\n            background-color: #f5f5f5;\n            scroll-snap-align: center; \/* \u6eda\u52a8\u505c\u6b62\u65f6\u5c45\u4e2d *\/\n        }<\/p>\n<p>        .media-content {\n            width: 100%;\n            height: 100%;\n            object-fit: cover; \/* \u586b\u5145\u5bb9\u5668 *\/\n            display: block;\n            cursor: pointer;\n        }<\/p>\n<p>        \/* \u89c6\u9891\u6807\u7b7e\u7279\u6b8a\u5904\u7406 *\/\n        video.media-content {\n            background-color: #000;\n            cursor: pointer;\n        }<\/p>\n<p>        \/* \u5982\u679c\u53ea\u67091\u4e2a\u5a92\u4f53\uff0c\u4e0d\u8981\u6eda\u52a8\uff0c\u4e14\u5bbd\u5ea6\u81ea\u9002\u5e94 *\/\n        .media-gallery.single-item .media-item-wrapper {\n            width: 100%;\n            max-width: 100%;\n        }<\/p>\n<p>        \/* --- 3. \u63cf\u8ff0\u4e0e\u6807\u7b7e --- *\/\n        .one-liner {\n            font-size: 18px;\n            color: var(--text-secondary);\n            margin-bottom: 12px;\n            font-weight: 500;\n        }<\/p>\n<p>        .tags-container {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 8px;\n            margin-bottom: 24px;\n        }<\/p>\n<p>        .tag {\n            font-size: 12px;\n            color: var(--text-secondary);\n            background-color: #F2F2F2;\n            padding: 4px 10px;\n            border-radius: 20px;\n            font-weight: 600;\n            text-transform: uppercase;\n        }<\/p>\n<p>        \/* --- 4. AI \u6458\u8981\u533a --- *\/\n        .ai-section {\n            background-color: var(--bg-ai);\n            border-radius: 12px;\n            padding: 20px;\n            margin-bottom: 20px;\n            border-left: 4px solid var(--ph-orange);\n        }<\/p>\n<p>        .ai-title {\n            font-size: 14px;\n            font-weight: 700;\n            color: var(--text-main);\n            margin: 0 0 12px 0;\n            display: flex;\n            align-items: center;\n            gap: 6px;\n        }<\/p>\n<p>        .ai-content {\n            font-size: 15px;\n            color: #333;\n            margin-bottom: 0;\n            line-height: 1.7;\n        }<\/p>\n<p>        \/* --- 5. \u8bc4\u8bba\u533a --- *\/\n        .reviews-section {\n            margin-top: 10px;\n        }<\/p>\n<p>        .review-item {\n            display: flex;\n            gap: 10px;\n            margin-bottom: 12px;\n            font-size: 14px;\n        }<\/p>\n<p>        .review-avatar {\n            font-size: 18px;\n            margin-top: 2px;\n            min-width: 24px;\n        }<\/p>\n<p>        .review-bubble {\n            background: #fff;\n            border: 1px solid var(--border-color);\n            padding: 8px 12px;\n            border-radius: 0 12px 12px 12px;\n            color: var(--text-secondary);\n            line-height: 1.5;\n        }<\/p>\n<p>        .review-author {\n            font-weight: 700;\n            color: var(--text-main);\n            margin-right: 4px;\n            font-style: normal;\n        }<\/p>\n<p>        .comments-section {\n            margin-top: 30px;\n            border-top: 1px solid var(--border-color);\n            padding-top: 20px;\n        }<\/p>\n<p>        .comments-toggle {\n            background-color: #f8f9fa;\n            border: 1px solid var(--border-color);\n            border-radius: 8px;\n            padding: 12px 20px;\n            cursor: pointer;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            width: 100%;\n            font-size: 14px;\n            font-weight: 600;\n            color: var(--text-main);\n            transition: all 0.3s ease;\n        }<\/p>\n<p>        .comments-toggle:hover {\n            background-color: #e9ecef;\n        }<\/p>\n<p>        .comments-toggle .toggle-arrow {\n            font-size: 18px;\n            transition: transform 0.3s ease;\n        }<\/p>\n<p>        .comments-toggle.open .toggle-arrow {\n            transform: rotate(180deg);\n        }<\/p>\n<p>        .comments-container {\n            max-height: 0;\n            overflow: hidden;\n            transition: max-height 0.5s ease;\n            margin-top: 15px;\n        }<\/p>\n<p>        .comments-container.open {\n            max-height: 800px;\n            overflow: auto;\n        }<\/p>\n<p>        .comment-item {\n            background-color: #fff;\n            border: 1px solid var(--border-color);\n            border-radius: 8px;\n            padding: 16px;\n            margin-bottom: 12px;\n            font-size: 14px;\n        }<\/p>\n<p>        .comment-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: flex-start;\n            margin-bottom: 8px;\n        }<\/p>\n<p>        .comment-author {\n            font-weight: 600;\n            color: var(--text-main);\n            margin-right: 8px;\n        }<\/p>\n<p>        .comment-content {\n            color: var(--text-secondary);\n            line-height: 1.5;\n            margin-bottom: 10px;\n            word-break: break-word;\n            word-wrap: break-word;\n            overflow-wrap: anywhere;\n            white-space: normal;\n        }<\/p>\n<p>        .comment-content p {\n            margin: 0;\n            word-break: break-word;\n            word-wrap: break-word;\n            overflow-wrap: anywhere;\n            white-space: normal;\n        }<\/p>\n<p>        \/* \u4f18\u5316\u8868\u60c5\u7b26\u53f7\u663e\u793a *\/\n       .emoji {\n            display: inline;\n            max-width: 15px;\n            overflow-wrap: normal;\n        }<\/p>\n<p>        .comment-actions {\n            display: flex;\n            align-items: center;\n            gap: 16px;\n            font-size: 12px;\n            color: var(--text-secondary);\n        }<\/p>\n<p>        .comment-vote {\n            display: flex;\n            align-items: center;\n            gap: 4px;\n            cursor: pointer;\n        }<\/p>\n<p>        .comment-replies {\n            margin-top: 12px;\n            margin-left: 20px;\n            padding-left: 12px;\n            border-left: 2px solid var(--border-color);\n        }<\/p>\n<p>        .reply-item {\n            background-color: #f8f9fa;\n            border: 1px solid var(--border-color);\n            border-radius: 6px;\n            padding: 12px;\n            margin-bottom: 8px;\n            font-size: 13px;\n        }<\/p>\n<p>        .reply-content {\n            color: var(--text-secondary);\n            line-height: 1.4;\n            margin-bottom: 6px;\n        }<\/p>\n<p>        \/* --- \u54cd\u5e94\u5f0f\u5fae\u8c03 --- *\/\n        @media (min-width: 600px) {\n            .media-item-wrapper {\n                width: 60%; \/* \u684c\u9762\u7aef\u7a0d\u5fae\u7a84\u4e00\u70b9\uff0c\u5c55\u793a\u66f4\u591a\u5f20 *\/\n                scroll-snap-align: start; \/* \u684c\u9762\u7aef\u9760\u5de6\u5bf9\u9f50 *\/\n            }\n        }<\/p>\n<p>        \/* \u79fb\u52a8\u8bbe\u5907\u54cd\u5e94\u5f0f\u4f18\u5316 *\/\n        @media (max-width: 599px) {\n            \/* \u6a21\u6001\u6846\u4f18\u5316 *\/\n            .modal-content {\n                max-width: 95%;\n                max-height: 85vh;\n                margin: 10vh auto;\n            }<\/p>\n<p>            .close {\n                top: 10px;\n                right: 20px;\n                font-size: 30px;\n                \/* \u589e\u5927\u70b9\u51fb\u533a\u57df *\/\n                padding: 15px;\n            }<\/p>\n<p>            \/* \u89c6\u9891\u64ad\u653e\u56fe\u6807\u4f18\u5316 *\/\n            .play-icon {\n                width: 60px;\n                height: 60px;\n                font-size: 18px;\n            }<\/p>\n<p>            \/* \u786e\u4fdd\u5a92\u4f53\u5185\u5bb9\u5728\u5c0f\u5c4f\u5e55\u4e0a\u6b63\u786e\u663e\u793a *\/\n            .media-content {\n                object-fit: cover;\n            }\n        }<\/p>\n<p>        \/* --- \u56fe\u7247\u653e\u5927\u6a21\u6001\u6846\u6837\u5f0f --- *\/\n        .modal {\n            display: none;\n            position: fixed;\n            z-index: 1000;\n            left: 0;\n            top: 0;\n            width: 100%;\n            height: 100%;\n            background-color: rgba(0, 0, 0, 0.9);\n            overflow: auto;\n            transition: opacity 0.3s ease;\n        }<\/p>\n<p>        .modal-content {\n            display: block;\n            max-width: 90%;\n            max-height: 90vh;\n            margin: 5vh auto;\n            object-fit: contain;\n            animation: zoom 0.3s;\n        }<\/p>\n<p>        @keyframes zoom {\n            from {transform: scale(0.8); opacity: 0;}\n            to {transform: scale(1); opacity: 1;}\n        }<\/p>\n<p>        .close {\n            position: absolute;\n            top: 20px;\n            right: 35px;\n            color: #fff;\n            font-size: 40px;\n            font-weight: bold;\n            transition: 0.3s;\n            cursor: pointer;\n            \/* \u6dfb\u52a0\u89e6\u63a7\u4f18\u5316 *\/\n            padding: 10px;\n            line-height: 1;\n            user-select: none;\n            -webkit-user-select: none;\n        }<\/p>\n<p>        .close:hover,\n        .close:focus {\n            color: #bbb;\n            text-decoration: none;\n        }<\/p>\n<p>        \/* \u89c6\u9891\u70b9\u51fb\u63d0\u793a\u6837\u5f0f *\/\n        .video-overlay {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            background-color: rgba(0, 0, 0, 0.2);\n            opacity: 0;\n            transition: opacity 0.3s ease;\n            \/* \u89e6\u63a7\u4f18\u5316 *\/\n            touch-action: manipulation;\n            cursor: pointer;\n        }<\/p>\n<p>        .media-item-wrapper:hover .video-overlay {\n            opacity: 1;\n        }<\/p>\n<p>        \/* \u4e3a\u89e6\u6478\u8bbe\u5907\u6dfb\u52a0\u89e6\u6478\u6548\u679c *\/\n        .media-item-wrapper:active .video-overlay {\n            opacity: 0.8;\n        }<\/p>\n<p>        .play-icon {\n            width: 80px;\n            height: 80px;\n            background-color: rgba(255, 255, 255, 0.9);\n            border-radius: 50%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            color: var(--ph-orange);\n            font-size: 24px;\n            font-weight: bold;\n            \/* \u89e6\u63a7\u4f18\u5316 *\/\n            user-select: none;\n            -webkit-user-select: none;\n        }<\/p>\n<p>        \/* --- \u54cd\u5e94\u5f0f\u5fae\u8c03 --- *\/\n        @media (min-width: 600px) {\n            .media-item-wrapper {\n                width: 60%; \/* \u684c\u9762\u7aef\u7a0d\u5fae\u7a84\u4e00\u70b9\uff0c\u5c55\u793a\u66f4\u591a\u5f20 *\/\n                scroll-snap-align: start; \/* \u684c\u9762\u7aef\u9760\u5de6\u5bf9\u9f50 *\/\n            }\n        }<\/p>\n<p>        \/* \u79fb\u52a8\u8bbe\u5907\u54cd\u5e94\u5f0f\u4f18\u5316 *\/\n        @media (max-width: 599px) {\n            \/* \u6a21\u6001\u6846\u4f18\u5316 *\/\n            .modal-content {\n                max-width: 95%;\n                max-height: 85vh;\n                margin: 10vh auto;\n            }<\/p>\n<p>            .close {\n                top: 10px;\n                right: 20px;\n                font-size: 30px;\n                \/* \u589e\u5927\u70b9\u51fb\u533a\u57df *\/\n                padding: 15px;\n            }<\/p>\n<p>            \/* \u89c6\u9891\u64ad\u653e\u56fe\u6807\u4f18\u5316 *\/\n            .play-icon {\n                width: 60px;\n                height: 60px;\n                font-size: 18px;\n            }<\/p>\n<p>            \/* \u786e\u4fdd\u5a92\u4f53\u5185\u5bb9\u5728\u5c0f\u5c4f\u5e55\u4e0a\u6b63\u786e\u663e\u793a *\/\n            .media-content {\n                object-fit: cover;\n            }\n        }\n    <\/style>\n<p><\/head><br \/>\n<body><\/p>\n<div class=\"container\">\n<h1 style=\"text-align:center; margin-bottom:40px; font-weight:900;\">PH\u70ed\u699c | 2026-07-31<\/h1>\n<p>    <!-- \u5c55\u793aapp\u5361\u7247 --><\/p>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#1<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/OLTE3UX4QGE277\" class=\"app-title\">MiniMax H3<\/a><\/p>\n<div class=\"one-liner\">Unified video generation for motion design and branding<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">333<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>MiniMax H3 \u662f\u4e00\u4e2a\u80fd\u4e00\u6b21\u751f\u6210\u5e26\u539f\u751f\u7acb\u4f53\u58f0\u76842K\u89c6\u9891\u7684\u5f00\u6e90\u591a\u6a21\u6001\u6a21\u578b\uff0c\u5c06\u6587\u672c\u3001\u56fe\u50cf\u3001\u89c6\u9891\u548c\u97f3\u9891\u8f93\u5165\u7edf\u4e00\u5904\u7406\uff0c\u89e3\u51b3\u5546\u4e1a\u521b\u4f5c\u8005\u5728\u52a8\u6001\u6d77\u62a5\u3001\u54c1\u724c\u89c6\u9891\u548c\u7535\u5546\u8425\u9500\u4e2d\u53cd\u590d\u62fc\u63a5\u591a\u4e2a\u5de5\u5177\u3001\u96be\u4ee5\u4fdd\u6301\u98ce\u683c\u4e00\u81f4\u548c\u6587\u5b57\u6e32\u67d3\u5931\u771f\u7684\u75db\u70b9\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/8ebf1d62-3a79-46ee-84b2-016179ab458e.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=3hu3vkjCNNo\"><source src=\"https:\/\/www.youtube.com\/watch?v=3hu3vkjCNNo\" type=\"video\/mp4\"><\/video><\/p>\n<div class=\"video-overlay\">\n<div class=\"play-icon\">\u25b6<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/6e737d80-c6fd-42e2-b4bf-e26b639a1d0b.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/f3506e43-27f6-4c9c-b00d-dec211b7bf86.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/1cac5572-bae1-43a4-9641-b858bc62f10c.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/0cf6a429-b321-4867-a579-4739b6962dd1.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/7e62708f-09c5-4c4b-8502-8d3cd45ac6d9.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/3b27d8c8-7bcb-4273-87b6-7ef4be1942a5.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/ea6337c6-3d1b-4f90-9b7a-b8cfa560e33b.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/edf3f90d-9e6c-44e1-88fe-ac349155a686.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/1499868a-938a-4435-b01a-678827fcc7a1.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Design Tools<\/span><br \/>\n            <span class=\"tag\">Art<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u89c6\u9891\u751f\u6210<\/span><br \/>\n            <span class=\"tag\">\u591a\u6a21\u6001\u5927\u6a21\u578b<\/span><br \/>\n            <span class=\"tag\">2K\u89c6\u9891<\/span><br \/>\n            <span class=\"tag\">\u539f\u751f\u7acb\u4f53\u58f0<\/span><br \/>\n            <span class=\"tag\">\u6587\u5b57\u6e32\u67d3<\/span><br \/>\n            <span class=\"tag\">\u54c1\u724c\u8d44\u4ea7\u751f\u4ea7<\/span><br \/>\n            <span class=\"tag\">\u52a8\u6001\u8bbe\u8ba1<\/span><br \/>\n            <span class=\"tag\">\u5546\u4e1a\u5185\u5bb9\u521b\u4f5c<\/span><br \/>\n            <span class=\"tag\">\u5f00\u6e90\u6a21\u578b<\/span><br \/>\n            <span class=\"tag\">AI\u89c6\u9891\u5de5\u5177<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u6838\u5fc3\u5173\u6ce8\u70b9\u96c6\u4e2d\u5728\u54c1\u724c\u4e00\u81f4\u6027\u4e0e\u6587\u5b57\u6e32\u67d3\u7a33\u5b9a\u6027\u4e0a\uff0c\u8d28\u7591\u8fde\u7eed\u91cd\u6e32\u65f6\u80fd\u5426\u9501\u5b9a\u7cbe\u786e\u8272\u53f7\u548c\u5b57\u4f53\uff1b\u540c\u65f6\u8be2\u95ee\u662f\u5426\u652f\u6301\u5bf9\u5df2\u6709\u89c6\u9891\u7684\u5c40\u90e8\u8fed\u4ee3\u7f16\u8f91\u800c\u975e\u6574\u6bb5\u91cd\u751f\u6210\uff1b\u53e6\u6709\u7528\u6237\u5173\u6ce8\u591a\u6a21\u6001\u8f93\u5165\u662f\u771f\u6b63\u8054\u5408\u9a71\u52a8\u8fd8\u662f\u4ec5\u540c\u4e00\u63a5\u53e3\u5e76\u884c\uff0c\u4ee5\u53caAPI\u662f\u5426\u652f\u6301alpha\u901a\u9053\u4ee5\u652f\u6301\u540e\u671f\u5408\u6210\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                MiniMax H3 \u8e29\u4e2d\u4e86\u89c6\u9891\u751f\u6210\u4ece\u201cdemo\u73a9\u5177\u201d\u5411\u201c\u751f\u4ea7\u5de5\u5177\u201d\u8f6c\u578b\u7684\u4e34\u754c\u70b9\u3002\u5176\u771f\u6b63\u4ef7\u503c\u4e0d\u5728\u4e8e\u628a\u591a\u6a21\u6001\u585e\u8fdb\u4e00\u4e2a\u6a21\u578b\uff0c\u800c\u5728\u4e8e\u5b83\u7528\u201c\u539f\u751f\u7acb\u4f53\u58f0\u201d\u548c\u201c2K\u5206\u8fa8\u7387\u201d\u56de\u5e94\u4e86\u5546\u4e1a\u89c6\u9891\u6700\u786c\u6027\u7684\u4ea4\u4ed8\u6307\u6807\u2014\u2014\u8fd9\u6bd4\u5355\u7eaf\u8ffd\u6c42\u753b\u9762\u201c\u597d\u770b\u201d\u52a1\u5b9e\u5f97\u591a\u3002\u4f46\u793e\u533a\u8bc4\u8bba\u4e00\u9488\u89c1\u8840\u5730\u63ed\u5f00\u4e86\u5b83\u7684\u906e\u7f9e\u5e03\uff1a\u54c1\u724c\u5de5\u4f5c\u6d41\u7684\u6838\u5fc3\u662f\u201c\u7cbe\u786e\u590d\u73b0\u201d\uff0c\u800c\u751f\u6210\u6a21\u578b\u7684\u672c\u8d28\u662f\u201c\u8fde\u7eed\u6982\u7387\u5206\u5e03\u201d\uff0c\u8fd9\u51b3\u5b9a\u4e86\u5b83\u5728\u9501\u5b9aHex\u8272\u53f7\u3001\u7279\u5b9a\u5b57\u4f53\u8fd9\u7c7b\u79bb\u6563\u547d\u9898\u4e0a\u5fc5\u7136\u5931\u5206\u3002\u66f4\u81f4\u547d\u7684\u662f\uff0c\u51e0\u4e4e\u6ca1\u6709\u4eba\u5173\u5fc3\u9996\u5e27\u6709\u591a\u60ca\u8273\uff0c\u6240\u6709\u4eba\u90fd\u5728\u8ffd\u95ee\u201c\u91cd\u6e32\u4e00\u81f4\u6027\u201d\u548c\u201c\u5c40\u90e8\u7f16\u8f91\u80fd\u529b\u201d\u3002\u8fd9\u66b4\u9732\u4e86\u4ea7\u54c1\u4ecb\u7ecd\u4e0e\u771f\u5b9e\u751f\u4ea7\u9700\u6c42\u4e4b\u95f4\u7684\u9519\u4f4d\uff1aAPI\u5df2\u4e0a\u7ebf\uff0c\u4f46\u82e5\u6ca1\u6709\u63d0\u4f9balpha\u901a\u9053\u6216\u5e72\u51c0\u80cc\u666f\u677f\u4ee5\u4fbf\u540e\u671f\u786e\u5b9a\u6027\u5408\u6210\u54c1\u724c\u5143\u7d20\uff0c\u5b83\u4f9d\u7136\u53ea\u80fd\u505c\u7559\u5728\u6982\u5ff5\u53ef\u89c6\u5316\u9636\u6bb5\uff0c\u65e0\u6cd5\u771f\u6b63\u8fdb\u5165\u54c1\u724c\u8d44\u4ea7\u4ea4\u4ed8\u7ba1\u7ebf\u3002\u53e6\u4e00\u4e2a\u88ab\u5e7f\u6cdb\u8d28\u7591\u7684\u70b9\u662f\u201c\u7edf\u4e00\u591a\u6a21\u6001\u201d\u662f\u5426\u540d\u526f\u5176\u5b9e\uff1a\u5982\u679c\u97f3\u9891\u53ea\u662f\u53e0\u52a0\u5728\u753b\u9762\u4e0b\uff0c\u800c\u975e\u9a71\u52a8\u526a\u8f91\u8282\u594f\uff0c\u90a3\u6240\u8c13\u878d\u5408\u4e0d\u8fc7\u662f\u62fc\u63a5\u3002MiniMax\u8981\u60f3\u4ece\u201c\u8ba9\u4eba\u60ca\u53f9\u201d\u8d70\u5411\u201c\u8ba9\u4eba\u4f9d\u8d56\u201d\uff0c\u4e0b\u4e00\u6b65\u5fc5\u987b\u56de\u7b54\uff1a\u5982\u4f55\u5728\u4e0d\u53ef\u63a7\u7684\u751f\u6210\u5c42\u4e0e\u8981\u6c42\u7edd\u5bf9\u7cbe\u786e\u7684\u54c1\u724c\u5c42\u4e4b\u95f4\uff0c\u67b6\u8d77\u4e00\u6761\u53ef\u9884\u6d4b\u7684\u5de5\u7a0b\u6865\u6881\u3002\u5426\u5219\uff0c\u5b83\u53ea\u80fd\u541e\u566c\u521d\u7ea7\u526a\u8f91\u5e08\u7684\u5de5\u4f5c\uff0c\u5374\u53d6\u4ee3\u4e0d\u4e86\u54c1\u724c\u8bbe\u8ba1\u5e08\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">MiniMax H3<\/span>\n                <\/div>\n<div class=\"comment-content\">MiniMax H3 is an open multimodal model that generates 2K video with native stereo sound. It unifies text, image, and audio inputs, excelling at accurate text rendering, visual packaging, and complex instruction following for commercial content creation.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hi everyone!<\/p>\n<p><a href=\"https:\/\/www.producthunt.com\/products\/minimax\" target=\"_blank\" rel=\"noopener\">@MiniMax<\/a> H3 is especially good at turning a mixed set of references into finished-looking motion work.<\/p>\n<p>You can mix text, images, video, and audio in one request, then simply tell H3 what you want to borrow from each reference. It can follow the same character, camera movement, voice, or overall visual style and turn everything into a 2K video with native stereo sound.<\/p>\n<p>This makes H3 especially useful for commercial creative work. The output can feel much closer to a finished piece, with the typography, motion, pacing, and sound working together across product videos, motion posters, music visuals, and ecommerce campaigns.<\/p>\n<p>The <a href=\"https:\/\/platform.minimax.io\/docs\/guides\/video-generation\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">API<\/a> is live now, and the weights are coming!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>6<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@zaczuo\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@zaczuo<\/a>&nbsp;Asad&#8217;s re-render consistency point is the real test, not the first output. anyone can nail one clean take, the actual claim to check is whether the same layout survives when you swap one word for a longer one. that&#8217;s the difference between a demo and something a branding team could actually rely on for repeat work.<\/p>\n<p>curious whether commercial users are mostly generating final assets directly, or still treating this as a first-pass that gets touched up in an editor before it ships.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@zaczuo\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@zaczuo<\/a>&nbsp;Congratulations on the launch! <\/p>\n<\/p>\n<p>What caught my attention isn&#8217;t just the video quality, it&#8217;s the ability to combine multiple references into one coherent output. Creative work rarely starts from a blank page. It starts from scattered ideas, assets, and inspiration that need to come together naturally.<\/p>\n<\/p>\n<p>I can see this becoming a huge time saver for marketing teams, agencies, and content creators who iterate constantly.<\/p>\n<\/p>\n<p>I&#8217;m curious, what&#8217;s been the most unexpected use case you&#8217;ve seen so far? Did someone use H3 in a way your team never anticipated? Wishing you an amazing launch! <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Text rendering is the claim I&#8217;d want tested hardest here, because a motion poster lives or dies on one word being right and video models have historically turned typography into soup. The useful test isn&#8217;t whether it renders clean once, it&#8217;s whether you can swap that word for a longer one and get the same layout back. Everything in a branding workflow is a re-render, so consistency across takes matters more than any single take. Native stereo in the same pass is the part that actually removes a handoff.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>3<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Congrats on the launch! I lead marketing and we\u2019re deep in launch-asset production right now, so my question is about brand fidelity rather than single-shot quality. Our brand lives on exact hex colors and one specific typeface. When I generate a campaign\u2019s worth of assets, product video, motion poster, teaser, can H3 hold those exact brand values across every render, or does each generation drift a little? Reference images help with style, but \u201cclose to our green\u201d isn\u2019t our green. If there\u2019s a way to lock a brand kit across outputs, that\u2019s the feature that moves this from cool to production.<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>2<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@ridhwikvinod\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ridhwikvinod<\/a>&nbsp;Ridhwik, the honest answer on brand fidelity is that you should not be asking a generative model for it, and the good news is that you do not have to.<\/p>\n<\/p>\n<p>Exact hex and one specific typeface are the two things this class of model is structurally worst at, because both are discrete and everything inside the model is continuous. Asad is right that consistency across re-renders is the real test, and it is the test these models will keep half-failing for a while yet.<\/p>\n<\/p>\n<p>The pipelines that actually ship brand work do not fight that. They let the model make the motion, the atmosphere and the camera, then composite the brand layer on top deterministically. Logo, wordmark, exact colour, legal line, all placed by something that cannot hallucinate.<\/p>\n<\/p>\n<p>Which turns your question into a far more answerable one. Not can it render my typeface, but can I get a clean plate to composite onto.<\/p>\n<\/p>\n<p>So the thing I would ask MiniMax directly: does the API return an alpha channel, or a background plate with no burned-in text? That one feature decides whether this belongs in a brand pipeline or stays a concepting tool.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The unified text\/image\/audio input approach is interesting , most &#8220;all-in-one&#8221; generation tools end up mediocre at everything. How&#8217;s the output quality holding up for commercial\/branding use cases specifically, vs. more experimental content?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@shivvv\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@shivvv<\/a>&nbsp;hi help you<\/p>\n<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@shivvv\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@shivvv<\/a>&nbsp;Shivarchan, the distinction worth pressing on is whether the modalities actually condition each other, or just arrive in the same call.<\/p>\n<\/p>\n<p>Accepting text, image, video and audio at one endpoint is a convenience. Genuinely joint generation means the supplied audio drives the cut timing, the reference video drives camera motion, and the image drives palette, all at once and influencing one another. Those are very different capabilities sitting behind an identical looking API.<\/p>\n<\/p>\n<p>There is a cheap test. Feed it audio with an obvious beat and see whether the cuts land on it. If the edit comes back rhythm aware without being asked, the modalities are genuinely fused. If the cuts fall wherever they like and the audio is simply laid underneath, you have parallel pipelines sharing one endpoint.<\/p>\n<\/p>\n<p>Worth establishing before you build a workflow on it, because the second kind falls apart the moment you need the inputs to agree with each other.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Congratulations <\/p>\n<\/p>\n<p>How can i reach out to your team?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>\ud83d\ude80 Congrats on the launch! What stood out to me wasn&#8217;t just the multimodal generation, but the potential to reduce the number of tools in a production workflow.<\/p>\n<\/p>\n<p>One question I had is about <strong>iterative editing<\/strong>. In a real marketing campaign, we rarely regenerate everything from scratch. We might only need to update a product image, change a headline, or swap a voiceover while keeping the same camera movement, pacing, and overall style.<\/p>\n<\/p>\n<p><strong>Can H3 preserve those elements and edit only what&#8217;s changed, or does each revision require generating a new video?<\/strong><\/p>\n<\/p>\n<p>I think that workflow would make a huge difference for teams creating commercial content at scale.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>thanks for eating my job. lol<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>ongrats on the launch, this is a strong day one showing. Mixing text, image and audio inputs in one model would make quick brand teasers way less painful, right now that is three tools and a lot of glue between them. Can I feed it a product shot plus a rough voiceover clip and have it build the motion design around both?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The multimodal breadth here is impressive: text, audio, image, video, <em>and<\/em> music under one roof is a lot to pull off well, and the ultra-long context plus strong code\/agent capabilities is exactly the combination that makes these models actually useful for real workflows rather than demos. &#8220;Co-create intelligence with everyone&#8221; is a nice framing for the mission too. Curious which modality you&#8217;ve found resonates most with builders so far. Congrats on the launch! \ud83d\ude80<\/p>\n<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>is it better than flux and seedream?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@paul_from_dentro\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@paul_from_dentro<\/a>&nbsp;Paul, these are not really in the same category, and that is itself the useful answer.<\/p>\n<\/p>\n<p>Flux and Seedream are image models. H3 is video with audio generated in the same pass. If what you need is one still, an image model will almost always beat a frame pulled out of a video model, because video models spend capacity on temporal coherence that a still generator puts straight into per-frame fidelity. That tradeoff is structural rather than a quality gap somebody closes next month.<\/p>\n<\/p>\n<p>So the question that actually decides it is whether your output moves. If it does not, stay on the image models. If it does, the comparison you want is against other video models, not these two.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#2<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/HHVI7RICWYWVFT\" class=\"app-title\">Cleanlist AI<\/a><\/p>\n<div class=\"one-liner\">Natural-language prospecting: find, enrich and sync leads.<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">261<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Cleanlist AI \u662f\u4e00\u6b3e\u81ea\u7136\u8bed\u8a00\u9a71\u52a8\u7684B2B\u9500\u552e\u7ebf\u7d22\u6316\u6398\u4e0e enrichment \u5de5\u5177\uff0c\u5e2e\u52a9GTM\u56e2\u961f\u5c06\u4efb\u610f\u6765\u6e90\u7684\u539f\u59cb\u7ebf\u7d22\uff08CSV\u3001LinkedIn URL\u3001\u641c\u7d22\u6761\u4ef6\uff09\u81ea\u52a8\u6e05\u6d17\u3001\u9a8c\u8bc1\u3001\u4e30\u5bcc\u5e76\u540c\u6b65\u81f3CRM\uff0c\u7701\u53bb\u591a\u5de5\u5177\u62fc\u63a5\u7684\u7e41\u7410\u6d41\u7a0b\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/ec47abc0-eac6-49d3-9b44-f5615c505240.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/ffb984fe-5657-43f3-8641-3aff254adca7.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/a9c3513a-2a8f-4cdc-b21f-27cf4b67e3e2.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/b98bb951-948e-4f54-9e48-a9ab39eac477.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/166324eb-bad9-45e6-a1ba-6a0e97cf64ad.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/59906d0c-4391-4ecb-a767-46a306ec7a1a.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/5bacead9-1c0a-49ad-be67-9c8590eb5272.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/afb43c84-143c-4431-acab-bca89e292113.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/b7196afc-0136-4d6f-8ab3-46b603edebd2.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/Ye1ybmu5E4Q\"><source src=\"https:\/\/youtu.be\/Ye1ybmu5E4Q\" type=\"video\/mp4\"><\/video><\/p>\n<div class=\"video-overlay\">\n<div class=\"play-icon\">\u25b6<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Sales<\/span><br \/>\n            <span class=\"tag\">SaaS<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u9500\u552e\u7ebf\u7d22\u6316\u6398<\/span><br \/>\n            <span class=\"tag\">B2B\u6570\u636e\u6e05\u6d17<\/span><br \/>\n            <span class=\"tag\">\u90ae\u4ef6\u9a8c\u8bc1<\/span><br \/>\n            <span class=\"tag\">CRM\u540c\u6b65<\/span><br \/>\n            <span class=\"tag\">\u81ea\u7136\u8bed\u8a00\u641c\u7d22<\/span><br \/>\n            <span class=\"tag\">\u9500\u552e\u8d4b\u80fd<\/span><br \/>\n            <span class=\"tag\">GTM\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u6570\u636e\u4e30\u5bcc<\/span><br \/>\n            <span class=\"tag\">\u7ebf\u7d22\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">\u81ea\u52a8\u5316\u9500\u552e\u6d41\u7a0b<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u666e\u904d\u8ba4\u53ef\u5176\u89e3\u51b3\u591a\u5de5\u5177\u5207\u6362\u75db\u70b9\u7684\u65b9\u5411\uff0c\u6838\u5fc3\u8d28\u7591\u96c6\u4e2d\u5728\u4e09\u70b9\uff1a\u6570\u636e\u65b0\u9c9c\u5ea6\u4e0e\u7f6e\u4fe1\u5ea6\u6807\u8bc6\u3001GDPR\u4e0b\u6570\u636e\u6765\u6e90\u6eaf\u6e90\u6027\uff08\u53caAPI\/\u5bfc\u51fa\u662f\u5426\u66b4\u9732\u5b57\u6bb5\u7ea7\u6765\u6e90\uff09\u3001\u4e0eClay\u7684\u5dee\u5f02\u5316\uff08\u5c24\u5176\u5bf9\u6bd4\u201c\u5de5\u4f5c\u53f0\u201d\u4e0e\u201c\u7535\u5668\u201d\u7684\u5b9a\u4f4d\uff09\u3002\u53e6\u6709\u8d1f\u9762\u53cd\u9988\u79f0UI\u8fc7\u65f6\u96be\u7528\uff0c\u906d\u521b\u59cb\u4eba\u53cd\u9a73\u4e3a\u865a\u5047\u8bc4\u8bba\u3002\u6574\u4f53\u6709\u6548\u5efa\u8bae\u6307\u5411\u900f\u660e\u6027\u4e0e\u6743\u9650\u63a7\u5236\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                Cleanlist AI \u7684\u5de7\u5999\u4e4b\u5904\u4e0d\u5728\u4e8e\u6280\u672f\u58c1\u5792\uff0c\u800c\u5728\u4e8e\u7cbe\u51c6\u7684\u201c\u4ea7\u54c1\u7acb\u573a\u201d\u5207\u5272\u2014\u2014\u5b83\u628a\u81ea\u5df1\u5b9a\u4f4d\u4e3a\u201c\u6709\u4e3b\u89c1\u7684\u5bb6\u7535\u201d\uff0c\u800c\u975eClay\u5f0f\u7684\u201c\u53ef\u7ec4\u88c5\u5de5\u4f5c\u53f0\u201d\u3002\u8fd9\u76f4\u51fb\u4e86GTM\u56e2\u961f\u4e2d\u201c\u6ca1\u6709\u4e13\u4eba\u8fd0\u7ef4\u590d\u6742\u5de5\u5177\u94fe\u201d\u8fd9\u4e00\u9690\u5f62\u4f46\u666e\u904d\u7684\u6743\u529b\u771f\u7a7a\u3002500+\u4ed8\u8d39\u7528\u6237\u9a8c\u8bc1\u4e86\u5176\u201c\u5f00\u7bb1\u5373\u7528\u201d\u7684\u4ef7\u503c\u4e3b\u5f20\uff0c15\u5bb6\u4f9b\u5e94\u5546\u7684\u6c34\u7011\u5e03\u5728\u6210\u672c\u63a7\u5236\u4e0a\u91c7\u7528\u201c\u9996\u4e2d\u5373\u505c\u201d\u4e0e\u201c\u65e0\u6548\u4e0d\u6536\u8d39\u201d\u7b56\u7565\uff0c\u5546\u4e1a\u903b\u8f91\u6bd4\u529f\u80fd\u672c\u8eab\u66f4\u503c\u5f97\u8d5e\u8d4f\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u7136\u800c\uff0c\u5176\u62a4\u57ce\u6cb3\u76f8\u5f53\u53ef\u7591\u3002\u6838\u5fc3\u529f\u80fd\uff08\u627e\u90ae\u7bb1\u3001\u9a8c\u8bc1\u3001CSV\u6e05\u6d17\uff09\u6781\u6613\u88ab\u96c6\u6210\u5546\uff08\u5982HubSpot\u539f\u751f\u529f\u80fd\uff09\u6216\u901a\u7528AI Agent\uff08Claude Code + API\uff09\u7ec4\u5408\u66ff\u4ee3\u3002\u8bc4\u8bba\u4e2d\u5bf9\u5176\u201cAI\u201d\u542b\u91cf\u7684\u8d28\u7591\u2014\u2014Copilot\u751f\u6210\u7684\u4ee3\u7801\u751a\u81f3\u4e0d\u5982\u624b\u52a8\u7b5b\u9009\u2014\u2014\u66b4\u9732\u4e86\u5176\u81ea\u7136\u8bed\u8a00\u5c42\u7684\u6d45\u8584\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u66f4\u91cd\u8981\u4e14\u81f4\u547d\u7684\u662f\u6570\u636e\u5408\u89c4\u4e0e\u900f\u660e\u6027\u9690\u60a3\u3002\u521b\u59cb\u4eba\u627f\u8ba4\u201c\u5b57\u6bb5\u7ea7\u6765\u6e90\u672a\u5728UI\u5c55\u793a\u201d\uff0c\u8fd9\u4e0d\u4ec5\u662fGDPR Article 14\u7684\u6280\u672f\u503a\uff0c\u66f4\u662f\u89e6\u53d1\u89c4\u6a21\u5316\u9500\u552e\u7684\u5b9a\u65f6\u70b8\u5f39\u3002\u5f53\u5ba2\u6237\u8be2\u95ee\u201c\u7b2c14\u4e2a\u4f9b\u5e94\u5546\u7684\u6a21\u5f0f\u731c\u6d4b\u4e0e\u7b2c1\u4e2a\u7684\u771f\u5b9e\u5339\u914d\u4e3a\u4f55\u663e\u793a\u76f8\u540c\u7f6e\u4fe1\u5ea6\u201d\u65f6\uff0c\u73b0\u6709\u56de\u7b54\u96be\u4ee5\u670d\u4f17\u3002\u82e5\u4e0d\u51fa\u53f0\u81ea\u670d\u52a1\u7684\u5b57\u6bb5\u7ea7\u6eaf\u6e90\u53ca\u7f6e\u4fe1\u5ea6\u5206\u7ea7\u5bfc\u51fa\uff0c\u5176\u9ad8\u4ef7\u503c\u4f01\u4e1a\u5ba2\u6237\u589e\u957f\u5c06\u5f88\u5feb\u89e6\u9876\u3002\u6982\u62ec\u800c\u8a00\uff1a\u8fd9\u662f\u4e00\u6b3e\u4f18\u79c0\u7684\u6548\u7387\u5de5\u5177\uff0c\u4f46\u8ddd\u79bb\u201c\u53ef\u4fe1\u8d56\u7684\u6570\u636e\u5e73\u53f0\u201d\uff0c\u8fd8\u5dee\u4e00\u4e2a\u201c\u5ba1\u8ba1\u529f\u80fd\u201d\u7684\u8ddd\u79bb\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">Cleanlist AI<\/span>\n                <\/div>\n<div class=\"comment-content\">Cleanlist AI turns any prospecting input into a verified, enriched, CRM-ready lead list. Upload a CSV, paste LinkedIn or Sales Navigator URLs, add domains, or use search filters, then let AI agents enrich contacts, verify emails, research each lead, and sync the final list to your CRM. With a 15-provider enrichment waterfall, AI research columns, and one-click CRM sync, Cleanlist helps GTM teams build lists without stitching together six tools.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hey Product Hunt, Levon here, founder of Cleanlist.<\/p>\n<p><strong>The Problem<\/strong><\/p>\n<p>Building a prospect list used to eat our week. Export from one tool, enrich in a second, verify in a third, fix the CSV, load the CRM, then watch half the emails bounce anyway.<\/p>\n<p>Most tools give you one of three bad options:<\/p>\n<p>&#8211; Static databases: Clunky filters, stale data, and cleaning is still your job.<\/p>\n<p>&#8211; DIY enrichment stacks: Powerful, but you wire up every provider and babysit each run.<\/p>\n<p>&#8211; GTM orchestration platforms: Sophisticated, but much more expensive and almost always need a dedicated GTM engineer to run.<\/p>\n<p>So we built Cleanlist to make prospecting feel like asking, not operating.<\/p>\n<p><strong>How Cleanlist is Different<\/strong><\/p>\n<p>However you prospect, it ends the same way: a verified, enriched, contextualized list, ready for your CRM or outreach platform.<\/p>\n<p>&#8211; <strong>Start from anything.<\/strong> Upload a CSV, paste a LinkedIn or Sales Navigator URL, use People Search filters, or pull leads with our Chrome extension right on a LinkedIn profile.<\/p>\n<p>&#8211; <strong>Or just ask.<\/strong> Tell Copilot who you want in plain English, or prospect from your own code and AI tools (Claude, Cursor) via our API and MCP.<\/p>\n<p>&#8211; <strong>15-provider waterfall.<\/strong> 98% email accuracy, 85% phone coverage, 50+ fields, no setup.<\/p>\n<p>&#8211; <strong>Deep HubSpot and Salesforce integrations.<\/strong> Set your conditions and rules once, and building a list never means a manual lookup or cleanup again.<\/p>\n<p><strong>Who is this for?<\/strong><\/p>\n<p>B2B sales, marketing, and founder-led teams who want pipeline without running a separate tool for every step. We have over 500 paying users already!<\/p>\n<p><strong>Get started today<\/strong><\/p>\n<p>Free: 30 credits, no credit card. For Product Hunt, code PH25 = 25% off forever.<\/p>\n<p>I&#8217;ll be here all day. Ask me anything!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>11<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@levon_adamyan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@levon_adamyan<\/a>&nbsp;From the buyer side, the hard part of prospecting was never finding leads, it was trusting the enrichment. I&#8217;ve paid for lists where half the emails bounced or the decision maker had left months ago. How fresh is the data you enrich against, and do you flag confidence so I know which contacts are worth outreach? Bad data burns sender reputation before you notice.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>4<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@levon_adamyan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@levon_adamyan<\/a>&nbsp;For a founder-led sales team that\u2019s currently juggling 2\u20133 tools, what\u2019s the <em>one<\/em> workflow you\u2019d recommend we rebuild first in Cleanlist to feel that 80% time-save fastest? And is there a tiny \u201csuccess signal\u201d where teams usually go, \u201cokay, this actually changed our week\u201d?<\/p>\n<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@levon_adamyan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@levon_adamyan<\/a>&nbsp;Congratulations on the launch, Levon! \ud83d\ude80<\/p>\n<p>I think most people assume prospecting is a data problem. From my experience, it&#8217;s actually a workflow problem. Finding leads is easy. Cleaning them, enriching them, verifying them, and getting them into the CRM without breaking the flow is where the real time disappears.<\/p>\n<p>That&#8217;s why I like the direction you&#8217;ve taken. Instead of adding another point solution, you&#8217;re removing the handoffs between tools. Those small context switches add up more than most teams realize.<\/p>\n<p>Reaching 500+ paying customers also tells me you&#8217;ve solved a pain people are willing to pay to eliminate, not just a feature they think is nice to have.<\/p>\n<p>I&#8217;m curious, once customers start using Cleanlist, what&#8217;s the feature they end up relying on the most? Is it the AI Copilot, the 15-provider waterfall, or the CRM automation that quietly saves them hours every week? Wishing you and the team a fantastic launch! \ud83d\ude80<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Congrats on the launch, Levon! Really like the direction you&#8217;re taking with Cleanlist AI. The AI research columns and CRM sync are a clever combination, can definitely see this saving GTM teams a ton of manual work. Looking forward to seeing where you take it. \ud83d\ude80<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>3<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@davemadeit\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@davemadeit<\/a>&nbsp;Thank you. The CRM sync came straight out of customer conversations, so it is good to hear that combination lands. Appreciate you taking a look.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Sounds super practical, Levon \u2014 love how Cleanlist cuts through the messy stack of tools and makes prospecting feel effortless. The \u201cjust ask\u201d angle with Copilot + API support is a game-changer for founder-led teams who don\u2019t want to babysit CSVs. Excited to see how this scales!<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>2<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@odeth_negapatan1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@odeth_negapatan1<\/a>&nbsp;Thank you. Babysitting CSVs is the thing we were most sick of ourselves, which is where a lot of this came from. We just want teams to focus on revenue generating tasks<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Different angle to the data quality thread above, and on the buyer side it&#8217;s the one that would decide this for me before accuracy does.<\/p>\n<\/p>\n<p>A 15 provider waterfall is excellent for match rates and awkward for provenance. Under UK and EU GDPR, when you enrich someone&#8217;s details from a third party, Article 14 says you have to be able to tell that person where their data came from, and they can ask. If the answer is &#8220;one of fifteen providers, whichever matched first&#8221;, that&#8217;s a difficult letter to write.<\/p>\n<\/p>\n<p>So: does provenance come back with the record? Does each enriched field carry which provider supplied it, stored and queryable later, or is the waterfall an implementation detail that gets discarded once a match lands? Same question for how you&#8217;d evidence lawful basis, since legitimate interests only stretches so far for cold outreach to individuals in the UK and EU.<\/p>\n<\/p>\n<p>I ask because whoever maintains the privacy notice will eventually be asked, and if the tool can&#8217;t answer then the honest answer becomes we don&#8217;t know, which is the one thing you can&#8217;t put in writing.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>2<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@dalemooney\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dalemooney<\/a>&nbsp;Every enriched field records which provider it came from, and that&#8217;s stored against the record. We can pull the source for any contact after the fact. It doesn&#8217;t get discarded when the match lands.<\/p>\n<p>Caveat worth being straight about: it&#8217;s not surfaced in the UI today. You&#8217;d ask us and we&#8217;d pull it. Fine for a subject access request, less fine if you want to self-serve it, and that&#8217;s on the list.<\/p>\n<p>Lawful basis is a longer answer and I&#8217;d rather give you that in writing. Email <a href=\"mailto:support@cleanlist.ai\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">support@cleanlist.ai<\/a> and I&#8217;ll send the DPA along with how we handle UK and EU records.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>3<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@dalemooney\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dalemooney<\/a>&nbsp;Victor&#8217;s answer makes this more interesting, not less. The provenance exists. It is just not surfaced.<\/p>\n<\/p>\n<p>That is fine for the case Dale is describing, because a subject access request comes with 30 days and a human in the loop. It is not fine for the case that shows up sooner.<\/p>\n<\/p>\n<p>A 15-provider waterfall does not produce one quality of email. It produces fifteen. A verified match from the first provider and a pattern guess from the fourteenth arrive in the same column looking identical, and sending to both at the same confidence is how a sending domain gets burned.<\/p>\n<\/p>\n<p>That decision happens at send time, not over email with support. Which means the field you are already storing is the input to send-or-skip, and surfacing it turns a compliance obligation into a deliverability feature.<\/p>\n<\/p>\n<p>Is per-field source available on the export or the API today, even though the UI does not show it?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Third Product Hunt launch and a clear jump in ambition each time, nice progression. The thing I would try first is pointing it at an old CSV export and letting the enrichment waterfall fill in the gaps before re-importing anything. When it syncs into HubSpot, does it dedupe against contacts that already exist there or create fresh records?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@doganakbulut\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@doganakbulut<\/a>&nbsp;That&#8217;s the use case I&#8217;d pick too, old exports are usually where the most value is sitting and nobody wants to touch them.<\/p>\n<p>On HubSpot it matches on email and updates the existing contact, so you&#8217;re not getting duplicate records. Default is fill-empty-only, so it leaves alone anything your team has already put in, and you can set it per property if you&#8217;d rather it overwrite or append.<\/p>\n<p>I&#8217;d run a small batch through first so you can see exactly what it&#8217;s writing before you point it at the whole export.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>tried Cleanlist AI and unfortunately the experience was disappointing. The UI feels outdated and unintuitive, making even basic tasks more complicated than they should be. Navigation is confusing, the workflow isn&#8217;t smooth, and the overall product feels unpolished for something positioned as an AI sales tool. There are plenty of features, but the poor user experience makes them difficult to use effectively. It needs significant improvements in design, usability, and overall product quality before I could recommend it.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@suryansh_tiwari2\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@suryansh_tiwari2<\/a>&nbsp;Hey, just checked! You don&#8217;t have an account with us and are actually one of the people\/agencies who reached out promising upvotes which we declined<\/p>\n<p>As this is fully false, please kindly remove your comment, thanks!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@suryansh_tiwari2\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@suryansh_tiwari2<\/a>&nbsp;I believe your exact words after 2 times of telling you \u201cNO\u201d was:<\/p>\n<\/p>\n<p>\u201cGoing to do mass bot attack as well as Going to report to PH team\u201d<\/p>\n<p>\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014<\/p>\n<p><a href=\"https:\/\/www.producthunt.com\/@product\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"product\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@product<\/a> can we please take action against this user!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>I am trying to wrap my head around this. Is it like a simpler version of Clay? What does it do that I can not do with a CSV file and Claude Code?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@sm0r3ll\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sm0r3ll<\/a>&nbsp;Clay is a good product, it&#8217;s just built for teams who have a GTM engineer sitting there, and most people asking this question don&#8217;t. We come in cheaper and you don&#8217;t need to hire anyone to make it work, which is where the real money goes with Clay anyway.<\/p>\n<p>Start with actually finding people, which Claude Code can&#8217;t do at all. You search by title, seniority, location, headcount, industry and you get a real list back, not whatever the model manages to scrape off a page. Same on the company side.<\/p>\n<p>Then enrichment sits on top of that, 15+ providers waterfalling until you get a verified email or a direct dial.<\/p>\n<p>Then Smart Agents, which is the bit I actually like. You ask a question in plain English and it runs against every row, so stuff like which CRM are they on, are they hiring SDRs right now, does the site mention SOC 2, how well do they fit our ICP. It goes and reads the site and the job posts and fills the cell in.<\/p>\n<p>All of that&#8217;s on the API too, and there&#8217;s an MCP server, so if you want to drive the whole thing from Claude Code you can, then push the result straight into HubSpot or Salesforce.<\/p>\n<p>Claude Code is a good researcher, it just has no database underneath it and nowhere to put the answer at the end.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@sm0r3ll\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sm0r3ll<\/a>&nbsp;Steven, the useful way to tell these apart is not the feature list, it is who does the composing.<\/p>\n<\/p>\n<p>Clay is a workbench. You assemble the waterfall, wire the AI columns, decide the order, and it is genuinely powerful once you know what you are doing. The cost is that building the pipeline is itself a skill, and plenty of teams who buy it end up using a fraction of it because nobody on the team actually owns that job.<\/p>\n<\/p>\n<p>The pitch here is the opinionated version. The waterfall is already composed, you ask in plain language, you get a list. Less control, far fewer decisions to get wrong.<\/p>\n<\/p>\n<p>So the question is not which is better. It is whether you want a workbench or an appliance. If nobody on your team is going to own the pipeline, the appliance wins by default, because a workbench you do not operate is worth nothing.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hello I have tested the Cleanlist AI and I want to provide some feedback: <\/p>\n<\/p>\n<p>The sign up using Google worked as expected, the configuration worked fine as user interface but in Network a lot of GET resulted in 401 Unauthorized just mentioning maybe it is as expected for a free account maybe not it&#8217;s up to you to decide. <\/p>\n<\/p>\n<p>The People search worked for QA Manager returning a lot of potential leads. However I have tried to filter the results using Copilot to only show people with QA manager role not QA but the copilot generated some the following code that I think needs to be executed: <\/p>\n<\/p>\n<p>&lt;function_calls&gt; &lt;invoke name=&#8221;get_company_profile&#8221;&gt; &lt;\/invoke&gt; &lt;\/function_calls&gt; &lt;function_calls&gt; &lt;invoke name=&#8221;people_search&#8221;&gt; &lt;invoke name=&#8221;people_search&#8221;&gt; &lt;parameter name=&#8221;titles&#8221;&gt;[&#8220;QA Manager&#8221;, &#8220;Quality Assurance Manager&#8221;]&lt;\/parameter&gt; &lt;\/invoke&gt; &lt;\/function_calls&gt;. <\/p>\n<\/p>\n<p>If there is another solution for filtering the people table please let me know. I hope my feedback will be useful. Have a great launch! <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@andrei_constantin_alexandru\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@andrei_constantin_alexandru<\/a>&nbsp;Salut!<\/p>\n<p>Thanks for testing it properly and writing this up, genuinely useful.<\/p>\n<p>For filtering, People Search has manual filters as well. You can set title there directly and get exact matches on QA Manager.<\/p>\n<p>For the rest, hit us on live chat in the portal or <a href=\"mailto:support@cleanlist.ai\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">support@cleanlist.ai<\/a> and we&#8217;ll get you sorted.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Looks super exciting \u2014 congrats on the launch! Natural-language prospecting with CRM sync is a really smart approach. Wishing you a great launch day!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@zvonimir_sabljic1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@zvonimir_sabljic1<\/a>&nbsp;Thanks, appreciate you checking it out. If you end up giving it a go, tell us what you think \ud83d\ude42<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>the 15-provider waterfall is the bit that actually matters here, most tools stop at one and still call it enrichment. where do you cut it off though? running all fifteen on every lead would get expensive quick.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@alex_watson2110\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@alex_watson2110<\/a>&nbsp;It stops at the first confident match. They&#8217;re ordered by hit rate and cost, so most records resolve in the first one or two. The hard ones go deeper.<\/p>\n<p>You pay one credit for a verified email whether it took one provider or nine. We absorb the rest. And we only charge when something comes back, so an unfindable lead costs you nothing.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#3<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/D3NVQE57DZHHH4\" class=\"app-title\">mectrics<\/a><\/p>\n<div class=\"one-liner\">Your Mac&#8217;s vitals in the menu bar. Free and open source.<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">241<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>mectrics \u662f\u4e00\u6b3e\u514d\u8d39\u5f00\u6e90\u7684 macOS \u83dc\u5355\u680f\u7cfb\u7edf\u76d1\u63a7\u5de5\u5177\uff0c\u901a\u8fc7\u201cCompact Health\u201d\u5c06 CPU\u3001\u5185\u5b58\u3001\u7535\u6c60\u7b49\u72b6\u6001\u6298\u53e0\u4e3a\u4e00\u4e2a\u5b89\u9759\u56fe\u6807\uff0c\u53ea\u5728\u5f02\u5e38\u6301\u7eed\u65f6\u4e3b\u52a8\u63d0\u9192\uff0c\u89e3\u51b3\u7528\u6237\u88ab\u6d77\u91cf\u5b9e\u65f6\u6570\u636e\u6df9\u6ca1\u3001\u5bf9\u544a\u8b66\u9ebb\u6728\u7684\u75db\u70b9\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/8af0a04d-2b5f-47ae-91a8-7c365bbbaf12.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/27c3079e-8d71-4b9c-b5e5-259ccfba15b4.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/73a147ea-3ab9-433c-a849-8672876363ad.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/3873ef6a-fed9-4225-876b-75af8f6c6406.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/4cc0236c-93ab-4d91-8e65-6fd4638b96bf.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/8bd2b986-09f7-45e5-9847-7d6d6ea37cc8.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=6CeQemCx6Do\"><source src=\"https:\/\/www.youtube.com\/watch?v=6CeQemCx6Do\" type=\"video\/mp4\"><\/video><\/p>\n<div class=\"video-overlay\">\n<div class=\"play-icon\">\u25b6<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Mac<\/span><br \/>\n            <span class=\"tag\">Open Source<\/span><br \/>\n            <span class=\"tag\">Menu Bar Apps<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u7cfb\u7edf\u76d1\u63a7<\/span><br \/>\n            <span class=\"tag\">\u83dc\u5355\u680f\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u5f00\u6e90\u514d\u8d39<\/span><br \/>\n            <span class=\"tag\">macOS<\/span><br \/>\n            <span class=\"tag\">\u786c\u4ef6\u72b6\u6001<\/span><br \/>\n            <span class=\"tag\">\u544a\u8b66\u901a\u77e5<\/span><br \/>\n            <span class=\"tag\">\u9690\u79c1\u4fdd\u62a4<\/span><br \/>\n            <span class=\"tag\">\u8f7b\u91cf\u7ea7<\/span><br \/>\n            <span class=\"tag\">Compact Health<\/span><br \/>\n            <span class=\"tag\">\u5f00\u53d1\u8005\u5de5\u5177<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u666e\u904d\u8ba4\u53ef\u201cCompact Health\u201d\u7684\u514b\u5236\u544a\u8b66\u903b\u8f91\uff0c\u8ba4\u4e3a\u5176\u4f18\u4e8e iStat Menus \u7684\u6301\u7eed\u566a\u97f3\u3002\u6838\u5fc3\u8bc9\u6c42\u96c6\u4e2d\u5728\uff1a\u2460 \u7f3a\u5c11 CLI\/JSON \u5bfc\u51fa\uff0c\u4e0d\u5229\u4e8e\u65e0\u5934 Mac mini \u573a\u666f\uff1b\u2461 \u6e29\u5ea6\/\u98ce\u6247\u6a21\u5757\u672a\u5728\u83dc\u5355\u680f\u5c55\u793a\uff0c\u4e14\u65e0\u6cd5\u8bc6\u522b\u201c\u70ed\u964d\u9891\u201d\u800c\u975e\u5355\u7eaf\u9ad8\u6e29\uff1b\u2462 \u8be2\u95ee\u81ea\u8eab\u8d44\u6e90\u5360\u7528\uff08\u7ea660-65MB\uff09\uff1b\u2463 \u5bf9\u6bd4 iStat \u7684\u4f18\u52bf\u5728\u4e8e\u514d\u8d39\u3001\u5f00\u6e90\u3001\u96f6\u9065\u6d4b\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                mectrics \u7684\u806a\u660e\u4e4b\u5904\u5728\u4e8e\u5b83\u6ca1\u6709\u8bd5\u56fe\u5728\u6570\u636e\u5e7f\u5ea6\u4e0a\u5bf9\u6297 iStat Menus\uff0c\u800c\u662f\u7528\u201c\u6ce8\u610f\u529b\u7ba1\u7406\u201d\u91cd\u6784\u4e86\u76d1\u63a7\u5de5\u5177\u7684\u4f53\u9a8c\u3002Compact Health \u672c\u8d28\u4e0a\u662f\u4e00\u4e2a\u201c\u6c89\u9ed8\u7684\u5927\u591a\u6570\u201d\u903b\u8f91\u2014\u2014\u9ed8\u8ba4\u4e0d\u6253\u6270\uff0c\u53ea\u5728\u6301\u7eed\u5f02\u5e38\u65f6\u53d1\u58f0\uff0c\u8fd9\u7cbe\u51c6\u51fb\u4e2d\u4e86\u8001\u7528\u6237\u5bf9\u4f20\u7edf\u76d1\u63a7\u5de5\u5177\u201c\u4fe1\u606f\u8fc7\u8f7d\u5bfc\u81f4\u5fc3\u7406\u8131\u654f\u201d\u7684\u75db\u70b9\u3002\u5176\u96f6\u9065\u6d4b\u3001\u7eaf\u672c\u5730\u8bfb\u53d6\u7684\u9690\u79c1\u627f\u8bfa\uff0c\u5728\u5f53\u4e0b\u4e00\u4f17\u4e91\u7aef\u76d1\u63a7\u5de5\u5177\u4e2d\u5f62\u6210\u4e86\u6e05\u6670\u7684\u4ef7\u503c\u89c2\u5dee\u5f02\uff0c\u5bf9\u5f00\u53d1\u8005\u7fa4\u4f53\u6709\u5929\u7136\u5438\u5f15\u529b\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u5b83\u7684\u77ed\u677f\u540c\u6837\u660e\u663e\u3002\u9996\u5148\uff0c\u529f\u80fd\u6df1\u5ea6\u4e0d\u8db3\uff1a\u6e29\u5ea6\u4e0e\u98ce\u6247\u6a21\u5757\u7f3a\u5931\uff0c\u4e14\u65e0\u6cd5\u533a\u5206\u201c\u4f20\u611f\u5668\u8bfb\u6570\u9ad8\u201d\u548c\u201c\u7cfb\u7edf\u5b9e\u9645\u964d\u9891\u201d\u8fd9\u4e24\u79cd\u672c\u8d28\u4e0d\u540c\u7684\u5f02\u5e38\uff0c\u8fd9\u5bf9\u8dd1\u6279\u5904\u7406\u6216\u672c\u5730 AI \u8d1f\u8f7d\u7684\u7528\u6237\u662f\u786c\u4f24\u2014\u2014\u4ed6\u4eec\u9700\u8981\u7684\u4e0d\u662f\u6e29\u5ea6\u6ce2\u52a8\uff0c\u800c\u662f\u201c\u6027\u80fd\u88ab\u8170\u65a9\u201d\u7684\u660e\u786e\u4fe1\u53f7\u3002\u5176\u6b21\uff0c\u6240\u6709\u544a\u8b66\u903b\u8f91\u4f9d\u8d56 GUI\uff0c\u6ca1\u6709 CLI\/JSON \u8f93\u51fa\uff0c\u76f4\u63a5\u5207\u65ad\u4e86\u65e0\u5934 Mac mini\u3001\u81ea\u52a8\u5316\u8fd0\u7ef4\u7b49\u6700\u9700\u8981\u201c\u9759\u9ed8\u76d1\u63a7\u201d\u7684\u6838\u5fc3\u573a\u666f\uff0c\u8fd9\u4e0e\u5176\u201c\u8f7b\u91cf\u3001\u5b89\u9759\u201d\u7684\u5b9a\u4f4d\u81ea\u76f8\u77db\u76fe\u3002\u4f5c\u8005\u5728\u56de\u590d\u4e2d\u5df2\u627f\u8bfa\u4e0b\u4e2a\u7248\u672c\u52a0\u5165\u53ea\u8bfb CLI\uff0c\u65b9\u5411\u6b63\u786e\uff0c\u4f46\u82e5\u60f3\u771f\u6b63\u64bc\u52a8 iStat \u7684\u5b58\u91cf\u7528\u6237\uff0c\u8fd8\u9700\u5728\u201c\u70ed\u964d\u9891\u4e8b\u4ef6\u201d\u8bc6\u522b\u3001\u81ea\u5b9a\u4e49\u89c4\u5219\u4e0a\u505a\u66f4\u6df1\u5c42\u7684\u7cfb\u7edf\u7ea7\u6574\u5408\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u5f00\u6e90\u7684 MIT \u534f\u8bae\u662f\u53cc\u5203\u5251\uff1a\u5b83\u5438\u5f15\u4e86\u9690\u79c1\u654f\u611f\u578b\u7528\u6237\uff0c\u4f46\u957f\u671f\u7ef4\u62a4\u7684\u53ef\u6301\u7eed\u6027\u3001\u4ee5\u53ca\u793e\u533a\u8d21\u732e\u80fd\u5426\u8ddf\u4e0a macOS \u7cfb\u7edf\u8fed\u4ee3\uff0c\u90fd\u662f\u672a\u77e5\u6570\u3002\u7b80\u800c\u8a00\u4e4b\uff0cmectrics \u76ee\u524d\u662f\u4e00\u6b3e\u201c\u7406\u5ff5\u4f18\u79c0\u3001\u7ec6\u8282\u5c1a\u6b20\u706b\u5019\u201d\u7684\u4ea7\u54c1\uff0c\u5b83\u5728\u6b63\u786e\u7684\u65b9\u5411\u4e0a\u8fc8\u51fa\u4e86\u7b2c\u4e00\u6b65\uff0c\u4f46\u8ddd\u79bb\u6210\u4e3a\u66ff\u4ee3 iStat \u7684\u6210\u719f\u5de5\u5177\uff0c\u8fd8\u5dee\u4e00\u4e2a\u6df1\u5ea6\u573a\u666f\u7684\u6253\u78e8\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">mectrics<\/span>\n                <\/div>\n<div class=\"comment-content\">CPU, memory, battery, network, disk, GPU, temperature and fans in your menu bar. You pick which ones show, and a click opens the detail behind it. Compact Health folds the whole machine into one item that stays quiet until something&#8217;s off. MIT, macOS 15+.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Stats proved an open source monitor can be excellent, and iStat Menus set the<br \/>\ndepth people expect. I wanted something between the two: free and open, with<br \/>\nalerting I&#8217;d actually trust.<\/p>\n<p>The part I use most is Compact Health. It&#8217;s one menu bar item that summarizes<br \/>\nthe whole machine and stays quiet until something needs attention, so I&#8217;m not<br \/>\nreading six numbers all day. Alert rules fire on sustained thresholds rather<br \/>\nthan momentary spikes, and there&#8217;s a test delivery so you know what a 3am<br \/>\nnotification will look like before it happens.<\/p>\n<p>Everything is read from local system interfaces. No analytics, no crash<br \/>\nreporting; the only network call the app can make is an update check you<br \/>\ntrigger yourself.<\/p>\n<p>Swift, MIT, macOS 15+. Happy to hear what&#8217;s missing.<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>2<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@faruk_kamcici\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@faruk_kamcici<\/a>&nbsp;Really like the Compact Health idea &#8211; quiet until something&#8217;s actually wrong is exactly right.<\/p>\n<p>Quick question: your description mentions &#8220;temperature and fans&#8221; alongside CPU\/memory\/battery\/etc., but the menu bar picker only has 6 modules (CPU, Memory, Battery, Network, Disk, GPU) &#8211; no temp or fan module. I see CPU temp does show up as an alert rule, but fans don&#8217;t appear anywhere. <\/p>\n<p>Are those planned, or just described a bit early?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@faruk_kamcici\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@faruk_kamcici<\/a>&nbsp;For people coming from iStat Menus or Stats, what\u2019s one alert rule you\u2019d recommend setting up first so they feel that trust without getting notification fatigue?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@faruk_kamcici\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@faruk_kamcici<\/a>&nbsp;Congratulations on the launch, Faruk! <\/p>\n<\/p>\n<p>The feature that immediately stood out to me wasn&#8217;t the monitoring itself. It was Compact Health. Most monitoring tools overwhelm you with data, but what we actually want is confidence that everything is fine until it isn&#8217;t. A quiet system is often the best system.<\/p>\n<\/p>\n<p>I also appreciate your privacy-first approach. Reading everything locally and leaving network activity entirely under the user&#8217;s control is becoming increasingly rare, and I think many developers will value that as much as the monitoring itself.<\/p>\n<\/p>\n<p>I&#8217;m curious, after people started using mectrics, what metric surprised you the most? Was there a system signal that users consistently overlooked before Compact Health surfaced it? Wishing you a fantastic launch and plenty of happy users! <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Compact Health is the bit I&#8217;d use. I&#8217;ve got a Mac Mini sitting headless running agent jobs, so the menu bar is exactly where I never look. Is there a way to get the same alert rules out over CLI or JSON so I could pipe them somewhere else, or is it menu bar only for now?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@dalemooney\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dalemooney<\/a>&nbsp;That\u2019s a really good use case. There\u2019s no CLI or JSON output for alerts right now, but we can build it. I\u2019ll work on adding it in the next release. Thanks for the idea, Dale!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Love that Compact Health folds the whole machine into one item that stays quiet until something is actually wrong, that is the opposite of how these apps usually behave. Free and MIT licensed is a generous move too. Does the compact item still show enough at a glance on a notched MacBook where menu bar space is tight?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@doganakbulut\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@doganakbulut<\/a>&nbsp;Thanks, Dogan! Compact Health takes up only the space of a single icon. It shows the overall state at a glance, and clicking it opens a popover with the details. It works especially well on notched MacBooks where menu bar space is limited.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>congrats on the launch. I run a Mac mini headless most of the day for local model work, so it&#8217;s basically always on and I&#8217;m sensitive to anything that adds its own background load. for a tool that&#8217;s polling CPU, memory, GPU, temp and fans continuously, what&#8217;s mectrics&#8217; own footprint look like &#8211; is the sampling itself negligible, or is there a tradeoff between poll frequency and how much it costs you to run the monitor in the first place?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@galdayan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@galdayan<\/a>&nbsp;Thanks, Gal! That tradeoff was one of my main concerns too. The main app currently settles around 60 to 65 MB of memory. Lightweight metrics update every second on AC and every two seconds on battery, while GPU, temperature, and fan readings run every third cycle.<\/p>\n<p>The planned read-only CLI for the next release should have a lower footprint on headless setups because it skips the UI and samples only what each command needs. If you try Mectrics and see a very different footprint, let me know and I\u2019ll dig into it.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>congrats on the launch! I&#8217;ve been using iStat Menus for years. Since I already have a license of iStat what would be the main drivers to bring me over to mectrics?  I do like the Compact Health and the suggested CLI\/JSON export sounds like a great tool for headless setups.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@jacob_sherwood\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@jacob_sherwood<\/a>&nbsp;Thanks Jacob! If iStat already works well for you, I would not claim Mectrics has more depth.<\/p>\n<p>The main difference is a quieter approach: Compact Health instead of watching several numbers, sustained alerts that ignore brief spikes, zero telemetry, and free open source code.<\/p>\n<p>The next release also adds a read-only CLI, JSON snapshots, and alert events for headless setups.<\/p>\n<p>It is less about replacing every iStat feature and more about offering a simpler, focused, and private monitoring workflow.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Love that Compact Health folds everything into one quiet menu bar item that only speaks up when something is actually wrong, which is exactly how a monitoring tool should respect your attention.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>the GPU and temperature tracking is what caught my eye &#8211; I&#8217;ve had my mac silently throttle during long batch jobs before and only noticed afterward from how long everything took. would compact health actually flag sustained thermal throttling, or just raw temperature being high? those aren&#8217;t quite the same thing and the throttling itself is usually the real problem, not the number on the sensor.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@omri_ben_shoham1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@omri_ben_shoham1<\/a>&nbsp;Right now it&#8217;s the raw number, so you&#8217;d catch a hot sensor but not the<\/p>\n<p>throttling. You&#8217;re right that the throttling is the part that costs you.<\/p>\n<p>The app already reads ProcessInfo&#8217;s thermal state, but only to back off its own<\/p>\n<p>sampling. It never surfaces it. <br \/><em><br \/>Going into the next release, good contribution. Thanks!<\/em><\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The Compact Health mode is a really thoughtful touch, surfacing issues only when something actually needs attention instead of cluttering the menu bar with constant noise.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@titus_gan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@titus_gan<\/a>&nbsp;Thanks. It&#8217;s off by default too, so it only shows up if you decide you want it.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Compact Health staying quiet until something&#8217;s actually off is the detail that matters. Every other menu bar monitor I&#8217;ve used just dumps every number on you all the time and you tune it out.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@irahimiam\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@irahimiam<\/a>&nbsp;Hey, thanks for the comment!<\/p>\n<\/p>\n<p>That&#8217;s exactly why I built it. I had six numbers up there and had stopped<\/p>\n<p>looking at any of them.<\/p>\n<p>It only speaks up if something stays off for a while, not on a quick spike.<\/p>\n<p>Otherwise it just sits there being boring.<\/p>\n<p>Let me know if it ever nags you when it shouldn&#8217;t.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#4<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/6ZVL6YDPVSCYJ6\" class=\"app-title\">Poth Labs<\/a><\/p>\n<div class=\"one-liner\">The customer brain for your company<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">201<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Poth Labs \u901a\u8fc7\u6784\u5efa\u5ba2\u6237\u77e5\u8bc6\u5173\u7cfb\u56fe\u8c31\uff0c\u8ba9\u201cAsk Poth\u201d\u80fd\u8de8\u7cfb\u7edf\u63a8\u7406\u5206\u6790\u5ba2\u6237\u884c\u4e3a\u4e0e\u4e1a\u52a1\u7ed3\u679c\uff0c\u89e3\u7b54\u201c\u9ad8\u4ef7\u503c\u5ba2\u6237\u4e3a\u4f55\u6d41\u5931\u201d\u7b49\u5355\u4e00\u6570\u636e\u6e90\u65e0\u6cd5\u56de\u7b54\u7684\u95ee\u9898\uff0c\u5e76\u81ea\u4e3b\u8865\u7f3a\u8c03\u67e5\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/bfbff352-7082-4359-9626-939df67009d8.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/6302e439-b4e1-4b54-8412-df43bb19b275.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/d028c6ac-a9fb-4015-afcc-7ecd0165cb36.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/473d9c41-7077-4244-8ba4-c1ba33c9e05d.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/b81a7579-d731-4417-97ae-08e6194948e4.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/552be10e-fecc-460e-941c-5a1028d534b2.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/c2722b59-a473-4036-9550-12c9ba55c1a3.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/4b83918a-4ffa-40cc-b2f9-c7f688f49398.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=k9gsdaxXdtM\"><source src=\"https:\/\/www.youtube.com\/watch?v=k9gsdaxXdtM\" type=\"video\/mp4\"><\/video><\/p>\n<div class=\"video-overlay\">\n<div class=\"play-icon\">\u25b6<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Customer Success<\/span><br \/>\n            <span class=\"tag\">Analytics<\/span><br \/>\n            <span class=\"tag\">SaaS<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u5ba2\u6237\u77e5\u8bc6\u56fe\u8c31<\/span><br \/>\n            <span class=\"tag\">\u5ba2\u6237\u667a\u80fd<\/span><br \/>\n            <span class=\"tag\">\u6d41\u5931\u5206\u6790<\/span><br \/>\n            <span class=\"tag\">\u884c\u4e3a\u5206\u6790<\/span><br \/>\n            <span class=\"tag\">AI\u95ee\u7b54<\/span><br \/>\n            <span class=\"tag\">\u81ea\u9002\u5e94\u8c03\u7814<\/span><br \/>\n            <span class=\"tag\">B2B SaaS<\/span><br \/>\n            <span class=\"tag\">\u6570\u636e\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">\u6c89\u9ed8\u4fe1\u53f7\u8bc6\u522b<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u9ad8\u5ea6\u8ba4\u53ef\u201c\u5173\u7cfb\u800c\u975e\u6587\u6863\u201d\u7684\u7406\u5ff5\uff0c\u4f46\u96c6\u4e2d\u8ffd\u95ee\uff1a1\uff09\u9996\u65e5\u63a5\u5165\u54ea\u4e9b\u7cfb\u7edf\u53caCRM\u4e0e\u5de5\u5355\u51b2\u7a81\u5982\u4f55\u5904\u7406\uff1b2\uff09\u5c0f\u56e2\u961f\u6700\u4f4e\u6570\u636e\u6e90\u914d\u7f6e\uff1b3\uff09\u662f\u5426\u652f\u6301Discord\/GitHub\u7b49\u793e\u533a\u4fe1\u53f7\u53ca\u5176\u5b9e\u65f6\u6027\uff1b4\uff09\u80fd\u5426\u5c06\u201c\u6c89\u9ed8\u201d\u5efa\u6a21\u4e3a\u6d41\u5931\u524d\u5146\u800c\u975e\u6570\u636e\u7f3a\u5931\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                Poth Labs\u7684\u5207\u5165\u70b9\u7cbe\u51c6\u4e14\u5201\u94bb\u2014\u2014\u5b83\u6ca1\u6709\u8bd5\u56fe\u518d\u9020\u4e00\u4e2a\u201c\u66f4\u806a\u660e\u7684CRM\u201d\uff0c\u800c\u662f\u7528\u77e5\u8bc6\u56fe\u8c31\u91cd\u65b0\u7f16\u6392\u4f01\u4e1a\u5df2\u6709\u7684\u5ba2\u6237\u6570\u636e\u5b64\u5c9b\u3002\u5176\u6838\u5fc3\u4ef7\u503c\u5e76\u975e\u201c\u56de\u7b54\u95ee\u9898\u201d\uff0c\u800c\u662f\u628a\u201c\u65e0\u6570\u636e\u201d\u4e0e\u201c\u6709\u6570\u636e\u4f46\u6c89\u9ed8\u201d\u533a\u5206\u5f00\uff0c\u8ba9\u201c\u5b89\u9759\u201d\u4e0d\u518d\u88ab\u8bef\u8bfb\u4e3a\u201c\u5065\u5eb7\u201d\u3002\u8fd9\u76f4\u51fb\u4e86SaaS\u7eed\u7ea6\u573a\u666f\u4e2d\u6700\u6602\u8d35\u7684\u8ba4\u77e5\u76f2\u533a\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u4ea7\u54c1\u9762\u4e34\u4e09\u91cd\u8003\u9a8c\uff1a\u5176\u4e00\uff0c\u8ba4\u77e5\u8d1f\u62c5\u2014\u2014\u56fe\u8c31\u7684\u4ef7\u503c\u53d6\u51b3\u4e8e\u6570\u636e\u6e90\u7684\u4e30\u5bcc\u5ea6\u4e0e\u6e05\u6d17\u8d28\u91cf\uff0c\u5c0f\u56e2\u961f\u53ef\u80fd\u9677\u5165\u201c\u8fde\u5b8c\u6570\u636e\u5374\u95ee\u4e0d\u51fa\u597d\u95ee\u9898\u201d\u7684\u5c34\u5c2c\uff0c\u8bc4\u8bba\u4e2d\u5173\u4e8e\u6700\u4f4e\u914d\u7f6e\u7684\u8ffd\u95ee\u6b63\u662f\u6b64\u7126\u8651\u7684\u4f53\u73b0\uff1b\u5176\u4e8c\uff0c\u4fe1\u53f7\u65f6\u6548\u6027\u2014\u2014\u4f01\u4e1a\u77e5\u8bc6\u56fe\u8c31\u7684\u6784\u5efa\u5bb9\u6613\uff0c\u4f46\u7ef4\u6301\u5b9e\u65f6\u540c\u6b65\u6781\u96be\uff0c\u5c24\u5176\u662f\u793e\u533a\u4fe1\u53f7\uff08Discord\/GitHub\uff09\uff0c\u4e00\u65e6\u5ef6\u8fdf\uff0c\u9884\u6d4b\u6027\u4ef7\u503c\u5c06\u5927\u5e45\u7f29\u6c34\uff1b\u5176\u4e09\uff0c\u5224\u65ad\u6743\u5f52\u5c5e\u2014\u2014\u5f53CRM\u4e0e\u5de5\u5355\u6570\u636e\u77db\u76fe\u65f6\uff0cPoth\u9009\u62e9\u201c\u5448\u73b0\u77db\u76fe\u800c\u975e\u88c1\u51b3\u201d\uff0c\u8fd9\u5728AI\u65f6\u4ee3\u5f88\u653f\u6cbb\u6b63\u786e\uff0c\u4f46\u4e5f\u610f\u5473\u7740\u5b83\u73b0\u9636\u6bb5\u53ea\u662f\u201c\u9ad8\u7ea7\u9648\u5217\u67b6\u201d\uff0c\u800c\u975e\u51b3\u7b56\u5f15\u64ce\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u771f\u6b63\u7684\u62a4\u57ce\u6cb3\u5728\u4e8e\u201c\u81ea\u9002\u5e94\u8c03\u67e5\u201d\u95ed\u73af\u2014\u2014\u7528\u56fe\u8c31\u66b4\u9732\u4fe1\u606f\u7f3a\u53e3\uff0c\u518d\u901a\u8fc7AI\u4e3b\u52a8\u5411\u5ba2\u6237\u53d1\u95ee\u8865\u5168\u3002\u8fd9\u6bd4\u5355\u7eaf\u7684\u5206\u6790\u4eea\u8868\u76d8\u6df1\u4e00\u4e2a\u7ef4\u5ea6\u3002\u4f46\u82e5\u8c03\u67e5\u89e6\u53d1\u8fc7\u4e8e\u9891\u7e41\u6216\u95ee\u9898\u7b28\u62d9\uff0c\u6781\u6613\u6d88\u8017\u5ba2\u6237\u8010\u5fc3\uff0c\u53cd\u800c\u52a0\u901f\u6c89\u9ed8\u3002Poth\u9700\u8981\u5728\u201c\u4e3b\u52a8\u63d0\u95ee\u201d\u4e0e\u201c\u4fdd\u6301\u5b89\u9759\u201d\u4e4b\u95f4\u627e\u5230\u5371\u9669\u7684\u5e73\u8861\u70b9\u2014\u2014\u8fd9\u51b3\u5b9a\u4e86\u5b83\u662f\u5ba2\u6237\u7684\u7b2c\u4e8c\u5927\u8111\uff0c\u8fd8\u662f\u53c8\u4e00\u4e2a\u5236\u9020\u566a\u97f3\u7684\u9a9a\u6270\u8005\u3002\u77ed\u671f\u770b\uff0c\u5b83\u6700\u6027\u611f\u7684\u573a\u666f\u4ecd\u662f\u9ad8\u5ba2\u5355\u4ef7\u3001\u957f\u5468\u671f\u7684B2B\u751f\u610f\uff0c\u5c24\u5176\u662f\u5f00\u53d1\u8005\u5de5\u5177\u9886\u57df\uff0c\u5148\u53d1\u5360\u636e\u201c\u6c89\u9ed8\u9884\u6d4b\u201d\u5fc3\u667a\uff0c\u6bd4\u8ffd\u9010\u901a\u7528\u667a\u80fd\u66f4\u7a33\u59a5\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">Poth Labs<\/span>\n                <\/div>\n<div class=\"comment-content\">Customer knowledge isn&#8217;t a collection of documents. It&#8217;s a network of relationships. Poth builds a living model of your customers before answering questions, so Ask Poth can reason across all your company knows instead of summarizing isolated sources. That unlocks questions no single source can answer, from what&#8217;s driving churn to why customers adopt or abandon features. Every conclusion is grounded in evidence. If the answer isn&#8217;t there, Poth launches adaptive surveys to collect what&#8217;s missing.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hello Product Hunt! We started Poth because companies already know a lot about their customers\u2014but that knowledge is scattered across calls, tickets, CRM records, analytics, surveys, and internal docs.<\/p>\n<p>Questions like \u201cWhat\u2019s driving churn among our highest-value accounts?\u201d rarely have an answer in one place. Teams have to manually connect what customers said, what they did, and what happened to the account.<\/p>\n<p>Poth originally generated hypotheses and ran adaptive customer interviews and surveys. But to ask useful questions, it first had to understand everything a company already knew.<br \/>\nThat led us to build a living model connecting customers, accounts, features, behaviors, and conversations across different systems. As teams began using that model to answer questions across their existing customer knowledge, we realized it needed to become a core part of Poth.<\/p>\n<p>Today, Ask Poth reasons across your customer knowledge, grounds every conclusion in evidence, and shows what information is still missing. When the answer isn\u2019t there, Poth can collect it through adaptive interviews and surveys.<\/p>\n<p>We\u2019d love to hear your feedback!<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>7<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@mojmir_horvath\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@mojmir_horvath<\/a>&nbsp;The version of this I&#8217;ve actually needed is one place that remembers context so success and sales stop asking customers the same questions. In practice the blocker is always integrations. Which systems do you pull from on day one, and how do you handle it when the CRM and support tool disagree about the same account?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@mojmir_horvath\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@mojmir_horvath<\/a>&nbsp;For teams just starting out with Poth: what\u2019s the <em>minimum<\/em> set of data sources you\u2019d recommend connecting first to get a meaningful \u2018Ask Poth\u2019 answer within the first week? And what\u2019s a realistic example question a small team could ask at that stage?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Good direction but a tough one to crack.. most customers don&#8217;t talk till they are coaxed to share, still your beginning is correct for collecting all behaviours, and reasons.. the chances of catching a detractor is higher when you know that a churning customer your system knew about, had many signs that match with the current customer behaviour.. good wishes for your success..<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Churn in developer communities doesn&#8217;t show up in the CRM first. It shows up in Discord going quiet, GitHub issues tapering off, forum activity slowing down weeks before anyone cancels or even thinks about it. Does Poth connect to sources like that, or is the knowledge graph limited to CRM and support integrations? That gap is the one I&#8217;d actually want closed.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@hazy0\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@hazy0<\/a>&nbsp;Not out of the box today, current sources are more product analytics, calls, and CRM\/support. But Poth doesn&#8217;t care where activity comes from, it&#8217;s all behavioral signal. We build integrations customer-by-customer during onboarding, and Discord + GitHub activity for devtools is exactly the kind we&#8217;d build first. Totally agree that&#8217;s where dev churn shows up before anyone cancels.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>Good to know the integration layer is open ended. If Discord and GitHub are on the near term roadmap for devtools, the question becomes the latency on that data. Community signals go stale fast. Is the ingestion close to real time, or is it a daily batch?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Alex is pointing at the real hole. I would go one step further.<\/p>\n<\/p>\n<p>Staleness never throws an error because absence of data and absence of change look identical to any system built from ingested artifacts. No ticket, no call, no email. The graph reads that as a quiet, healthy account. It is usually the opposite.<\/p>\n<\/p>\n<p>We learned that expensively once, with a customer who was signed, warm in every conversation, and had not used the thing a single time. Every source we had said green. The only honest signal was usage, and nobody was looking at it.<\/p>\n<\/p>\n<p>So: does Poth model silence as evidence? Not &#8220;no data on this account&#8221; but &#8220;this account has gone quiet in a pattern that has preceded churn before.&#8221;<\/p>\n<\/p>\n<p>And on Artem&#8217;s question, when the CRM and the support tool disagree, does Poth pick one or surface the disagreement? The disagreement is usually the actual finding.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@rabnoor_s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rabnoor_s<\/a>&nbsp;On silence: Poth ties the graph to behavior, not just ingested artifacts, so an account going quiet is visible rather than invisible. What we don&#8217;t do yet is the learned version: &#8220;this quiet pattern preceded churn before,&#8221; but that&#8217;s where this is headed.<\/p>\n<\/p>\n<p>On the disagreement, I mentioned in my reply to Artem but we surface both supporting and contradicting evidence leaving the human user to make the judgement call!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Really like the idea of reasoning over relationships instead of just retrieving documents. Curious &#8211; do you see Poth staying focused on customer intelligence or is that just the first step toward becoming a broader knowledge layer for product, marketing and other teams?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>relationships rather than documents is the right framing. the hard bit is that a relationship goes stale without ever throwing an error, nobody files a ticket when a champion quietly leaves, so the graph keeps looking healthy right up until the renewal.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@alex_watson2110\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@alex_watson2110<\/a>&nbsp;Agreed, nobody announces they&#8217;ve gone quiet. That&#8217;s why our graph tracks behavior, not just documents. A champion leaving looks like silence in the activity data, and silence is a signal if you&#8217;re watching for it.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#5<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/32ZT3A3POBCZDN\" class=\"app-title\">DepthData<\/a><\/p>\n<div class=\"one-liner\">The system of record for your company&#8217;s AI spend.<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">164<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>DepthData \u662f\u4e00\u4e2a\u4f01\u4e1aAI\u652f\u51fa\u4e0e\u91c7\u7528\u5ea6\u7684\u5ba1\u8ba1\u7ea7\u8bb0\u5f55\u7cfb\u7edf\uff0c\u89e3\u51b3\u516c\u53f8\u540c\u65f6\u4f7f\u7528\u591a\u4e2aAI\u5de5\u5177\uff08\u5982ChatGPT\u3001Claude\u3001Copilot\uff09\u65f6\uff0c\u65e0\u6cd5\u56de\u7b54\u201c\u82b1\u4e86\u591a\u5c11\u94b1\u3001\u8c01\u5728\u7528\u3001\u54ea\u4e9b\u5e2d\u4f4d\u95f2\u7f6e\u201d\u8fd9\u4e00\u57fa\u672c\u7ba1\u7406\u76f2\u533a\uff0c\u65e0\u9700\u8bfb\u53d6\u63d0\u793a\u8bcd\u3001\u4ec5\u57fa\u4e8eAPI\u5143\u6570\u636e\u5373\u53ef\u751f\u6210\u53ef\u9a8c\u8bc1\u7684\u652f\u51fa\u603b\u89c8\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/bdd91666-a60e-4695-8c62-8b60c02637ef.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/432ab48a-fafb-4e5d-ba3a-e7636102e8a5.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/8d664df9-46c8-401d-aa39-78d01fea8c22.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/b8a4d010-acff-4093-bbb5-fe3d4722647f.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/c9a256fa-3785-441c-a45b-fba00673f839.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Analytics<\/span><br \/>\n            <span class=\"tag\">SaaS<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u652f\u51fa\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">SaaS\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">\u6210\u672c\u4f18\u5316<\/span><br \/>\n            <span class=\"tag\">IT\u6cbb\u7406<\/span><br \/>\n            <span class=\"tag\">\u5ba1\u8ba1\u5408\u89c4<\/span><br \/>\n            <span class=\"tag\">\u4f7f\u7528\u5206\u6790<\/span><br \/>\n            <span class=\"tag\">\u5e2d\u4f4d\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">API\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">\u8d22\u52a1\u8fd0\u8425<\/span><br \/>\n            <span class=\"tag\">\u4f01\u4e1a\u8f6f\u4ef6<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u6838\u5fc3\u5173\u6ce8\u70b9\u96c6\u4e2d\u5728\uff1a\u6570\u636e\u9a8c\u8bc1\u5c42\u7ea7\uff08\u6d4b\u5f97\/\u5206\u914d\u6807\u7b7e\uff09\u3001API\u6743\u9650\u8fb9\u754c\uff08\u662f\u5426\u8bfb\u53d6\u63d0\u793a\u8bcd\uff09\u3001\u5f71\u5b50AI\u652f\u51fa\uff08\u4e2a\u4eba\u8ba2\u9605\u62a5\u9500\uff09\u3001\u8de8\u5de5\u5177\u91cd\u53e0\u68c0\u6d4b\uff08\u540c\u4e00\u7528\u6237\u53cc\u5e2d\u4f4d\uff09\u3001\u6309\u7528\u91cf\u8ba1\u4ef7\u7684\u5355\u4eba\u9ad8\u989d\u6d88\u8d39\uff08\u5e2d\u4f4d\u89c6\u56fe\u5931\u771f\uff09\u3001\u901a\u8fc7SSO\/IdP\u4ea4\u53c9\u9a8c\u8bc1\u4f7f\u7528\u771f\u5b9e\u6027\u3002\u521b\u59cb\u4eba\u56de\u5e94\u79f0\uff0c\u5bf9API\u4e0d\u53ef\u89c1\u6570\u636e\u660e\u786e\u663e\u793a\u4e3a\u201c\u7f3a\u53e3\u201d\u800c\u975e\u4f30\u7b97\uff0c\u5e76\u652f\u6301\u6309\u4eba\u5458\u6210\u672c\u4e0e\u91cd\u53e0\u6210\u672c\u5f52\u56e0\uff0c\u4f46\u5224\u65ad\u7531\u7528\u6237\u81ea\u884c\u51b3\u5b9a\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                DepthData\u5207\u5165\u7684\u662f\u4e00\u4e2a\u771f\u5b9e\u4e14\u8fc5\u901f\u6076\u5316\u7684\u4f01\u4e1a\u75db\u70b9\uff1aAI\u91c7\u8d2d\u4ece\u201c\u5355\u4e00\u5de5\u5177\u8bd5\u70b9\u201d\u53d8\u6210\u4e86\u201c\u90e8\u95e8\u5404\u81ea\u4e3a\u6218\u7684\u591a\u5de5\u5177\u6df7\u6218\u201d\uff0c\u800c\u8d22\u52a1\u4e0eIT\u90e8\u95e8\u4ecd\u5728\u7528Excel\u548c\u731c\u6d4b\u8fdb\u884c\u7ba1\u7406\u3002\u5176\u6838\u5fc3\u4ef7\u503c\u4e0d\u5728\u4e8e\u201c\u53c8\u4e00\u4e2a\u53ef\u89c6\u5316\u4eea\u8868\u76d8\u201d\uff0c\u800c\u5728\u4e8e\u786e\u7acb\u4e86\u201c\u8bc1\u636e\u5c42\u7ea7\u201d\u8fd9\u4e00\u4fe1\u4efb\u673a\u5236\u2014\u2014\u6bcf\u4e00\u4e2a\u6570\u5b57\u90fd\u6807\u6ce8\u4e3aMEASURED\uff08\u4eceAPI\u76f4\u63a5\u6d4b\u5f97\uff09\u6216ALLOCATED\uff08\u5206\u914d\/\u63a8\u65ad\uff09\uff0c\u5e76\u8bda\u5b9e\u663e\u793aAPI\u65e0\u6cd5\u8986\u76d6\u7684\u201c\u6570\u636e\u7f3a\u53e3\u201d\u800c\u975e\u586b\u5145\u4f30\u7b97\u503c\u3002\u8fd9\u4e00\u8bbe\u8ba1\u76f4\u51fb\u4f01\u4e1a\u8f6f\u4ef6\u91c7\u8d2d\u4e2d\u201c\u5ba1\u8ba1\u6050\u60e7\u201d\u7684\u547d\u95e8\uff1a\u5f53\u8001\u677f\u8ffd\u95ee\u6570\u5b57\u6765\u6e90\u65f6\uff0c\u9500\u552e\u65b9\u62ff\u51fa\u7684\u5f80\u5f80\u662f\u201c\u770b\u8d77\u6765\u7cbe\u786e\u201d\u7684\u6a21\u578b\u5047\u8bbe\uff0c\u800cDepthData\u9009\u62e9\u5728\u67b6\u6784\u5c42\u9762\u62d2\u7edd\u9020\u5047\uff0c\u8fd9\u6070\u597d\u662fCFO\u548cCISO\u6700\u770b\u91cd\u7684\u7a00\u7f3a\u54c1\u8d28\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u7136\u800c\uff0c\u4ea7\u54c1\u9762\u4e34\u4e24\u4e2a\u7ed3\u6784\u6027\u6311\u6218\u3002\u7b2c\u4e00\uff0cAI\u5de5\u5177\u751f\u6001\u672c\u8eab\u7684API\u5f00\u653e\u5ea6\u53c2\u5dee\u4e0d\u9f50\uff0cAnthropic\u3001OpenAI\u3001Cursor\u63d0\u4f9b\u8f83\u7ec6\u7c92\u5ea6\u7528\u91cf\u6570\u636e\uff0c\u4f46Gemini\u6346\u7ed1\u5728Workspace\u4e2d\u3001Replit\u805a\u5408credits\u3001Vercel\u4f9d\u8d56\u7528\u6237\u6253\u6807\u7b7e\uff0c\u8fd9\u79cd\u788e\u7247\u5316\u610f\u5473\u7740DepthData\u7684\u201c\u53ef\u4fe1\u6570\u636e\u201d\u89c6\u56fe\u5929\u7136\u5e26\u6709\u5927\u91cf\u7a7a\u6d1e\u3002\u867d\u7136\u4ee5\u201c\u663e\u793a\u7f3a\u53e3\u201d\u800c\u975e\u201c\u4f30\u7b97\u201d\u5904\u7406\u5728\u9053\u5fb7\u4e0a\u6b63\u786e\uff0c\u4f46\u5546\u4e1a\u4e0a\u53ef\u80fd\u524a\u5f31\u5b9e\u7528\u6027\u2014\u2014\u91c7\u8d2d\u65b9\u6700\u7ec8\u4ecd\u9700\u5168\u53e3\u5f84\u6570\u5b57\uff0c\u7f3a\u53e3\u8fc7\u591a\u4f1a\u964d\u4f4e\u4f7f\u7528\u610f\u613f\u3002\u7b2c\u4e8c\uff0c\u8bc4\u8bba\u4e2d\u53cd\u590d\u51fa\u73b0\u7684\u201c\u5f71\u5b50AI\u652f\u51fa\u201d\uff08\u5458\u5de5\u7528\u4e2a\u4eba\u8ba2\u9605\u989d\u5ea6\u62a5\u9500\uff09\u65e0\u6cd5\u4ece\u4f9b\u5e94\u5546API\u83b7\u53d6\uff0c\u53ea\u80fd\u901a\u8fc7\u5bf9\u63a5\u8d39\u7528\u7cfb\u7edf\u89e3\u51b3\uff0c\u800c\u90a3\u662f\u53e6\u4e00\u4e2a\u4ea7\u54c1\u7c7b\u522b\u7684\u6218\u573a\u3002\u521b\u59cb\u4eba\u5bf9\u6b64\u7684\u56de\u5e94\u2014\u2014\u201c\u663e\u793a\u7f3a\u53e3\u800c\u975e\u731c\u6d4b\u201d\u2014\u2014\u867d\u7136\u8bda\u5b9e\uff0c\u4f46\u53ef\u80fd\u8ba9\u4ea7\u54c1\u5728\u201c\u5b8c\u6574\u8bb0\u5f55\u201d\u8fd9\u4e00\u6838\u5fc3\u4e3b\u5f20\u4e0a\u6253\u6298\u6263\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ece\u4ea7\u54c1\u7b56\u7565\u770b\uff0cDepthData\u7684\u201c\u9a8c\u8bc1\u6807\u7b7e\u201d\u662f\u7edd\u4f73\u7684\u8bbe\u8ba1\u951a\u70b9\uff0c\u65e2\u5efa\u7acb\u4e86\u4e13\u4e1a\u4fe1\u4efb\uff0c\u53c8\u5236\u9020\u4e86\u4e0e\u7ade\u54c1\uff08\u5982Zylo\u3001Productiv\uff09\u7684\u5dee\u5f02\u5316\u3002\u4f46\u771f\u6b63\u7684\u62a4\u57ce\u6cb3\u53ef\u80fd\u4e0d\u5728\u201c\u5c55\u793a\u5f00\u9500\u201d\uff0c\u800c\u5728\u201c\u5f52\u56e0\u5230\u4eba\u201d\u2014\u2014\u8bc4\u8bba\u4e2d\u4e00\u4f4d\u7528\u6237\u6307\u51fa\u201c\u540d\u5b57\u65c1\u8fb9\u6709\u6570\u5b57\u6bd4\u603b\u91d1\u989d\u66f4\u80fd\u6539\u53d8\u884c\u4e3a\u201d\uff0c\u8fd9\u6697\u793a\u5176\u6700\u7ec8\u5f62\u6001\u5e94\u6210\u4e3a\u4f01\u4e1a\u5185AI\u8d44\u6e90\u6cbb\u7406\u7684\u201c\u95ee\u8d23\u5de5\u5177\u201d\uff0c\u800c\u975e\u5355\u7eaf\u7684\u8d39\u7528\u62a5\u8868\u3002\u82e5\u4e0b\u4e00\u6b65\u80fd\u6253\u901aSSO\/IdP\u767b\u5f55\u6570\u636e\uff08Okta\u3001Entra\uff09\u8fdb\u884c\u4ea4\u53c9\u9a8c\u8bc1\uff0c\u5e76\u652f\u6301\u4ece\u8d39\u7528\u7cfb\u7edf\u5bfc\u5165\u4e2a\u4eba\u62a5\u9500\u6570\u636e\u5c06\u5f71\u5b50\u652f\u51fa\u663e\u6027\u5316\uff0c\u4ea7\u54c1\u5c06\u8865\u9f50\u201c\u5ba1\u8ba1\u95ed\u73af\u201d\u3002\u5426\u5219\uff0c\u5b83\u53ef\u80fd\u6b62\u6b65\u4e8e\u201c\u5927\u578b\u4f01\u4e1a\u7684IT\u6cbb\u7406\u4e13\u5458\u201d\u8fd9\u4e00\u76f8\u5bf9\u72ed\u7a84\u7684\u5e02\u573a\uff0c\u800c\u65e0\u6cd5\u89e6\u53ca\u66f4\u666e\u904d\u7684\u201cAI\u652f\u51fa\u5931\u63a7\u201d\u7126\u8651\u3002\u4ea7\u54c1\u9a8c\u8bc1\u4e86\u9700\u6c42\uff0c\u4f46\u4ecd\u9700\u8bc1\u660e\u81ea\u5df1\u80fd\u5426\u8986\u76d6\u6570\u636e\u7684\u6697\u9762\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">DepthData<\/span>\n                <\/div>\n<div class=\"comment-content\">Companies now pay for four or five AI tools (ChatGPT, Claude, Copilot, and more) but can&#8217;t answer the basics: what are we spending, who&#8217;s using it, and which seats sit idle? DepthData connects every AI tool into one audit ready view of spend and adoption. What makes it different: every number is labeled by how it&#8217;s verified, we never read prompts, and we show exactly what each vendor&#8217;s API can and can&#8217;t expose. The trusted system of record for your company&#8217;s AI spend.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hey everyone, Ali here \ud83d\udc4b<\/p>\n<p>I&#8217;m a product designer, and over the past year I kept noticing the same thing: companies are buying more and more AI tools, but nobody actually knows what they&#8217;re spending across all of them or who&#8217;s really using what. The answer usually means logging into five different admin consoles and cobbling together a spreadsheet, and even then you&#8217;re mostly guessing.<\/p>\n<p>So I built DepthData to pull all of it into one clear, audit ready view of AI spend and adoption.<\/p>\n<p>The part I care most about: I made a hard rule that we never show a number we can&#8217;t actually verify from the tool&#8217;s own API. Every figure is labeled by how we know it, and we never read prompts, only metadata like usage and seats. I got tired of dashboards that look confident but fall apart the moment you ask &#8220;where did this number come from?&#8221; I wanted the opposite.<\/p>\n<p>It&#8217;s early and I&#8217;m building it mostly solo, so I&#8217;d genuinely love your honest feedback. What would make this actually useful for your team? What am I missing? Happy to answer anything.<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>4<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@aliberkuyanik\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@aliberkuyanik<\/a>&nbsp;We lost track of AI spend the moment every team started expensing their own API keys and seat licenses. Finance saw one number, eng saw another, nobody could explain the gap. Are you pulling from provider billing directly or from usage logs, and can you attribute spend down to a team or project?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@aliberkuyanik\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@aliberkuyanik<\/a>&nbsp;Congrats on the launch! <\/p>\n<\/p>\n<p>This is a real gap for us too. We run our own product on top of Anthropic&#8217;s API, and tracking what each feature actually costs per run, especially after switching between plans, has been a spreadsheet exercise so far. <\/p>\n<\/p>\n<p>Curious how granular this gets, can you trace spend down to a specific feature or session, or is it more of a monthly aggregate view right now? We currently do that by hand and it&#8217;s the part that doesn&#8217;t scale.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@aliberkuyanik\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@aliberkuyanik<\/a>&nbsp;Really like your approach of only showing numbers that can actually be verified instead of estimating them. One thing I&#8217;m curious about: how does DepthData handle companies where teams use their own API keys or personal subscriptions outside of company-managed accounts? Can it still surface those blind spots somehow?<\/p>\n<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>This is a smart wedge ,most spend dashboards mix hard numbers with guesses and never tell you which is which, so the second someone actually audits it, trust falls apart. Curious how you handle vendors that barely expose anything beyond seat counts , do you just flag those as low-confidence, or is there a minimum bar of data before a tool even gets added? Also wondering if you&#8217;re planning to cross-check against SSO\/IdP logins (Okta, Entra etc.) at some point, since that&#8217;s often where you get a more honest &#8220;who&#8217;s actually using this&#8221; than the vendor&#8217;s own console gives you. <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Congrats on the launch! Getting a single source of truth for AI spend is exactly what teams need right now \u2014 love the audit-ready angle. Best of luck today!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">@zvonimir_sabljic1 Thank you! Your support means a lot\ud83d\ude4f\ud83c\udffb<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Never reading prompts, only metadata, is the detail that gets this past a security review. Most spend trackers ask for way more access than the actual problem needs.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@irahimiam\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@irahimiam<\/a>&nbsp;Exactly. Most spend trackers ask for way more access than the problem needs. Depthdata is read only and metadata only: seats, usage counts, spend. The endpoints we connect to don&#8217;t carry prompt content at all, so conversations never enter our system, there&#8217;s nothing to leak. Narrow scope is the architecture, not a promise, and that&#8217;s what security teams actually check.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Did the same exercise on AWS spend this year and the total was never the hard part, attribution was. What actually moved the number wasn&#8217;t the dashboard, it was being able to put a name next to each line so somebody had to defend it.<\/p>\n<\/p>\n<p>Your rule about never showing a figure you can&#8217;t verify from the tool&#8217;s own API is the right call. The follow up I&#8217;d want: what happens to the spend no provider API will tell you about, like the personal ChatGPT subscription someone quietly expenses? That shadow half is usually where the surprise lives.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@dalemooney\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dalemooney<\/a>&nbsp;That AWS experience is exactly the thesis. The total never changes behavior, a name next to the line does.<\/p>\n<p>On shadow spend, straight answer: no AI vendor API will ever show a personal subscription someone quietly expenses. That money lives in your expense system, not the vendor&#8217;s org account. So Depthdata shows it as a gap, not a number. Closing it properly means pulling from the expense side, which is a different connector class. Until then, same rule as everything else: no API to back it, we show the gap instead of a guess.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The ALLOCATED vs measured label distinction is the right call. We ran into this exact thing with transaction categorization, once you&#8217;re inferring instead of reading a hard number from the source, you have to keep that visibly separate or people start treating estimates as facts six months later when nobody remembers which number was which.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@raffay_sajjad\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@raffay_sajjad<\/a>&nbsp;That six months later failure is exactly the one we designed against. The label isn&#8217;t a UI decoration, it travels with the number, exports and reports carry MEASURED or ALLOCATED on every figure. So even when nobody remembers which number was which, the number remembers. Once an estimate loses its label it becomes a fact, and that&#8217;s how dashboards quietly go wrong.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>the verification labeling and the per-user vs seat point already cover most of what I&#8217;d have asked. one thing I didn&#8217;t see come up: overlap across tools rather than idle seats within one tool. we&#8217;ve ended up paying for two AI tools that do 80% the same job for the same people, because each one got adopted separately by a different team before anyone compared them side by side. that&#8217;s not an idle seat in either tool, both look fully used, the waste is that the org didn&#8217;t need both. is that something DepthData could ever surface, or is it necessarily out of scope since it&#8217;s a cross-tool judgment call rather than a per-tool number?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@galdayan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@galdayan<\/a>&nbsp;Not out of scope at all. The overlap itself is measurable from data we already pull: same people holding seats in two same category tools, both active, and what the double coverage costs. So Depthdata can name it: 40 people pay for both X and Y, here&#8217;s what the second one costs.<\/p>\n<p>What we won&#8217;t do is pick the winner. Whether it&#8217;s really the same job is your call. We put a name and a number on the overlap so somebody has to defend it, the judgment stays with you.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The verification label is the actual product here, the dashboard is just where it lives. What you&#8217;re missing is that idle seats are the easy half. On anything usage priced, one person&#8217;s month can outspend the other forty put together, and a seat view shows those two people as identical, so you cut the wrong licence and save nothing. Worth naming which vendors can&#8217;t expose per user consumption at all, because that gap is where the spreadsheet quietly goes wrong.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@asadmalik901\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@asadmalik901<\/a>&nbsp;You&#8217;re right, the label is the product. And agreed, idle seats only matter on seat priced tools. On usage pricing the money concentrates, one heavy user can outspend a team, and a seat view hides that. So Depthdata shows cost per person, not just seats. Those numbers come straight from vendor APIs, Anthropic and OpenAI and Cursor all expose per user spend in their docs. Demo runs on sample data today, but nothing on screen an endpoint can&#8217;t back.<\/p>\n<\/p>\n<p>The gaps, Gemini bundles AI into Workspace so per user cost doesn&#8217;t exist, Replit pools credits with no per member API, Vercel needs tagging first. We show those as gaps instead of estimating over them.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#6<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/U7XAVIELGY573U\" class=\"app-title\">Halo by Scam AI<\/a><\/p>\n<div class=\"one-liner\">Know who\u2019s real on every video call<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">159<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Halo\u662f\u4e00\u6b3e\u5b9e\u65f6\u8fd0\u884c\u4e8e\u8bbe\u5907\u672c\u5730\u3001\u4e3aZoom\/Teams\/Google Meet\u7b49\u89c6\u9891\u4f1a\u8bae\u63d0\u4f9b\u6df1\u5ea6\u4f2a\u9020\u4eba\u8138\u68c0\u6d4b\u7684AI\u5b89\u5168\u5de5\u5177\uff0c\u5728\u901a\u8bdd\u8fdb\u884c\u4e2d\u5373\u65f6\u6807\u8bb0\u5408\u6210\u9762\u5b54\uff0c\u89e3\u51b3\u201c\u5c4f\u5e55\u5bf9\u9762\u7684\u4eba\u662f\u5426\u771f\u5b9e\u201d\u8fd9\u4e00\u5173\u952e\u4fe1\u4efb\u75db\u70b9\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/7aa34470-4cc6-459e-9fd9-844f1300aeb9.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/5909fc04-607a-458b-891b-7f340c76a7f0.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/080b3ecc-6d28-45b2-a56a-b43ea3b7eb5b.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/8c255665-a20e-46fb-9b30-9649a2b64cb8.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/9affa2f0-3819-459e-843e-01990545a6dc.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/_RQNI8UiG-8\"><source src=\"https:\/\/youtu.be\/_RQNI8UiG-8\" type=\"video\/mp4\"><\/video><\/p>\n<div class=\"video-overlay\">\n<div class=\"play-icon\">\u25b6<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Meetings<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span><br \/>\n            <span class=\"tag\">Security<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u6df1\u5ea6\u4f2a\u9020\u68c0\u6d4b<\/span><br \/>\n            <span class=\"tag\">\u89c6\u9891\u4f1a\u8bae\u5b89\u5168<\/span><br \/>\n            <span class=\"tag\">\u5b9e\u65f6AI\u9632\u62a4<\/span><br \/>\n            <span class=\"tag\">\u7aef\u4fa7\u63a8\u7406<\/span><br \/>\n            <span class=\"tag\">\u53cd\u6b3a\u8bc8<\/span><br \/>\n            <span class=\"tag\">\u8eab\u4efd\u9a8c\u8bc1<\/span><br \/>\n            <span class=\"tag\">\u91d1\u878d\u5b89\u5168<\/span><br \/>\n            <span class=\"tag\">\u9690\u79c1\u4fdd\u62a4<\/span><br \/>\n            <span class=\"tag\">\u4f01\u4e1a\u98ce\u63a7<\/span><br \/>\n            <span class=\"tag\">\u9632\u9a97\u5de5\u5177<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u9ad8\u5ea6\u8ba4\u53ef\u201c\u5b9e\u65f6\u68c0\u6d4b\u201d\u800c\u975e\u4e8b\u540e\u5206\u6790\u7684\u4ef7\u503c\uff0c\u79f0\u8d5e\u7aef\u4fa7\u90e8\u7f72\u5e26\u6765\u7684\u9690\u79c1\u4f18\u52bf\u3002\u6838\u5fc3\u8ffd\u95ee\u96c6\u4e2d\u5728\uff1a\u6280\u672f\u5b9e\u73b0\u8def\u5f84\uff08WGC\u6293\u53d6\u7a97\u53e3\uff09\u3001\u5bf9\u65b0\u751f\u6210\u6a21\u578b\u7684\u66f4\u65b0\u7b56\u7565\uff08agentic\u7cfb\u7edf+\u91cd\u8bad\u7ec3\uff09\u3001\u8bef\u62a5\u63a7\u5236\u673a\u5236\uff08\u753b\u8d28\u8fc7\u6ee4+\u7f6e\u4fe1\u5ea6\u9608\u503c\uff09\u3002\u6709\u6df1\u5ea6\u8bc4\u8bba\u6307\u51fa\u68c0\u6d4b\u751f\u6210\u7269\u662f\u201c\u6ce8\u5b9a\u5931\u8d25\u7684\u7ade\u8d5b\u201d\uff0c\u5efa\u8bae\u8f6c\u5411\u201c\u8ba4\u8bc1\u8eab\u4efd\u6bd4\u5bf9\u201d\u800c\u975e\u201c\u8bc6\u522b\u5408\u6210\u201d\uff1b\u53e6\u6709\u7528\u6237\u62c5\u5fe7\u4ea7\u54c1\u4f1a\u6539\u53d8\u7528\u6237\u8b66\u60d5\u884c\u4e3a\uff0c\u5bfc\u81f4\u5047\u9634\u6027\u4ee3\u4ef7\u66f4\u9ad8\uff0c\u5e76\u8d28\u7591\u5176\u80fd\u5426\u4f5c\u4e3a\u8d22\u52a1\u6d41\u7a0b\u7684\u53ef\u4f9d\u8d56\u63a7\u5236\u9879\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                Halo\u7684\u4ea7\u54c1\u53d9\u4e8b\u5f88\u806a\u660e\u2014\u2014\u7528\u4e00\u4e2a\u201c\u7535\u6c472500\u4e07\u7f8e\u5143\u201d\u7684\u6781\u7aef\u6848\u4f8b\u6fc0\u6d3b\u6050\u60e7\uff0c\u518d\u7528\u201c\u7eaf\u7aef\u4fa7\u3001\u5b9e\u65f6\u3001\u4e0d\u5f55\u97f3\u201d\u4e09\u91cd\u5356\u70b9\u5305\u88c5\u6280\u672f\u65b9\u6848\u3002\u4f46\u8fd9\u6070\u6070\u662f\u6700\u503c\u5f97\u8b66\u60d5\u7684\u5730\u65b9\uff1a\u5b83\u628a\u201c\u68c0\u6d4b\u5408\u6210\u201d\u5305\u88c5\u6210\u4e86\u201c\u9a8c\u8bc1\u771f\u5b9e\u201d\uff0c\u4e24\u8005\u4e4b\u95f4\u5b58\u5728\u672c\u8d28\u65ad\u5c42\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u8bc4\u8bba\u4e2d\u90a3\u4f4d\u533f\u540d\u7528\u6237\u7684\u8d28\u7591\u51fb\u4e2d\u8981\u5bb3\uff1a\u57fa\u4e8e\u751f\u6210\u7269\u7279\u5f81\u7684\u68c0\u6d4b\u5668\u662f\u5929\u7136\u8870\u51cf\u7684\u8d44\u4ea7\u3002\u751f\u6210\u7aef\uff08\u5982\u6269\u6563\u6a21\u578b\u3001GAN\u53d8\u4f53\uff09\u8fed\u4ee3\u901f\u5ea6\u4ee5\u5468\u8ba1\uff0c\u4e14\u65e0\u9700\u4efb\u4f55\u8bb8\u53ef\u5373\u53ef\u53d1\u5e03\uff1b\u800c\u7aef\u4fa7\u6a21\u578b\u53d7\u5236\u4e8e\u5e94\u7528\u5546\u5e97\u5ba1\u6838\u548c\u7528\u6237\u66f4\u65b0\u4e60\u60ef\uff0c\u4ec5\u9760\u201cweb\u722c\u866b+\u5b9a\u671f\u5fae\u8c03\u201d\u7684agentic\u7cfb\u7edf\u6839\u672c\u65e0\u6cd5\u5f25\u5408\u8fd9\u4e2a\u65f6\u95f4\u5dee\u3002\u4f60\u6c38\u8fdc\u5728\u8ffd\u7740\u5bf9\u624b\u7684\u4e0a\u4e00\u4ee3\u4ea7\u54c1\u8dd1\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u66f4\u6df1\u5c42\u7684\u95ee\u9898\u5728\u4e8e\u4ea7\u54c1\u5bf9\u7528\u6237\u884c\u4e3a\u7684\u53cd\u566c\u3002\u5f53\u7528\u6237\u4fe1\u8d56\u201c\u6ca1\u6709\u8b66\u544a=\u5b89\u5168\u201d\u65f6\uff0cHalo\u5b9e\u9645\u4e0a\u628a\u539f\u6709\u7684\u6000\u7591\u673a\u5236\u7ed9\u66ff\u4ee3\u6389\u4e86\u3002\u4e00\u6b21\u5047\u9634\u6027\uff08\u6f0f\u68c0\uff09\u5728\u90e8\u7f72\u540e\u7684\u7834\u574f\u529b\u8fdc\u5927\u4e8e\u90e8\u7f72\u524d\u2014\u2014\u56e0\u4e3a\u5c4f\u5e55\u4e0a\u7684\u7eff\u8272\u72b6\u6001\u672c\u8eab\u5c31\u662f\u4e00\u79cd\u793e\u4f1a\u5de5\u7a0b\u3002\u8bc4\u8bba\u8005\u7cbe\u51c6\u5730\u6307\u51fa\uff1a\u4ea7\u54c1\u5e94\u8be5\u6c38\u8fdc\u4e0d\u663e\u793a\u201c\u6b64\u4eba\u771f\u5b9e\u201d\uff0c\u53ea\u8f93\u51fa\u201c\u6709\u98ce\u9669\u201d\u6216\u201c\u4fe1\u606f\u4e0d\u8db3\u201d\uff0c\u4f46\u8fd9\u4f1a\u4e25\u91cd\u524a\u5f31\u5546\u4e1a\u4ef7\u503c\uff0c\u6240\u4ee5\u5382\u5546\u5927\u6982\u7387\u4e0d\u4f1a\u8fd9\u4e48\u505a\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u56e0\u6b64Halo\u7684\u771f\u5b9e\u5b9a\u4f4d\u4e0e\u5176\u8bf4\u662f\u201c\u5b89\u5168\u4ea7\u54c1\u201d\uff0c\u4e0d\u5982\u8bf4\u662f\u4e00\u79cd\u201c\u5fc3\u7406\u5b89\u6170\u5242\u201d\u3002\u5b83\u5728\u91d1\u878d\u98ce\u63a7\u6d41\u7a0b\u4e2d\u80fd\u63d0\u4f9b\u7684\u589e\u91cf\u4ef7\u503c\u6781\u4e3a\u6709\u9650\u2014\u2014\u6b63\u5982\u7528\u6237\u6240\u95ee\uff1a\u5f53\u4e00\u7b14\u8f6c\u8d26\u4ec5\u51ed\u89c6\u9891\u901a\u8bdd\u5c31\u80fd\u88ab\u6279\u51c6\uff0c\u6f0f\u6d1e\u6839\u672c\u4e0d\u5728\u89c6\u9891\uff0c\u800c\u5728\u6d41\u7a0b\u3002Halo\u8ba9\u8c03\u7528\u8005\u611f\u89c9\u5b89\u5168\uff0c\u5374\u6ca1\u6709\u89e3\u51b3\u6d41\u7a0b\u4e2d\u201c\u4e3a\u4f55\u89c6\u9891\u662f\u552f\u4e00\u4fe1\u4efb\u951a\u70b9\u201d\u7684\u95ee\u9898\u3002\u8fd9\u662f\u4ea7\u54c1\u7ecf\u7406\u7528\u6280\u672f\u7126\u8651\u5305\u88c5\u6d41\u7a0b\u7f3a\u9677\u7684\u5178\u578b\u6848\u4f8b\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u6700\u7ec8\u7ed3\u8bba\uff1aHalo\u662f\u4e00\u4e2a\u6f02\u4eae\u7684\u6280\u672fdemo\uff0c\u4e00\u4e2a\u4f18\u79c0\u7684\u516c\u5173\u53d9\u4e8b\uff0c\u4f46\u5b83\u79bb\u201c\u5b89\u5168\u57fa\u7840\u8bbe\u65bd\u201d\u8fd8\u5dee\u4e00\u4e2a\u627f\u8ba4\u2014\u2014\u627f\u8ba4\u81ea\u5df1\u65e0\u6cd5\u8bc1\u660e\u201c\u771f\u201d\uff0c\u53ea\u80fd\u8bd5\u63a2\u6027\u5730\u63d0\u793a\u201c\u5047\u201d\uff0c\u4e14\u8fd9\u4e2a\u201c\u5047\u201d\u7684\u8bc6\u522b\u80fd\u529b\u4f1a\u6301\u7eed\u8870\u51cf\u3002\u5b83\u771f\u6b63\u9002\u5408\u7684\u573a\u666f\uff0c\u662f\u4f4e\u98ce\u9669\u7684\u793e\u4ea4\u6216\u62db\u8058\u573a\u666f\u7684\u8f85\u52a9\u63d0\u793a\uff0c\u800c\u975e\u4efb\u4f55\u6d89\u53ca\u8d44\u91d1\u8f6c\u79fb\u7684\u9ad8\u98ce\u9669\u51b3\u7b56\u70b9\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">Halo by Scam AI<\/span>\n                <\/div>\n<div class=\"comment-content\">The person on your next video call might not be real. With Halo you don&#8217;t have to guess. Halo secures your Zoom, Teams, or Google Meet call live and flags synthetic faces the moment it detects one, entirely on your device. Deepfake video calls are already being used to scam people and businesses around the world, it&#8217;s just that most people have no way to tell. From confirming who you&#8217;re hiring to confirming who you&#8217;re wiring money to, Halo catches it before it costs you.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hi Product Hunt \ud83d\udc4b<\/p>\n<\/p>\n<p>I&#8217;m Neo, co-founder of Scam AI, and I&#8217;m excited to introduce Halo a real-time, on-device deepfake AI model for video meetings. It secures your Zoom, Teams, or Google Meet call live and flags synthetic faces the moment it detects one.<\/p>\n<\/p>\n<p>In 2024, a finance employee at Arup joined a video call with what looked like his CFO and several colleagues. Every face on that call was a deepfake. He wired $25 million before anyone realized.<\/p>\n<\/p>\n<p>We kept coming back to that story because almost everything built to catch deepfakes works after the fact: you upload a recording, wait, and get a report once the decision has already been made. Nothing was built to catch it while the call is still happening, when it actually matters.<\/p>\n<\/p>\n<p>What Halo does:<\/p>\n<ul>\n<li>\n<p>Secures Zoom, Teams, and Google Meet calls live<\/p>\n<\/li>\n<li>\n<p>Flags synthetic faces in real time, in real time<\/p>\n<\/li>\n<li>\n<p>Runs entirely on-device, no recordings, no cloud inference<\/p>\n<\/li>\n<li>\n<p>Built for the moments trust actually gets tested on video: confirming who you&#8217;re interviewing, confirming who you&#8217;re wiring money to<\/p>\n<\/li>\n<\/ul>\n<p>Halo is live now at <a href=\"http:\/\/scam.ai\/halo\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">scam.ai\/halo<\/a>. I&#8217;ll be here all day, happy to answer anything about how it works, and to help however I can!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>11<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@neo_tiangratanakul\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@neo_tiangratanakul<\/a>&nbsp;great stuff! Incredible and timely tool for stopping deepfakes and scams before they strike!!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@neo_tiangratanakul\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@neo_tiangratanakul<\/a>&nbsp;the real time catch is genuinely the right problem to attack, the Arup story only works as a warning if the detection happens during the call. the thing i&#8217;d push on is the on-device part specifically though: no cloud inference means the model shipped in the app is what you&#8217;re stuck with until the next app update, while the generators on the other side (the ones actually producing the deepfakes) get better continuously and don&#8217;t need anyone&#8217;s permission to ship. a cloud model can get retrained and pushed same day a new generation technique shows up. an on-device one is gated by your release cycle and by how fast users actually update the app. how are you thinking about that gap, is there some kind of lightweight signature\/model update channel separate from full app releases, or does &#8220;on-device&#8221; mean you&#8217;re accepting some lag against the newest generation methods as the tradeoff for the privacy story?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@neo_tiangratanakul\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@neo_tiangratanakul<\/a>&nbsp;Congratulations on the launch, Neo! \ud83d\ude80<\/p>\n<\/p>\n<p>What stood out to me most wasn&#8217;t the deepfake detection itself\u2014it was the decision to make Halo work during the call instead of after it. In security, timing is everything. A perfect report after the money has been wired isn&#8217;t nearly as valuable as a warning before someone clicks &#8220;Send.&#8221;<\/p>\n<\/p>\n<p>I also appreciate the on-device approach. When the purpose is to build trust, keeping sensitive conversations off the cloud feels like the right design choice.<\/p>\n<\/p>\n<p>I&#8217;m curious, as deepfakes become more realistic every month, do you see the future being purely AI detecting AI, or will we eventually need identity verification and cryptographic proof to truly know who&#8217;s on the other side of a call? Wishing you and the team an incredible launch! \ud83d\udd12\ud83d\ude80<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The part I&#8217;m proudest of: getting the detection to run <strong>live<\/strong> and <strong>fully on-device.<\/strong><\/p>\n<ul>\n<li>\n<p>Nothing about your meeting ever leaves your machine. <\/p>\n<\/li>\n<li>\n<p>Real-time was the non-negotiable constraint. A report that only lands after you&#8217;ve already wired the money isn&#8217;t detection, it&#8217;s an autopsy. <\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>3<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Does it hook into the system audio\/video pipeline via virtual camera, or is it reading the display buffer directly? congrats for shipping \ud83d\ude4c<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>2<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>Thanks Vikram \ud83d\ude4c It&#8217;s neither, actually we use WGC to grab the rendered meeting window directly. That way our model sees and takes in the same screen the user is seeing!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Congrats guys!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>2<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>Thanks so much Teagan!!! <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Already used the plugin for a few meetings already and seems to working well. Looking forward to seeing enhancements from this. \ud83d\udd25<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Congrats on the launch, Neo!<\/p>\n<\/p>\n<p>I have 2 questions:<\/p>\n<\/p>\n<p>How does Halo detect new deepfake models it hasn\u2019t seen before? And my second question: how do you avoid false alarms during calls?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>Thanks Aleksandar!<\/p>\n<\/p>\n<p>Halo is generalizable to do alright against new deepfake methods but to make sure it keeps up to date we have an agentic system that constantly scrapes the web for new deepfake methods, collects data, and fine tunes our model towards these new deepfakes.<\/p>\n<\/p>\n<p>For your second question: Halo runs a quality check on the input itself before it ever makes a call. Bad lighting, shaky footage, heavy compression, or a face too far from the camera can introduce noise, so we filter that out first. On top of that, if the model&#8217;s ever on the fence and not fully confident, it pulls in more signals before deciding, so we don&#8217;t throw false alarms during calls!<\/p>\n<\/p>\n<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@byalexai\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@byalexai<\/a>&nbsp;Aleksandar has asked the question the whole category rests on, and I think the honest answer is an uncomfortable one.<\/p>\n<\/p>\n<p>Detecting whether something was generated is a losing race by construction. You train on the generators that exist, a new one ships, and the detector degrades quietly. Nobody gets a notification on the day it stops working.<\/p>\n<\/p>\n<p>The version that does not decay is a different question altogether. Not is this synthetic, but is this the same person as the reference I already trust. Verification against an enrolled identity does not require recognising the generator at all, so a new model does not break it.<\/p>\n<\/p>\n<p>Neo, which of those two is Halo actually doing underneath? The answer decides whether this needs retraining every time something new comes out, or whether it holds.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">How often does something like this happen?<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>Around 1 in 7 digitial onboarding fraud attempts involve deepfakes and there has been a 16x increase in deepfake attacks in the last 2 years. From our enterprise customers we&#8217;re seeing these same statistics parroted. I think we&#8217;re lucky that right now it isn&#8217;t too wide spread but we believe this to be more common place in the next year. Which is why we built Halo to get ahead of the game!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Really exciting launch\u2014congrats on Halo by Scam AI! Love seeing practical tools like this reach more people. \ud83d\ude80<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>\ud83d\ude80\ud83d\ude80\ud83d\ude80<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>I appreciate products that reduce anxiety around everyday internet use. I\u2019d definitely use this before opening unfamiliar links or payment requests<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>Thanks so much for the support!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Congrats on the launch, Neo! The &#8220;catch it during the call&#8221; angle is what really sets Halo apart \u2014 most deepfake tools I&#8217;ve seen assume you already have a recording to analyze after the fact, which is basically useless mid wire-transfer conversation.<\/p>\n<\/p>\n<p>One question: since Halo runs entirely on-device, how does it actually hook into the meeting client? Virtual camera, native SDK integration, or a browser extension for Meet? Curious how the coverage differs across Zoom desktop vs. Meet in the browser.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>Thanks Rohit and I totally agree, after-the-fact detection doesn&#8217;t help much for situations like a wire transfer. Hence why we&#8217;re so proud to have made a product like Halo!<\/p>\n<\/p>\n<p>Halo actually uses WGC to see the rendered meeting window directly, the same way whether it&#8217;s Zoom desktop or Meet in a browser tab. Which allows us to cover every video conferencing app and browser!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Remember how some guys created a tool that creates AI live video chats. It seems that when you create one solution, you need to create another &#8220;anti-solution&#8221;. <\/p>\n<p>Do you already have your user base? <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>Thanks so much! Honestly, this &#8220;anti-solution&#8221; space has always been super inspiring to us, there&#8217;s something exciting about getting to keep building things that protect people as fast as this space moves. Though we see some legitimate use for AI video generation, we also see how much harm it can cause when it&#8217;s used maliciously. But honestly, stopping bad actors from abusing AI is a big reason why we started this journey in the first place!<\/p>\n<\/p>\n<p>As for user base: we&#8217;ve actually already got some enterprise customers using our detection tech, and Halo is really us expanding that out to the consumer side now \ud83d\ude42<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The Arup case is exactly the story that makes the case for this on its own. Curious about the failure mode in the other direction though, what happens when it flags a real person as synthetic because of bad lighting or a compressed webcam feed mid call. Does it surface a warning you can dismiss, or does it interrupt the call, since getting that wrong costs you a real relationship, not just a false sense of security.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>Really good question! Honestly one we thought about a lot. We made it so that Halo checks the quality of what it&#8217;s seeing: bad lighting, shaky video, heavy compression, or if a face is too far away from the camera. If the conditions are bad it gather more data or waits for the lighting or image size to get better later in the call, and only makes a decision once it actually has good enough data to be confident. So a bad frame on its own isn&#8217;t going to set off a false alarm. Since, just like you said, getting that wrong costs a real relationship.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@raffay_sajjad\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@raffay_sajjad<\/a>&nbsp;The failure direction Raffay raised has a second-order version that worries me more.<\/p>\n<\/p>\n<p>A detector people trust changes their behaviour. Before Halo, that Arup employee at least had the option of being suspicious. After Halo, no warning reads as an endorsement, and the natural response to a clear screen is to scrutinise less. So a false negative after deployment costs more than the same miss would have cost before the product existed.<\/p>\n<\/p>\n<p>Which argues for never showing a positive verdict. Flag, or say not enough signal. Never say this person is real, because that is the sentence somebody eventually wires money on.<\/p>\n<\/p>\n<p>And the uncomfortable half: the Arup money moved because a wire got approved on the strength of a video call. That is a process gap. Halo makes the call safer without touching the reason the call was load bearing in the first place.<\/p>\n<\/p>\n<p>So do you position it as a control finance can rely on, or as one signal that still requires an out of band confirmation?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Congrats lads<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>Thanks so much! Really appreciate you taking the time to check it out!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>4<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Incredible launch, congratulations! What use case have you seen being the most valuable so far and which is the use case that people underestimate most?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#7<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/ZLRBFHIWGLSVEO\" class=\"app-title\">witr<\/a><\/p>\n<div class=\"one-liner\">Why is this running? Trace process, port, container or file<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">143<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>witr \u662f\u4e00\u6b3e\u7528\u4e8e\u56de\u7b54\u201c\u8fdb\u7a0b\u4e3a\u4ec0\u4e48\u5728\u8fd0\u884c\u201d\u7684\u6839\u56e0\u8ffd\u6eaf\u5de5\u5177\uff0c\u901a\u8fc7\u6cbf\u7740\u8fdb\u7a0b\u3001\u7aef\u53e3\u3001\u5bb9\u5668\u6216\u6587\u4ef6\u7684\u7236\u5b50\u5173\u7cfb\u94fe\uff0c\u5b9a\u4f4d\u5230 systemd\u3001cron\u3001shell \u7b49\u771f\u6b63\u7684\u542f\u52a8\u6e90\u5934\uff0c\u89e3\u51b3\u8fd0\u7ef4\u548c\u5f00\u53d1\u4e2d\u201c\u77e5\u5176\u7136\u4e0d\u77e5\u5176\u6240\u4ee5\u7136\u201d\u7684\u6392\u67e5\u75db\u70b9\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/74f4eebb-dcb8-4599-a839-178aa12961e6.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=gfskSUqILr0\"><source src=\"https:\/\/www.youtube.com\/watch?v=gfskSUqILr0\" type=\"video\/mp4\"><\/video><\/p>\n<div class=\"video-overlay\">\n<div class=\"play-icon\">\u25b6<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/193a034f-329e-47e7-b54f-2d39e8b193c2.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/e700708c-a7ee-444d-b90f-b2f07aef2397.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/58c3fe9a-272f-4c59-8e62-e69d902ffdbe.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/4a423076-19f0-47ed-9495-ddc37495b66f.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/9d333adf-91ad-475b-894f-632662ec60c9.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Linux<\/span><br \/>\n            <span class=\"tag\">Open Source<\/span><br \/>\n            <span class=\"tag\">Developer Tools<\/span><br \/>\n            <span class=\"tag\">GitHub<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u8fdb\u7a0b\u6eaf\u6e90<\/span><br \/>\n            <span class=\"tag\">\u6839\u56e0\u5206\u6790<\/span><br \/>\n            <span class=\"tag\">\u7cfb\u7edf\u76d1\u63a7<\/span><br \/>\n            <span class=\"tag\">\u547d\u4ee4\u884c\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">TUI<\/span><br \/>\n            <span class=\"tag\">\u5bb9\u5668\u8c03\u8bd5<\/span><br \/>\n            <span class=\"tag\">\u7aef\u53e3\u6392\u67e5<\/span><br \/>\n            <span class=\"tag\">\u6587\u4ef6\u9501\u8bca\u65ad<\/span><br \/>\n            <span class=\"tag\">\u8de8\u5e73\u53f0\u8fd0\u7ef4<\/span><br \/>\n            <span class=\"tag\">\u5f00\u53d1\u8c03\u8bd5<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u666e\u904d\u8ba4\u53ef\u5176\u89e3\u51b3\u5b9e\u9645\u75db\u70b9\u7684\u80fd\u529b\uff0c\u4f46\u6838\u5fc3\u8d28\u7591\u96c6\u4e2d\u5728\u201c\u4e0d\u786e\u5b9a\u6027\u7684\u8bda\u5b9e\u5c55\u793a\u201d\u4e0a\u3002\u591a\u6570\u6709\u6548\u8bc4\u8bba\u8ffd\u95ee\u4e86\u5b64\u513f\u8fdb\u7a0b\u3001PID\u590d\u7528\u3001WSL2\u65e0systemd\u3001\u5bb9\u5668\u7a7f\u900f\u5230\u5bbf\u4e3b\u7b49\u8fb9\u754c\u573a\u666f\u7684\u51c6\u786e\u6027\u3002\u5f00\u53d1\u8005\u54cd\u5e94\u8fc5\u901f\uff0c\u627f\u8ba4\u90e8\u5206\u7f3a\u9677\u5e76\u5217\u51fa\u6539\u8fdb\u8ba1\u5212\uff0c\u4f46\u4e5f\u66b4\u9732\u4e86\u5f53\u524d\u7248\u672c\u5728\u5b64\u513f\u8fdb\u7a0b\u6eaf\u6e90\u4e0a\u4ecd\u53ef\u80fd\u8bef\u62a5\u7684\u786c\u4f24\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                witr \u5728\u201c\u8fdb\u7a0b\u5728\u8dd1\u4ec0\u4e48\u201d\u8fd9\u4e2a\u62e5\u6324\u7684\u8d5b\u9053\u91cc\uff0c\u5de7\u5999\u5730\u5207\u5165\u4e86\u201c\u4e3a\u4ec0\u4e48\u5728\u8dd1\u201d\u8fd9\u4e2a\u66f4\u6df1\u3001\u4e5f\u66f4\u96be\u56de\u7b54\u7684\u7ec6\u5206\u9886\u57df\u3002\u5b83\u7528\u9759\u6001\u4e8c\u8fdb\u5236\u548c\u8de8\u5e73\u53f0\u652f\u6301\u964d\u4f4e\u4e86\u4e0a\u624b\u95e8\u69db\uff0c\u7528 TUI \u548c JSON \u8f93\u51fa\u8986\u76d6\u4e86\u4ea4\u4e92\u4e0e\u811a\u672c\u4e24\u79cd\u573a\u666f\uff0c\u4ea7\u54c1\u601d\u8def\u76f8\u5f53\u6e05\u6670\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u5b83\u7684\u81f4\u547d\u5f31\u70b9\u5728\u4e8e\uff1a**\u5b83\u56de\u7b54\u7684\u662f\u201c\u542f\u52a8\u94fe\u201d\uff0c\u800c\u4e0d\u662f\u771f\u6b63\u7684\u201c\u5b58\u5728\u7406\u7531\u201d**\u3002\u6b63\u5982\u8bc4\u8bba\u4e2d\u6240\u6307\u51fa\u7684\uff0c\u77e5\u9053\u201csystemd \u542f\u52a8\u4e86\u5b83\u201d\u4e0d\u7b49\u4e8e\u77e5\u9053\u201c\u4e3a\u4ec0\u4e48\u5b83\u5e94\u8be5\u7ee7\u7eed\u8fd0\u884c\u201d\u3002\u5f53\u4e00\u4e2a\u8fdb\u7a0b\u88ab init \u6536\u517b\u6216parent \u6d88\u4ea1\u540e\uff0cwitr \u76ee\u524d\u7684\u5904\u7406\u903b\u8f91\uff08\u9ed8\u8ba4\u5f52\u56e0\u5230 PID 1 \u6216 shell\uff09\u4f1a\u7ed9\u51fa\u4e00\u4e2a\u770b\u4f3c\u5408\u7406\u5b9e\u5219\u9519\u8bef\u7684\u7ed3\u8bba\u2014\u2014\u8fd9\u6070\u6070\u662f\u5de5\u5177\u7c7b\u4ea7\u54c1\u6700\u5371\u9669\u7684\u5931\u6548\u6a21\u5f0f\uff1a\u7528\u6237\u57fa\u4e8e\u9519\u8bef\u7684\u7b54\u6848\u505a\u51fa\u9519\u8bef\u7684\u751f\u4ea7\u64cd\u4f5c\u3002\u867d\u7136\u4f5c\u8005\u5df2\u9488\u5bf9\u90e8\u5206\u573a\u666f\u63d0\u51fa\u4fee\u590d\u8ba1\u5212\uff0c\u4f46\u8fd9\u66b4\u9732\u4e86\u6838\u5fc3\u7b97\u6cd5\u5728\u5e94\u5bf9\u771f\u5b9e\u4e16\u754c\u590d\u6742\u6027\u65f6\u7684\u8106\u5f31\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u53e6\u4e00\u4e2a\u503c\u5f97\u6df1\u601d\u7684\u662f\u5546\u4e1a\u4ef7\u503c\uff1a\u8fd9\u662f\u4e00\u4e2a\u5178\u578b\u7684\u201c\u8c03\u8bd5\u65f6\u7528\u4e00\u4e0b\u201d\u7684\u5de5\u5177\uff0c\u800c\u975e\u201c\u6301\u7eed\u76d1\u63a7\u201d\u7684\u5de5\u5177\u3002\u5b83\u80fd\u5426\u6c89\u6dc0\u4e3a\u7528\u6237\u65e5\u5e38\u8fd0\u7ef4\u6d41\u6c34\u7ebf\u7684\u4e00\u90e8\u5206\uff0c\u53d6\u51b3\u4e8e `&#8211;json` \u6a21\u5f0f\u80fd\u5426\u4e0e\u76d1\u63a7\u544a\u8b66\u7cfb\u7edf\u6df1\u5ea6\u96c6\u6210\uff0c\u4ee5\u53ca\u5b83\u80fd\u5426\u5728\u201c\u5b64\u513f\u8fdb\u7a0b\u8bc6\u522b\u201d\u201c\u9501\u7ade\u4e89\u5206\u6790\u201d\u7b49\u7eb5\u6df1\u573a\u666f\u505a\u5230\u65e0\u53ef\u66ff\u4ee3\u3002\u76ee\u524d\u770b\uff0c\u5b83\u66f4\u50cf\u4e00\u628a\u7cbe\u5fc3\u6253\u78e8\u7684\u745e\u58eb\u519b\u5200\uff0c\u800c\u4e0d\u662f\u5bfc\u5f39\u53d1\u5c04\u4e95\u91cc\u7684\u5f00\u5173\u2014\u2014\u597d\u7528\uff0c\u4f46\u5c1a\u672a\u6210\u4e3a\u5fc5\u9700\u54c1\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u771f\u6b63\u7684\u62a4\u57ce\u6cb3\u4e0d\u5728\u529f\u80fd\u5806\u780c\uff0c\u800c\u5728\u4e8e**\u5bf9\u201c\u4e0d\u786e\u5b9a\u6027\u201d\u7684\u8bda\u5b9e\u58f0\u660e**\u3002\u5982\u679c witr \u80fd\u5728\u6240\u6709\u65e0\u6cd5\u786e\u8ba4\u7684\u573a\u666f\u4e0b\uff0c\u660e\u786e\u8f93\u51fa\u201c\u6b64\u5904\u4e3a\u63a8\u65ad\uff0c\u8bc1\u636e\u5982\u4e0b\u201d\u5e76\u9644\u5e26\u539f\u59cb\u6570\u636e\uff0c\u5b83\u5c31\u80fd\u5efa\u7acb\u8fdc\u8d85\u7ade\u54c1\u7684\u4fe1\u4efb\u5ea6\u3002\u5426\u5219\uff0c\u5b83\u53ea\u662f\u53e6\u4e00\u4e2a\u201c\u5076\u5c14\u597d\u7528\uff0c\u4f46\u4e0d\u6562\u5168\u4fe1\u201d\u7684\u8c03\u8bd5\u5229\u5668\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">witr<\/span>\n                <\/div>\n<div class=\"comment-content\">ps, top and lsof tell you what is running. witr tells you why. Point it at a process, PID, port, container or file and it traces the chain that explains it &#8211; systemd, supervisor, shell or cron &#8211; plus who started it, when, from where, and the warnings worth knowing. Run it bare for an interactive TUI with Processes, Ports, Containers and Locks tabs. Or script it: &#8211;short for a one-line chain, &#8211;json with real exit codes. One static Go binary for Linux, macOS, Windows and BSD.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The thing that&#8217;ll decide whether I keep it is what it prints when the chain dead ends. A process reparented to init after its parent died, or something started inside a container runtime that hides the real caller, and the honest output there is that it can&#8217;t tell you. Tools like this get uninstalled the moment they guess once and someone acts on the guess. The &#8211;json exit codes are the right instinct, so give the unknown case its own code instead of folding it into success.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>3<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@asadmalik901\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@asadmalik901<\/a>&nbsp;Thanks for the detailed use case. Two things here, since witr treats them differently. Zombies are handled, a defunct process shows a [zombie] marker and a warning. But a live process that lost its parent isn&#8217;t correctly handled. It prints shell as source which is inaccurate. I&#8217;ve filed a bug in the repo to handle this correctly. Thanks again.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hey Product Hunt!<\/p>\n<p>I built witr out of a recurring annoyance: you find something running &#8211; a process eating CPU, a port that&#8217;s already bound, a container you don&#8217;t remember starting &#8211; and every tool tells you what it is, but nothing tells you why it&#8217;s there.<\/p>\n<p>ps, top, lsof and systemctl all answer &#8220;what&#8221;. witr answers &#8220;why&#8221;. Give it a name, PID, port, container or file and it walks the ancestry chain back to whatever is actually responsible &#8211; a systemd unit, a supervisor, a cron job, a shell session, a container runtime &#8211; and shows who started it, when, from where, and anything worth knowing (running as root, bound to 0.0.0.0, deleted binary, LD_PRELOAD set, restarting in a loop).<\/p>\n<p>Run it with no arguments and you get an interactive TUI with Processes, Ports, Containers and Locks tabs, live search and an ancestry side panel. Or script it: &#8211;short gives a one-line chain and &#8211;json comes with meaningful exit codes.<\/p>\n<p>It&#8217;s a single static Go binary, Apache-2.0, running on Linux, macOS, Windows and FreeBSD. Every operation is read-only, so it&#8217;s safe to point at production.<\/p>\n<p>If you&#8217;d rather try before installing, there&#8217;s a browser playground with a guided tutorial: <a href=\"https:\/\/pranshuparmar.github.io\/witr\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/pranshuparmar.github.io\/&#8230;<\/a><\/p>\n<p>Would love feedback.<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>2<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>witr looks fantastic. Huge congrats on shipping, and best of luck with the launch! \ud83d\ude80<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@leon_ostrez\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@leon_ostrez<\/a>&nbsp;Thank you! Really appreciate the kind words and support. Hope you enjoy using it.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>How deep does it trace &#8211; down to which file handle or socket a process holds? That&#8217;s usually the part I&#8217;m actually hunting for.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@kritishpuri\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kritishpuri<\/a>&nbsp;Yes, it goes down to individual sockets and file descriptors (in &#8211;verbose mode). Sample output section:<\/p>\n<pre><code>\n  Sockets     : 127.0.0.1:6010 (TCP | LISTENING)\n                127.0.0.1:22008 (TCP | ESTABLISHED)\n  Open Files  : 9 of 10240 (0%)\n  File Descriptors: 9\/10240\n    0 -&gt; \/dev\/pts\/2 (deleted)\n    3 -&gt; pipe:[23241]\n    4 -&gt; socket:[26671]\n    5 -&gt; \/dev\/ptmx<\/code><\/pre>\n<\/p>\n<p>It also works in reverse, which sounds closer to what you&#8217;re actually hunting. &#8211;file finds which process is holding a file and gives you its full ancestry chain, and &#8211;port does the same for a socket. The TUI has a locks and ports tab for browsing interactively.<\/p>\n<\/p>\n<p>Thanks for the question, and I hope you try it out.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>ps and lsof telling me what but never why is a decent chunk of my debugging life. Two questions. Does the Containers tab pick up things Docker Desktop started, and does it do anything sensible under WSL2 where there&#8217;s no systemd to trace back to? That&#8217;s usually where I lose the thread.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@dalemooney\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dalemooney<\/a>&nbsp;@dale_mooney Real results from Windows + WSL2 with Docker Desktop running.<\/p>\n<\/p>\n<p>Docker Desktop containers are picked up. Container detection goes through the Docker API rather than the local process table, so it works even though Docker Desktop runs containers in its own VM where those PIDs don&#8217;t exist in your distro at all:<\/p>\n<pre><code>  Container   : witr-dd-test (id d0a9b15ffb6f)\n  Image       : alpine\n  Why It Exists :\n    docker \u2192 witr-dd-test\n  Source      : docker\n  Note        : The owning process is not visible in this environment.<\/code><\/pre>\n<p>That last line is deliberate. When the processes live in the Docker Desktop VM it tells you, rather than inventing a chain.<\/p>\n<\/p>\n<p>On systemd, I ran it inside the docker-desktop distro, which has no systemd at all and PID 1 is init, and it resolved the source from the cgroup:<\/p>\n<pre><code>  Container   : docker (d0a9b15ffb6f)\n  Source      : docker (container)\n  Why It Exists :\n    init (pid 1) \u2192 SessionLeader (pid 8) \u2192 Relay (pid 10) \u2192 wsl-bootstrap (pid 12)\n      \u2192 unshare (pid 42) \u2192 init (pid 43) \u2192 containerd-shim-runc-v2 (pid 2657) \u2192 sleep (pid 2680)<\/code><\/pre>\n<\/p>\n<p>Thanks for the question, and I hope you try it out.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">How do you handle cases where a process has been re-parented, daemonized, or launched through several abstraction layers? I\u2019m curious how WITR communicates uncertainty when it can reconstruct only part of the original startup chain.<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@mrbrjan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@mrbrjan<\/a>&nbsp;A daemon reparented to PID 1 still resolves correctly, because the owning unit is read from the process cgroup rather than the parent walk:<\/p>\n<pre><code>  Service     : cron.service\n  Why It Exists :\n    systemd (pid 1) \u2192 cron (pid 11300)\n  Source      : cron.service (systemd)\n  Unit File   : \/usr\/lib\/systemd\/system\/cron.service<\/code><\/pre>\n<p>The chain there is degraded to systemd \u2192 cron, but the real cause is still recovered. Containers work the same way, the cgroup identifies it through the runtime layers.<\/p>\n<\/p>\n<p>Where it falls down is when a bare orphan with no supervisor behind it. Then it walks ppid, lands on PID 1, and reports whatever is sitting there as the source, which is inaccurate. The issue to handle this exists.<\/p>\n<\/p>\n<p>Thank you for your comment and hope you personally try out witr.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>the single static Go binary shipping for linux, mac, windows and bsd with no runtime dependencies is the kind of boring, disciplined execution that makes a tool actually pleasant to drop on any box<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@phardinghy4670\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@phardinghy4670<\/a>&nbsp;Thank you for the awesome comment. Hope you try it out and like it.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>This solves something I&#8217;ve dealt with too many times chaining lsof, ps, and systemctl manually just to trace who actually started a process. The ancestry chain approach (systemd \u2192 supervisor \u2192 cron \u2192 shell) is exactly the missing piece.<\/p>\n<p>for containers, does it trace through to the host-level process, or stop at &#8220;docker started this&#8221;?<\/p>\n<p>Trying the playground now. Nice work.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@talha_ramzan3\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@talha_ramzan3<\/a>&nbsp;Thank you for your appreciation and trying out playgound. To answer your question, it traces through to the host. Example output pointed at a containerized process from the host:<\/p>\n<\/p>\n<pre><code>  Container   : docker: witr-hosttest\n  Why It Exists :\n    systemd (pid 1) \u2192 containerd-shim-runc-v2 (pid 49883) \u2192 sleep (pid 49904)\n  Source      : containerd (container)<\/code><\/pre>\n<\/p>\n<p>So you get the real host-side chain through the shim, plus the container name resolved rather than just an ID.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@talha_ramzan3\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@talha_ramzan3<\/a>&nbsp;The manual chain has one property worth not losing on the way to a single answer.<\/p>\n<\/p>\n<p>When you run lsof then ps then systemctl yourself, you see the raw evidence at every hop, so you can tell when a step is lying to you. A synthesised &#8220;why&#8221; is faster and quietly takes that away.<\/p>\n<\/p>\n<p>Which is why I would want the evidence behind the chain available on demand, not just the conclusion. Same output, plus what it read to get there.<\/p>\n<\/p>\n<p>You save the four commands. You keep the ability to notice when the answer is wrong.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The PID reuse case is the one I&#8217;d want to understand. Linux recycles PIDs pretty fast under load, so if I point witr at a PID that already exited and got reused by something unrelated, does it know the two are different processes, or could it walk an ancestry chain that&#8217;s actually stitched together from two different processes that happened to share a number?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@raffay_sajjad\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@raffay_sajjad<\/a>&nbsp;All the actions in TUI are properly guarded, it compares process start time before a kill or renice, so a signal can&#8217;t land on a recycled PID. The ancestry walk could be improved here, it walks ppid with loop protection but no start-time validation. So the risk does exists for the parent PID. I&#8217;ve filed an issue to handle this appropriately, and thank you for your comment.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Filing Asad&#8217;s bug within hours of him raising it says more about where this tool will be in a year than the feature list does.<\/p>\n<\/p>\n<p>One push on the product itself. The chain answers what started it. It does not answer why, and you have named the tool after the harder claim.<\/p>\n<\/p>\n<p>systemd started it because a unit file says so. The real why is whether anyone still wants it running, and that lives outside the box entirely.<\/p>\n<\/p>\n<p>So the output I would value most is the inverse of ancestry. This is running, and nothing on this machine explains why it still should be. Started from a shell session that ended months ago. Unit enabled by someone who has left. Container from a compose file that is no longer in the repo.<\/p>\n<\/p>\n<p>That is the thing I actually go hunting for at 2am, and nothing tells me.<\/p>\n<\/p>\n<p>Is orphan detection something the ancestry data you already collect could support?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@rabnoor_s\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rabnoor_s<\/a>&nbsp;Thank you for the kind words and a very fair challenge.<\/p>\n<\/p>\n<p>The name came from frustration rather than a claim. The moment it&#8217;s built for is &#8220;why the hell is this port occupied&#8221;, &#8220;why is this even running&#8221;, and the ancestry chain happened to answer that version of why well enough that the two blended and thus I gave this name.<\/p>\n<\/p>\n<p>To answer your other questions, today witr stops at the chain. I made an orphan to check, and it just reports Source: process_api (init) with no warning. But the data to do better is largely already collected: session id and tty sit in the \/proc\/&lt;pid&gt;\/stat slice I parse and currently skip, so checking whether the session leader still exists would give you the dead-shell case directly. systemd may need additional logic, I&#8217;ll investigate more on this and file issue to enhance the logic. <\/p>\n<\/p>\n<p>Thanks again for in-depth technical challenge.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The Locks tab caught my eye. Does it cover advisory file locks (flock\/fcntl) alongside mandatory ones, or is it scoped to one type? I work with Node.js processes sharing a SQLite file across workers, and the symptoms are usually slow queries rather than visible contention. Knowing whether witr can show which worker holds a read vs write lock on a specific file path would be the thing that saves me reaching for strace.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@hi_i_am_mimo\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@hi_i_am_mimo<\/a>&nbsp;Thanks, good question. I tested this on your exact setup before answering.<\/p>\n<p>Advisory, both kinds. On Linux the Locks tab reads \/proc\/locks, so fcntl\/POSIX byte-range locks and BSD flock locks both appear, and the Type column tells them apart. No separate mandatory category. witr shows locks that are held, not workers blocked waiting.<\/p>\n<p>Read vs write per worker: yes. Two Node workers on one SQLite file, one in a read txn, one in a write txn:<\/p>\n<pre><code>PID      Process    Type      Mode      Path\n 8964     node       POSIX     READ      ...\/app.db\n 8972     node       POSIX     WRITE     ...\/app.db<\/code><\/pre>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#8<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/UOQ6NKO24LGK4K\" class=\"app-title\">Customer.io Summer Release<\/a><\/p>\n<div class=\"one-liner\">New ways to reach customers in the moments that matter<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">138<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Customer.io\u590f\u5b63\u53d1\u5e03\u7248\u662f\u4e00\u4e2a\u96c6\u5730\u7406\u56f4\u680f\u3001\u9501\u5c4f\u5b9e\u65f6\u901a\u77e5\u3001\u81ea\u5e26SMS\u4f9b\u5e94\u5546\u3001\u901a\u77e5\u6536\u4ef6\u7bb1\u7b49\u80fd\u529b\u4e8e\u4e00\u4f53\u7684\u5ba2\u6237\u4e92\u52a8\u5e73\u53f0\uff0c\u89e3\u51b3\u54c1\u724c\u5728\u7528\u6237\u5173\u952e\u89e6\u70b9\uff08\u5982\u8fdb\u5e97\u3001\u9501\u5c4f\u3001\u8de8\u6e20\u9053\uff09\u4e0a\u201c\u627e\u5230\u4eba\u4f46\u6293\u4e0d\u4f4f\u65f6\u673a\u201d\u7684\u7cbe\u51c6\u89e6\u8fbe\u75db\u70b9\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/a8ceb24d-2529-491e-a248-02419dfa6269.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/a4e7a87f-9675-4aa5-a422-8650fa974f7d.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/ce2667a3-3de9-4636-8305-e970f99d978c.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/9715e5d9-b0dd-4e92-8522-dde84e73b7be.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/9e1d334d-4a15-4bae-8768-4af304eb784c.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/70a50863-9afb-49a7-ba39-cd8f3e8ab00a.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/5df1881f-d894-4c2f-8e8d-0baf75e38c0a.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/X7eQfVznhb0?si=PPj8qW4HNhUQyB1J\"><source src=\"https:\/\/youtu.be\/X7eQfVznhb0?si=PPj8qW4HNhUQyB1J\" type=\"video\/mp4\"><\/video><\/p>\n<div class=\"video-overlay\">\n<div class=\"play-icon\">\u25b6<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Email<\/span><br \/>\n            <span class=\"tag\">Email Marketing<\/span><br \/>\n            <span class=\"tag\">Marketing<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u5ba2\u6237\u4e92\u52a8\u5e73\u53f0<\/span><br \/>\n            <span class=\"tag\">\u8425\u9500\u81ea\u52a8\u5316<\/span><br \/>\n            <span class=\"tag\">\u5b9e\u65f6\u89e6\u8fbe<\/span><br \/>\n            <span class=\"tag\">\u5730\u7406\u56f4\u680f<\/span><br \/>\n            <span class=\"tag\">\u63a8\u9001\u901a\u77e5<\/span><br \/>\n            <span class=\"tag\">SMS\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">AI\u8f85\u52a9<\/span><br \/>\n            <span class=\"tag\">\u8de8\u6e20\u9053\u8425\u9500<\/span><br \/>\n            <span class=\"tag\">\u901a\u77e5\u6536\u4ef6\u7bb1<\/span><br \/>\n            <span class=\"tag\">WhatsApp\u7ba1\u7406<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u8bc4\u8bba\u805a\u7126\u4e24\u70b9\uff1a\u4e00\u662f\u5bf9AI\u5185\u7f6e\u4e8ecampaign builder\u800c\u975e\u9644\u5c5e\u529f\u80fd\u8868\u793a\u8ba4\u53ef\uff0c\u8ba4\u4e3a\u5176\u51cf\u8f7b\u4e86\u5206\u7fa4\u548c\u5efa\u6d41\u91cf\u7684\u91cd\u590d\u52b3\u52a8\uff1b\u4e8c\u662f\u521b\u59cb\u4ebaJeff\u4e3b\u52a8\u5f81\u96c6\u201c\u6700\u671f\u5f85\u529f\u80fd\u201d\u53ca\u201c\u79fb\u52a8\u7aef\u4f7f\u7528\u573a\u666f\u201d\uff0c\u8bc4\u8bba\u533a\u6682\u672a\u51fa\u73b0\u5177\u4f53\u6279\u8bc4\u6216\u529f\u80fd\u7f3a\u5931\u53cd\u9988\uff0c\u6709\u6548\u4fe1\u606f\u504f\u5c11\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                Customer.io\u8fd9\u8f6e\u53d1\u5e03\u672c\u8d28\u4e0a\u662f\u4e00\u6b21\u201c\u5b58\u91cf\u529f\u80fd\u5927\u8865\u8bfe\u201d\u2014\u2014\u5730\u7406\u56f4\u680f\u3001Live Activities\u3001\u81ea\u5e26SMS\u4f9b\u5e94\u5546\u3001\u901a\u77e5\u6536\u4ef6\u7bb1\uff0c\u8fd9\u4e9b\u80fd\u529b\u5728Braze\u3001OneSignal\u4e43\u81f3Firebase Cloud Messaging\u4e0a\u5df2\u4e0d\u7b97\u65b0\u9c9c\u3002\u5176\u771f\u6b63\u7684\u62a4\u57ce\u6cb3\u4e0d\u662f\u67d0\u4e2a\u5355\u70b9\u529f\u80fd\uff0c\u800c\u662f\u201c\u628a\u8fd9\u4e9b\u4e1c\u897f\u585e\u8fdb\u539f\u6709\u81ea\u52a8\u5316\u7f16\u8f91\u5668\u3001\u53d7\u4f17\u5206\u7fa4\u548c\u7edf\u4e00\u6570\u636e\u6a21\u578b\u91cc\u201d\u7684\u96c6\u6210\u6210\u672c\u3002\u4ece\u521b\u59cb\u4ebaJeff\u7684\u53d1\u8a00\u770b\uff0c\u4ea7\u54c1\u53d9\u4e8b\u4ece\u201c\u90ae\u4ef6\u5e73\u53f0\u201d\u8f6c\u5411\u201c\u5168\u6e20\u9053\u4e92\u52a8\u4e2d\u67a2\u201d\uff0c\u4f46\u95ee\u9898\u662f\uff1a\u5f53\u6838\u5fc3\u5dee\u5f02\u5316\u6765\u81ea\u201cAll-in-one\u201d\u65f6\uff0c\u5b83\u9762\u5bf9\u7684\u7ade\u4e89\u5c31\u4e0d\u518d\u662f\u8425\u9500\u81ea\u52a8\u5316\u540c\u884c\uff0c\u800c\u662fSegment\uff08\u6570\u636e\u5c42\uff09+ Braze\uff08\u89e6\u8fbe\u5c42\uff09+ Twilio\uff08\u901a\u4fe1\u5c42\uff09\u7684\u7ec4\u5408\u62f3\u3002\u7528\u6237\u5bf9AI\u7684\u6b63\u9762\u53cd\u9988\u503c\u5f97\u6ce8\u610f\uff0c\u4f46\u201cAI\u5e2e\u4f60\u505a\u5206\u7fa4\u548c\u6392\u6d41\u7a0b\u201d\u672c\u8d28\u4e0a\u662f\u964d\u4f4e\u64cd\u4f5c\u95e8\u69db\uff0c\u5374\u5e76\u672a\u6539\u53d8\u5e95\u5c42\u6570\u636e\u8d28\u91cf\u548c\u7b56\u7565\u8bbe\u8ba1\u7684\u4e0a\u9650\u2014\u2014\u5982\u679c\u5ba2\u6237\u7684\u6570\u636e\u5e72\u51c0\u3001\u4e8b\u4ef6\u5b9a\u4e49\u6e05\u6670\uff0c\u8fd9\u7c7bAI\u53ea\u662f\u9526\u4e0a\u6dfb\u82b1\uff1b\u5982\u679c\u6570\u636e\u4e00\u56e2\u7cdf\uff0cAI\u53ea\u4f1a\u52a0\u901f\u653e\u5927\u9519\u8bef\u3002\u6b64\u5916\uff0c138\u7968\u5728Product Hunt\u4e0a\u5c5e\u4e8e\u4e2d\u7b49\u504f\u4e0b\u6c34\u5e73\uff0c\u8bc4\u8bba\u4ec5\u4e00\u6761\u6709\u6548\u4fe1\u606f\uff0c\u8bf4\u660e\u5176\u76ee\u6807\u5ba2\u7fa4\uff08\u4e2d\u5927\u578bB2C\u54c1\u724c\uff09\u5bf9\u201c\u53d1\u5e03\u65b0\u9c9c\u611f\u201d\u4e0d\u654f\u611f\uff0c\u66f4\u770b\u91cd\u7684\u662f\u8fc1\u79fb\u6210\u672c\u548c\u73b0\u6709\u5de5\u4f5c\u6d41\u7684\u517c\u5bb9\u6027\u3002\u5efa\u8bae\u5173\u6ce8\u5176\u540e\u7eedAPI\u5f00\u653e\u7a0b\u5ea6\u548c\u4ef7\u683c\u68af\u5ea6\u2014\u2014\u5982\u679cSMS\u81ea\u5e26\u4f9b\u5e94\u5546\u53ea\u662f\u201c\u514d\u7ed1\u5b9a\u201d\uff0c\u800c\u975e\u201c\u7701\u6210\u672c\u201d\uff0c\u90a3\u5bf9\u4e2d\u5c0f\u5ba2\u6237\u7684\u5438\u5f15\u529b\u5c31\u76f8\u5f53\u6709\u9650\u3002\u771f\u6b63\u503c\u5f97\u89c2\u5bdf\u7684\uff0c\u662f\u5730\u7406\u56f4\u680f\u548cLive Notifications\u80fd\u5426\u5728\u79fb\u52a8\u7aef\u8dd1\u51fa\u9ad8\u7559\u5b58\u6848\u4f8b\uff0c\u5426\u5219\u8fd9\u53ea\u662f\u4e00\u6b21\u201c\u529f\u80fd\u9648\u5217\u5f0f\u201d\u7684\u7248\u672c\u66f4\u65b0\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">Customer.io Summer Release<\/span>\n                <\/div>\n<div class=\"comment-content\">Customer.io&#8217;s most expansive launch yet brings powerful new ways to engage customers exactly when it matters across expanded triggers, surfaces, and channels. Reach customers with geofencing, Live Notifications, flexible SMS providers, notification inbox, and beyond. Improved WhatsApp management, smarter AI, and more, all from one platform.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>\ud83d\udc4b Hey Product Hunt! It&#8217;s Jeff from <a href=\"https:\/\/Customer.io\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Customer.io<\/a><\/p>\n<\/p>\n<p>We&#8217;re excited to be back on Product Hunt for our first launch since 2017.<\/p>\n<\/p>\n<p>A lot has changed since then. We&#8217;ve grown to support more than 9,000 brands, crossed $100M ARR, and evolved from an email platform into a complete customer engagement platform.<\/p>\n<\/p>\n<p>One thing hasn&#8217;t changed: helping businesses build meaningful relationships with their customers has always been at the core of what we do.<\/p>\n<\/p>\n<p>Over the past year, we&#8217;ve heard the same challenge from customers:<\/p>\n<\/p>\n<p>It&#8217;s not enough to build great customer journeys. You need to show up at exactly the right moment.<\/p>\n<\/p>\n<p>That&#8217;s what inspired this release.<\/p>\n<\/p>\n<p>Today, we&#8217;re launching more than 10 new features that help brands connect with customers wherever they are:<\/p>\n<\/p>\n<p>\ud83d\udccd Native Geofencing<\/p>\n<\/p>\n<p>\ud83d\udcf1 Live Notifications (Live Activities for iOS and Live Updates for Android)<\/p>\n<\/p>\n<p>\ud83d\udcac Bring your own SMS provider<\/p>\n<\/p>\n<p>\ud83d\udce5 Notification inbox<\/p>\n<\/p>\n<p>\ud83d\udfe2 Native WhatsApp template management<\/p>\n<\/p>\n<p>\ud83e\udd16 Enhanced AI actions<\/p>\n<\/p>\n<p>\ud83c\udf19 Dark mode (finally!)<\/p>\n<\/p>\n<p>&#8230;plus multiple apps per workspace, omnichannel subscription controls, message frequency caps, tooltips, and more.<\/p>\n<\/p>\n<p>These features work together inside the same automations, segments, and data your team already uses, making it easier to engage customers across mobile, web, SMS, in-app, WhatsApp, email, and beyond.<\/p>\n<\/p>\n<p>Whether you&#8217;re notifying someone the moment they enter a store, updating them on their lock screen in real time, or giving them a place to revisit important messages later, <a href=\"http:\/\/Customer.io\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Customer.io<\/a> helps you show up when it matters most.<\/p>\n<\/p>\n<p>We&#8217;d love to hear from you:<\/p>\n<p>\u2022 Which feature are you most excited about?<\/p>\n<p>\u2022 What&#8217;s the biggest challenge you face with customer engagement today?<\/p>\n<p>\u2022 If you run a mobile app, what would you build with these new capabilities?<\/p>\n<\/p>\n<p>Our team will be here throughout the day answering questions, gathering feedback, and talking about what&#8217;s next.<\/p>\n<\/p>\n<p>Thanks so much for checking us out. It&#8217;s great to be back, and we can&#8217;t wait to hear what you think! \ud83d\ude80<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>2<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>love how they bake AI directly into the campaign builder instead of tacking it on as an afterthought. basically feels like the platform is doing the heavy lifting on segmentation so you can actually focus on the creative side.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@kocanaoglu80506\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kocanaoglu80506<\/a>&nbsp;Thank you! That was exactly our goal.<\/p>\n<\/p>\n<p>We wanted AI to feel like a natural part of building campaigns, not another tool you have to switch into or learn separately. <\/p>\n<\/p>\n<p>The idea is to help with the repetitive work, like segmentation, audience selection, and workflow creation, so marketers can spend more time on strategy and creating great customer experiences.<\/p>\n<\/p>\n<p>Really appreciate you checking it out.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#9<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/I4Q32UL5UOMRYQ\" class=\"app-title\">Screencap<\/a><\/p>\n<div class=\"one-liner\">Turn your team&#8217;s real workflows into AI training data<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">132<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Screencap\u662f\u4e00\u6b3emacOS\u5f00\u6e90\u5c4f\u5e55\u8bb0\u5f55\u5de5\u5177\uff0c\u901a\u8fc7\u6301\u7eed\u8bb0\u5f55\u5c4f\u5e55\u3001\u70b9\u51fb\u548c\u952e\u76d8\u64cd\u4f5c\uff0c\u5c06\u56e2\u961f\u771f\u5b9e\u5de5\u4f5c\u6d41\u7a0b\u8f6c\u5316\u4e3a\u7ed3\u6784\u5316\u6570\u636e\u96c6\uff0c\u7528\u4e8eAI\u8bad\u7ec3\u4e0e\u6d41\u7a0b\u81ea\u52a8\u5316\uff0c\u540c\u65f6\u5185\u7f6e\u4e25\u683c\u9690\u79c1\u4fdd\u62a4\u673a\u5236\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/cc0b6c66-1c94-4a84-a374-670d9ef03eba.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/26596998-1b08-4a2e-9a5e-6782dc9e4c57.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/170f93f7-569e-4700-ac0d-783d1e380d5a.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/98450099-ac69-449b-adad-a074dc7e6583.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/400f4897-ea61-4e27-b129-40ef4ccaafc1.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/50789385-9bbb-4fa6-937a-c67c62a77374.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Productivity<\/span><br \/>\n            <span class=\"tag\">SaaS<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u5c4f\u5e55\u5f55\u5236<\/span><br \/>\n            <span class=\"tag\">AI\u8bad\u7ec3\u6570\u636e<\/span><br \/>\n            <span class=\"tag\">\u5de5\u4f5c\u6d41\u7a0b\u81ea\u52a8\u5316<\/span><br \/>\n            <span class=\"tag\">\u5f00\u6e90<\/span><br \/>\n            <span class=\"tag\">macOS<\/span><br \/>\n            <span class=\"tag\">\u9690\u79c1\u4fdd\u62a4<\/span><br \/>\n            <span class=\"tag\">\u884c\u4e3a\u6570\u636e\u91c7\u96c6<\/span><br \/>\n            <span class=\"tag\">\u56e2\u961f\u77e5\u8bc6\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">\u6d41\u7a0b\u6316\u6398<\/span><br \/>\n            <span class=\"tag\">\u672c\u5730\u4f18\u5148<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u666e\u904d\u8ba4\u53ef\u9690\u79c1\u8bbe\u8ba1\uff0c\u4f46\u8d28\u7591\u5e94\u7528\u7ea7\u5c4f\u853d\u65e0\u6cd5\u8986\u76d6\u6d4f\u89c8\u5668\u6807\u7b7e\u9875\u7b49\u654f\u611f\u5185\u5bb9\uff0c\u5efa\u8bae\u91c7\u7528\u5141\u8bb8\u540d\u5355\u3002\u6838\u5fc3\u62c5\u5fe7\u662f\u201c\u6301\u7eed\u5f55\u5236\u201d\u6613\u6f14\u53d8\u4e3a\u7ee9\u6548\u76d1\u63a7\u2014\u2014\u6570\u636e\u80fd\u5426\u6309\u4eba\u67e5\u8be2\u662f\u4fe1\u4efb\u8fb9\u754c\u3002\u53e6\u6709\u53cd\u9988\u79f0\u5bfc\u51fa\u6570\u636e\u683c\u5f0f\u4e0d\u660e\uff0c\u4e14\u6587\u6863\u94fe\u63a5\u5b58\u5728\u9519\u8bef\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                Screencap\u8e29\u4e2d\u4e86\u4e24\u4e2a\u6027\u611f\u7684\u98ce\u53e3\u2014\u2014AI\u6570\u636e\u9965\u6e34\u4e0e\u4f01\u4e1a\u6d41\u7a0b\u6570\u5b57\u5316\u3002\u4f46\u5b83\u7684\u672c\u8d28\u662f\u4e00\u4e2a\u201c\u5e26\u5b89\u5168\u9501\u7684\u5458\u5de5\u76d1\u63a7\u8f6f\u4ef6\u201d\uff0c\u8fd9\u51b3\u5b9a\u4e86\u5176\u4ef7\u503c\u4e0e\u98ce\u9669\u540c\u6837\u5c16\u9510\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ece\u4ea7\u54c1\u903b\u8f91\u770b\uff0c\u5b83\u786e\u5b9e\u806a\u660e\uff1a\u5c06\u4eba\u7c7b\u9690\u6027\u64cd\u4f5c\u8f6c\u5316\u4e3a\u663e\u6027\u7ed3\u6784\u5316\u6570\u636e\uff0c\u8fd9\u6bd4\u8ba9\u5458\u5de5\u586b\u5199\u6587\u6863\u6210\u672c\u4f4e\u5f97\u591a\uff0c\u4e14\u6570\u636e\u8d28\u91cf\u771f\u5b9e\u3002\u4f46\u8bc4\u8bba\u4e2d\u90a3\u4f4d\u7528\u6237\u7684\u8d28\u95ee\u76f4\u6307\u547d\u95e8\uff1a**\u5f53\u5f55\u5236\u6570\u636e\u53ef\u88ab\u6309\u4eba\u67e5\u8be2\uff0c\u5c31\u6210\u4e86\u88c5\u4e86\u6444\u50cf\u5934\u7684KPI\u7cfb\u7edf\u3002** \u5373\u4fbf\u521b\u59cb\u4eba\u5f3a\u8c03\u201c\u5ba1\u67e5\u540e\u4e0a\u4f20\u201d\uff0c\u4f46\u4e0a\u4f20\u81f3\u4e91\u7aef\u540e\u7684\u6570\u636e\u4e3b\u6743\u548c\u4f7f\u7528\u8fb9\u754c\u624d\u662f\u4fe1\u4efb\u5d29\u584c\u70b9\u2014\u2014\u6ca1\u4eba\u4f1a\u5411\u8001\u677f\u63d0\u4ea4\u4e00\u4efd\u201c\u6211\u6478\u9c7c\u65f6\u6253\u5f00\u4e86\u4e09\u6b21\u63a8\u7279\u201d\u7684log\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u6280\u672f\u95e8\u69db\u4e0a\uff0c\u5e94\u7528\u7ea7\u5c4f\u853d\u662f\u6700\u5f31\u7684\u4e00\u73af\u3002CRM\u91cc\u7684\u5ba2\u6237\u4fe1\u606f\u3001\u6d4f\u89c8\u5668Tab\u4e2d\u7684\u5185\u90e8\u7cfb\u7edf\uff0c\u8fd9\u4e9b\u5185\u5bb9\u7ea7\u654f\u611f\u6570\u636e\u5728\u5c4f\u5e55\u6d41\u4e2d\u65e0\u5904\u9041\u5f62\u3002\u5c3d\u7ba1\u56de\u590d\u58f0\u79f0\u6709\u5185\u5bb9\u7ea7\u63a9\u7801\uff0c\u4f46\u8bc6\u522b\u51c6\u786e\u6027\u5b58\u7591\u3002\u800c\u201c\u4e0a\u4f20\u524d\u4eba\u5de5\u5ba1\u67e5\u201d\u5728\u73b0\u5b9e\u4e2d\u4f1a\u56e0\u4f7f\u7528\u6210\u672c\u8fc7\u9ad8\u800c\u6ca6\u4e3a\u6446\u8bbe\u2014\u2014\u7528\u6237\u4f1a\u76f2\u70b9\u201c\u786e\u8ba4\u201d\u4ee5\u7ef4\u6301\u6548\u7387\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u66f4\u73b0\u5b9e\u7684\u95ee\u9898\u662f\u6570\u636e\u51fa\u53e3\u3002Screencap\u7684\u7aef\u70b9\u4ef7\u503c\u662f\u201cAI\u8bad\u7ec3\u6570\u636e\u201d\uff0c\u4f46\u566a\u97f3\u6570\u636e\u6e05\u6d17\u6210\u672c\u6781\u9ad8\uff1a\u771f\u5b9e\u5de5\u4f5c\u6d41\u4e2d\u7684\u8bef\u64cd\u4f5c\u3001\u4e2d\u65ad\u3001\u7b49\u5f85\u65f6\u95f4\u5982\u4f55\u6807\u6ce8\uff1f\u82e5\u4ec5\u505a\u6d41\u7a0b\u6316\u6398\uff0c\u73b0\u6709RPA\u5de5\u5177\u5df2\u80fd\u6355\u6349\u4ea4\u4e92\u65e5\u5fd7\uff0c\u4e3a\u4f55\u9700\u8981\u5f55\u5236\u6574\u4e2a\u5c4f\u5e55\uff1f\u9664\u975e\u5b83\u6700\u7ec8\u5e0c\u671b\u6210\u4e3a\u201c\u884c\u4e3a\u6570\u636e\u7684AirTable\u201d\uff0c\u8ba9\u7528\u6237\u81ea\u884c\u6784\u5efaAgent\u8bad\u7ec3\u96c6\u2014\u2014\u4f46\u8fd9\u53c8\u56de\u5230\u4e86\u9690\u79c1\u4fe1\u4efb\u7684\u540c\u4e00\u5835\u5899\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u5f00\u6e90\u662f\u5b83\u7684\u5e95\u724c\uff0c\u793e\u533a\u7684\u9690\u79c1\u5ba1\u8ba1\u548c\u81ea\u6258\u7ba1\u627f\u8bfa\u80fd\u6682\u65f6\u5b89\u629a\u65e9\u671f\u91c7\u7528\u8005\u3002\u4f46\u5546\u4e1a\u5316\u7684\u5929\u5e73\u4e00\u65e6\u503e\u5411\u201c\u56e2\u961f\u7248\u201d\u7684\u4e91\u7aef\u805a\u5408\uff0c\u6240\u6709\u5584\u610f\u90fd\u4f1a\u88ab\u91cd\u65b0\u5ba1\u89c6\u3002**\u5b83\u5fc5\u987b\u5728\u4ea7\u54c1\u4e2d\u663e\u5f0f\u627f\u8bfa\uff1a\u6570\u636e\u4e0d\u53ef\u6309\u4eba\u68c0\u7d22\uff0c\u4ec5\u4ee5\u6d41\u7a0b\u7247\u6bb5\u5b58\u5728\u3002** \u505a\u4e0d\u5230\u8fd9\u4e00\u70b9\uff0c\u201cAI\u8bad\u7ec3\u6570\u636e\u201d\u5c31\u53ea\u662fHR\u90e8\u95e8\u89c2\u770b\u5458\u5de5\u201c\u6f14\u51fa\u201d\u7684\u53e6\u4e00\u79cd\u65b9\u5f0f\u3002\u5f53\u524d\u9636\u6bb5\uff0c\u5b83\u66f4\u9002\u5408\u88ab\u7528\u4e8e\u201c\u4e2a\u4ebaAI\u8bb0\u5fc6\u56de\u653e\u201d\u800c\u975e\u201c\u56e2\u961f\u6807\u51c6\u5316\u201d\u2014\u2014\u81f3\u5c11\uff0c\u4e00\u4e2a\u4eba\u5bf9\u81ea\u5df1\u7684\u6570\u636e\u6709\u5929\u7136\u7684\u8fb9\u754c\u611f\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">Screencap<\/span>\n                <\/div>\n<div class=\"comment-content\">Screencap records how work actually happens: screen, clicks, keystrokes, window context and teams can use it to turn real workflows into structured datasets for automation and AI training. Consent and privacy are enforced while recording so most sensitive apps are blocked before anything is written, and every trace is scrubbed and reviewed before it leaves a machine. macOS, open source. Try it solo with a free trial, or talk to us about a team pilot.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hey people!<\/p>\n<p>We built Screencap mainly because knowledge inside teams keeps getting lost. Sometimes it lives in someone&#8217;s head, and when that person leaves, it leaves with them. And even when nobody leaves, teams that move fast rarely remember every step it took to get something done. So when it&#8217;s time to repeat a workflow, we lose hours trying to reconstruct what we did before. What if the things that matter had permanent memory?<\/p>\n<\/p>\n<p>That&#8217;s what Screencap is: a screen recorder for your Mac that keeps everything on your device and makes your work searchable, by you and by your AI tools if you connect them. Sensitive stuff like password managers and banking is blocked while recording, so it&#8217;s never even written to disk. Nothing leaves your Mac unless you choose to upload it, and even then it&#8217;s scrubbed and you review it first.<\/p>\n<\/p>\n<p>We still have a lot to improve, and that&#8217;s exactly why we&#8217;re launching now. We want to build this together with a community and shape the path forward with the people using it. It&#8217;s also why we&#8217;re completely open source. And we&#8217;re committed to making it accessible to everyone, not just technical people: download, hit record, done.<\/p>\n<\/p>\n<p>Honest feedback means a lot to us. What would you need to trust a tool like this enough to leave it on all day?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>7<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@rutefig\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rutefig<\/a>&nbsp;Is this a competitor to screenpipe?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@rutefig\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rutefig<\/a>&nbsp;Really like that Screencap focuses on capturing how work actually happens instead of relying on people to manually document their workflows. The emphasis on consent, built-in privacy protections, and reviewing sensitive data before it leaves a device makes the approach especially interesting for teams looking to build automation and AI systems responsibly. Good luck with the launch!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@rutefig\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rutefig<\/a>&nbsp;Small thing: &#8220;Browse the dataset&#8221; and &#8220;Read the anonymization spec&#8221; both link to the same URL (<a href=\"http:\/\/screencap.sh\/dataset\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">screencap.sh\/dataset<\/a>) the spec link looks like it&#8217;s pointing to the wrong place. <\/p>\n<p>Cool concept overall!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The framing of turning real workflows into training data is clever, but I would probably use this first to document how processes actually happen on our side versus how we think they happen. Everything staying on the Mac until you choose to share is what makes that feel safe. What does the exported dataset look like in practice, structured steps with clicks and window context or raw video plus metadata?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@doganakbulut\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@doganakbulut<\/a>&nbsp;Hey! Yeah you can definetely use it to document how processes happen as well. The exported data is structured steps yes and window context <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hey &#8211; congrats on the launch! <br \/>How do you get consistent labeling out of messy real usage? Real workflows are noisy next to curated demos.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@kritishpuri\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kritishpuri<\/a>&nbsp;thanks a lot! Labeling is not done at this layer as of course but my colleague <a href=\"https:\/\/www.producthunt.com\/@aayushtheg\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"aayushtheg\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@aayushtheg<\/a> can give you more insights there<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Blocking password managers and banking at record time is the right instinct, and it&#8217;s the easy half. The harder half is the app that&#8217;s fine 95% of the time. A CRM is a perfectly normal thing to record right up until someone opens a customer record, and no app level blocklist catches that.<\/p>\n<\/p>\n<p>Is there anything working at the content level rather than the app level, or is the review step before upload doing that job? Asking because &#8220;I have to review every clip&#8221; is the thing that quietly kills daily use.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@dalemooney\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dalemooney<\/a>&nbsp;yes it is also in terms of content, anything that looks password, emails, names, etc is masked, review is mostly just another safeguard for people that want to be really sure<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Solo use is what I am curious about here. Does it work without the team cloud sync, or is that required to actually generate the training data? I would want to capture my own editing workflow locally. Share specific clips deliberately, not just have everything go up automatically.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Blocking sensitive apps is a denylist, and denylists fail open. The internal tool nobody&#8217;s heard of, or anything sensitive that lives in a browser tab rather than its own app, gets recorded because it wasn&#8217;t on the list, and you find out when someone reads the trace. An allowlist captures far less and makes the pilot conversation much shorter, which for the buyer you&#8217;re going after is probably the better trade.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>the always-on framing is the appealing part but also the scary part for me. when you&#8217;re on a call and someone shares their screen, or a client shares something confidential over zoom, is that captured too since it&#8217;s on your display, or does it only ever record your own local apps? if there&#8217;s a quick pause hotkey for exactly that moment i&#8217;d trust this a lot more day to day.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>You asked what it would take to leave it on all day. Honest answer: nothing in your privacy section, because that is not where the fear lives.<\/p>\n<\/p>\n<p>Blocking banking and password managers protects me from a leak. It does nothing about the thing people actually worry about, which is what the recording gets used for later.<\/p>\n<\/p>\n<p>Consent to be recorded is not consent to be compared. The day someone can ask how long I take on a workflow versus the person next to me, this stops being team memory and becomes a performance review with a video attached. Nobody says that out loud. They just quietly stop recording the messy days and record the tidy ones, and then your dataset is a fiction.<\/p>\n<\/p>\n<p>So the guarantee I would want is about use, not storage. Traces can build automations. Traces cannot be queried per person.<\/p>\n<\/p>\n<p>Is that a boundary you would be willing to make explicit in the product?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Congrats on the launch Rute!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@german_merlo1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@german_merlo1<\/a>&nbsp;thank you \ud83d\ude42<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#10<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/WBMO4OD2N7Q7GD\" class=\"app-title\">Gemini Robotics 2<\/a><\/p>\n<div class=\"one-liner\">Google&#8217;s AI brain for the next generation of robots<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">115<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Gemini Robotics 2 \u662f\u8c37\u6b4c DeepMind \u63a8\u51fa\u7684\u65b0\u4e00\u4ee3\u673a\u5668\u4eba\u201c\u5927\u8111\u201d\uff0c\u5c06 Gemini \u591a\u6a21\u6001\u5927\u6a21\u578b\u80fd\u529b\u6ce8\u5165\u7269\u7406\u5b9e\u4f53\uff0c\u8ba9\u4e0d\u540c\u5f62\u6001\u7684\u673a\u5668\u4eba\u5728\u771f\u5b9e\u4e16\u754c\u4e2d\u7406\u89e3\u73af\u5883\u3001\u63a8\u7406\u4efb\u52a1\u5e76\u7075\u5de7\u6267\u884c\uff0c\u4e3b\u8981\u9762\u5411\u5de5\u4e1a\u64cd\u4f5c\u3001\u533b\u7597\u8f85\u52a9\u3001\u591a\u673a\u534f\u4f5c\u7b49\u590d\u6742\u7269\u7406\u573a\u666f\uff0c\u89e3\u51b3\u4f20\u7edf\u673a\u5668\u4eba\u6cdb\u5316\u80fd\u529b\u5dee\u3001\u65e0\u6cd5\u9002\u5e94\u975e\u7ed3\u6784\u5316\u73af\u5883\u7684\u75db\u70b9\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/800254e4-3f96-46aa-b40d-1e952e869db0.webp?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/a51a5e87-bc40-47c2-a558-af465c370ced.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/bd317214-bdb6-4cc0-aef9-93a95ab8e571.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/5797ff0f-724a-48f1-8e32-d0478bda5398.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/9f2a2778-c4d5-4fc9-bbf3-0930b8dba759.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=4lSQnrMC6nY\"><source src=\"https:\/\/www.youtube.com\/watch?v=4lSQnrMC6nY\" type=\"video\/mp4\"><\/video><\/p>\n<div class=\"video-overlay\">\n<div class=\"play-icon\">\u25b6<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Robots<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u673a\u5668\u4ebaAI<\/span><br \/>\n            <span class=\"tag\">\u5177\u8eab\u667a\u80fd<\/span><br \/>\n            <span class=\"tag\">\u591a\u6a21\u6001\u5927\u6a21\u578b<\/span><br \/>\n            <span class=\"tag\">Google DeepMind<\/span><br \/>\n            <span class=\"tag\">\u7269\u7406\u4e16\u754c\u7406\u89e3<\/span><br \/>\n            <span class=\"tag\">\u7075\u5de7\u64cd\u4f5c<\/span><br \/>\n            <span class=\"tag\">\u591a\u673a\u5668\u4eba\u534f\u4f5c<\/span><br \/>\n            <span class=\"tag\">\u81ea\u9002\u5e94\u63a8\u7406<\/span><br \/>\n            <span class=\"tag\">\u673a\u5668\u4eba\u64cd\u4f5c\u7cfb\u7edf<\/span><br \/>\n            <span class=\"tag\">AI\u524d\u6cbf\u7814\u7a76<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u591a\u6570\u7528\u6237\u8ba4\u53ef\u7269\u7406AI\u662f\u4e0b\u4e00\u524d\u6cbf\uff0c\u4f46\u6279\u8bc4\u5b98\u65b9\u53d1\u5e03\u7f3a\u4e4f\u786c\u6838\u6280\u672f\u6307\u6807\u3002\u6838\u5fc3\u8d28\u7591\u96c6\u4e2d\u5728\uff1a\u672a\u89c1\u672a\u8bad\u7ec3\u73af\u5883\u4e0b\u7684\u4efb\u52a1\u6210\u529f\u7387\u3001\u5931\u8d25\u6062\u590d\u673a\u5236\u3001\u611f\u77e5\u5230\u52a8\u4f5c\u7684\u5ef6\u8fdf\u6570\u636e\u3002\u8bc4\u8bba\u8ba4\u4e3a\u5f53\u524d\u66f4\u50cf\u5b9a\u4f4d\u58f0\u660e\u800c\u975e\u53ef\u8bc4\u4f30\u4ea7\u54c1\uff0c\u547c\u5401\u63d0\u4f9b\u6280\u672f\u8bba\u6587\u6216\u57fa\u51c6\u6d4b\u8bd5\u3002\u53e6\u6709\u533b\u7597\u80cc\u666f\u7528\u6237\u7545\u60f3\u673a\u5668\u4eba+\u533b\u7597\u77e5\u8bc6\u7684\u98a0\u8986\u6027\u5e94\u7528\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                Gemini Robotics 2 \u7684\u53d1\u5e03\uff0c\u672c\u8d28\u4e0a\u662f\u4e00\u6b21\u5178\u578b\u7684\u201c\u9ad8\u59ff\u6001\u3001\u4f4e\u4fe1\u606f\u91cf\u201d\u7814\u7a76\u9884\u544a\u2014\u2014\u5b83\u7528\u201c\u6574\u673a\u667a\u80fd\u201d\u201c\u7075\u5de7\u64cd\u63a7\u201d\u7b49\u5b8f\u5927\u8bcd\u6c47\u63a9\u76d6\u4e86\u5f53\u524d\u5177\u8eab\u667a\u80fd\u9886\u57df\u6700\u81f4\u547d\u7684\u77ed\u677f\uff1a\u7f3a\u4e4f\u53ef\u590d\u73b0\u3001\u53ef\u91cf\u5316\u7684\u6cdb\u5316\u80fd\u529b\u8bc1\u660e\u3002\u8bc4\u8bba\u533a\u7684\u51b7\u9759\u58f0\u97f3\u4e00\u9488\u89c1\u8840\uff1a\u6ca1\u6709 unseen environment \u7684\u6210\u529f\u7387\u3001\u6ca1\u6709\u5931\u8d25\u6293\u53d6\u7684\u81ea\u6062\u590d\u6848\u4f8b\u3001\u6ca1\u6709\u611f\u77e5-\u52a8\u4f5c\u95ed\u73af\u7684\u5ef6\u8fdf\u6570\u636e\uff0c\u90a3\u4e48\u8fd9\u53ea\u80fd\u88ab\u89c6\u4e3a Demo \u800c\u975e Product\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ece\u6280\u672f\u7eb5\u6df1\u770b\uff0cGemini \u6a21\u578b\u5728\u591a\u6a21\u6001\u63a8\u7406\u4e0a\u7684\u79ef\u7d2f\u786e\u5b9e\u4e3a\u673a\u5668\u4eba\u63d0\u4f9b\u4e86\u66f4\u9ad8\u7ea7\u7684\u201c\u8ba4\u77e5\u524d\u7aef\u201d\uff0c\u4f46\u7269\u7406\u4e16\u754c\u7684\u590d\u6742\u6027\u8fdc\u975e\u8bed\u8a00+\u89c6\u89c9\u7684\u62fc\u63a5\u80fd\u8986\u76d6\u2014\u2014\u63a5\u89e6\u529b\u5b66\u3001\u52a8\u6001\u6270\u52a8\u3001\u5b9e\u65f6\u89c4\u5212\u4ecd\u662f\u786c\u9aa8\u5934\u3002\u5373\u4fbf Google \u62e5\u6709\u9876\u7ea7\u7b97\u529b\u548c\u4eba\u624d\uff0c\u82e5\u4e0d\u80fd\u5c06\u6a21\u578b\u80fd\u529b\u8f6c\u5316\u4e3a\u771f\u5b9e\u4e16\u754c\u4e0a\u7a33\u5b9a\u7684\u63a7\u5236\u4fe1\u53f7\uff0c\u5176\u4ef7\u503c\u5c06\u6b62\u6b65\u4e8e\u8bba\u6587\u5f15\u7528\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u66f4\u503c\u5f97\u8b66\u60d5\u7684\u662f\uff0c\u8fd9\u7c7b\u201c\u6982\u5ff5\u5148\u884c\u201d\u7684\u53d1\u5e03\u6b63\u5728\u6d88\u8017\u884c\u4e1a\u7684\u4fe1\u4efb\u5ea6\u3002\u5f53\u6bcf\u9694\u4e24\u5468\u5c31\u6709\u4e00\u4e2a\u201c\u7269\u7406AI\u65b0\u524d\u6cbf\u201d\u5237\u5c4f\uff0c\u800c\u6ca1\u6709\u4efb\u4f55\u4e00\u4e2a\u4ea7\u54c1\u80fd\u8fbe\u5230\u5ba3\u79f0\u7684\u81ea\u4e3b\u6c34\u5e73\uff0c\u6295\u8d44\u8005\u548c\u5de5\u7a0b\u5e08\u4f1a\u8d8a\u6765\u8d8a\u96be\u4ee5\u533a\u5206\u771f\u6b63\u7684\u6280\u672f\u7a81\u7834\u4e0e PR \u53d9\u4e8b\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u5f53\u7136\uff0c\u4e0d\u53ef\u5426\u8ba4 Gemini Robotics 2 \u5728\u67b6\u6784\u8bbe\u8ba1\u4e0a\uff08\u5982\u591a\u673a\u534f\u4f5c\u3001\u5168\u8eab\u63a7\u5236\uff09\u4ee3\u8868\u4e86\u5bf9\u672a\u6765\u5f62\u6001\u7684\u524d\u77bb\u601d\u8003\uff0c\u4e14 DeepMind \u7684\u5b66\u672f\u5b9e\u529b\u4f7f\u5176\u6709\u6f5c\u529b\u5feb\u901f\u8fed\u4ee3\u51fa\u5b9e\u8d28\u6027\u7ed3\u679c\u3002\u4f46\u4f5c\u4e3a\u201c\u53d1\u5e03\u201d\uff0c\u7f3a\u6570\u636e\u5373\u662f\u539f\u7f6a\u3002\u5efa\u8bae\u56e2\u961f\u5c3d\u5feb\u516c\u5f00\u6280\u672f\u62a5\u544a\u6216\u5f00\u653e\u8bc4\u6d4b\u57fa\u51c6\uff0c\u7528\u6570\u5b57\u66ff\u4ee3\u53e3\u53f7\u2014\u2014\u5426\u5219\uff0c\u5b83\u53ea\u4f1a\u6210\u4e3a AI \u5bd2\u51ac\u53d9\u4e8b\u91cc\u53c8\u4e00\u4e2a\u8fc7\u5ea6\u7092\u4f5c\u7684\u6ce8\u811a\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">Gemini Robotics 2<\/span>\n                <\/div>\n<div class=\"comment-content\">Gemini Robotics 2 is Google DeepMind\u2019s latest step toward intelligent robots that can understand, reason, and act in the physical world. Powered by advanced Gemini models, it brings whole-body intelligence, dexterous manipulation, and adaptive reasoning to robots of different shapes and sizes. From complex physical tasks to multi-robot collaboration, Gemini Robotics 2 moves us closer to a future where robots can work alongside humans.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Discovered this while following Google DeepMind\u2019s latest AI research and thought it deserved a Product Hunt spotlight.<\/p>\n<p>We\u2019ve seen AI transform how computers understand text, images, and information. Gemini Robotics 2 represents the next frontier: bringing that intelligence into the physical world.<\/p>\n<p>The exciting part isn\u2019t just robots moving \u2014 it\u2019s robots that can understand environments, reason through tasks, and adapt like intelligent agents.<\/p>\n<p>Physical AI feels like the next major chapter of artificial intelligence, and Gemini Robotics 2 is a fascinating glimpse of where things are heading.<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>4<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@justin2025\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@justin2025<\/a>&nbsp; As a self learnt Developer and former Nurse &#8211; I am completely convinced that Robots esp. in Medical &#8211;  Area are already   \u201c IN\u201d! The future will be &#8211; decentralized, self sustaining and  &#8211;  fantastic! Imagine this Robot with a Doctors And Nurses brain !!?  Imagine sickness \u201c repair \u201c in  hours instead of months! Gemini Robotics 2 is &#8211; fascinating for me!!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>genuinely interested in this space but the post itself doesn&#8217;t give me much to react to beyond &#8220;physical AI is the next frontier,&#8221; which is true of basically every humanoid robotics announcement of the last two years. what would actually change my mind about this one specifically is something concrete: task success rate on an unseen environment, how it handles a failed grasp instead of just a clean demo reel, or latency from perception to actuation. without that it reads more like a positioning statement than a product I can form an opinion on. is there a technical writeup somewhere with actual numbers, or is this purely a research preview at this stage?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#11<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/IMPGCICX47WGW2\" class=\"app-title\">TraceLLM<\/a><\/p>\n<div class=\"one-liner\">OpenTelemetry for production AI applications<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">103<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>TraceLLM \u662f\u4e00\u6b3e\u4e13\u4e3a\u751f\u4ea7\u73af\u5883AI\u5e94\u7528\u6253\u9020\u7684\u53ef\u89c2\u6d4b\u6027\u5e73\u53f0\uff0c\u901a\u8fc7OpenTelemetry\uff08OTLP\uff09\u8ffd\u8e2a\u63d0\u793a\u8bcd\u6267\u884c\u3001Token\u6d88\u8017\u3001\u5ef6\u8fdf\u3001\u9519\u8bef\u53ca\u6a21\u578b\u8c03\u7528\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u5feb\u901f\u5b9a\u4f4dLLM\u5de5\u4f5c\u6d41\u4e2d\u7684\u6027\u80fd\u74f6\u9888\u4e0e\u6545\u969c\u6839\u56e0\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/90ac0b20-a752-43ce-bae4-4617c8f51735.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/12f45964-0945-48e5-b3e9-2c2848f43dec.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/5933ae59-daef-48e7-900c-ba2ef7f05a17.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Open Source<\/span><br \/>\n            <span class=\"tag\">Developer Tools<\/span><br \/>\n            <span class=\"tag\">GitHub<\/span><br \/>\n            <span class=\"tag\">Tech<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u53ef\u89c2\u6d4b\u6027<\/span><br \/>\n            <span class=\"tag\">LLM\u76d1\u63a7<\/span><br \/>\n            <span class=\"tag\">OpenTelemetry<\/span><br \/>\n            <span class=\"tag\">\u63d0\u793a\u8bcd\u8ffd\u8e2a<\/span><br \/>\n            <span class=\"tag\">Token\u8ba1\u91cf<\/span><br \/>\n            <span class=\"tag\">\u5ef6\u8fdf\u5206\u6790<\/span><br \/>\n            <span class=\"tag\">\u9519\u8bef\u8ffd\u8e2a<\/span><br \/>\n            <span class=\"tag\">\u6a21\u578b\u8c03\u7528\u8ffd\u8e2a<\/span><br \/>\n            <span class=\"tag\">\u5f00\u53d1\u8005\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u751f\u4ea7\u73af\u5883<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u9ad8\u5ea6\u5173\u6ce8\u6570\u636e\u5b89\u5168\u4e0eRedaction\u673a\u5236\uff0c\u8ffd\u95eePII\u662f\u5426\u53ef\u5728\u5bfc\u51fa\u524d\u6309\u5b57\u6bb5\u6e05\u6d17\uff1b\u8d28\u7591\u201c\u6210\u529f\u4f46\u9519\u8bef\u201d\u7684\u9759\u9ed8\u6545\u969c\u96be\u4ee5\u6355\u83b7\uff0c\u5efa\u8bae\u7528\u5185\u5bb9\u6307\u7eb9\uff08\u5982\u6587\u6863ID\u54c8\u5e0c\uff09\u66ff\u4ee3\u5168\u6587\u5b58\u50a8\uff1b\u540c\u65f6\u5f3a\u70c8\u8981\u6c42MCP\u5de5\u5177\u8c03\u7528\u4f5c\u4e3a\u4e00\u7b49span\uff0c\u652f\u6301\u5d4c\u5957\u5b50span\u53ca\u6210\u672c\u5c5e\u6027\u5f52\u56e0\uff0c\u800c\u975e\u6302\u8f7dJSON blob\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                TraceLLM\u8e29\u51c6\u4e86LLM\u5e94\u7528\u4ece\u201c\u6f14\u793a\u201d\u5230\u201c\u751f\u4ea7\u201d\u7684\u75db\u611f\u8f6c\u6362\u70b9\uff1a\u5f53\u5e94\u7528\u5f00\u59cb\u627f\u53d7\u771f\u5b9e\u6d41\u91cf\uff0c\u5f00\u53d1\u8005\u53d1\u73b0\u4f20\u7edf\u7684APM\u5de5\u5177\u5bf9\u201c\u63d0\u793a\u8bcd-\u6a21\u578b-\u5de5\u5177\u201d\u8fd9\u4e00\u65b0\u8c03\u7528\u94fe\u51e0\u4e4e\u5931\u660e\u3002\u5176Otel\u539f\u751f\u5bfc\u51fa\u4e0e\u5de5\u5177Span\u8bbe\u8ba1\u76f4\u6307\u884c\u4e1a\u77ed\u677f\uff0c\u5c24\u5176\u662f\u5c06\u5de5\u5177\u8c03\u7528\u4eceJSON blob\u4e2d\u89e3\u653e\u51fa\u6765\uff0c\u5e76\u652f\u6301\u5d4c\u5957\u4e0e\u6210\u672c\u5f52\u56e0\uff0c\u8fd9\u5728\u4e3b\u6d41\u89c2\u6d4b\u4ea7\u54c1\u4e2d\u5e76\u4e0d\u5e38\u89c1\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u8bc4\u8bba\u533a\u7684\u62f7\u95ee\u8fdc\u6bd4\u529f\u80fd\u5217\u8868\u66f4\u6b8b\u9177\u3002\u5176\u4e00\uff0c\u5b89\u5168\u4e0e\u5408\u89c4\u4e0d\u662f\u540e\u7f6e\u9009\u9879\uff0c\u800c\u662f\u80fd\u5426\u901a\u8fc7\u4f01\u4e1a\u91c7\u8d2d\u7684\u7b2c\u4e00\u9053\u95f8\u95e8\u3002\u5c3d\u7ba1\u5ba3\u79f0\u201c\u53ef\u914d\u7f6e\u201d\uff0c\u4f46\u9ed8\u8ba4\u5173\u95ed\u7684Grounding\u6355\u83b7\u4f1a\u8ba9\u6700\u9700\u8981\u6392\u67e5\u7684\u201c\u81ea\u4fe1\u9519\u8bef\u201d\u5b8c\u5168\u4e0d\u53ef\u89c1\u2014\u2014\u8fd9\u662f\u4ea7\u54c1\u903b\u8f91\u7684\u5185\u5728\u77db\u76fe\uff1a\u4f60\u8d8a\u662f\u4fdd\u62a4\u6570\u636e\uff0c\u8d8a\u53ef\u80fd\u5728\u6545\u969c\u53d1\u751f\u65f6\u5931\u53bb\u552f\u4e00\u7ebf\u7d22\u3002\u5176\u4e8c\uff0c\u7528\u6237\u63d0\u51fa\u7684\u201c\u5185\u5bb9\u6307\u7eb9\u201d\u65b9\u6848\uff08\u54c8\u5e0c\u6587\u6863ID\u4e0e\u5de5\u5177\u53c2\u6570\uff09\u662f\u66f4\u4e3a\u52a1\u5b9e\u7684\u6298\u4e2d\uff0c\u65e2\u80fd\u8bc1\u660e\u4e0a\u4e0b\u6587\u4e00\u81f4\u6027\uff0c\u53c8\u89c4\u907f\u654f\u611f\u6570\u636e\u51fa\u5883\uff0c\u8fd9\u503c\u5f97TraceLLM\u5728\u4e0b\u4e2a\u7248\u672c\u4e2d\u4f5c\u4e3a\u4e00\u7b49\u516c\u6c11\u5185\u7f6e\uff0c\u800c\u975e\u505c\u7559\u5728SIG\u3002\u5176\u4e09\uff0cOTLP\u5bfc\u51fa\u770b\u4f3c\u4e2d\u7acb\uff0c\u5b9e\u5219\u5c06\u7b5b\u9009\u3001\u8131\u654f\u3001\u4fdd\u7559\u7b56\u7565\u7684\u5408\u89c4\u8d1f\u62c5\u5168\u90e8\u8f6c\u5ac1\u7ed9\u8fd0\u7ef4\u7aef\uff0c\u82e5\u4e0d\u80fd\u5728SDK\u5c42\u63d0\u4f9b\u7cbe\u7ec6\u7684\u5b57\u6bb5\u7ea7Redaction\u7b56\u7565\uff0c\u5176\u201c\u751f\u4ea7\u53ef\u7528\u201d\u7684\u53d9\u4e8b\u5c06\u6b62\u6b65\u4e8e\u5b89\u5168\u8bc4\u5ba1\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ea7\u54c1\u76ee\u524d\u66f4\u50cf\u4e00\u4e2a\u9ad8\u6548\u7684\u6570\u636e\u7ba1\u9053\uff0c\u800c\u975e\u667a\u80fd\u8bca\u65ad\u4e2d\u67a2\u3002\u82e5\u4e0d\u80fd\u5728\u201c\u5e7b\u89c9\u5f52\u56e0\u201d\u6216\u201c\u5f02\u5e38\u6f02\u79fb\u68c0\u6d4b\u201d\u4e0a\u63d0\u4f9b\u8d85\u8d8a\u4f20\u7edftrace\u7684\u8bed\u4e49\u5206\u6790\u80fd\u529b\uff0c\u5b83\u5f88\u5bb9\u6613\u88abSigNoz\u6216Honeycomb\u7b49\u5e73\u53f0\u901a\u8fc7\u63d2\u4ef6\u751f\u6001\u6a21\u4eff\u5e76\u541e\u566c\u3002\u5efa\u8bae\u56e2\u961f\u5c06Roadmap\u805a\u7126\u4e8e\uff1a\u4e00\u662f\u63d0\u4f9b\u5185\u5bb9\u65e0\u5173\u7684\u8bed\u4e49\u6307\u7eb9\u80fd\u529b\uff0c\u4e8c\u662f\u6253\u901a\u6210\u672c\u4e0e\u6839\u56e0\u7684\u56e0\u679c\u5173\u8054\uff0c\u4e09\u662f\u5c06MCP\u5de5\u5177\u94fe\u7684\u81ea\u52a8\u57cb\u70b9\u4ece\u8def\u7ebf\u56fe\u63d0\u5230\u5f53\u524d\u8fed\u4ee3\u2014\u2014\u8fd9\u4e09\u70b9\u624d\u662f\u5b83\u533a\u522b\u4e8e\u901a\u7528Tracing\u7684\u62a4\u57ce\u6cb3\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">TraceLLM<\/span>\n                <\/div>\n<div class=\"comment-content\">Tracellm is an observability platform for production AI applications. Monitor prompt execution, token consumption, latency, spans, errors, and model calls across your LLM workflows. Export traces using OpenTelemetry (OTLP) and quickly identify bottlenecks before they impact users<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hey Product Hunt! I&#8217;m Jyotishmoy, the maker of Tracellm.<\/p>\n<p>Like many developers, I&#8217;ve been building AI applications using different LLMs and frameworks. One thing quickly became obvious: once an AI app reaches production, it&#8217;s surprisingly difficult to understand what&#8217;s actually happening.<\/p>\n<p>Questions like:<\/p>\n<p> Why did this request fail?<br \/>\n Which prompt caused the issue?<br \/>\n How many tokens did this interaction consume?<br \/>\n Where is the latency coming from?<br \/>\n Which model call is slowing everything down?<\/p>\n<p>There are great observability tools for traditional applications, but I wanted something purpose-built for AI workloads.<\/p>\n<p>That&#8217;s why I built Tracellm.<\/p>\n<p>Tracellm gives developers complete visibility into their AI applications by tracing prompts, spans, token usage, latency, model calls, and errors in one place. It also supports OpenTelemetry (OTLP), making it easy to integrate with your existing observability stack.<\/p>\n<p>This is just the beginning. I have a lot more planned, including richer analytics, cost optimization insights, and support for more AI frameworks and providers.<\/p>\n<p>I&#8217;d genuinely love your feedback:<\/p>\n<p> What features would make this indispensable for your workflow?<br \/>\n Which AI framework or model provider should I support next?<br \/>\n What would you like to see improved?<\/p>\n<p>Thanks so much for checking out Tracellm! I&#8217;m excited to answer your questions throughout the launch.<\/p>\n<p>please give it a &#8220;\u2b50&#8221; in GitHub if you find this helpful.<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>2<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>This looks super useful \u2014 OpenTelemetry-based observability for LLM apps is a great idea, especially catching bottlenecks early. Congrats on shipping!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">@zvonimir_sabljic1 thanks a lot!<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Every question on that list is about a failure that announces itself. Failed request, slow call, token spike, all visible.<\/p>\n<\/p>\n<p>The one that costs most in production is the request that succeeded. No error, normal latency, sensible token count, and the answer was confidently wrong. To catch that afterwards the trace has to hold what the turn was grounded in, which retrieval actually landed and what the tool returned, attributed to that turn. Otherwise the worst incident of the year looks like a healthy span.<\/p>\n<\/p>\n<p>Does a span carry the retrieved content and tool results, or the call and the timing only?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@jernej_jan_kocica\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@jernej_jan_kocica<\/a>&nbsp;yes, it can carry the grounding context and tool results, not just call timing, but we make that explicit and configurable because production AI traces can contain sensitive customer data.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@jernej_jan_kocica\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@jernej_jan_kocica<\/a>&nbsp;Jernej has named the only question on that list that matters, and the answer to it creates a second problem worth planning for.<\/p>\n<\/p>\n<p>Grounding capture is configurable because production traces hold customer data. Reasonable. But it means it gets switched off exactly where a silent wrong answer is most expensive, and whoever switches it off has to make that call before they know they will need it.<\/p>\n<\/p>\n<p>The version that survives both constraints is capturing identity instead of content. Retrieval document ids, a hash of each chunk, tool arguments and a hash of the result. You can then prove which context a turn actually used, and whether it changed between two runs, without storing a line of customer text.<\/p>\n<\/p>\n<p>Not the same as replaying the answer. But it turns &#8220;the worst incident of the year looks like a healthy span&#8221; into something you can diff.<\/p>\n<\/p>\n<p>Could the span schema carry a content-free grounding fingerprint today?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>OTLP as the export path is the right bet, but it moves the hard problem rather than solving it. The moment a prompt body leaves for someone&#8217;s existing stack it lands under retention and access rules it was never collected under, so the first thing I&#8217;d want to know is whether payload capture is opt in per span and whether I can strip it at the collector rather than in the SDK. Worth answering on the page, because that&#8217;s the question that decides whether this gets past a security review or dies in one.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The redaction point further up is the one that decides whether we could even turn this on. Full request and response bodies leaving our infra to a third party is a hard no on anything finance adjacent unless PII gets scrubbed before export, not after. Is that per field configurable or a fixed blanket list?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The thing I keep wanting from LLM tracing is MCP tool calls as first class spans, not just the model call with a blob of tool JSON hanging off it. Half my latency is the tools, not the model. Does the OTLP export break tool calls out as child spans?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@dalemooney\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dalemooney<\/a> Yes. TraceLLM has a first-class tool span kind, so tool calls do not have to live as a JSON blob on the model span.<\/p>\n<p>In a typical agent\/RAG flow you can emit separate spans for agent.plan, tool.crm.lookup, <a href=\"http:\/\/retrieval.docs.search\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">retrieval.docs.search<\/a>, and <a href=\"http:\/\/openai.chat\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">openai.chat<\/a>.complete. Each one gets its own timing, status, metadata, optional input\/output, and errors.<\/p>\n<p>On OTLP export, those TraceLLM spans are mapped to real OpenTelemetry spans, so in SigNoz\/Tempo\/Honeycomb the tool latency can be inspected separately from the model latency.<\/p>\n<p>The current caveat is that this is SDK-instrumented today: you create the tool spans from your app code. Automatic MCP tool-call capture is on the roadmap, so MCP calls can become first-class spans without as much manual wiring.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@dalemooney\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dalemooney<\/a>&nbsp;Building on Dale&#8217;s point, the thing that bit us is that a tool span is usually not a leaf.<\/p>\n<\/p>\n<p>An MCP tool call often fans out to two or three services of its own. If the whole tool is one span you get a total, and you still cannot say which downstream call is the slow one. That is the same JSON blob problem, one level down.<\/p>\n<\/p>\n<p>The other half is cost. If half the latency is tools, a real share of the spend is too, and most tracing attributes cost only to model calls. Cost per turn is only honest if tool cost lands on the turn that caused it.<\/p>\n<\/p>\n<p>So two things: does a tool span nest, and can it carry a cost attribute?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#12<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/GRAZZWEHVMFL4J\" class=\"app-title\">Mubert API<\/a><\/p>\n<div class=\"one-liner\">Edit tracks &#038; stems, get consistent music with new engine<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">101<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Mubert API \u901a\u8fc7\u5168\u65b0\u5f15\u64ce\u8ba9\u5f00\u53d1\u8005\u80fd\u5728\u51e0\u5206\u949f\u5185\u5c06\u53ef\u7f16\u8f91\u3001\u53ef\u6df7\u97f3\u3001\u6700\u957f\u4e24\u5c0f\u65f6\u7684\u5b9e\u65f6\u751f\u6210\u97f3\u4e50\u80fd\u529b\u96c6\u6210\u8fdb\u81ea\u5df1\u7684\u4ea7\u54c1\uff0c\u89e3\u51b3\u4e86\u751f\u6210\u97f3\u4e50\u201c\u4e0d\u53ef\u63a7\u3001\u4e0d\u53ef\u6539\u3001\u65e0\u6cd5\u5546\u7528\u201d\u7684\u6838\u5fc3\u75db\u70b9\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/9745480f-e94a-43e6-8a38-743eb99a6298.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/f485cd1a-4c91-4d9e-bb9e-664ca1617064.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/222210fe-c34f-4933-b6e4-b9560ca09b5f.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/fae2a2a6-f37d-4c8a-a8eb-e69c7b67754b.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/ad1df05c-f2e4-4c43-8398-a891dd8bc227.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/5a095068-1f70-401d-a42c-af3b46f578f2.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/54df05dd-efae-4890-87a1-1b061b2953f8.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/5d192ee0-e2cf-4714-a206-ab4d7127eaf1.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Music<\/span><br \/>\n            <span class=\"tag\">API<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u97f3\u4e50\u751f\u6210API<\/span><br \/>\n            <span class=\"tag\">AI\u97f3\u4e50\u7f16\u8f91<\/span><br \/>\n            <span class=\"tag\">\u5206\u8f68\u6df7\u97f3<\/span><br \/>\n            <span class=\"tag\">\u5b9e\u65f6\u97f3\u4e50\u6d41<\/span><br \/>\n            <span class=\"tag\">\u5f00\u53d1\u8005\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u5546\u7528\u97f3\u4e50\u6388\u6743<\/span><br \/>\n            <span class=\"tag\">\u751f\u6210\u5f0fAI<\/span><br \/>\n            <span class=\"tag\">\u97f3\u9891\u5de5\u4f5c\u6d41<\/span><br \/>\n            <span class=\"tag\">Claude\/Codex Skill<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u5173\u6ce8\u70b9\u96c6\u4e2d\u5728\uff1a1) \u5b9e\u65f6stem\u66ff\u6362\u7684\u54cd\u5e94\u65f6\u95f4\uff1b2) \u540c\u4e00seed\u548c\u63d0\u793a\u8bcd\u8de8\u65f6\u95f4\u7684\u786e\u5b9a\u6027\u4e0e\u5f15\u64ce\u7248\u672c\u9501\u5b9a\uff08\u53ef\u8ffd\u6eaf\u3001\u4e0d\u53ef\u53d8\u8d44\u4ea7\uff09\uff1b3) \u7f16\u8f91\u540e\u8f93\u51fa\u7684\u7248\u6743\u5f52\u5c5e\u548c\u5546\u7528\u6388\u6743\u8fb9\u754c\uff08\u662f\u5426\u8986\u76d6\u5ba2\u6237\u9879\u76ee\uff09\u3002\u591a\u6570\u8bc4\u8bba\u8ba4\u53ef\u201c\u53ef\u7f16\u8f91\u97f3\u4e50\u201d\u662f\u884c\u4e1a\u8fdb\u6b65\uff0c\u4f46\u5bf9API\u7684\u5951\u7ea6\u7a33\u5b9a\u6027\u63d0\u51fa\u8d28\u7591\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                Mubert API\u8fd9\u6b21\u66f4\u65b0\u8868\u9762\u4e0a\u5356\u7684\u662f\u201c\u66f4\u4e00\u81f4\u7684\u5f15\u64ce\u201d\u548c\u201c2\u5c0f\u65f6\u957f\u97f3\u9891\u201d\uff0c\u4f46\u8bc4\u8bba\u533a\u5df2\u7ecf\u66ff\u5b83\u628a\u771f\u6b63\u7684\u4ef7\u503c\u8bf4\u900f\u4e86\uff1a\u628aAI\u97f3\u4e50\u4ece\u201c\u8001\u864e\u673a\u201d\u53d8\u6210\u4e86\u201c\u53ef\u7f16\u8f91\u8d44\u4ea7\u201d\u3002\u8fd9\u786e\u5b9e\u662f\u8d28\u53d8\u2014\u2014\u5f53\u4f60\u80fd\u5355\u72ec\u9759\u97f3\u6216\u66ff\u6362\u4e00\u4e2a\u9f13\u7ec4\u58f0\u90e8\u800c\u4e0d\u5fc5\u628a\u6574\u9996\u6b4c\u63a8\u5012\u91cd\u6765\uff0c\u97f3\u4e50\u751f\u6210\u624d\u4ece\u73a9\u5177\u8de8\u8fdb\u4e86\u751f\u4ea7\u529b\u5de5\u5177\u7684\u9635\u8425\uff0c\u800c\u201c\u9488\u5bf9\u7279\u5b9a\u7528\u9014\u5feb\u901f\u96c6\u6210\u201d\u7684\u8def\u7ebf\u4e5f\u7b26\u5408\u5f00\u53d1\u8005\u9884\u671f\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u7136\u800c\uff0c\u771f\u6b63\u51b3\u5b9a\u5b83\u80fd\u5426\u8fdb\u5165\u4e25\u8083\u5546\u4e1a\u5e02\u573a\u7684\u662f\u8bc4\u8bba\u4e2d\u53cd\u590d\u51fa\u73b0\u7684\u4e24\u4e2a\u5b57\uff1a\u786e\u5b9a\u6027\u3002\u76ee\u524d\u8bc4\u8bba\u533a\u6709\u4e00\u6761\u7075\u9b42\u62f7\u95ee\u51e0\u4e4e\u6233\u7a7f\u4e86\u884c\u4e1a\u901a\u75c5\u2014\u2014\u5f15\u64ce\u7248\u672c\u66f4\u65b0\u540e\uff0c\u540c\u4e00seed\u751f\u6210\u7684\u97f3\u4e50\u201c\u66f4\u597d\u201d\u4e86\uff0c\u4f46\u8fd9\u5bf9\u9700\u8981\u7ef4\u6301\u4e00\u81f4\u6027\u7684\u54c1\u724c\u5ba2\u6237\u6765\u8bf4\u662f\u707e\u96be\u3002\u5982\u679c\u751f\u6210\u7684\u8d44\u4ea7\u4e0d\u80fd\u88ab\u6c38\u8fdc\u5bfb\u5740\u83b7\u53d6\uff0c\u5982\u679c\u5f15\u64ce\u7248\u672c\u4e0d\u80fd\u88abpinning\u9501\u5b9a\uff0c\u90a3\u4e48\u6240\u6709\u201c\u7f16\u8f91\u201d\u529f\u80fd\u90fd\u662f\u5efa\u7acb\u5728\u6d41\u6c99\u4e4b\u4e0a\u3002\u4e00\u4e2a\u80fd\u968f\u65f6\u6539\u53d8\u4f60\u5386\u53f2\u8d44\u4ea7\u9762\u8c8c\u7684API\uff0c\u65e0\u6cd5\u652f\u6491\u4efb\u4f55\u957f\u671f\u5185\u5bb9\u6218\u7565\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u53e6\u4e00\u4e2a\u88ab\u8f7b\u63cf\u6de1\u5199\u7684\u95ee\u9898\u662f\u7248\u6743\u3002\u5b98\u65b9\u7528\u201ccopyright-protected\u201d\u8fd9\u4e2a\u6a21\u7cca\u8bdd\u672f\uff0c\u4f46\u8bc4\u8bba\u533a\u5bf9\u5546\u7528\u573a\u666f\u7684\u8ffd\u95ee\u6781\u5176\u7cbe\u51c6\uff1a\u5982\u679c\u4f60\u751f\u6210\u97f3\u4e50\u5e76\u4ea4\u4ed8\u7ed9\u4ed8\u8d39\u5ba2\u6237\uff0c\u7248\u6743\u7a76\u7adf\u5f52\u8c01\uff1f\u88ab\u7528\u6237\u7f16\u8f91\u8fc7\u7684\u6d3e\u751f\u4f5c\u54c1\uff0cMubert\u662f\u5426\u4fdd\u7559\u6743\u5229\u4e3b\u5f20\uff1f\u5728API\u7684\u5b9a\u4ef7\u548c\u6388\u6743\u6761\u6b3e\u672a\u516c\u5f00\u900f\u660e\u4e4b\u524d\uff0c\u8fd9\u79cd\u6a21\u7cca\u6027\u4f1a\u76f4\u63a5\u4fc3\u4f7f\u4f01\u4e1a\u7ea7\u7528\u6237\u9009\u62e9\u81ea\u6258\u7ba1\u6a21\u578b\u2014\u2014\u8fd9\u6070\u6070\u662f\u8bc4\u8bba\u533a\u6709\u4eba\u8d70\u8fc7\u7684\u5f2f\u8def\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u6700\u540e\u8bf4\u8bf4\u771f\u6b63\u7684\u62a4\u57ce\u6cb3\u3002Stem\u7f16\u8f91\u30012\u5c0f\u65f6\u751f\u6210\u3001\u5b9e\u65f6\u6d41\u90fd\u662f\u53ef\u4ee5\u88ab\u7ade\u4e89\u5bf9\u624b\u5feb\u901f\u590d\u5236\u7684\u529f\u80fd\uff0c\u800c\u4e0d\u53ef\u53d8\u8d44\u4ea7\u5bfb\u5740\u3001\u5f15\u64ce\u7248\u672c\u5feb\u7167\u3001\u5546\u7528\u8f93\u51fa\u7248\u6743\u660e\u786e\u5f52\u5c5e\u8fd9\u4e09\u4e2a\u770b\u4f3c\u65e0\u804a\u7684\u5de5\u7a0b\u7ec6\u8282\uff0c\u624d\u662f\u51b3\u5b9a\u5f00\u53d1\u8005\u6562\u4e0d\u6562\u628a\u5b83\u5d4c\u5165\u6838\u5fc3\u4ea7\u54c1\u751f\u547d\u5468\u671f\u7684\u5730\u57fa\u3002Mubert\u73b0\u5728\u6700\u7d27\u8feb\u7684\u4efb\u52a1\u4e0d\u662f\u7ee7\u7eed\u5439\u5618\u97f3\u9891\u8d28\u91cf\uff0c\u800c\u662f\u5c3d\u5feb\u53d1\u5e03\u4e00\u4efd\u201c\u8d44\u4ea7\u5b58\u53d6\u53ef\u8ffd\u6eaf+\u5f15\u64ce\u7248\u672c\u53ef\u9501\u5b9a+\u7248\u6743\u8d23\u4efb\u767d\u7eb8\u9ed1\u5b57\u201d\u7684\u6280\u672f\u627f\u8bfa\u5951\u7ea6\u3002\u5426\u5219\uff0c\u5b83\u6ce8\u5b9a\u53ea\u662f\u53c8\u4e00\u6b3e\u4f18\u79c0\u7684AI\u73a9\u5177\uff0c\u800c\u975e\u521b\u4f5c\u8005\u7ecf\u6d4e\u7684\u57fa\u5efa\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">Mubert API<\/span>\n                <\/div>\n<div class=\"comment-content\">Meet the new Mubert API. Edit tracks, swap stems, and generate more consistent music with our latest engine. Create tracks up to 2 hours long, stream music in real time, and integrate Mubert into your pipeline in minutes with Skills.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hey all<br \/>\nThanks for checking us out. We worked hard on this release and now you have full control on the music you generate. And you can build with us in few clicks using Claude\/Codex Skill. Please share your feedback!<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>7<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@alexmubert\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@alexmubert<\/a>&nbsp;nice launch.. congrats qq what\u2019s the average response time when requesting real-time stem swaps over the API?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>5<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Stems are the part that changes the workflow, everything else is a nicer reroll. The moment I can mute one layer and re-render only that, music stops being a slot machine and becomes an editable asset. For API use the thing that decides it is whether the same seed and prompt returns the same track next month, because branded content gets revised weeks after it ships. Consistency across sessions matters more than consistency inside one.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>4<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@asadmalik901\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@asadmalik901<\/a>&nbsp;That&#8217;s a great point. Once music becomes editable instead of something you regenerate from scratch, it fits much better into real creative workflows. I also agree that consistency is critical, especially for brands that revisit campaigns weeks or even months later.<\/p>\n<h3><\/h3>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@asadmalik901\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@asadmalik901<\/a>&nbsp;Asad has named the thing that decides whether this is an API or a toy, and I would push it one step harder.<\/p>\n<\/p>\n<p>Seed plus prompt determinism is not really the requirement. The requirement is determinism across model versions, and no vendor can promise that while also shipping a better engine. If the November model is genuinely better, the same seed hands you a better track, which is exactly wrong for a brand video that needs the one from September.<\/p>\n<\/p>\n<p>So the two things I would want written into the contract are a pinnable engine version, and generated tracks treated as immutable stored assets rather than something you regenerate. Re-fetch the artifact, do not re-roll it.<\/p>\n<\/p>\n<p>Vadim, is a generated track permanently addressable once created, and can a caller pin the engine version it was made with?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hi Product Hunt!<\/p>\n<p>For a long time, music APIs were mostly about sending a request and getting a finished audio file back. But teams building music into real products need much more: track editing, license and user management, usage controls, long-form generation, real-time streaming, and an integration process that does not slow development down.<\/p>\n<p>That is what we focused on with this release. The updated Mubert Music API now supports track editing, individual stems, more cohesive compositions powered by our latest engine, tracks up to two hours long, real-time streaming, and faster integration through Skills for Claude and Codex.<\/p>\n<p>I am especially excited to see what developers build with it, from creator tools and games to wellness, fitness, streaming, and entirely new forms of personalized media.<\/p>\n<p>We would love to hear your thoughts: what product would you add generative music to, and what would you need from an API to make it work?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>2<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hey all,<\/p>\n<p>Thanks for checking us out. This release is about control over what you generate. <\/p>\n<p>You can edit a track after it&#8217;s made, swap a single stem instead of starting over, and the new engine keeps it consistent across the track.<\/p>\n<p>And you can build with us in a few clicks using the Claude\/Codex Skill, so no wading through docs to get started.<\/p>\n<p>Would really love your feedback \u2014 especially from anyone who&#8217;s tried building with a music API before and hit a wall.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>2<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@kirill_kiryanov\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kirill_kiryanov<\/a>&nbsp;the stem-swap-without-full-reroll thing is the right fix, Asad&#8217;s point about it turning from a slot machine into an editable asset is exactly it. question tied to the &#8220;copyright-protected&#8221; framing on the tin though: once someone edits a track, swaps a stem, and ships that as part of a paid product, who actually holds the copyright on that specific edited output, the user or Mubert? asking because &#8220;copyright-protected&#8221; usually means &#8220;you won&#8217;t get DMCA&#8217;d for using it,&#8221; but it&#8217;s a separate question from &#8220;you own this specific derivative enough to enforce it if someone else rips your final mix.&#8221; those are different guarantees and only one of them matters if you&#8217;re building a commercial product on top of the API rather than just using the output as background music.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Licensing is where I got burned before. The licence covered my own content but excluded ads and anything shipped inside a paid app, so I ended up self-hosting a model instead. Does worldwide copyright-protected cover a track my software generates and posts for a paying customer, or only my own use?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>the adaptive playlists feel surprisingly natural for AI-made music, no robotic loops here. curious how it handles licensing for client use though.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#13<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/JEIBPDG4CJG65J\" class=\"app-title\">Polygres<\/a><\/p>\n<div class=\"one-liner\">Turn your entire database into a context window for AI<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">51<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Polygres\u5c06Postgres\u6570\u636e\u5e93\u76f4\u63a5\u8f6c\u5316\u4e3aAI\u4ee3\u7406\u7684\u201c\u5de5\u4f5c\u8bb0\u5fc6\u201d\uff0c\u901a\u8fc7\u7edf\u4e00\u7684\u6df7\u5408API\u540c\u65f6\u68c0\u7d22\u7ed3\u6784\u5316\u6570\u636e\u3001\u5173\u7cfb\u56fe\u8c31\u3001\u8bed\u4e49\u5411\u91cf\u548c\u5168\u6587\u7ed3\u679c\uff0c\u7701\u53bb\u72ec\u7acb\u7684\u5411\u91cf\u5e93\u3001\u56fe\u6570\u636e\u5e93\u548c\u540c\u6b65\u7ba1\u9053\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u4e3a\u73b0\u6709\u6570\u636e\u5feb\u901f\u6784\u5efa\u6709\u636e\u53ef\u4f9d\u7684AI\u4ee3\u7406\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/7c899ce1-fcf8-4d7d-8737-9dbe605391ad.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/15d75725-6ac5-48c0-be98-926d9b90c904.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/2b44fec5-1b0b-4bd6-91a4-52cad110ea26.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/8e85e390-c34f-4894-b5ba-3fdac6303d3e.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/c4152693-5099-4103-831c-0e1ae0e1cff9.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/ef9d7e8f-6817-49c5-9a68-a9391190d607.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/QIRCY6JnWlo\"><source src=\"https:\/\/youtu.be\/QIRCY6JnWlo\" type=\"video\/mp4\"><\/video><\/p>\n<div class=\"video-overlay\">\n<div class=\"play-icon\">\u25b6<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Open Source<\/span><br \/>\n            <span class=\"tag\">Developer Tools<\/span><br \/>\n            <span class=\"tag\">GitHub<\/span><br \/>\n            <span class=\"tag\">Database<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u4ee3\u7406\u8bb0\u5fc6<\/span><br \/>\n            <span class=\"tag\">\u6df7\u5408\u68c0\u7d22<\/span><br \/>\n            <span class=\"tag\">Postgres\u6269\u5c55<\/span><br \/>\n            <span class=\"tag\">GraphRAG<\/span><br \/>\n            <span class=\"tag\">\u5411\u91cf\u641c\u7d22<\/span><br \/>\n            <span class=\"tag\">\u5f00\u53d1\u8005\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u6570\u636e\u57fa\u7840\u8bbe\u65bd<\/span><br \/>\n            <span class=\"tag\">\u5f00\u6e90\u7ec4\u4ef6<\/span><br \/>\n            <span class=\"tag\">MCP\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">\u65e0\u9650\u4e0a\u4e0b\u6587<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u8d5e\u626c\u5176\u6d88\u9664\u540c\u6b65\u7ba1\u9053\u3001\u964d\u4f4e\u4e0a\u4e0b\u6587\u6210\u672c\u7684\u601d\u8def\u3002\u6838\u5fc3\u95ee\u9898\u96c6\u4e2d\u5728\uff1a\u68c0\u7d22\u901f\u5ea6\uff08\u5b98\u65b9\u56de\u590d\u7ea620-30\u6beb\u79d2\uff09\uff1b\u201c\u65e0\u9650\u4e0a\u4e0b\u6587\u201d\u673a\u5236\uff08\u5b98\u65b9\u89e3\u91ca\u4e3a\u6309\u9700\u52a8\u6001\u53d6\u6570\u800c\u975e\u771f\u6b63\u65e0\u9650\uff09\uff1b\u6570\u636e\u53ef\u8ffd\u6eaf\u6027\uff08\u6709\u7528\u6237\u4e25\u8083\u6307\u51fa\u9700\u63d0\u4f9b\u884cID\u3001\u65f6\u95f4\u6233\u7b49\u201c\u51ed\u8bc1\u201d\u4ee5\u652f\u6301\u4e8b\u540e\u5ba1\u8ba1\uff09\uff1b\u4ee5\u53ca\u80fd\u5426\u66ff\u4ee3Algolia\u7b49\u4e13\u7528\u641c\u7d22\u5f15\u64ce\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                Polygres\u7684\u5207\u5165\u70b9\u5f88\u806a\u660e\u2014\u2014\u5b83\u7cbe\u51c6\u547d\u4e2d\u4e86\u5f53\u524dAI\u5e94\u7528\u5f00\u53d1\u4e2d\u6700\u75db\u7684\u201c\u57fa\u7840\u8bbe\u65bd\u7f1d\u5408\u201d\u95ee\u9898\u3002\u56e2\u961f\u6ca1\u6709\u53d1\u660e\u65b0\u6570\u636e\u5e93\uff0c\u800c\u662f\u9009\u62e9\u5728\u5b58\u91cfPostgres\u4e0a\u505a\u201c\u5185\u5b58\u6269\u5c55\u201d\uff0c\u8fd9\u5927\u5927\u964d\u4f4e\u4e86\u91c7\u7528\u95e8\u69db\u3002\u201c\u514d\u540c\u6b65\u201d\u662f\u6700\u5927\u5356\u70b9\uff0c\u4f46\u8fd9\u4e5f\u6b63\u662f\u5176\u6280\u672f\u503a\u52a1\u7684\u85cf\u8eab\u5904\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u76ee\u524d\u6536\u5230\u7684\u53cd\u9988\u867d\u70ed\u60c5\uff0c\u4f46\u7f3a\u4e4f\u6df1\u5ea6\u6d4b\u8bc4\u6570\u636e\u3002\u5b98\u65b9\u5bf9\u201c\u901f\u5ea620-30ms\u201d\u7684\u56de\u5e94\u504f\u5411\u8425\u9500\u8bdd\u672f\uff0c\u672a\u8bf4\u660e\u5728\u6570\u636e\u91cf\u7ea7\u3001\u5e76\u53d1\u548c\u590d\u6742\u5173\u7cfb\u67e5\u8be2\u4e0b\u7684\u8868\u73b0\u3002\u66f4\u503c\u5f97\u8b66\u60d5\u7684\u662f\u201c\u65e0\u9650\u4e0a\u4e0b\u6587\u201d\u7684\u5b9a\u4e49\u2014\u2014\u5b83\u672c\u8d28\u662fRAG\u7684\u8c03\u5ea6\u4f18\u5316\uff0c\u800c\u975e\u6280\u672f\u7a81\u7834\uff0c\u5bf9\u201c\u5e7b\u89c9\u201d\u548c\u4e00\u81f4\u6027\u95ee\u9898\u6ca1\u6709\u63d0\u4f9b\u65b0\u89e3\u6cd5\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u6700\u6709\u529b\u7684\u8bc4\u8bba\u6765\u81ea\u90a3\u4f4d\u8d28\u7591\u201c\u53ef\u590d\u73b0\u6027\u201d\u7684\u7528\u6237\uff1a\u5f53AI\u57fa\u4e8e\u52a8\u6001\u6570\u636e\u5e93\u505a\u51fa\u51b3\u7b56\u65f6\uff0c\u5982\u4f55\u56de\u6eaf\u5b83\u5f53\u65f6\u201c\u770b\u5230\u201d\u4e86\u4ec0\u4e48\uff1f\u8fd9\u662f\u6240\u6709\u57fa\u4e8e\u5b9e\u65f6\u6570\u636e\u7684AI\u7cfb\u7edf\u90fd\u65e0\u6cd5\u56de\u907f\u7684\u5408\u89c4\u4e0e\u5ba1\u8ba1\u95ee\u9898\u3002\u5982\u679cPolygres\u80fd\u63d0\u4f9b\u7c7b\u4f3c\u201c\u68c0\u7d22\u51ed\u8bc1\u201d\u7684\u673a\u5236\uff08\u8fd4\u56de\u65f6\u9644\u5e26\u884cID\u3001\u6392\u5e8f\u3001\u65f6\u95f4\u6233\uff09\uff0c\u5b83\u5c31\u80fd\u4ece\u201c\u4fbf\u5229\u5de5\u5177\u201d\u8dc3\u5347\u4e3a\u201c\u4f01\u4e1a\u7ea7\u53ef\u4fe1\u4efb\u57fa\u7840\u8bbe\u65bd\u201d\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u5f53\u524d\u5b9a\u4f4d\u6a21\u7cca\u2014\u2014\u65e2\u662f\u5f00\u53d1\u8005\u53cb\u597d\u7684\u514d\u8d39\u5de5\u5177\uff0c\u53c8\u5ba3\u79f0\u201c\u4f01\u4e1a\u5c31\u7eea\u201d\u3002\u5efa\u8bae\u56e2\u961f\u96c6\u4e2d\u706b\u529b\u5543\u4e0b\u201c\u56fe\u5173\u7cfb+\u5411\u91cf\u201d\u6df7\u5408\u67e5\u8be2\u7684\u6027\u80fd\u4f18\u5316\u548c\u5ba1\u8ba1\u8ffd\u8e2a\u4e24\u5757\u786c\u9aa8\u5934\uff0c\u800c\u4e0d\u662f\u6025\u4e8e\u5ba3\u4f20\u201c\u65e0\u9650\u201d\u6982\u5ff5\u3002\u6bd5\u7adf\uff0c\u5f00\u53d1\u8005\u4f1a\u4e3a\u7701\u65f6\u4e70\u5355\uff0c\u4f46\u53ea\u6709\u4f01\u4e1a\u4f1a\u4e3a\u53ef\u8ffd\u6eaf\u6027\u4ed8\u8d39\u3002\u6574\u4f53\u65b9\u5411\u6b63\u786e\uff0c\u4f46\u8ddd\u79bb\u201c\u751f\u4ea7\u7ea7\u201d\u4ecd\u6709\u8ddd\u79bb\uff0c\u9700\u89c2\u5bdf\u5176\u5728\u8fd9\u8f6e\u70ed\u5ea6\u892a\u53bb\u540e\u7684\u5b9e\u9645\u7559\u5b58\u7387\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">Polygres<\/span>\n                <\/div>\n<div class=\"comment-content\">Polygres turns Postgres into working memory for AI agents. Retrieve structured rows, connected relationships, semantic matches, and full-text results through one hybrid API. All without a separate vector store, graph database, or sync pipeline. Build grounded agents over the data you already have, with relational, graph, and vector context joined at the source. Use the managed cloud or self-host with our open source components. Polygres is currently free to use, just sign up!<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hey Product Hunt \ud83d\udc4b<\/p>\n<p>We built Polygres because AI agents have a context problem.<\/p>\n<p>Most teams solve this by adding more infrastructure: a vector database, a graph database, a search service, sync pipelines, and custom retrieval code to hold everything together.<\/p>\n<p>We wanted a simpler model: What if the database itself became the agent\u2019s context window? What if we could deploy graphRAG with one click?<\/p>\n<p>You can use Polygres as a managed platform or work with the open-source SDK and your existing Postgres schema.<\/p>\n<p>We\u2019d especially love feedback from people building agents, copilots, memory systems, and AI-native products. Thanks for checking out Polygres. We\u2019ll be here throughout the launch answering questions and learning from the community.<\/p>\n<p>\u2014 Dale, Dalton &amp; Damien<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>13<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@evokoa\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@evokoa<\/a>&nbsp;always struggling with context window and optimize cost as my db grows large, and i started moving into using polygres. i was very suprised to see how my agent can queries everything a lot more efficiently in term of memory and cost after that like literally. still working on trying out the product more as the knowledge based become larger, but this looks exciting!!!<\/p>\n<p>Congrats the team on the launch<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>4<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@evokoa\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@evokoa<\/a>&nbsp;I like the idea of reducing unnecessary complexity<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>I\u2019m going to try this for my mental state agent. It always need more context <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>5<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@dylan_bryan2\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dylan_bryan2<\/a>&nbsp;That&#8217;s a great idea! Happy to help you build this out you can dm me on my X.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>4<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">@dylan_bryan2 let\u2019s goo!! It\u2019s free now try it out, and you can use the cli and skill to do it directly in Claude code \/ codex!<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>How fast does the search get? <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>4<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">@nhina typically in the milliseconds, like 20-30ms \ud83d\ude42<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Love the launch! Who would benefit the most from using Polygres?<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">@ioanamarin anyone building ai agents that need to connect to data<\/p>\n<p>If u ever plan to scale u should use polygres!<\/p>\n<p>From day 0 to day 10000<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Congrats on shipping this! Turning Postgres itself into the retrieval layer instead of bolting on a vector store and a graph db is such a clean idea. I&#8217;ve been dealing with sync pipelines between Postgres and a separate vector store on my own agent project, this would&#8217;ve saved me weeks. Bookmarking for the next build.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">@dmitriipokidov thank you!<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Love the launch polygres team! How exactly do you guarantee an infinite context window? <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@lucapiekarski\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@lucapiekarski<\/a>&nbsp;The full database remains available as external memory. For each request, Polygres retrieves and ranks the most relevant rows, relationships, and search results, then fits that information into the model\u2019s actual token limit.<\/p>\n<\/p>\n<p>As the conversation continues, the system can fetch additional context on demand instead of trying to load the entire database into one prompt. So the database is effectively unbounded context.<\/p>\n<\/p>\n<p>We&#8217;ve dubbed this the infinite context window!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>How can I connect it to my polygres to my agent? Can I use mcp?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@1nk\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@1nk<\/a>&nbsp;Hey inky! so we have a cli and skill that you can connect directly to the agent \ud83d\ude00 <a href=\"https:\/\/docs.evokoa.com\/polygres\/agent-skills\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/docs.evokoa.com\/polygres\/agent-skills<\/a><\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Its helping me a lot in vibe coding<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@istp\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@istp<\/a>&nbsp;Glad to hear that! our goal is to make it incredibly easy to deploy a production grade AI agent \ud83d\ude00 Build it on sunday, be enterprise ready by monday \ud83d\ude00 <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>ayo this is gonna solve a big old problem surely and make good relation work between claude code and codex, cant wait to use this myself \ud83d\ude09, my stupid claude can be good guy now thanks<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@b4boom\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@b4boom<\/a>&nbsp;Yeah! For code specifically we are releasing a feature called Polygres Pocket soon, stay tuned!<\/p>\n<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Why graphs over loops?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@james_yang7\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@james_yang7<\/a>&nbsp;Loops are just shitty graphs. I wrote a whole piece about this \ud83d\ude00 <a href=\"https:\/\/x.com\/daleverett\/status\/2078969402046009374\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/x.com\/daleverett\/status\/2078969402046009374<\/a><\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">@evokoa 100%. Well said!<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>I saw Polygres on X and got a quick demo by its founder Dale. AMAZING PRODUCT AND EVEN AMAZING FOUNDER. would be using polygres in every one of my products from now.  The infinite context window is real.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Can it replace Algolia?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Really good idea, need to try it ASAP<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The one-store argument is the right one. Sync pipelines between a vector store and the source of truth are where most of these systems quietly go wrong, so removing the sync is worth more than any benchmark number you could put next to it.<\/p>\n<\/p>\n<p>The thing I would want to know: retrieving from the live database buys you freshness and costs you reproducibility.<\/p>\n<\/p>\n<p>If the agent&#8217;s context is whatever the DB held at that moment, then the same question next Tuesday gets a different answer, and I cannot reconstruct what the agent was actually looking at when it made a call I now have to defend.<\/p>\n<\/p>\n<p>Anywhere there is an approval step, that matters more than latency does.<\/p>\n<\/p>\n<p>So does a retrieval come back with a receipt? Row ids, ranking, timestamp, stored next to the decision. Not for the agent. For the human who has to explain it three months later.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Calling it infinite context is a stretch, but fetching more on demand instead of stuffing everything into one prompt is the right shape. Closer to how people actually recall things anyway.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#14<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/MRTYPEJVMT4RN3\" class=\"app-title\">VulX Watch<\/a><\/p>\n<div class=\"one-liner\">Vibe-code freely. We watch your back<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">39<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>VulX Watch \u662f\u4e00\u4e2a\u53ea\u8bfb\u7684AI\u4ee3\u7801\u5b89\u5168\u5ba1\u67e5\u5de5\u5177\uff0c\u8fde\u63a5GitHub\u4ed3\u5e93\u540e\uff0c\u5b83\u80fd\u72ec\u7acb\u6838\u67e5AI\u751f\u6210\u7684\u4ee3\u7801\u662f\u5426\u5b58\u5728\u6f0f\u6d1e\uff0c\u5e76\u9644\u4e0a\u8bc1\u636e\u548c\u5177\u4f53\u4ee3\u7801\u884c\uff0c\u89e3\u51b3\u201cAI\u5199\u4ee3\u7801\u4f46\u65e0\u6cd5\u81ea\u8bc1\u5b89\u5168\u201d\u7684\u4fe1\u4efb\u75db\u70b9\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/92f69643-7998-4f3d-aabb-32b3a6779a37.webp?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/382c65fe-f0c9-4c18-8b52-904ff7978bde.webp?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/00cf04f9-443d-42c6-99c7-e7d60e920bc3.webp?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/9608e164-c378-4dd2-9138-279c9b1d5447.webp?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/f941eb3e-a4bd-479b-9dae-70e4a1a789cd.webp?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/ca69b4e7-04c4-4e97-826e-230eaad18898.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/5a90c991-4e75-424a-82fe-faa591764061.webp?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/970464f8-b8cd-43c0-b1b7-13cffd03df6b.webp?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/b58303e6-fcc0-4a02-9041-b4fa5f193d62.webp?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/be68141b-e7f3-45b0-aa60-01628cf3cd48.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/ryLOiUsgcE0\"><source src=\"https:\/\/youtu.be\/ryLOiUsgcE0\" type=\"video\/mp4\"><\/video><\/p>\n<div class=\"video-overlay\">\n<div class=\"play-icon\">\u25b6<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Analytics<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span><br \/>\n            <span class=\"tag\">GitHub<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u4ee3\u7801\u5ba1\u67e5<\/span><br \/>\n            <span class=\"tag\">AI\u5b89\u5168<\/span><br \/>\n            <span class=\"tag\">\u6f0f\u6d1e\u626b\u63cf<\/span><br \/>\n            <span class=\"tag\">Vibe Coding<\/span><br \/>\n            <span class=\"tag\">GitHub\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">\u4f9b\u5e94\u94fe\u5b89\u5168<\/span><br \/>\n            <span class=\"tag\">DevSecOps<\/span><br \/>\n            <span class=\"tag\">\u4ee3\u7801\u5ba1\u8ba1<\/span><br \/>\n            <span class=\"tag\">\u72ec\u7acb\u9a8c\u8bc1<\/span><br \/>\n            <span class=\"tag\">SaaS\u5de5\u5177<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u666e\u904d\u8ba4\u53ef\u5176\u89e3\u51b3\u201cAI\u5199\u7801\u65e0\u5b89\u5168\u515c\u5e95\u201d\u7684\u75db\u70b9\uff0c\u5c24\u5176\u9002\u5408\u65e0\u5b89\u5168\u4eba\u5458\u7684\u5c0f\u56e2\u961f\u3002\u4e3b\u8981\u95ee\u9898\u96c6\u4e2d\u5728\uff1a\u53d1\u73b0\u6f0f\u6d1e\u540e\u7684\u901a\u77e5\u65b9\u5f0f\u662f\u5426\u652f\u6301Slack\u6216\u90ae\u4ef6\uff1b\u4ee5\u53ca\u521b\u59cb\u4eba\u56de\u5e94\u79f0\u4ea7\u54c1\u514d\u8d39\uff0c\u5e76\u6b22\u8fce\u6539\u8fdb\u5efa\u8bae\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                VulX Watch\u5207\u4e2d\u7684\u662f\u4e00\u4e2a\u771f\u5b9e\u4e14\u8fc5\u901f\u81a8\u80c0\u7684\u75db\u70b9\uff1aAI\u7f16\u7a0b\u5de5\u5177\u8ba9\u4ee3\u7801\u4ea7\u51fa\u6548\u7387\u98d9\u5347\uff0c\u4f46\u5b89\u5168\u9a8c\u8bc1\u80fd\u529b\u5374\u771f\u7a7a\u3002\u4ea7\u54c1\u5b9a\u4f4d\u7cbe\u51c6\u2014\u2014\u4e0d\u662f\u53c8\u4e00\u4e2a\u626b\u63cf\u5668\uff0c\u800c\u662f\u201cAI\u7684\u72ec\u7acb\u5ba1\u8ba1\u5458\u201d\uff0c\u76f4\u51fb\u5927\u6a21\u578b\u201c\u65e2\u5f53\u8fd0\u52a8\u5458\u53c8\u5f53\u88c1\u5224\u201d\u7684\u903b\u8f91\u6096\u8bba\u3002\u4ece\u8bc4\u8bba\u53cd\u9988\u770b\uff0c\u7528\u6237\u4e0d\u4ec5\u8ba4\u53ef\u5176\u4ef7\u503c\uff0c\u66f4\u654f\u9510\u8ffd\u95ee\u4e86\u201c\u6301\u7eed\u76d1\u63a7\u201d\u548c\u201c\u544a\u8b66\u96c6\u6210\u201d\u7b49\u5de5\u7a0b\u5316\u7ec6\u8282\uff0c\u8fd9\u6697\u793a\u4e86\u8be5\u4ea7\u54c1\u4ece\u201c\u4e00\u6b21\u6027\u626b\u63cf\u201d\u5411\u201c\u6301\u7eed\u5b89\u5168\u8fd0\u8425\u201d\u6f14\u8fdb\u7684\u53ef\u80fd\u6027\u3002\u4f46\u9510\u8bc4\u9700\u6307\u51fa\u4e24\u70b9\u9690\u5fe7\uff1a\u5176\u4e00\uff0c39\u7968\u7684\u51b7\u542f\u52a8\u6570\u636e\u53cd\u6620\u5e02\u573a\u7ade\u4e89\u6fc0\u70c8\uff0cGitHub\u539f\u751f\u4ee3\u7801\u626b\u63cf\u3001Snyk\u7b49\u8001\u724c\u73a9\u5bb6\u5df2\u5360\u4f4d\uff0cVulX Watch\u5fc5\u987b\u8bc1\u660e\u5176\u201cAI\u4ee3\u7801\u201d\u7684\u4e13\u9879\u68c0\u6d4b\u80fd\u529b\u76f8\u6bd4\u901a\u7528\u5de5\u5177\u5b58\u5728\u663e\u8457\u4ee3\u5dee\uff0c\u5426\u5219\u201c\u72ec\u7acb\u9a8c\u8bc1\u201d\u53ea\u662f\u4e2a\u53d9\u4e8b\u6545\u4e8b\uff1b\u5176\u4e8c\uff0c\u514d\u8d39\u7b56\u7565\u867d\u80fd\u5f15\u6d41\uff0c\u4f46\u5b89\u5168\u5de5\u5177\u7684\u6838\u5fc3\u58c1\u5792\u5728\u4e8e\u6f0f\u6d1e\u5e93\u7684\u66f4\u65b0\u901f\u5ea6\u548c\u8bef\u62a5\u7387\u63a7\u5236\uff0c\u82e5\u6ca1\u6709\u8db3\u591f\u7684\u4ed8\u8d39\u5ba2\u6237\u652f\u6491\uff0c\u5176\u5a01\u80c1\u60c5\u62a5\u7684\u65f6\u6548\u6027\u53ef\u80fd\u6210\u4e3a\u81f4\u547d\u77ed\u677f\u3002\u603b\u4f53\u800c\u8a00\uff0c\u4ea7\u54c1\u65b9\u5411\u6b63\u786e\uff0c\u4f46\u4ece\u201c\u5de5\u5177\u201d\u5230\u201c\u53ef\u4fe1\u8d56\u7684\u5b89\u5168\u57fa\u7840\u8bbe\u65bd\u201d\uff0c\u8def\u8fd8\u5f88\u957f\uff0c\u5173\u952e\u770b\u5176\u80fd\u5426\u5728AI\u4ee3\u7801\u7279\u6709\u7684\u5b89\u5168\u6a21\u5f0f\uff08\u5982\u5e7b\u89c9API\u8c03\u7528\u3001\u9519\u8bef\u4f9d\u8d56\u5f15\u7528\uff09\u4e0a\u5efa\u7acb\u4e0d\u53ef\u66ff\u4ee3\u7684\u68c0\u6d4b\u80fd\u529b\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">VulX Watch<\/span>\n                <\/div>\n<div class=\"comment-content\">The AI that built your app can&#8217;t verify its own work. VulX Watch can, connect a GitHub repo and it independently reviews what your AI actually shipped, shows you what&#8217;s vulnerable, and backs every finding with the evidence and the exact line. Read-only, never touches your code, free to try. Keep building fast, and let something independent certify what you made.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hey PH \ud83d\udc4b<\/p>\n<p>AI writes most of your app now but the same AI can&#8217;t tell you if what it shipped is safe. It&#8217;s marking its own homework.<\/p>\n<p>VulX Watch is the independent check. <\/p>\n<p>It started as an enterprise product; we&#8217;re bringing it to the builders who need it just as much, so Watch is free while we build it out.<\/p>\n<p>Would love feedback, especially if you build with AI tools: what would make you trust something like this with your repo?<\/p>\n<p>\u2014 Tomek, Founder of VulX<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>4<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>If you have any questions or feedback I would love to hear it and will try to answer as quickly as possible thank you again for being here<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@ngotomek\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ngotomek<\/a>&nbsp;Super clean landing page! How do notifications work once a vulnerability is found? Can we route alerts to Slack or Email&#8230;<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>3<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Congrats on the launch of VulX Watch! This is a thoughtful idea and I\u2019m excited to see where it goes. \ud83d\ude4c<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@leon_ostrez\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@leon_ostrez<\/a>&nbsp;Thank you, appreciate the words of support. Any suggestions for improvement?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>With the increase of vibe coders and recent surge of vulnerabilities in many packages and libraries, tools like VulX are much needed, excited to try it out<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@kisekiya\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kisekiya<\/a>&nbsp;Thanks \ud83d\ude4f That surge is what we are going after, more people shipping faster with less ability to verify it. It&#8217;s free, so give it a run and let me know what you think<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>This solves a very real problem, especially for small teams shipping AI-generated code without a dedicated security function. Continuous re-checking as new vulnerabilities emerge is far more valuable than a one-time scan. The positioning around &#8220;your model can\u2019t audit itself&#8221; is sharp and easy to understand. <\/p>\n<p>Great product.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@chirag_chamoli\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@chirag_chamoli<\/a>&nbsp;Thanks means a lot, and you named the exact reason we built it. The &#8220;small team shipping AI code with no security function&#8221; is precisely who gets left out. Real security tooling is priced for companies with a security budget and those are the people who need it just as much. Appreciate you taking the time \ud83d\ude4f<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Sounds very interesting, worth trying as i do vibe coding a lot!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@istiakahmad\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@istiakahmad<\/a>&nbsp;Thanks a lot. That&#8217;s exactly what we&#8217;re going for, letting people build as much as they want, free for now, with the guarantee that whatever you vibe-code gets an independent verification. So you don&#8217;t have to worry as much about what your AI is producing. Thank you again for this comment and if you have any suggestions on improvements please let us know<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#15<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/U42ZRFFJXZYDVZ\" class=\"app-title\">Nommer.ai<\/a><\/p>\n<div class=\"one-liner\">Turn recipes into 2-player mode<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">21<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Nommer.ai \u5c06\u4efb\u610f\u83dc\u8c31\u62c6\u89e3\u4e3a\u53cc\u4eba\u534f\u4f5c\u6b65\u9aa4\uff0c\u8ba9\u60c5\u4fa3\u6216\u642d\u6863\u5728\u505a\u996d\u65f6\u5404\u53f8\u5176\u804c\u3001\u540c\u6b65\u6536\u5c3e\uff0c\u89e3\u51b3\u201c\u4e00\u4eba\u6307\u6325\u3001\u4e00\u4eba\u6253\u6742\u201d\u7684\u534f\u4f5c\u6469\u64e6\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/f253dd98-eef9-4fb7-abf2-ce82d7f59fbb.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/7be0650b-9569-415b-b87a-096843f93871.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/871013dd-9a9f-4f24-b8e1-f6e3288aee8c.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/e6613c64-8ea2-4516-9a4c-0c953656b576.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/a352fb78-7d1f-4050-b4c1-96a0e38da40a.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/4c3a26d0-c223-4012-8413-df6698107a78.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/53de5b44-0dc6-46c7-80fa-63a7c18e6e97.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/3ab4f29f-fd90-448a-bc64-1d43999164b9.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/6_jLi_RkQkY\"><source src=\"https:\/\/youtu.be\/6_jLi_RkQkY\" type=\"video\/mp4\"><\/video><\/p>\n<div class=\"video-overlay\">\n<div class=\"play-icon\">\u25b6<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">iOS<\/span><br \/>\n            <span class=\"tag\">Cooking<\/span><br \/>\n            <span class=\"tag\">Food &#038; Drink<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u53cc\u4eba\u70f9\u996a<\/span><br \/>\n            <span class=\"tag\">\u83dc\u8c31\u534f\u4f5c<\/span><br \/>\n            <span class=\"tag\">\u53a8\u623f\u6548\u7387<\/span><br \/>\n            <span class=\"tag\">\u60c5\u4fa3\u505a\u996d<\/span><br \/>\n            <span class=\"tag\">\u4efb\u52a1\u5206\u5de5<\/span><br \/>\n            <span class=\"tag\">\u667a\u80fd\u83dc\u8c31<\/span><br \/>\n            <span class=\"tag\">\u751f\u6d3b\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u534f\u4f5c\u5e94\u7528<\/span><br \/>\n            <span class=\"tag\">\u70f9\u996a\u4f53\u9a8c<\/span><br \/>\n            <span class=\"tag\">\u56e2\u961f\u505a\u996d<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u666e\u904d\u8ba4\u53ef\u53cc\u4eba\u534f\u4f5c\u7684\u75db\u70b9\u771f\u5b9e\uff0c\u521b\u59cb\u4eba\u4e5f\u5766\u8bda\u63cf\u8ff0\u4e86\u4ece\u201c\u4e0d\u4e00\u8d77\u505a\u996d\u201d\u5230\u201c\u4eab\u53d7\u534f\u4f5c\u201d\u7684\u8f6c\u53d8\u3002\u6838\u5fc3\u7591\u95ee\u805a\u7126\u52a8\u6001\u6027\uff1a\u82e5\u67d0\u4e00\u6b65\u63d0\u524d\u5b8c\u6210\uff0c\u662f\u5426\u4f1a\u5b9e\u65f6\u91cd\u65b0\u5206\u914d\u4efb\u52a1\u4ee5\u907f\u514d\u7b49\u5f85\uff1f\u53e6\u6709\u7528\u6237\u56e0\u5df2\u719f\u8bb0\u83dc\u8c31\u800c\u6682\u65f6\u65e0\u9700\u6c42\uff0c\u4f46\u80af\u5b9a\u5bf9\u65b0\u624b\u671f\u6709\u5de8\u5927\u5e2e\u52a9\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                Nommer.ai \u7684\u5207\u5165\u70b9\u5f88\u5201\u94bb\uff1a\u5b83\u4e0d\u89e3\u51b3\u201c\u505a\u4ec0\u4e48\u996d\u201d\u6216\u201c\u600e\u4e48\u505a\u996d\u201d\uff0c\u800c\u662f\u89e3\u51b3\u201c\u4e24\u4e2a\u4eba\u600e\u4e48\u540c\u65f6\u505a\u4e00\u987f\u996d\u201d\u7684\u6d41\u7a0b\u7ba1\u7406\u95ee\u9898\u3002\u8fd9\u672c\u8d28\u4e0a\u662f\u5c06\u83dc\u8c31\u4ece\u4fe1\u606f\u5de5\u5177\u91cd\u6784\u4e3a\u534f\u4f5c\u534f\u8bae\u2014\u2014\u628a\u4e3b\u53a8\u7684\u9690\u6027\u8c03\u5ea6\u6743\uff08\u201c\u4f60\u5207\u6d0b\u8471\u201d\u201c\u5148\u522b\u52a8\u9505\u201d\uff09\u663e\u6027\u5316\u4e3a\u5e76\u884c\u4efb\u52a1\u6d41\uff0c\u8fd9\u662f\u5bf9\u70f9\u996a\u573a\u666f\u4e0b\u201c\u5173\u7cfb\u7ecf\u6d4e\u5b66\u201d\u7684\u7cbe\u51c6\u6355\u6349\u3002\u5176\u5546\u4e1a\u6a21\u578b\u4e5f\u8db3\u591f\u806a\u660e\uff1a\u5bfc\u5165\u83dc\u8c31\u514d\u8d39\uff0c\u53ea\u6709\u53cc\u4eba\u534f\u4f5c\u6a21\u5f0f\u624d\u6d88\u8017\u79ef\u5206\uff0c\u76f4\u63a5\u4e3a\u201c\u591a\u4eba\u540c\u65f6\u4f7f\u7528\u201d\u8fd9\u4e00\u7a00\u7f3a\u573a\u666f\u5b9a\u4ef7\uff0c\u907f\u514d\u4e86\u4e0e\u514d\u8d39\u83dc\u8c31\u5e93\u7684\u6b63\u9762\u7ade\u4e89\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u4ea7\u54c1\u76ee\u524d\u66b4\u9732\u7684\u77ed\u677f\u4e5f\u5f88\u660e\u663e\uff1a\u6700\u5173\u952e\u7684\u52a8\u6001\u8d1f\u8f7d\u5747\u8861\u80fd\u529b\uff08\u6b65\u9aa4\u63d0\u524d\u5b8c\u6210\u540e\u7684\u4efb\u52a1\u91cd\u5206\u914d\uff09\u5728\u8bc4\u8bba\u4e2d\u672a\u83b7\u660e\u786e\u56de\u5e94\uff0c\u8fd9\u6070\u6070\u662f\u534f\u4f5c\u7c7b\u5de5\u5177\u4ece\u201c\u6f14\u793a\u60ca\u8273\u201d\u8d70\u5411\u201c\u65e5\u5e38\u4f9d\u8d56\u201d\u7684\u5206\u6c34\u5cad\u2014\u2014\u5982\u679c\u6d41\u7a0b\u50f5\u5316\uff0c\u7528\u6237\u5f88\u5feb\u5c31\u4f1a\u9000\u5316\u56de\u201c\u4e00\u4eba\u4e3b\u5bfc\u3001\u4e00\u4eba\u5237\u624b\u673a\u201d\u7684\u65e7\u6a21\u5f0f\u3002\u6b64\u5916\uff0c\u4ea7\u54c1\u8fc7\u5ea6\u805a\u7126\u4e8e\u201c\u60c5\u4fa3\u201d\u8fd9\u4e00\u751c\u871c\u4f46\u72ed\u7a84\u7684\u753b\u50cf\uff0c\u5ffd\u7565\u4e86\u5408\u79df\u5ba4\u53cb\u3001\u4eb2\u5b50\u534f\u4f5c\u3001\u751a\u81f3\u4e13\u4e1a\u540e\u53a8\u9884\u6f14\u7b49\u540c\u6837\u9ad8\u9891\u7684\u591a\u4eba\u70f9\u996a\u573a\u666f\uff0c\u8fd9\u9650\u5236\u4e86\u5176\u5929\u82b1\u677f\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u53e6\u4e00\u4e2a\u9690\u60a3\u662f\u4e60\u60ef\u8fc1\u79fb\u6210\u672c\uff1a\u7528\u6237\u5df2\u719f\u8bb0\u83dc\u8c31\u540e\uff0c\u4ea7\u54c1\u7684\u7c98\u6027\u4f1a\u6025\u5267\u8870\u51cf\u3002\u8981\u7a81\u7834\u8fd9\u4e00\u70b9\uff0cNommer \u9700\u8981\u4ece\u201c\u83dc\u8c31\u6267\u884c\u5668\u201d\u8fdb\u5316\u4e3a\u201c\u534f\u4f5c\u5173\u7cfb\u7684\u4e2d\u67a2\u201d\u2014\u2014\u4f8b\u5982\u8bb0\u5f55\u4f60\u4eec\u6700\u9ed8\u5951\u7684\u4efb\u52a1\u5206\u914d\u6a21\u5f0f\u3001\u751f\u6210\u5bb6\u5ead\u4e13\u5c5e\u7684\u534f\u4f5c\u83dc\u8c31\u5e93\uff0c\u751a\u81f3\u5c06\u53cc\u4eba\u534f\u4f5c\u7684\u6570\u636e\u6c89\u6dc0\u4e3a\u4e2a\u6027\u5316\u7684\u70f9\u996a\u80fd\u529b\u753b\u50cf\u3002\u5426\u5219\uff0c\u5b83\u7ec8\u7a76\u662f\u4e00\u4e2a\u201c\u604b\u7231\u521d\u671f\u7684\u9ad8\u6548\u73a9\u5177\u201d\uff0c\u800c\u975e\u957f\u671f\u53a8\u623f\u57fa\u7840\u8bbe\u65bd\u3002\u4ece\u6295\u7968\u6570\u548c\u8bc4\u8bba\u70ed\u5ea6\u770b\uff0c\u56e2\u961f\u5177\u5907\u771f\u5b9e\u573a\u666f\u6d1e\u5bdf\u529b\uff0c\u4f46\u6280\u672f\u5151\u73b0\u529b\u5c06\u662f\u51b3\u5b9a\u5176\u751f\u6b7b\u7684\u5173\u952e\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">Nommer.ai<\/span>\n                <\/div>\n<div class=\"comment-content\">Nommer turns any recipe into 2-player mode so you can cook together with ease. The core of the app is a unique cooking interface that splits a recipe into steps for each chef; one might do the onion cutting prep while the other creates a sauce for instance. At the final step, everything always comes together as a team. Unlike other recipe apps, you can import and cook as many recipes as you want; you only spend credits when you cook together with another chef.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hi everyone!<\/p>\n<p>Me and my gf both love cooking, but always struggled to cook together because there&#8217;s a lot of tiny friction points that make it unpractical.<\/p>\n<p>We talked about it with friends and turns out lots of people share this experience. For most people cooking together is more trouble than its worth because whoever is the lead chef needs to coordinate what the co-chef does, effectively cancelling out any time gain they&#8217;d get. On the other hand the co-chef feels kind of useless most of the time and continuously needs to ask the lead chef for tasks to do, disrupting each others&#8217; flow. <\/p>\n<\/p>\n<p>So me and my gf ultimately decided that we just don&#8217;t cook together.<\/p>\n<\/p>\n<p>Interviewing friends and coworkers, this is the solution most couples come up with even though they do really desire to cook together.<\/p>\n<\/p>\n<p>Unsatisfied by this, we set out to fix this. Nommer is the v1 solution to this problem. <\/p>\n<p>For us Nommer massively improves the cooking together experience by taking on the labor of coordinating who does what in a balanced manner. With Nommer, each chef focuses on their own tasks: Chef A cuts the onions, while Chef B grates the carrots. Chef B then makes the sauce while the Chef A grills something in the pan. In the final phase, everything comes together seamlessly as a joint finishing step.<\/p>\n<p>It has been really surprising how well it works for us. Cooking together has changed from a friction point to something we really enjoy doing together; so even if no one else likes this app it&#8217;s a big win for us personally \ud83d\ude42<\/p>\n<p>That said, very curious what the Product Hunt community thinks after trying it out. Anything that was unclear that needs fixing?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>4<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@garmdotcom\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@garmdotcom<\/a>&nbsp;Really interesting approach. I&#8217;m curious\u2014how does Nommer handle recipes where one step finishes earlier than expected? Does it dynamically rebalance tasks so one person isn&#8217;t left waiting?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Ngl me and my dad are gonna use this \ud83d\ude02\ud83d\ude02\ud83d\udcaa<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@jamesjustgains\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@jamesjustgains<\/a>&nbsp;awesome!! Let me know how it goes \ud83d\ude42<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Honestly, I rarely cook from recipes now because I\u2019ve memorized most of the ones we make. But a few years ago, when my wife and I were still figuring out how to cook together without one of us becoming the designated onion cutter, this would have been a game changer \ud83d\ude05 Congrats on the launch!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#16<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/YMSRZ34P5R4EO5\" class=\"app-title\">Ctrl+Shift+3<\/a><\/p>\n<div class=\"one-liner\">A calm, chronological, text-first community platform.<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">16<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Ctrl+Shift+3\u662f\u4e00\u6b3e\u4e3b\u6253\u201c\u5e73\u9759\u3001\u65f6\u95f4\u7ebf\u6392\u5e8f\u3001\u7eaf\u6587\u672c\u4f18\u5148\u201d\u7684\u793e\u533a\u5e73\u53f0\uff0c\u65e8\u5728\u4e3a\u538c\u5026\u7b97\u6cd5\u55a7\u56a3\u548c\u5546\u4e1a\u5bfc\u5411\u793e\u4ea4\u5a92\u4f53\u7684\u7528\u6237\uff0c\u63d0\u4f9b\u4e00\u4e2a\u56de\u5f52Web 1.0\/2.0\u6781\u7b80\u4ea4\u6d41\u6c1b\u56f4\u7684\u7ebf\u4e0a\u7a7a\u95f4\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/08e38924-ac76-404c-99f1-65e14ed057a7.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/4912df91-a6a7-410e-93ca-8f0fd516082d.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/7cb72500-31a5-4767-adf7-607bd48df6ae.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/3f93a531-9e1d-4bf8-b917-bb864210e7a0.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/eeae8dff-8f3b-46c7-9762-ff8da0983214.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">iOS<\/span><br \/>\n            <span class=\"tag\">Social Media<\/span><br \/>\n            <span class=\"tag\">Community<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u793e\u533a\u5e73\u53f0<\/span><br \/>\n            <span class=\"tag\">\u7eaf\u6587\u672c\u793e\u4ea4<\/span><br \/>\n            <span class=\"tag\">\u65f6\u95f4\u7ebf\u4fe1\u606f\u6d41<\/span><br \/>\n            <span class=\"tag\">\u6781\u7b80\u4e3b\u4e49<\/span><br \/>\n            <span class=\"tag\">\u53cd\u7b97\u6cd5<\/span><br \/>\n            <span class=\"tag\">\u9690\u79c1\u4fdd\u62a4<\/span><br \/>\n            <span class=\"tag\">Web 4.0<\/span><br \/>\n            <span class=\"tag\">iOS\u5e94\u7528<\/span><br \/>\n            <span class=\"tag\">\u66ff\u4ee3\u793e\u4ea4<\/span><br \/>\n            <span class=\"tag\">\u6162\u793e\u4ea4<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u8ba4\u53ef\u201c\u56de\u5f52\u7b80\u5355\u201d\u7684\u5b9a\u4f4d\uff0c\u4f46\u8d28\u7591\u5176\u5546\u4e1a\u6a21\u5f0f\u80fd\u5426\u6301\u7eed\uff0c\u8ba4\u4e3a\u4ec5\u9760\u201c\u4e0d\u8d2a\u8d22\u201d\u96be\u4ee5\u652f\u6491\u6258\u7ba1\u4e0e\u5ba1\u6838\u6210\u672c\uff1b\u53e6\u900f\u9732iOS\u7248\u5df2\u63d0\u4ea4\u5ba1\u6838\uff0c\u5f00\u53d1\u8005\u79f0\u66f4\u4f18\u7248\u672c\u56e0\u82f9\u679c\u5ba1\u6838\u5ef6\u8fdf\u53d1\u5e03\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                Ctrl+Shift+3\u7684\u201c\u53cd\u5546\u4e1a\u5316\u201d\u53d9\u4e8b\u7cbe\u51c6\u8e29\u4e2d\u4e86\u540e\u7b97\u6cd5\u65f6\u4ee3\u7528\u6237\u7684\u60c5\u7eea\u75db\u70b9\u2014\u2014\u4f46\u8fd9\u4e5f\u6070\u6070\u662f\u5176\u6700\u5927\u7684\u9690\u60a3\u3002\u5b83\u628a\u201cMeta\u7b49\u5e73\u53f0\u552f\u5229\u662f\u56fe\u201d\u4f5c\u4e3a\u9053\u5fb7\u51fa\u53d1\u70b9\uff0c\u5374\u56de\u907f\u4e86\u6240\u6709\u793e\u533a\u4ea7\u54c1\u7ec8\u5c06\u9762\u4e34\u7684\u8d44\u6e90\u8bc5\u5492\uff1a\u670d\u52a1\u5668\u8d26\u5355\u3001\u5783\u573e\u4fe1\u606f\u6cbb\u7406\u3001\u793e\u533a\u89c4\u6a21\u4e0e\u8c03\u6027\u5e73\u8861\u3002\u8bc4\u8bba\u4e2d\u90a3\u53e5\u201c\u5229\u6da6\u8db3\u591f\u4ed8\u6258\u7ba1\u8d39\u5c31\u884c\u201d\u542c\u8d77\u6765\u7406\u60f3\u4e3b\u4e49\uff0c\u4f46\u5728\u73b0\u5b9e\u8fd0\u8425\u4e2d\uff0c\u201c\u8db3\u591f\u201d\u662f\u4e2a\u52a8\u6001\u4e14\u5371\u9669\u7684\u6982\u5ff5\u3002\u5f53\u7528\u6237\u589e\u957f\u5e26\u6765\u6307\u6570\u7ea7\u5e26\u5bbd\u4e0e\u5ba1\u6838\u6210\u672c\u65f6\uff0c\u6240\u8c13\u201c\u7b80\u5355\u51b3\u7b56\u201d\u4f1a\u77ac\u95f4\u53d8\u6210\u590d\u6742\u7684\u878d\u8d44\u6216\u5356\u8eab\u6289\u62e9\u3002\u66f4\u503c\u5f97\u8b66\u60d5\u7684\u662f\uff0c\u4ea7\u54c1\u6807\u699c\u201c\u6587\u672c\u4f18\u5148\u201d\uff0c\u5374\u53ea\u80fd\u9760\u201c\u82f9\u679c\u5ba1\u6838\u6162\u201d\u8fd9\u79cd\u82b1\u8fb9\u65b0\u95fb\u5f15\u8d77\u5173\u6ce8\uff0c\u53cd\u6620\u51fa\u5176\u529f\u80fd\u5c42\u9762\u5c1a\u65e0\u4efb\u4f55\u5dee\u5f02\u5316\u58c1\u5792\u2014\u2014\u6781\u7b80UI\u548c\u6309\u65f6\u95f4\u6392\u5e8f\u662f\u4efb\u4f55\u5f00\u6e90\u8bba\u575b\u811a\u672c\u7684\u9ed8\u8ba4\u914d\u7f6e\uff0c\u800c\u975e\u6838\u5fc3\u7ade\u4e89\u529b\u3002\u82e5\u6ca1\u6709\u4e00\u5957\u81ea\u6d3d\u7684\u793e\u533a\u81ea\u6cbb\u673a\u5236\uff08\u5982\u7528\u6237\u4ed8\u8d39\u6258\u7ba1\u8282\u70b9\u3001\u53bb\u4e2d\u5fc3\u5316\u5b58\u50a8\u6216\u7b5b\u9009\u4e25\u683c\u7684\u767d\u540d\u5355\u9080\u8bf7\u5236\uff09\uff0c\u8fd9\u4e2a\u9879\u76ee\u5927\u6982\u7387\u4f1a\u50cf\u8bb8\u591a\u201c\u53cdFacebook\u201d\u7684\u4e4c\u6258\u90a6\u5b9e\u9a8c\u4e00\u6837\uff0c\u5728\u6570\u767e\u4e2a\u7528\u6237\u9636\u6bb5\u9760\u60c5\u6000\u8fd0\u8f6c\uff0c\u968f\u540e\u88ab\u6c89\u9ed8\u7684\u5927\u591a\u6570\u5f03\u7f6e\u3002\u5b83\u6700\u5927\u7684\u4ef7\u503c\uff0c\u6216\u8bb8\u4e0d\u662f\u4f5c\u4e3a\u4ea7\u54c1\u6210\u529f\uff0c\u800c\u662f\u4f5c\u4e3a\u4e00\u4efd\u5bf9\u5f53\u4ee3\u793e\u4ea4\u5e73\u53f0\u201c\u6ce8\u610f\u529b\u5265\u593a\u201d\u7684\u75c5\u7406\u5b66\u8bca\u65ad\u4e66\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">Ctrl+Shift+3<\/span>\n                <\/div>\n<div class=\"comment-content\">A calm, chronological, text-first community platform.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Web 2.5 and 3 got too busy and technical. On top of that social media dominates and still does today. The problem is, they did it wrong. They built platforms with one goal: get rich. Time for w4 (web 4). Web 1 and 2 vibes with modern tech behind the scenes, mixed with privacy\/data control, and good vibes.<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>fair enough, that&#8217;s a pretty honest way to put it. good luck with the iOS approval, hope Apple speeds up.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>genuinely like the pitch of going back to something simpler. but the &#8220;other platforms just wanted to get rich&#8221; framing makes me curious what the actual plan is here. every calm text-first platform eventually needs to pay for hosting and moderation somehow, so what&#8217;s the model, ads, a paid tier, or is this staying a personal project for now while you figure that part out?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@omri_ben_shoham1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@omri_ben_shoham1<\/a>&nbsp;It\u2019s simple. Meta for example focuses on max profit and annual mass layoffs. Eventually any project needs at least enough to pay for web hosting. Beyond that the owner(s) must make a simple decision: Max profit at all costs, or just enough to pay for infrastructure and some employees?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>There&#8217;s an iOS app version too. \ud83e\udd2b Keep it on the down low.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>And a better version of the iOS app is coming. Apple is taking their sweet time approving. Grrr. To the moon, Apple, to the moon.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#17<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/CNZWEJKAPCMGJL\" class=\"app-title\">NexaLibre<\/a><\/p>\n<div class=\"one-liner\">Secure hosting for whatever your AI builds<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">15<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>NexaLibre \u662f\u4e00\u6b3e\u9762\u5411AI\u751f\u6210\u4ee3\u7801\u7684\u81ea\u52a8\u5316\u5b89\u5168\u6258\u7ba1\u5e73\u53f0\uff0c\u8ba9\u7528\u6237\u65e0\u9700\u7ba1\u7406\u670d\u52a1\u5668\uff0c\u5373\u53ef\u5c06AI\u4ea7\u51fa\u7684\u5e94\u7528\u6216\u5f00\u6e90\u9879\u76ee\u4e00\u952e\u90e8\u7f72\u4e0a\u7ebf\uff0c\u89e3\u51b3\u4ece\u4ee3\u7801\u5230\u53ef\u8bbf\u95ee\u4ea7\u54c1\u7684\u201c\u6700\u540e\u4e00\u516c\u91cc\u201d\u57fa\u7840\u8bbe\u65bd\u96be\u9898\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/da727b06-aaa5-4ba6-91ae-58de491d47fa.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/02879a0b-03da-4c24-bdd7-57eb801a8b74.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/987feed7-ed09-4940-b082-b09110e34690.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/efa846be-6006-40b6-8aaf-15f40d80efd0.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/1ee603a4-a7bc-4d4e-a611-762b41f84372.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/985ee777-724b-4f47-a86c-c5a58173a732.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/1f287452-4495-48c9-a385-05781b12cbd0.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/mrHUE42AHPg\"><source src=\"https:\/\/youtu.be\/mrHUE42AHPg\" type=\"video\/mp4\"><\/video><\/p>\n<div class=\"video-overlay\">\n<div class=\"play-icon\">\u25b6<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">SaaS<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span><br \/>\n            <span class=\"tag\">Development<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u5e94\u7528\u6258\u7ba1<\/span><br \/>\n            <span class=\"tag\">\u81ea\u52a8\u5316\u90e8\u7f72<\/span><br \/>\n            <span class=\"tag\">\u65e0\u670d\u52a1\u5668\u8fd0\u7ef4<\/span><br \/>\n            <span class=\"tag\">\u5b89\u5168\u4e3b\u673a<\/span><br \/>\n            <span class=\"tag\">HTTPS\u5185\u7f6e<\/span><br \/>\n            <span class=\"tag\">\u4e00\u952e\u4e0a\u7ebf<\/span><br \/>\n            <span class=\"tag\">\u5f00\u6e90\u5e94\u7528\u5e93<\/span><br \/>\n            <span class=\"tag\">\u72ec\u7acb\u5f00\u53d1\u8005\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u4e91\u57fa\u7840\u8bbe\u65bd<\/span><br \/>\n            <span class=\"tag\">\u6781\u901f\u542f\u52a8<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u76ee\u524d\u8bc4\u8bba\u8f83\u5c11\uff0c\u6709\u6548\u53cd\u9988\u4ec5\u4e00\u6761\uff1a\u79f0\u8d5e\u201c\u5c06AI\u4ee3\u7801\u8f6c\u4e3a\u5373\u65f6\u5b89\u5168\u5e94\u7528\u201d\u7684\u601d\u8def\uff0c\u5e76\u80af\u5b9a\u5185\u7f6eHTTPS\u4e0e\u5907\u4efd\u529f\u80fd\u3002\u6682\u65e0\u7528\u6237\u63d0\u51fa\u5177\u4f53\u95ee\u9898\u6216\u6539\u8fdb\u5efa\u8bae\uff0c\u65e9\u671f\u9a8c\u8bc1\u9636\u6bb5\uff0c\u793e\u533a\u671f\u5f85\u66f4\u591a\u5b9e\u64cd\u7ec6\u8282\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                NexaLibre\u8e29\u4e2d\u4e86\u5f53\u4e0b\u6700\u70ed\u4f46\u6700\u201c\u865a\u201d\u7684\u75db\u70b9\u2014\u2014AI\u751f\u6210\u4ee3\u7801\u7684\u201c\u6700\u540e\u4e00\u516c\u91cc\u201d\u3002ChatGPT\u3001Claude\u4eec\u80fd\u5199\u51fa\u770b\u4f3c\u5b8c\u6574\u7684\u5e94\u7528\uff0c\u4f46\u628a\u5b83\u4eec\u8dd1\u8d77\u6765\u6d89\u53ca\u57df\u540d\u3001\u8bc1\u4e66\u3001\u53cd\u5411\u4ee3\u7406\u3001\u8fdb\u7a0b\u5b88\u62a4\u3001\u6570\u636e\u5e93\u8fde\u63a5\uff0c\u8fd9\u8db3\u4ee5\u529d\u9000\u7edd\u5927\u591a\u6570\u975e\u8fd0\u7ef4\u80cc\u666f\u7684\u5f00\u53d1\u8005\u3002NexaLibre\u672c\u8d28\u4e0a\u5356\u7684\u662f\u201cAI\u65f6\u4ee3\u7684Serverless\u201d\uff0c\u628a\u590d\u6742\u57fa\u7840\u8bbe\u65bd\u5c01\u88c5\u6210\u9ed1\u76d2\uff0c\u8fd9\u65b9\u5411\u6b63\u786e\u4e14\u6781\u5177\u5546\u4e1a\u60f3\u8c61\u529b\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u5fc5\u987b\u6cfc\u51b7\u6c34\uff1a\u5f53\u524d15\u4e2a\u6295\u7968\u30011\u6761\u6709\u6548\u8bc4\u8bba\uff0c\u4ea7\u54c1\u4ecd\u5904\u4e8e\u6781\u5ea6\u65e9\u671f\u3002\u8be5\u8d5b\u9053\u7ade\u4e89\u6781\u5176\u6fc0\u70c8\uff0cVercel\u3001Railway\u3001Render\u5df2\u5728\u505a\u7c7b\u4f3c\u4e8b\u60c5\uff0c\u4e14\u5de8\u5934\u5982AWS\uff08AppRunner\uff09\u3001Cloudflare\uff08Workers\uff09\u968f\u65f6\u80fd\u78be\u538b\u5f0f\u8ddf\u8fdb\u3002NexaLibre\u771f\u6b63\u7684\u5dee\u5f02\u5316\u724c\u662f\u201c\u5185\u7f6e\u5bf9AI\u751f\u6210\u4ee3\u7801\u7684\u9002\u914d\u201d\uff0c\u4f46AI\u4ee3\u7801\u8d28\u91cf\u53c2\u5dee\u4e0d\u9f50\uff0c\u82e5\u4ec5\u505a\u81ea\u52a8\u5316\u90e8\u7f72\uff0c\u58c1\u5792\u6781\u4f4e\u2014\u2014\u4efb\u4f55\u6258\u7ba1\u5546\u90fd\u80fd\u58f0\u79f0\u652f\u6301\u201cAI\u751f\u6210\u9879\u76ee\u201d\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u66f4\u5173\u952e\u7684\u95ee\u9898\u5728\u4e8e\uff1a\u5b83\u7684\u76ee\u6807\u7528\u6237\u662f\u8c01\uff1f\u5982\u679c\u662f\u72ec\u7acb\u5f00\u53d1\u8005\uff0c\u4ed6\u4eec\u66f4\u53ef\u80fd\u9009\u62e9Vercel\u7684\u514d\u8d39\u989d\u5ea6\uff1b\u5982\u679c\u662f\u4f01\u4e1a\uff0c\u5219\u7f3a\u4e4f\u56e2\u961f\u534f\u4f5c\u3001\u5ba1\u8ba1\u65e5\u5fd7\u3001\u79c1\u6709\u7f51\u7edc\u7b49\u4f01\u4e1a\u7ea7\u529f\u80fd\u3002\u4ea7\u54c1\u4ecb\u7ecd\u4e2d\u201c\u6570\u767e\u4e2a\u5f00\u6e90\u5e94\u7528\u53ef\u90e8\u7f72\u201d\u662f\u4e2a\u4eae\u70b9\uff0c\u4f46\u9700\u8b66\u60d5\u53d8\u6210\u201c\u5e94\u7528\u5546\u5e97\u201d\u7684\u4f4e\u4ef7\u503c\u642c\u8fd0\u5de5\uff0c\u800c\u975e\u771f\u6b63\u7684\u5e73\u53f0\u7c98\u6027\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u521b\u59cb\u4eba\u80cc\u666f\u504f\u8fd0\u7ef4\uff0c\u8fd9\u662f\u4f18\u52bf\u4e5f\u662f\u98ce\u9669\u2014\u2014\u5bb9\u6613\u9677\u5165\u201c\u6280\u672f\u81ea\u55e8\u201d\uff0c\u8fc7\u5ea6\u4f18\u5316\u5e95\u5c42\uff0c\u5ffd\u7565\u4ea7\u54c1\u4f53\u9a8c\u548c\u589e\u957f\u3002\u5efa\u8baeNexaLibre\u5c3d\u5feb\u660e\u786e\u5782\u76f4\u573a\u666f\uff08\u5982\u201c\u4e13\u4e3aCopilot\u4ee3\u7801\u8bbe\u8ba1\u201d\uff09\uff0c\u5e76\u5c55\u793a\u4e00\u4e2a\u590d\u6742AI\u9879\u76ee\u7684\u5b8c\u6574\u90e8\u7f72\u6f14\u793a\uff0c\u8bc1\u660e\u5176\u6bd4\u73b0\u6709\u901a\u7528PaaS\u66f4\u201c\u65e0\u75db\u201d\u3002\u5728AI\u7f16\u7801\u6d6a\u6f6e\u4e2d\uff0c\u5de5\u5177\u94fe\u7684\u673a\u4f1a\u771f\u5b9e\u5b58\u5728\uff0c\u4f46\u53ea\u6709\u6781\u81f4\u7b80\u5316+\u660e\u786e\u5dee\u5f02\u5316\uff0c\u624d\u80fd\u907f\u514d\u6210\u4e3a\u53c8\u4e00\u4e2a\u5c0f\u800c\u7f8e\u7684\u50f5\u5c38\u4ea7\u54c1\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">NexaLibre<\/span>\n                <\/div>\n<div class=\"comment-content\">Turn AI-generated code into live, production-ready applications instantly\u2014or deploy from hundreds of open-source apps if you don&#8217;t want to build from scratch. NexaLibre provides secure, automated hosting with built-in HTTPS, reliable backups, and seamless custom domain support. Stop wrestling with server setups and launch today.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Turning AI-generated code into live, secure apps instantly is a fantastic idea \u2014 the built-in HTTPS and backups make it even better. Huge congrats on the launch!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@zvonimir_sabljic1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@zvonimir_sabljic1<\/a>&nbsp;Thank you so much \ud83e\udd17<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hi Product Hunt! \ud83d\udc4b I&#8217;m Diego, the maker behind NexaLibre.<\/p>\n<p>The inspiration for NexaLibre goes way back to high school. I&#8217;ve always viewed servers as the ultimate bridge to building real-world solutions\u2014they are the foundation where all the world&#8217;s most amazing software lives. Spending years getting my hands dirty managing physical hardware, tinkering with Docker containers, and building self-hosted environments made me realize how powerful, yet complex, good infrastructure can be.<\/p>\n<p>That passion led to building out the infrastructure at Spartan IT, and NexaLibre is the next evolution of that journey. I wanted to build my own hosting cloud to take everything I love about robust servers and make it instantly accessible. Whether you are deploying AI-generated code or spinning up one of our open-source apps, we handle the heavy lifting so you can just launch.<\/p>\n<p>I&#8217;d love to hear your thoughts and answer any questions in the comments!<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#18<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/NVT5LAMBIVL5BA\" class=\"app-title\">Franchise Builders\u2122<\/a><\/p>\n<div class=\"one-liner\">The only tool a franchisor needs<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">14<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Franchise Builders\u2122 \u662f\u4e00\u7ad9\u5f0f\u7279\u8bb8\u7ecf\u8425\u5efa\u8bbe\u5de5\u5177\uff0c\u5e2e\u52a9\u6f5c\u5728\u52a0\u76df\u5546\u81ea\u52a8\u751f\u6210FDD\u6cd5\u5f8b\u6587\u4ef6\u3001\u52a0\u76df\u534f\u8bae\u4e0e\u8fd0\u8425\u624b\u518c\uff0c\u5e76\u76f4\u63a5\u5bf9\u63a5FMLS\u4ea4\u6613\u5e02\u573a\u4e0e\u52a0\u76df\u5546\u95e8\u6237\uff0c\u89e3\u51b3\u7279\u8bb8\u7ecf\u8425\u542f\u52a8\u6d41\u7a0b\u590d\u6742\u3001\u4e13\u4e1a\u95e8\u69db\u9ad8\u7684\u75db\u70b9\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/6f0f6048-93fa-4565-aba9-e2e74f01b47b.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=HZAdj1lI5po\"><source src=\"https:\/\/www.youtube.com\/watch?v=HZAdj1lI5po\" type=\"video\/mp4\"><\/video><\/p>\n<div class=\"video-overlay\">\n<div class=\"play-icon\">\u25b6<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/6b31c4a1-97db-4d3e-99d6-a631310713e4.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Android<\/span><br \/>\n            <span class=\"tag\">User Experience<\/span><br \/>\n            <span class=\"tag\">Marketing<\/span><br \/>\n            <span class=\"tag\">SaaS<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u7279\u8bb8\u7ecf\u8425<\/span><br \/>\n            <span class=\"tag\">FDD\u751f\u6210<\/span><br \/>\n            <span class=\"tag\">\u52a0\u76df\u534f\u8bae<\/span><br \/>\n            <span class=\"tag\">\u8fd0\u8425\u624b\u518c<\/span><br \/>\n            <span class=\"tag\">\u52a0\u76df\u5546\u95e8\u6237<\/span><br \/>\n            <span class=\"tag\">\u6cd5\u5f8b\u6587\u4e66\u81ea\u52a8\u5316<\/span><br \/>\n            <span class=\"tag\">\u52a0\u76df\u5e02\u573a<\/span><br \/>\n            <span class=\"tag\">\u521b\u4e1a\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u7279\u8bb8\u7ecf\u8425SaaS<\/span><br \/>\n            <span class=\"tag\">\u54c1\u724c\u6269\u5f20<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u76ee\u524d\u4ec5\u6709\u4e00\u6761\u6709\u6548\u8bc4\u8bba\uff0c\u70b9\u8d5e1\u6b21\uff0c\u8ba4\u53ef\u5176\u6574\u5408FDD\u3001\u534f\u8bae\u4e0e\u624b\u518c\u7684\u529f\u80fd\u8303\u56f4\uff0c\u79f0\u201c\u51cf\u8f7b\u52a0\u76df\u5546\u8d1f\u62c5\u201d\u3002\u65e0\u8d1f\u9762\u53cd\u9988\u6216\u5177\u4f53\u5efa\u8bae\uff0c\u8bc4\u8bba\u8005\u8eab\u4efd\u672a\u660e\uff0c\u4e92\u52a8\u6df1\u5ea6\u6709\u9650\uff0c\u7f3a\u4e4f\u5bf9\u5b9e\u9645\u4f7f\u7528\u4f53\u9a8c\u7684\u9a8c\u8bc1\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                Franchise Builders\u2122 \u7684\u5b9a\u4f4d\u975e\u5e38\u7cbe\u51c6\u2014\u2014\u5b83\u5207\u5165\u7684\u662f\u7279\u8bb8\u7ecf\u8425\u884c\u4e1a\u91cc\u6700\u201c\u810f\u6d3b\u7d2f\u6d3b\u201d\u7684\u73af\u8282\uff1aFDD\uff08\u7279\u8bb8\u7ecf\u8425\u62ab\u9732\u6587\u4ef6\uff09\u548c\u8fd0\u8425\u624b\u518c\u7684\u7f16\u5236\u3002\u8fd9\u4e24\u9879\u6587\u6863\u901a\u5e38\u9700\u8981\u5f8b\u5e08\u3001\u54a8\u8be2\u987e\u95ee\u6570\u5468\u5230\u6570\u6708\u624d\u80fd\u5b8c\u6210\uff0c\u6210\u672c\u52a8\u8f84\u6570\u4e07\u7f8e\u5143\uff0c\u4e14\u6cd5\u5f8b\u5408\u89c4\u98ce\u9669\u6781\u9ad8\u3002\u4ea7\u54c1\u8bd5\u56fe\u7528\u201c\u751f\u6210\u5668\u201d\u65b9\u5f0f\u5c06\u5176\u81ea\u52a8\u5316\uff0c\u7406\u8bba\u4e0a\u80fd\u5927\u5e45\u964d\u4f4e\u52a0\u76df\u6269\u5f20\u7684\u95e8\u69db\uff0c\u8fd9\u786e\u5b9e\u662f\u884c\u4e1a\u521a\u9700\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u95ee\u9898\u4e5f\u6070\u6070\u51fa\u5728\u8fd9\u91cc\u3002FDD\u4e0d\u662f\u6807\u51c6\u5316\u7684\u586b\u7a7a\u9898\uff0c\u5b83\u6d89\u53ca\u5dde\u6cd5\u5dee\u5f02\u3001\u8d22\u52a1\u62ab\u9732\u7ec6\u8282\u3001\u8bc9\u8bbc\u5386\u53f2\u7b49\u9ad8\u5ea6\u5b9a\u5236\u5316\u5185\u5bb9\uff0c\u4e14\u6cd5\u5f8b\u6548\u529b\u6781\u5f3a\u3002\u5982\u679c\u751f\u6210\u7ed3\u679c\u53ea\u662f\u6a21\u677f\u62fc\u88c5\uff0c\u4e00\u65e6\u51fa\u73b0\u9057\u6f0f\u6216\u8bef\u5bfc\uff0c\u52a0\u76df\u5546\u53ef\u80fd\u9762\u4e34\u96c6\u4f53\u8bc9\u8bbc\uff0c\u800c\u5e73\u53f0\u82e5\u4e0d\u5bf9\u6cd5\u5f8b\u540e\u679c\u515c\u5e95\uff0c\u5b9e\u9645\u4fe1\u4efb\u5ea6\u4f1a\u5927\u6253\u6298\u6263\u3002\u6b64\u5916\uff0c\u4ec514\u7968\u7684\u53d1\u5e03\u6570\u636e\u8bf4\u660e\u4ea7\u54c1\u5c1a\u5904\u65e9\u671f\uff0c\u6ca1\u6709\u89c4\u6a21\u5316\u7528\u6237\u9a8c\u8bc1\u5176\u6587\u6863\u8d28\u91cf\u3001\u6cd5\u52a1\u5ba1\u6838\u6d41\u7a0b\u662f\u5426\u53ef\u9760\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u771f\u6b63\u503c\u5f97\u5173\u6ce8\u7684\u662f\u5176\u201cFMLS\u5e02\u573a+\u95e8\u6237\u201d\u7684\u95ed\u73af\u8bbe\u60f3\u2014\u2014\u5c06\u6587\u6863\u751f\u6210\u3001\u9879\u76ee\u6302\u724c\u3001\u52a0\u76df\u5546\u7ba1\u7406\u4e32\u8d77\u6765\uff0c\u8bd5\u56fe\u505a\u6210\u7279\u8bb8\u7ecf\u8425\u7684\u201cShopify+ MLS\u201d\u3002\u4f46\u8fd9\u4e5f\u610f\u5473\u7740\u5b83\u5fc5\u987b\u540c\u65f6\u641e\u5b9a\u6cd5\u5f8b\u5408\u89c4\uff08B\u7aef\u4fe1\u4efb\uff09\u3001\u4ea4\u6613\u64ae\u5408\uff08\u5e73\u53f0\u6d41\u91cf\uff09\u3001SaaS\u8fd0\u8425\uff08\u7eed\u8d39\u7387\uff09\u4e09\u4ef6\u96be\u4e8b\uff0c\u4efb\u4f55\u4e00\u73af\u8584\u5f31\u90fd\u4f1a\u62d6\u57ae\u6574\u4f53\u3002\u76ee\u524d\u770b\u6765\uff0c\u5b83\u66f4\u50cf\u4e00\u4e2a\u201c\u6587\u6863\u81ea\u52a8\u5316\u5de5\u5177\u201d\u800c\u975e\u201c\u751f\u6001\u5e73\u53f0\u201d\uff0c\u4ef7\u503c\u867d\u6709\uff0c\u4f46\u88ab\u8fc7\u5ea6\u5305\u88c5\u3002\u5efa\u8bae\u56e2\u961f\u5148\u96c6\u4e2d\u706b\u529b\u653b\u4e0bFDD\u7684\u5408\u89c4\u5ba1\u6838\u4e0e\u4eba\u5de5\u6cd5\u52a1\u590d\u6838\u673a\u5236\uff0c\u518d\u8c08\u5e02\u573a\u91ce\u5fc3\uff0c\u5426\u5219\u5bb9\u6613\u5728\u65e9\u671f\u56e0\u6cd5\u5f8b\u98ce\u9669\u7ffb\u8f66\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">Franchise Builders\u2122<\/span>\n                <\/div>\n<div class=\"comment-content\">Franchise creator to build a franchise: generate your FDD, franchise agreement &#038; operations manual, list on the FMLS marketplace, and run your franchise portal.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Impressive scope \u2014 generating the FDD, agreements, and ops manual in one place is a huge lift for franchisors. Nice work, congrats on the launch!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@zvonimir_sabljic1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@zvonimir_sabljic1<\/a>&nbsp;Thanks, Zvonimir! Are you in the franchise space? If so, I&#8217;d love to connect!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#19<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/VJBKRC5X4UEKRU\" class=\"app-title\">Servey<\/a><\/p>\n<div class=\"one-liner\">Your Mac, in your pocket &#8211; control it from anywhere<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">12<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Servey \u5c06\u4f60\u7684 Mac \u955c\u50cf\u5230 iPhone \u548c iPad \u4e0a\uff0c\u652f\u6301\u5b8c\u6574\u9f20\u6807\u3001\u952e\u76d8\u548c\u771f\u5b9e\u7ec8\u7aef\uff0c\u901a\u8fc7\u786c\u4ef6\u52a0\u901f\u4fdd\u969c\u5c40\u57df\u7f51\u6d41\u7545\u5ea6\u3001\u70b9\u5bf9\u70b9\u52a0\u5bc6\u8fde\u63a5\u5b9e\u73b0\u8fdc\u7a0b\u63a7\u5236\uff0c\u89e3\u51b3\u201c\u4eba\u79bb\u5f00 Mac \u4f46\u9700\u8981\u64cd\u4f5c Mac\u201d\u7684\u968f\u8eab\u63a7\u5236\u75db\u70b9\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/59844332-149d-4024-b51a-743e3eda9e3c.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/09758355-d4c1-41fd-a59a-7f0725f8377c.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/d631188e-aa65-4edb-a3b7-419d551d47fe.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">iOS<\/span><br \/>\n            <span class=\"tag\">Mac<\/span><br \/>\n            <span class=\"tag\">Apple<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Mac\u8fdc\u7a0b\u63a7\u5236<\/span><br \/>\n            <span class=\"tag\">iPad\u7ec8\u7aef<\/span><br \/>\n            <span class=\"tag\">\u786c\u4ef6\u52a0\u901f<\/span><br \/>\n            <span class=\"tag\">\u70b9\u5bf9\u70b9\u8fde\u63a5<\/span><br \/>\n            <span class=\"tag\">\u684c\u9762\u955c\u50cf<\/span><br \/>\n            <span class=\"tag\">\u79fb\u52a8\u529e\u516c<\/span><br \/>\n            <span class=\"tag\">\u952e\u76d8\u9f20\u6807\u91cd\u5b9a\u5411<\/span><br \/>\n            <span class=\"tag\">\u5c40\u57df\u7f51\u4f4e\u5ef6\u8fdf<\/span><br \/>\n            <span class=\"tag\">\u8fdc\u7a0b\u8fd0\u7ef4<\/span><br \/>\n            <span class=\"tag\">iOS\u5de5\u5177<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u4e24\u6761\u8bc4\u8bba\u5747\u96c6\u4e2d\u8ba4\u53ef\u5c40\u57df\u7f51\u5185\u65e0\u5ef6\u8fdf\u4f53\u9a8c\uff0c\u5c24\u5176\u63d0\u5230\u786c\u4ef6\u52a0\u901f\u5728\u5bb6\u5ead\u7f51\u7edc\u4e0b\u6548\u679c\u660e\u663e\uff1biPad\u7aef\u7ec8\u7aef\u54cd\u5e94\u8fc5\u901f\uff0c\u64cd\u4f5c\u201c\u539f\u751f\u611f\u201d\u5f3a\u3002\u76ee\u524d\u65e0\u8d1f\u9762\u53cd\u9988\uff0c\u4f46\u6837\u672c\u91cf\u592a\u5c11\uff0c\u672a\u6d89\u53ca\u516c\u7f51\u4f20\u8f93\u8d28\u91cf\u4e0e\u5b89\u5168\u6027\u9a8c\u8bc1\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                Servey \u8e29\u4e2d\u4e86\u4e24\u4e2a\u5fae\u5999\u7684\u9700\u6c42\u75db\u70b9\uff1a\u4e00\u662f\u201c\u8de8\u8bbe\u5907\u5f62\u6001\u201d\u7684\u8fde\u7eed\u6027\uff0c\u4e8c\u662f\u201c\u7ec8\u7aef\u63a7\u201d\u5bf9\u952e\u76d8\u4e0e\u771f Shell \u7684\u6267\u7740\u3002\u4ece\u4ea7\u54c1\u63cf\u8ff0\u770b\uff0c\u5b83\u6ca1\u6709\u9009\u62e9\u8d70 TeamViewer \u6216 Jump Desktop \u7684\u901a\u7528\u8def\u7ebf\uff0c\u800c\u662f\u628a\u201c\u786c\u4ef6\u52a0\u901f\u201d\u4f5c\u4e3a\u5c40\u57df\u7f51\u4f53\u9a8c\u7684\u62a4\u57ce\u6cb3\uff0c\u8fd9\u786e\u5b9e\u51fb\u4e2d\u4e86\u4e0d\u5c11\u4eba\u5728\u6c99\u53d1\u4e0a\u7528 iPad \u63a5\u7ba1 Mac \u7684\u6175\u61d2\u521a\u9700\u3002\u4f46\u51b7\u9759\u770b\uff0c12\u4e2a\u6295\u7968\u3001\u4e24\u6761\u96f6\u70b9\u8d5e\u8bc4\u8bba\uff0c\u8bf4\u660e\u5b83\u76ee\u524d\u4ecd\u5904\u4e8e\u6781\u65e9\u671f\uff0c\u4e14\u8bc4\u8bba\u9ad8\u5ea6\u540c\u8d28\u5316\uff0c\u7f3a\u4e4f\u5bf9\u516c\u7f51\u73af\u5883\u3001\u5ef6\u8fdf\u6ce2\u52a8\u3001\u5b89\u5168\u52a0\u5bc6\u3001\u591a\u663e\u793a\u5668\u7b49\u5173\u952e\u7ef4\u5ea6\u7684\u5b9e\u6d4b\u53cd\u9988\u3002\u66f4\u5173\u952e\u7684\u662f\uff0c\u5b83\u9762\u4e34\u7684\u7ade\u54c1\u5e76\u975e\u5f31\u8005\uff1amacOS \u539f\u751f\u5c4f\u5e55\u5171\u4eab\u3001Tailscale + VNC \u7ec4\u5408\u3001\u751a\u81f3 Parsec \u7684\u4e32\u6d41\u65b9\u6848\uff0c\u90fd\u5df2\u5728\u201c\u901f\u5ea6\u2014\u529f\u80fd\u2014\u514d\u8d39\u201d\u4e09\u89d2\u4e2d\u5360\u636e\u4f4d\u7f6e\u3002Servey \u82e5\u53ea\u505c\u7559\u5728\u201c\u5c40\u57df\u7f51\u5feb\u201d\u8fd9\u4e00\u5355\u70b9\u4f18\u52bf\uff0c\u5f88\u5bb9\u6613\u88ab\u5927\u5382\u590d\u5236\uff1b\u771f\u6b63\u58c1\u5792\u5e94\u5728\u4e8e\u201c\u771f\u5b9e\u7ec8\u7aef\u201d\u662f\u5426\u505a\u5230\u5982 iTerm2 \u822c\u4e1d\u6ed1\uff0c\u4ee5\u53ca\u70b9\u5bf9\u70b9\u6a21\u5f0f\u4e0b\u662f\u5426\u80fd\u5728\u65e0\u516c\u7f51 IP \u7684 NAT \u7a7f\u900f\u573a\u666f\u4e2d\u4fdd\u6301\u7a33\u5b9a\u3002\u5efa\u8bae\u56e2\u961f\u5c3d\u5feb\u53d1\u5e03\u516c\u7f51\u538b\u529b\u6d4b\u8bd5\u62a5\u544a\uff0c\u5e76\u5f00\u653e\u514d\u8d39\u5c42\u9a8c\u8bc1\u7559\u5b58\uff0c\u5426\u5219\u8fd9\u66f4\u50cf\u662f\u4e00\u4e2a\u4e0d\u9519\u7684\u4e2a\u4eba\u9879\u76ee\uff0c\u800c\u975e\u80fd\u591f\u89c4\u6a21\u5316\u5546\u4e1a\u5316\u7684\u4ea7\u54c1\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">Servey<\/span>\n                <\/div>\n<div class=\"comment-content\">Servey mirrors your Mac to your iPhone and iPad with full mouse, keyboard, and a real terminal &#8211; hardware-accelerated on your network, private peer-to-peer anywhere else.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>finally got my Mac to follow me to the couch without lag, the hardware acceleration actually makes a difference on my home network. terminal access from the ipad is a nice bonus too.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Finally a remote tool that feels native on the iPad, the terminal especially is impressively snappy over my home network.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#20<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/6BJAYJZSYNO62B\" class=\"app-title\">BackdropKit<\/a><\/p>\n<div class=\"one-liner\">Launch-ready screenshots and demo videos private by design<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">12<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>BackdropKit \u662f\u4e00\u6b3e\u5728\u6d4f\u89c8\u5668\u672c\u5730\u8fd0\u884c\u7684\u53d1\u5e03\u7d20\u6750\u5236\u4f5c\u5de5\u5177\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u5728\u4e0d\u6cc4\u9732\u9690\u79c1\u7684\u524d\u63d0\u4e0b\uff0c\u5c06\u539f\u59cb\u622a\u56fe\u6216\u6f14\u793a\u89c6\u9891\u4e00\u952e\u52a0\u5de5\u6210\u9002\u914d\u5404\u5927\u5e73\u53f0\u7684\u53d1\u5e03\u7ea7\u56fe\u7247\u3001\u89c6\u9891\u3001\u52a8\u56fe\u53ca\u6587\u6848\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/f119a1e1-0be3-4cb5-bffd-01db9f13dc83.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/8bbb369e-74b1-48ae-b4b2-1082142433f7.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/11523ac0-61e5-4216-acc6-58928aab138e.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Design Tools<\/span><br \/>\n            <span class=\"tag\">Marketing<\/span><br \/>\n            <span class=\"tag\">Privacy<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u672c\u5730\u9690\u79c1\u5904\u7406<\/span><br \/>\n            <span class=\"tag\">\u622a\u56fe\u7f8e\u5316<\/span><br \/>\n            <span class=\"tag\">\u89c6\u9891\u5bfc\u51fa<\/span><br \/>\n            <span class=\"tag\">\u53d1\u5e03\u7d20\u6750<\/span><br \/>\n            <span class=\"tag\">\u542f\u52a8\u9875\u8bbe\u8ba1<\/span><br \/>\n            <span class=\"tag\">\u6587\u672c\u8131\u654f<\/span><br \/>\n            <span class=\"tag\">AI\u80cc\u666f\u751f\u6210<\/span><br \/>\n            <span class=\"tag\">GIF\u5236\u4f5c<\/span><br \/>\n            <span class=\"tag\">\u4ea7\u54c1\u8425\u9500<\/span><br \/>\n            <span class=\"tag\">\u65e0\u7248\u6743\u5de5\u5177<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u73b0\u6709\u8bc4\u8bba\u8f83\u5c11\uff0c\u4ec5\u6709\u4e00\u6761\u795d\u8d3a\u8bed\u53ca\u4e00\u6761\u5f00\u53d1\u8005\u81ea\u8ff0\u3002\u6709\u6548\u53cd\u9988\u5c1a\u672a\u5f62\u6210\uff0c\u5f00\u53d1\u8005\u4e3b\u52a8\u8be2\u95ee\u201c\u54ea\u7c7b\u53d1\u5e03\u7d20\u6750\u5236\u4f5c\u6700\u75db\u82e6\u201d\uff0c\u4f46\u6682\u65e0\u7528\u6237\u5177\u4f53\u5efa\u8bae\u6216\u95ee\u9898\u3002\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"ai-section\">\n<div class=\"ai-content\" style=\"font-size: large;\"><strong>AI \u9510\u8bc4<\/strong><\/div>\n<p class=\"ai-content\">\n                BackdropKit \u5207\u4e2d\u7684\u786e\u5b9e\u662f\u72ec\u7acb\u5f00\u53d1\u8005\u4e0e\u5c0f\u578b\u56e2\u961f\u5728\u201c\u53d1\u5e03\u524d\u6700\u540e\u4e00\u516c\u91cc\u201d\u7684\u7410\u788e\u75db\u70b9\u2014\u2014\u4e0d\u662f\u505a\u4e0d\u51fa\u622a\u56fe\uff0c\u800c\u662f\u8ba9\u622a\u56fe\u770b\u8d77\u6765\u4e0d\u50cf\u968f\u624b\u622a\u7684\u3002\u5176\u201c\u672c\u5730\u5904\u7406\u3001\u8bbe\u8ba1\u4e0a\u9ed8\u8ba4\u79c1\u5bc6\u201d\u7684\u5b9a\u4f4d\uff0c\u5728\u5f53\u524d\u4e91\u7aef\u5de5\u5177\u6cdb\u6ee5\u3001\u6570\u636e\u6cc4\u9732\u9891\u53d1\u7684\u73af\u5883\u4e0b\uff0c\u662f\u4e00\u4e2a\u5dee\u5f02\u5316\u7684\u4ef7\u503c\u951a\u70b9\uff0c\u5c24\u5176\u5bf9\u91d1\u878d\u3001\u533b\u7597\u6216\u672a\u516c\u5f00\u4ea7\u54c1\u800c\u8a00\uff0c\u8fd9\u4e00\u5356\u70b9\u751a\u81f3\u6bd4\u529f\u80fd\u672c\u8eab\u66f4\u8bf1\u4eba\u3002\u4f46\u73b0\u5b9e\u5f88\u9aa8\u611f\uff1a12\u7968\u7684\u51b7\u542f\u52a8\u6570\u636e\u8bf4\u660e\u4e86\u4e24\u4e2a\u95ee\u9898\u2014\u2014\u5176\u4e00\uff0cProduct Hunt \u4e0a\u201c\u9690\u79c1\u53cb\u597d\u201d\u5df2\u975e\u7a00\u7f3a\u53d9\u4e8b\uff0c\u7528\u6237\u66f4\u5173\u5fc3\u751f\u6210\u6548\u679c\u662f\u5426\u8db3\u591f\u60ca\u8273\uff1b\u5176\u4e8c\uff0c\u6d4f\u89c8\u5668\u672c\u5730\u5904\u7406\u610f\u5473\u7740\u7b97\u529b\u53d7\u9650\uff0c\u5c24\u5176\u5728\u89c6\u9891\u751f\u6210\u548cAI\u80cc\u666f\u65b9\u9762\uff0c\u5176\u6548\u679c\u4e0a\u9650\u5927\u6982\u7387\u4f4e\u4e8e\u4e91\u7aef\u4e13\u4e1a\u6e32\u67d3\u3002\u82e5\u5176\u672c\u5730\u751f\u6210\u8d28\u91cf\u65e0\u6cd5\u4e0eCanva\u3001CleanShot X\u7b49\u6210\u719f\u5de5\u5177\u62c9\u5f00\u4ee3\u5dee\uff0c\u90a3\u4e48\u201c\u79c1\u5bc6\u201d\u53ea\u80fd\u6210\u4e3a\u5c11\u6570\u6781\u5ba2\u7684\u52cb\u7ae0\uff0c\u800c\u975e\u7834\u5708\u7684\u7b79\u7801\u3002\u66f4\u5173\u952e\u7684\u9690\u60a3\u5728\u4e8e\uff0c\u4ea7\u54c1\u5c06\u201c\u5bfc\u51fa\u6587\u6848\u3001alt text\u201d\u8fd9\u7c7b\u7410\u788e\u529f\u80fd\u4e5f\u7eb3\u5165\u5356\u70b9\uff0c\u7a00\u91ca\u4e86\u6838\u5fc3\u89c6\u89c9\u5904\u7406\u80fd\u529b\u7684\u9510\u5ea6\u3002\u5efa\u8bae\u56e2\u961f\u805a\u7126\u4e8e\u201c\u4e3aGitHub\u5f00\u6e90\u9879\u76ee\u6216App Store\u5ba1\u6838\u573a\u666f\u63d0\u4f9b\u4e00\u952e\u5f0f\u5408\u89c4\u8131\u654f+\u6781\u7b80\u89c6\u89c9\u5305\u88c5\u201d\uff0c\u7528\u66f4\u5782\u76f4\u7684\u6a21\u677f\u751f\u6001\u9501\u5b9a\u7279\u5b9a\u7528\u6237\u7fa4\uff0c\u800c\u4e0d\u662f\u8bd5\u56fe\u8986\u76d6\u6240\u6709\u53d1\u5e03\u9700\u6c42\u3002\u5426\u5219\uff0c\u5b83\u5f88\u5bb9\u6613\u6ca6\u4e3a\u201c\u7528\u4e86\u4e0d\u9519\uff0c\u4f46\u6ca1\u5230\u975e\u7528\u4e0d\u53ef\u201d\u7684\u9e21\u808b\u5de5\u5177\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">BackdropKit<\/span>\n                <\/div>\n<div class=\"comment-content\">BackdropKit turns a raw product screenshot or demo video into a complete launch kit without sending it anywhere. Add or generate backgrounds, spotlight and call out UI, redact sensitive text, and export channel-sized images, video, GIF, thumbnail, post copy, and alt text. Everything runs locally in your browser\u2014free, private, and watermark-free.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>BackdropKit looks genuinely useful. Congratulations on getting it out into the world! \ud83d\ude80<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hi Product Hunt! We built BackdropKit for the last-mile problem of shipping a product: you have a screenshot or a demo, but making it feel launch-ready usually means uploading it to several tools and recreating every export by hand. BackdropKit keeps that work in your browser. Style a backdrop, focus the exact UI moment, redact private text, generate a local background when your GPU supports it, and export images, video, GIFs, thumbnails, copy, and alt text in one go. It\u2019s free, private, and never adds a watermark. We\u2019d love to hear which launch asset is most painful for you to make today.<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<\/div>\n<p><!-- \u56fe\u7247\u653e\u5927\u6a21\u6001\u6846 --><\/p>\n<div id=\"imageModal\" class=\"modal\">\n    <span class=\"close\">&times;<\/span><br \/>\n    <img class=\"modal-content\" id=\"modalImage\">\n<\/div>\n<p><script>\n    \/\/ \u83b7\u53d6\u6a21\u6001\u6846\u5143\u7d20\n    const modal = document.getElementById(\"imageModal\");\n    const modalImg = document.getElementById(\"modalImage\");\n    const closeBtn = document.getElementsByClassName(\"close\")[0];<\/p>\n<p>    \/\/ \u68c0\u6d4b\u662f\u5426\u4e3a\u79fb\u52a8\u8bbe\u5907\n    const isMobile = \/iPhone|iPad|iPod|Android\/i.test(navigator.userAgent);<\/p>\n<p>    \/\/ \u4e3a\u79fb\u52a8\u8bbe\u5907\u6dfb\u52a0\u89e6\u6478\u4f18\u5316\n    function addTouchOptimization() {\n        if (isMobile) {\n            \/\/ \u4e3a\u6240\u6709\u53ef\u70b9\u51fb\u5143\u7d20\u6dfb\u52a0\u89e6\u6478\u53cd\u9988\n            const clickableElements = document.querySelectorAll(\n                '.media-content, .close, .video-overlay, .play-icon'\n            );<\/p>\n<p>            clickableElements.forEach(el => {\n                el.style.touchAction = 'manipulation'; \/\/ \u9632\u6b62\u53cc\u51fb\u7f29\u653e\n            });\n        }\n    }<\/p>\n<p>    \/\/ \u4e3a\u6240\u6709\u56fe\u7247\u6dfb\u52a0\u70b9\u51fb\u4e8b\u4ef6\n    const images = document.querySelectorAll(\"img.media-content\");\n    images.forEach(img => {\n        img.onclick = function() {\n            modal.style.display = \"block\";\n            modalImg.src = this.src;\n            \/\/ \u963b\u6b62\u80cc\u666f\u6eda\u52a8\n            document.body.style.overflow = \"hidden\";\n        }<\/p>\n<p>        \/\/ \u4e3a\u79fb\u52a8\u8bbe\u5907\u6dfb\u52a0\u89e6\u6478\u4e8b\u4ef6\u652f\u6301\n        if (isMobile) {\n            img.addEventListener('touchstart', function(e) {\n                \/\/ \u9632\u6b62\u89e6\u6478\u4e8b\u4ef6\u89e6\u53d1\u4e0d\u5fc5\u8981\u7684\u884c\u4e3a\n                e.preventDefault();\n                this.click();\n            }, { passive: false });\n        }\n    });<\/p>\n<p>    \/\/ \u4e3a\u89c6\u9891\u6dfb\u52a0\u70b9\u51fb\u4e8b\u4ef6 - \u8df3\u8f6c\u5230\u89c6\u9891URL\n    const videos = document.querySelectorAll(\"video.media-content\");\n    videos.forEach(video => {\n        \/\/ \u70b9\u51fb\u89c6\u9891\u672c\u8eab\u65f6\u8df3\u8f6c\u5230\u89c6\u9891URL\n        video.onclick = function(e) {\n            \/\/ \u68c0\u67e5\u70b9\u51fb\u76ee\u6807\u662f\u5426\u662f\u89c6\u9891\u63a7\u4ef6\u6216\u5176\u5b50\u5143\u7d20\n            let isControlClick = false;\n            let target = e.target;<\/p>\n<p>            \/\/ \u5411\u4e0a\u904d\u5386DOM\uff0c\u68c0\u67e5\u662f\u5426\u70b9\u51fb\u4e86\u63a7\u4ef6\u5143\u7d20\n            while (target && target !== this) {\n                \/\/ \u68c0\u67e5\u662f\u5426\u6709\u63a7\u4ef6\u76f8\u5173\u7684\u7c7b\u540d\u6216\u5c5e\u6027\n                if (target.classList.contains('video-js') || \n                    target.tagName.toLowerCase() === 'button' || \n                    target.tagName.toLowerCase() === 'input' || \n                    target.tagName.toLowerCase() === 'select' ||\n                    target.className.includes('control')) {\n                    isControlClick = true;\n                    break;\n                }\n                target = target.parentElement;\n            }<\/p>\n<p>            \/\/ \u53ea\u6709\u5f53\u70b9\u51fb\u7684\u662f\u89c6\u9891\u672c\u8eab\u800c\u975e\u63a7\u4ef6\u65f6\u624d\u8df3\u8f6c\n            if (!isControlClick && e.target.tagName.toLowerCase() === 'video') {\n                const videoUrl = this.getAttribute('data-video-url') || this.querySelector('source').src;\n                window.open(videoUrl, '_blank');\n            }\n        }<\/p>\n<p>        \/\/ \u4e3a\u79fb\u52a8\u8bbe\u5907\u6dfb\u52a0\u89e6\u6478\u4e8b\u4ef6\u652f\u6301\n        if (isMobile) {\n            video.addEventListener('touchstart', function(e) {\n                \/\/ \u68c0\u67e5\u662f\u5426\u70b9\u51fb\u4e86\u63a7\u4ef6\n                let isControlClick = false;\n                let target = e.target;<\/p>\n<p>                while (target && target !== this) {\n                    if (target.tagName.toLowerCase() === 'button' || \n                        target.tagName.toLowerCase() === 'input' || \n                        target.className.includes('control')) {\n                        isControlClick = true;\n                        break;\n                    }\n                    target = target.parentElement;\n                }<\/p>\n<p>                if (!isControlClick) {\n                    e.preventDefault();\n                    const videoUrl = this.getAttribute('data-video-url') || this.querySelector('source').src;\n                    window.open(videoUrl, '_blank');\n                }\n            }, { passive: false });\n        }\n    });<\/p>\n<p>    \/\/ \u4e3a\u89c6\u9891\u906e\u7f69\u6dfb\u52a0\u70b9\u51fb\u4e8b\u4ef6\uff0c\u786e\u4fdd\u70b9\u51fb\u906e\u7f69\u4e5f\u80fd\u8df3\u8f6c\n    const videoOverlays = document.querySelectorAll('.video-overlay');\n    videoOverlays.forEach(overlay => {\n        overlay.onclick = function(e) {\n            \/\/ \u963b\u6b62\u4e8b\u4ef6\u5192\u6ce1\u5230\u89c6\u9891\u5143\u7d20\n            e.stopPropagation();\n            const video = this.parentElement.querySelector('video.media-content');\n            if (video) {\n                const videoUrl = video.getAttribute('data-video-url') || video.querySelector('source').src;\n                window.open(videoUrl, '_blank');\n            }\n        }<\/p>\n<p>        \/\/ \u4e3a\u79fb\u52a8\u8bbe\u5907\u6dfb\u52a0\u89e6\u6478\u4e8b\u4ef6\u652f\u6301\n        if (isMobile) {\n            overlay.addEventListener('touchstart', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                const video = this.parentElement.querySelector('video.media-content');\n                if (video) {\n                    const videoUrl = video.getAttribute('data-video-url') || video.querySelector('source').src;\n                    window.open(videoUrl, '_blank');\n                }\n            }, { passive: false });\n        }\n    });<\/p>\n<p>    \/\/ \u5173\u95ed\u6a21\u6001\u6846\n    closeBtn.onclick = function() {\n        modal.style.display = \"none\";\n        \/\/ \u6062\u590d\u80cc\u666f\u6eda\u52a8\n        document.body.style.overflow = \"auto\";\n    }<\/p>\n<p>    \/\/ \u4e3a\u79fb\u52a8\u8bbe\u5907\u6dfb\u52a0\u89e6\u6478\u4e8b\u4ef6\u652f\u6301\n    if (isMobile) {\n        closeBtn.addEventListener('touchstart', function(e) {\n            e.preventDefault();\n            modal.style.display = \"none\";\n            document.body.style.overflow = \"auto\";\n        }, { passive: false });\n    }<\/p>\n<p>    \/\/ \u70b9\u51fb\u6a21\u6001\u6846\u5916\u90e8\u5173\u95ed\n    window.onclick = function(event) {\n        if (event.target === modal) {\n            modal.style.display = \"none\";\n            document.body.style.overflow = \"auto\";\n        }\n    }<\/p>\n<p>    \/\/ \u4e3a\u79fb\u52a8\u8bbe\u5907\u6dfb\u52a0\u89e6\u6478\u4e8b\u4ef6\u652f\u6301\n    if (isMobile) {\n        modal.addEventListener('touchstart', function(e) {\n            if (e.target === modal) {\n                modal.style.display = \"none\";\n                document.body.style.overflow = \"auto\";\n            }\n        }, { passive: true });\n    }<\/p>\n<p>    \/\/ \u6309ESC\u952e\u5173\u95ed\u6a21\u6001\u6846\n    document.addEventListener('keydown', function(event) {\n        if (event.key === 'Escape' && modal.style.display === 'block') {\n            modal.style.display = 'none';\n            document.body.style.overflow = \"auto\";\n        }\n    });<\/p>\n<p>    \/\/ \u68c0\u67e5\u6bcf\u4e2a\u5a92\u4f53\u753b\u5eca\u4e2d\u662f\u5426\u53ea\u6709\u4e00\u4e2a\u9879\u76ee\uff0c\u5982\u679c\u662f\uff0c\u6dfb\u52a0single-item\u7c7b\n    document.querySelectorAll('.media-gallery').forEach(gallery => {\n        if (gallery.querySelectorAll('.media-item-wrapper').length === 1) {\n            gallery.classList.add('single-item');\n        }\n    });<\/p>\n<p>    \/\/ \u521d\u59cb\u5316\u89e6\u6478\u4f18\u5316\n    addTouchOptimization();<\/p>\n<p>    \/\/ \u7a97\u53e3\u5927\u5c0f\u53d8\u5316\u65f6\u91cd\u65b0\u68c0\u67e5\u753b\u5eca\u72b6\u6001\n    window.addEventListener('resize', function() {\n        document.querySelectorAll('.media-gallery').forEach(gallery => {\n            if (gallery.querySelectorAll('.media-item-wrapper').length === 1) {\n                gallery.classList.add('single-item');\n            } else {\n                gallery.classList.remove('single-item');\n            }\n        });\n    });<\/p>\n<p>    \/\/ --- \u8bc4\u8bba\u533a\u57df\u6298\u53e0\/\u5c55\u5f00\u529f\u80fd ---\n    const commentToggles = document.querySelectorAll('.comments-toggle');<\/p>\n<p>    commentToggles.forEach(toggle => {\n        toggle.addEventListener('click', function() {\n            \/\/ \u5207\u6362\u5f53\u524dtoggle\u7684open\u72b6\u6001\n            this.classList.toggle('open');<\/p>\n<p>            \/\/ \u83b7\u53d6\u5bf9\u5e94\u7684\u8bc4\u8bba\u5bb9\u5668\n            const commentsContainer = this.nextElementSibling;\n            if (commentsContainer && commentsContainer.classList.contains('comments-container')) {\n                commentsContainer.classList.toggle('open');\n            }\n        });\n    });\n<\/script><\/p>\n<p><\/body><br \/>\n<\/html><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Product Hunt \u6bcf\u65e5\u70ed\u699c 2026-07-31 PH\u70ed\u699c | 2026-07-31 #1 MiniM [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"template-clean-canvas.php","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-299","post","type-post","status-publish","format-standard","hentry","category-producthunt"],"_links":{"self":[{"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/posts\/299","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/comments?post=299"}],"version-history":[{"count":0,"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/posts\/299\/revisions"}],"wp:attachment":[{"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/media?parent=299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/categories?post=299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/tags?post=299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}