{"id":296,"date":"2026-07-29T11:44:40","date_gmt":"2026-07-29T03:44:40","guid":{"rendered":"https:\/\/ph.listeningo.cn\/index.php\/2026\/07\/29\/2026-07-28\/"},"modified":"2026-07-29T11:44:40","modified_gmt":"2026-07-29T03:44:40","slug":"2026-07-28","status":"publish","type":"post","link":"https:\/\/ph.listeningo.cn\/index.php\/2026\/07\/29\/2026-07-28\/","title":{"rendered":"PH\u70ed\u699c | 2026-07-28"},"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-28<\/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-28<\/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\/Y5XXYGBXLHNUGG\" class=\"app-title\">Prefactor<\/a><\/p>\n<div class=\"one-liner\">Evaluate your AI Agents in real-time<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">552<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Prefactor \u662f\u4e00\u6b3e\u5b9e\u65f6\u8bc4\u4f30\u751f\u4ea7\u73af\u5883\u4e2d AI Agent \u8fd0\u884c\u8d28\u91cf\u7684\u5de5\u5177\uff0c\u5e2e\u52a9\u5de5\u7a0b\u56e2\u961f\u5728 Agent \u6267\u884c\u8fc7\u7a0b\u4e2d\u5373\u65f6\u6355\u6349\u8d28\u91cf\u9000\u5316\u3001\u6570\u636e\u6f02\u79fb\u548c\u98ce\u9669\uff0c\u5e76\u652f\u6301\u81ea\u52a8\u62e6\u622a\u6216\u4eba\u5de5\u5e72\u9884\uff0c\u89e3\u51b3\u4e86\u201cAgent \u5728\u6d4b\u8bd5\u4e2d\u901a\u8fc7\u3001\u4e0a\u7ebf\u540e\u5931\u63a7\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\/a3db6429-c30c-4462-a6ff-d3896ad6d2c5.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\/e43c0263-e8df-4697-a2b2-7817d04a2d57.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\/5666270e-9a5f-47d5-9a8f-cec13c15e089.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\/66f2a38e-2654-4946-b774-a8d8f02afdfe.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\/8825e809-65dc-490e-9702-8190c678a613.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\/1d8e4b56-f646-421a-b812-01875acb1647.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\/24f667f3-cc6a-4a97-9986-13dc6d4be5ab.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\/91f9ccde-b16b-470b-be0a-cf236f0506e1.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\/e3a4ee5a-87ea-4d4d-b879-dba16042f4cd.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\/098561d1-50c0-4255-94ab-76fe6c049e30.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\/96b190b6-586f-46b6-b882-266bcb08d9b2.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/jJnkSklhwgg\"><source src=\"https:\/\/youtu.be\/jJnkSklhwgg\" 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\">Developer Tools<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI Agent \u76d1\u63a7<\/span><br \/>\n            <span class=\"tag\">\u5b9e\u65f6\u8bc4\u4f30<\/span><br \/>\n            <span class=\"tag\">\u751f\u4ea7\u73af\u5883<\/span><br \/>\n            <span class=\"tag\">\u8d28\u91cf\u9000\u5316<\/span><br \/>\n            <span class=\"tag\">\u6570\u636e\u6f02\u79fb<\/span><br \/>\n            <span class=\"tag\">\u98ce\u9669\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">\u4eba\u5de5\u5e72\u9884<\/span><br \/>\n            <span class=\"tag\">LLM-as-Judge<\/span><br \/>\n            <span class=\"tag\">\u53ef\u89c2\u6d4b\u6027<\/span><br \/>\n            <span class=\"tag\">DevOps<\/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\u4e3b\u8981\u5173\u6ce8\uff1a1\uff09\u5b9e\u65f6\u8bc4\u5206\u662f\u5426\u8986\u76d6\u5168\u91cf\u6d41\u91cf\uff08\u786e\u8ba4\u652f\u6301100%\u8bc4\u4f30\uff0c\u6210\u672c\u53ef\u63a7\uff09\uff1b2\uff09\u5982\u4f55\u5b9a\u4e49\u201c\u8d28\u91cf\u201d\uff08\u56e2\u961f\u53ef\u81ea\u5b9a\u4e49\u8bc4\u4f30\u6807\u51c6\uff0c\u652f\u6301\u6280\u672f\u6307\u6807\u4e0e\u4e1a\u52a1\u7ed3\u679c\uff09\uff1b3\uff09\u80fd\u5426\u9a8c\u8bc1\u5916\u90e8\u526f\u4f5c\u7528\uff08\u5982\u9875\u9762\u662f\u5426\u5b9e\u9645\u66f4\u65b0\uff0c\u652f\u6301\u901a\u8fc7 emitted span \u8fdb\u884c\u771f\u5b9e\u7ed3\u679c\u6821\u9a8c\uff09\uff1b4\uff09\u6f02\u79fb\u68c0\u6d4b\u7684\u5b9e\u9645\u4ef7\u503c\uff08\u591a\u4f4d\u7528\u6237\u8868\u793a\u66fe\u56e0\u6a21\u578b\u65e0\u58f0\u53d8\u5316\u5bfc\u81f4\u4e1a\u52a1\u53d7\u635f\uff09\uff1b5\uff09\u5bf9\u201cAgent \u8c0e\u62a5\u6210\u529f\u201d\u95ee\u9898\u7684\u771f\u5b9e\u9700\u6c42\uff08\u7528\u6237\u53cd\u9988\u7ea61\/3\u4efb\u52a1\u770b\u4f3c\u6210\u529f\u5b9e\u9645\u672a\u6267\u884c\uff09\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                Prefactor \u5207\u5165\u7684\u662f\u4e00\u4e2a\u6781\u5177\u75db\u611f\u5374\u5c1a\u672a\u88ab\u5145\u5206\u89e3\u51b3\u7684\u201c\u6700\u540e\u4e00\u516c\u91cc\u201d\u95ee\u9898\uff1aAI Agent \u7684\u201c\u751f\u4ea7\u4e8b\u6545\u9ed1\u76d2\u201d\u3002\u5176\u6838\u5fc3\u4ef7\u503c\u4e0d\u5728\u4e8e\u53e6\u4e00\u4e2a\u89c2\u6d4b\u4eea\u8868\u76d8\uff0c\u800c\u5728\u4e8e\u201c\u89c2\u6d4b-\u8bc4\u4f30-\u884c\u52a8\u201d\u7684\u95ed\u73af\u2014\u2014\u5728 Agent \u8fd0\u884c\u7684\u6beb\u79d2\u7ea7\u7a97\u53e3\u5185\uff0c\u5c06\u8bc4\u5206\u76f4\u63a5\u8f6c\u5316\u4e3a\u62e6\u622a\u6216\u4eba\u5de5\u51b3\u7b56\u4fe1\u53f7\uff0c\u4ece\u800c\u8ba9\u201c\u4e0a\u7ebf\u540e\u542c\u5929\u7531\u547d\u201d\u7684\u56e2\u961f\u771f\u6b63\u62e5\u6709\u6b62\u635f\u80fd\u529b\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ea7\u54c1\u8bbe\u8ba1\u5c42\u9762\uff0c\u6280\u672f\u8def\u5f84\u6e05\u6670\uff1a\u901a\u8fc7 SDK \u6216 OpenTelemetry \u5b9e\u73b0\u8fd0\u884c\u65f6\u5168\u91cf\u8ffd\u8e2a\uff0c\u652f\u6301 LLM-as-Judge \u4e0e\u81ea\u5b9a\u4e49\u89c4\u5219\u6df7\u5408\u8bc4\u4f30\uff0c\u5e76\u5141\u8bb8\u5c06\u5916\u90e8\u7cfb\u7edf\u72b6\u6001\uff08\u5982 GitHub\u3001\u6570\u636e\u5e93\uff09\u4f5c\u4e3a\u8bc4\u4f30\u951a\u70b9\u3002\u8fd9\u89e3\u51b3\u4e86\u4e24\u4e2a\u5173\u952e\u77db\u76fe\uff1a\u4e00\u662f\u201c\u5168\u91cf\u8bc4\u4f30 vs \u6210\u672c\u201d\u7684\u6743\u8861\uff08\u96f6 Token \u6210\u672c\u7684\u57fa\u7840\u8ffd\u8e2a + \u6309\u9700\u5f15\u5165 LLM \u8bc4\u4f30\uff09\uff1b\u4e8c\u662f\u201c\u5185\u90e8\u72b6\u6001 vs \u5916\u90e8\u4e8b\u5b9e\u201d\u7684\u4e0d\u5bf9\u79f0\uff08Agent \u58f0\u79f0\u6210\u529f \u2260 \u771f\u5b9e\u7ed3\u679c\u751f\u6548\uff09\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u98ce\u9669\u540c\u6837\u4e0d\u5bb9\u5ffd\u89c6\u3002\u9996\u5148\uff0c\u201c\u5b9e\u65f6\u5e72\u9884\u201d\u5bf9\u5ef6\u8fdf\u548c\u53ef\u9760\u6027\u8981\u6c42\u6781\u9ad8\uff0c\u82e5\u51fa\u73b0\u8bef\u5224\u6216\u6f0f\u5224\uff0c\u53ef\u80fd\u6bd4\u65e0\u76d1\u63a7\u66f4\u7cdf\u7cd5\u2014\u2014\u56e0\u4e3a\u5728\u4fe1\u4efb\u5de5\u5177\u540e\uff0c\u56e2\u961f\u53ef\u80fd\u4f1a\u653e\u677e\u624b\u52a8\u68c0\u67e5\u3002\u5176\u6b21\uff0c\u7528\u6237\u5bf9\u201c\u8d28\u91cf\u5b9a\u4e49\u201d\u7684\u7591\u8651\u63ed\u793a\u4e86\u4ea7\u54c1\u7684\u8fb9\u754c\uff1aPrefactor \u63d0\u4f9b\u7684\u662f\u8bc4\u4f30\u6846\u67b6\u4e0e\u6267\u884c\u5f15\u64ce\uff0c\u800c\u975e\u5f00\u7bb1\u5373\u7528\u7684\u884c\u4e1a\u6807\u51c6\u6a21\u578b\uff0c\u8fd9\u610f\u5473\u7740\u521d\u671f\u90e8\u7f72\u9700\u8981\u56e2\u961f\u6295\u5165\u5b9a\u4e49\u6210\u672c\u3002\u6700\u540e\uff0c\u7ade\u5bf9\u5a01\u80c1\u660e\u663e\u2014\u2014LangSmith\u3001Arize \u7b49\u5de5\u5177\u540c\u6837\u5728\u62a2\u5360\u53ef\u89c2\u6d4b\u6027\u5e02\u573a\uff0c\u800c Prefactor \u7684\u5dee\u5f02\u5316\u5728\u4e8e\u201c\u95ed\u73af\u884c\u52a8\u201d\u800c\u975e\u201c\u53ea\u5c55\u793a\u95ee\u9898\u201d\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4e00\u53e5\u8bdd\u603b\u7ed3\uff1aPrefactor \u89e3\u51b3\u4e86 Agent \u4ece\u201c\u80fd\u8dd1\u201d\u5230\u201c\u8dd1\u597d\u201d\u7684\u76d1\u7ba1\u9e3f\u6c9f\uff0c\u4f46\u5176\u80fd\u5426\u6210\u4e3a AI \u57fa\u7840\u8bbe\u65bd\u7684\u6807\u914d\uff0c\u53d6\u51b3\u4e8e\u80fd\u5426\u5728\u201c\u63a7\u5236\u201d\u4e0e\u201c\u8bef\u62a5\u201d\u4e4b\u95f4\u627e\u5230\u5e73\u8861\uff0c\u5e76\u5feb\u901f\u8ba9\u7528\u6237\u611f\u53d7\u5230\u201c\u6b62\u635f\u201d\u5e26\u6765\u7684 ROI\uff0c\u800c\u975e\u201c\u53c8\u591a\u4e86\u4e00\u5957\u9700\u8981\u7ef4\u62a4\u7684\u89c4\u5219\u7cfb\u7edf\u201d\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\">Prefactor<\/span>\n                <\/div>\n<div class=\"comment-content\">Most agents pass their evals and fail in production. Prefactor is the evaluation layer that closes the gap. We score every agent run in real time, surface quality regressions and drift as they happen, and show engineering teams exactly how their agents are performing at scale. Built for the teams shipping agents to customers.<\/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 &#8211; Matt here, co-founder of Prefactor with Simon. <\/p>\n<\/p>\n<p>We&#8217;ve been heads-down on this one for a while, so finally getting to show you is a real thrill.<\/p>\n<\/p>\n<p>Let me start with the question this whole thing is built around: <strong>do you actually know what your agents are doing in production right now?<\/strong><\/p>\n<\/p>\n<p>For most teams we talk to, the honest answer is &#8220;\u2026not really.&#8221; Your evals pass, everything&#8217;s <em>green<\/em>, you ship &#8211; and then every real run vanishes into a <strong>black box<\/strong>. Quality quietly drifts. Risk creeps in. Costs climb. And eventually someone asks which of your agents are still doing their job, and the room goes quiet.<\/p>\n<\/p>\n<p>That silence is the entire reason Prefactor exists. Gartner reckons <strong><em>40%+ of agentic AI projects get scrapped by 2027<\/em><\/strong> &#8211; and honestly, this gap is a big part of why.<\/p>\n<\/p>\n<p>So we built the thing we kept wishing we had: Prefactor scores every run in production the moment it happens &#8211; quality, drift, risk &#8211; then wires those scores straight into action. A failing agent gets caught live, not charted three days later.<\/p>\n<\/p>\n<p><strong>How it actually works<\/strong><\/p>\n<ol>\n<li>\n<p><strong><em>prefactor init <\/em><\/strong>&#8211; one command connects your workspace and discovers your agents across your runtimes. First traced run in under 5 minutes.<\/p>\n<\/li>\n<li>\n<p><strong><em>Drop in the SDK <\/em><\/strong>(TypeScript or Python) &#8211; native for LangChain, Claude, Vercel AI, OpenClaw and LiveKit. Every call becomes a span, streaming in live with cost and data risk attached.<\/p>\n<\/li>\n<li>\n<p><strong><em>Run the evals <\/em><\/strong>you define on every run &#8211; LLM-as-judge, technical checks, qualitative metrics. Custom spans pull context from GitHub, Linear, Jira or your database, so every eval is grounded in what actually happened, not a guess.<\/p>\n<\/li>\n<li>\n<p><strong>Act.<\/strong> Hold, approve or block the second a run crosses a line &#8211; automatically at runtime, or routed to a human. Every decision logged and enforced through the SDK or API.<\/p>\n<\/li>\n<\/ol>\n<p>The payoff: you get to ship agents like real software \u2014 versioned, staged, promoted through dev \u2192 staging \u2192 prod only when evals pass, with instant rollback when they don&#8217;t.<\/p>\n<\/p>\n<p><strong>Why it&#8217;s different<\/strong><\/p>\n<p>Most tools observe and score, then hand you the problem. Prefactor closes the loop &#8211; observe, evaluate, act, all inside the same run. A risky agent gets caught, not just charted.<\/p>\n<p>My favourite bit of feedback so far: a customer with 40 agents in production and, in their words, &#8220;no honest way to say which ones were still doing their job.&#8221; We gave them that answer &#8211; and the brake pedal for when one wasn&#8217;t.<\/p>\n<\/p>\n<p><strong>Who it&#8217;s for<\/strong><\/p>\n<p>Engineering teams shipping agents to real customers, on any stack. Agent frameworks work natively; everything else plugs in through OpenTelemetry or the core SDK.<\/p>\n<\/p>\n<p><strong>A little something for the PH community<\/strong><\/p>\n<p>Sign up today and you get <strong>1,000,000 free agent steps<\/strong>. Every span counts, so that&#8217;s a serious amount of live production evaluation on us. Valid until Friday 11:59pm PT, once you&#8217;ve set up your first agent.<\/p>\n<\/p>\n<p><strong>Our ask<\/strong><\/p>\n<p>If you&#8217;re running agents in production, tell us how you keep tabs on them today &#8211; even if the honest answer is &#8220;we&#8217;re mostly hoping.&#8221; We&#8217;ll be in the comments all day and we&#8217;d genuinely love to hear what&#8217;s working, what&#8217;s breaking, and what you&#8217;d want a tool like this to do next.<\/p>\n<\/p>\n<p><strong><em>Get started free at <\/em><\/strong><a href=\"http:\/\/prefactor.tech\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><strong><em>prefactor.tech<\/em><\/strong><\/a><strong><em>.<\/em><\/strong> First 25,000 spans a month free, no card needed. <\/p>\n<\/p>\n<p><a href=\"https:\/\/www.producthunt.com\/@simon_russell1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@simon_russell1<\/a> <a href=\"https:\/\/www.producthunt.com\/@joshgillies\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@joshgillies<\/a> <a href=\"https:\/\/www.producthunt.com\/@ethan_lee8\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ethan_lee8<\/a> <a href=\"https:\/\/www.producthunt.com\/@rheu\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rheu<\/a> <a href=\"https:\/\/www.producthunt.com\/@joeys\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@joeys<\/a> and I will be here all day.<\/p>\n<\/p>\n<p>Big thanks to <a href=\"https:\/\/www.producthunt.com\/@rohanrecommends\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rohanrecommends<\/a> <a href=\"https:\/\/www.producthunt.com\/@rohanchaubey4\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rohanchaubey4<\/a> hunting us.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>28<\/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\/@simon_russell1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@simon_russell1<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@joshgillies\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@joshgillies<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@ethan_lee8\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ethan_lee8<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@rheu\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rheu<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@joeys\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@joeys<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@rohanrecommends\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rohanrecommends<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@rohanchaubey4\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rohanchaubey4<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@matt_doughty\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@matt_doughty<\/a>&nbsp;Love this. I wouldn&#8217;t leave my toddler home alone so why would I deploy an agent and not checkup on it. You get it. Cut through the agentic AI hype and solve the issues so we can actually get ROI on AI.<\/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<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@simon_russell1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@simon_russell1<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@joshgillies\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@joshgillies<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@ethan_lee8\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ethan_lee8<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@rheu\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rheu<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@joeys\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@joeys<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@rohanrecommends\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rohanrecommends<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@rohanchaubey4\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rohanchaubey4<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@matt_doughty\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@matt_doughty<\/a>&nbsp;Congrats on the lauch! I would like to know through what process your product identifies issues with the proxy program? I am very curious about the underlying technical logic.<\/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\/@simon_russell1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@simon_russell1<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@joshgillies\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@joshgillies<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@ethan_lee8\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ethan_lee8<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@rheu\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rheu<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@joeys\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@joeys<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@rohanrecommends\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rohanrecommends<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@rohanchaubey4\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rohanchaubey4<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@matt_doughty\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@matt_doughty<\/a>&nbsp;Congrats on the launch Matt and 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<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Genuinely curious what &#8220;scoring every run&#8221; looks like at scale, is that sampled or are you actually evaluating 100% of production traffic? That distinction matters a lot for cost and for trust in the numbers.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>9<\/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\/@yolanda_c_schneider\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@yolanda_c_schneider<\/a>&nbsp;All traffic. The 100% element is sitting alongside the agents, seeing everything they do and being able to articulate what they are actually doing. Eg, what tools are they calling. Are the actions they are making write actions vs read actions. How is the pattern of the agent different from what you know to be the case. If an agent takes 3 turns to resolve a problem, why is it taking 8 (insert HITL). <\/p>\n<\/p>\n<p>The beauty of our approach is that the cost is 0 until you introduce an LLM as judge, but by using the no token approach it means you can actually target the problematic runs\/ spans\/ actions rather than running random samples which could catch nothing when there is something. <\/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\/@yolanda_c_schneider\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@yolanda_c_schneider<\/a>&nbsp;right now, we score every run. This may change in the future, and if you have a preference we&#8217;d love to hear your thoughts on the matter! From a cost perspective, the data that goes into the scoring is entirely up to you. We score what you send us about your production agents, and generally the rule of thumb is something like, trace the parts of your agent required to answer the question of &#8220;did it do good job&#8221;.<\/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\/@yolanda_c_schneider\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@yolanda_c_schneider<\/a>&nbsp;There can be different approaches depending on the application.  Obviously running full LLM-based evals on a high volume chatbot might not make sense.  But that&#8217;s when being able to filter down the conversations you do choose to run deep analysis over makes sense.  You can use heuristics to do that, then use that to guide things.<\/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>Drift is the one nobody talks about until it&#8217;s already cost them a bad week. Real detection here feels like the right instinct.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>9<\/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\/@ado_audu\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ado_audu<\/a>&nbsp;Absolutely does. When a model can change underneath you without a notification, how can you possibly contain drift. Being able to sit inside the agent is absolute gold dust. <\/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\/@ado_audu\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ado_audu<\/a>&nbsp;this guy gets it! How are you monitoring this drift in production currently, and whats preventing you from adopting something like Prefactor?<\/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\/@ado_audu\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ado_audu<\/a>&nbsp;Thanks Michael! Drift is the one that hurts because there is no incident, no alert, no obvious moment where it broke. <\/p>\n<p>Just a slow slide that someone notices a month later in a customer complaint. <\/p>\n<p>Have you experienced this too?<\/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>Congrats Ethan and team!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>9<\/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\/@benln\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@benln<\/a>&nbsp;appreciate the support \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<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@benln\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@benln<\/a>&nbsp;Thanks Ben! <\/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\">@benln thanks Ben! \ud83d\ude01<\/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 line &#8220;most agents pass their evals and fail in production&#8221; is going to resonate with more teams than you probably realize. I&#8217;ve said some version of that sentence out loud in at least three postmortems this year.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>8<\/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\/@billy_boy\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@billy_boy<\/a>&nbsp;Hey Billy, thanks for comment. You&#8217;re right. I find that most companies don&#8217;t even realise the difference. <\/p>\n<\/p>\n<p>I can tell someone what their evaluation approach is before they&#8217;ve even opened their mouth because they are so standardised. Sampled runs, LLM as judge and golden dataset. All are point in time. <\/p>\n<\/p>\n<p>They have their value in dev for sure. But in prod, you need a suite of tools which reduce the need for tokens and non-deterministic outcomes. Being in the agent run\/ live, allows us to do that. <\/p>\n<\/p>\n<p>Would love to get your feedback on the tool and learn if it would have solved some of those PMs earlier in the year <\/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\/@billy_boy\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@billy_boy<\/a>&nbsp;It&#8217;s such a big problem to solve &#8212; so many projects failing, and it really doesn&#8217;t have to be that way.  We&#8217;re trying to put an end to those post-mortems!<\/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\/@billy_boy\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@billy_boy<\/a>&nbsp;Three postmortems is a rough year. <\/p>\n<p>That sentence came out of the same place for us too, watching teams ship something that scored well on a fixed eval set and then quietly degrade over weeks with nobody able to prove it. <\/p>\n<p>What was the failure mode in those postmortems btw, was it drift or something breaking outright?<\/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<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>I spent months building internal scripts to catch exactly this kind of drift. Would&#8217;ve saved me a lot of late nights to just plug into something like this instead.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>8<\/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\/@malka_parveen\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@malka_parveen<\/a>&nbsp;many such cases unfortunately&#8230; Which is the reason we have built Prefactor, to save your engineering team the time and burden of building, and maintaining a platform like this. We should compare notes at some point, would love to know if we missed anything you&#8217;d consider essential for keeping your agents on the straight and narrow.<\/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\/@malka_parveen\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@malka_parveen<\/a>&nbsp;Thanks Malka! Would love for you to try it out and get your feedback!<\/p>\n<p>What sort of agents have you built?<\/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<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hi everyone, Joseph here. I\u2019m a designer at Prefactor.<\/p>\n<p>Something I\u2019m particularly interested in that\u2019s easy to overlook: the moment Prefactor flags something mid-run, a human has to look at a screen and decide whether to step in or let it ride. That decision is only as good as the interface it happens on.<\/p>\n<p>Agents generate an enormous amount of data, and most tools just show you all of it. My job is making sure that when something&#8217;s going wrong, you can tell in seconds, not after scrolling through a wall of spans. Real-time control needs real-time legibility.<\/p>\n<p>If you try Prefactor, I\u2019d love to know: did you know where to look, or did you have to dig?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>8<\/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 guys Ethan here, I&#8217;m part of the team at Prefactor.<\/p>\n<p>My main focus is on the go-to-market side which means I pretty much spend my week on calls with teams and engineers running agents in production.<\/p>\n<p>I usually hear the same stuff all the time.<\/p>\n<p>For example: The agent worked in testing and POC, it went live, but now nobody can answer a basic question: is it doing what we told it to? <\/p>\n<p>That\u2019s where we\u2019d come in, Prefactor gives those teams visibility into what their agents are actually doing in production, so accountability doesn&#8217;t stop the moment it&#8217;s in production.<\/p>\n<p>If you&#8217;ve got an agent running live right now, what does your monitoring actually look like? Keen to know if anyone here has actually solved this properly and if so how.<\/p>\n<p>Cheers!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>8<\/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>Hi folks, I&#8217;m Simon &#8211; CTO and other co-founder of Prefactor.  The real challenge for companies now is not building agents, but managing the infrastructure and process around them.  A lot of the lessons learnt from deploying traditional software at scale still apply, but agents pose new and unfamiliar challenges.  It&#8217;s a combination of traditional devops and HR.  The approaches to risk and quality that have worked in the past need to be updated.<\/p>\n<\/p>\n<p>Prefactor makes this approachable for any engineering team.  Closing the loop on turning feedback into improvements to the agent; ensuring consistency over model and prompt updates; simple ways to understand and contain risk; ways to monitor and control the actions of agents across frameworks and deployment environments.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>8<\/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>Friends, Josh here. AI Engineer @ Prefactor. I built the agent instance tracking that scores quality and flags data risk while your agent runs, plus the SDKs and docs that get teams from zero to live without guessing.<\/p>\n<p>Here&#8217;s the thing I keep coming back to. You can&#8217;t have confidence in something you can&#8217;t see. An agent in production is a bucking bronco; it&#8217;ll throw you the moment you stop paying attention. I&#8217;ve talked to too many teams who deployed, watched it work for a week, then realised they had no idea what it was actually doing. No visibility, no guardrails, just hope.<\/p>\n<p>That&#8217;s the piece Prefactor owns: the quality and data risk scoring that runs in-process, flagging misbehaviour mid-gallop rather than in a trace you read after the damage is done.<\/p>\n<p>If you&#8217;ve got agents live right now, how do you actually know they&#8217;re behaving? Or are you just holding on and hoping?<\/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\/@joshgillies\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@joshgillies<\/a>an agent in production is a bucking bronco is uncomfortably accurate. our version of just holding on and hoping&#8221; was checking reply-sentiment after the fact by the time we noticed an outreach sequence had drifted (wrong tone, wrong list segment), it had already gone out to way more people than one bad decision should reach. the thing that would&#8217;ve actually helped is exactly what you&#8217;re describing catching it mid-run, not in a post-mortem. quick question: does Prefactor&#8217;s scoring work for actions that leave your own system (sends, API calls to third parties), or is it mainly for reasoning\/tool-use inside the agent&#8217;s own loop?<\/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 do you define &#8220;quality&#8221; here? That word does a lot of work and I imagine it means something different for a support agent than a coding agent.<\/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\/@sheikh_umair1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sheikh_umair1<\/a>&nbsp;Absolutely right. SO we see risk and quality as two sides of the same coin. We break them out because if an agent is making a write action on a tool call, then its both a quality problem if it goes wrong and a risk problem if it doesn&#8217;t land properly and affects teams reliant on the agents. <\/p>\n<\/p>\n<p>Quality to us is technical metrics, agent patterns &#8211; literally is it calling too many tools or looping too frequently but the real end game, and why we exist, is to answer the question, how do you know what your agent is doing? And more importantly, how can you tell if it doesn&#8217;t do what you expect it to. <\/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\/@sheikh_umair1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sheikh_umair1<\/a>&nbsp;That&#8217;s very true, and it&#8217;s why we&#8217;ve designed the system to be flexible &#8212; so you can decide how you want to approach it.  The diversity in evaluation frameworks just for coding agents is a sign of how complex (and fast evolving) it is.<\/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\/@sheikh_umair1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sheikh_umair1<\/a>&nbsp;Very good question, quality is doing a lot of work in that sentence. <\/p>\n<p>In practice you define what good looks like for your specific agent rather than us handing you a universal definition, because you are right that a support agent and a coding agent share almost nothing. <\/p>\n<p>The common layer I&#8217;d say is the scoring and enforcement, not the criteria. <\/p>\n<p>What would you want it measuring for the agent you are running?<\/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<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>How does Prefactor decide what parts of the code need attention without creating unnecessary changes? Congrats <a href=\"https:\/\/www.producthunt.com\/@ethan_lee8\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"ethan_lee8\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ethan_lee8<\/a> &amp; team!<\/p>\n<\/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\/@ethan_lee8\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ethan_lee8<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@hamza_afzal_butt\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@hamza_afzal_butt<\/a>&nbsp;We dont claim to know every agent and how they work. We give you the tools to track things as they go wrong, whether thats through meta data, llm as judge evals etc. <\/p>\n<p>We help the unnecessary change bit by version controlling each agent, enabling different environments so you can track the problems as they occur in dev and when you&#8217;re ready push them to prod. <\/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\/@hamza_afzal_butt\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@hamza_afzal_butt<\/a>&nbsp;Hey Hamza thanks so much for the support!<\/p>\n<p>Slight clarification, we don&#8217;t touch your code. Prefactor sits at runtime and records what the agent actually does on every run, then optional guardrails can hold a high-risk action before it executes. <\/p>\n<p>So it&#8217;s less &#8220;which code needs changing&#8221; and more &#8220;which agent stopped doing its job, and stop it now.&#8221; <\/p>\n<p>Are you running any agents in production at the moment btw?<\/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<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hey Product Hunt, I&#8217;m Mukil \u2014 an engineer at Prefactor. \ud83d\udd25<\/p>\n<\/p>\n<p>People always ask me:<\/p>\n<p>&#8220;Mukil, you work with AI all day, isn&#8217;t it crazy what it can do now?&#8221;<\/p>\n<p>Sure, it&#8217;s pretty cool. But I spend most of my time on the mostly ambiguous half of that sentence. Yes, it did something but was it the right thing? Did it actually do it or did it just say it did? Did it just hand someone the account details for the completely wrong account?<\/p>\n<\/p>\n<p>When an agent screws up, it often doesn&#8217;t like to stop. It keeps going, fully confident and you find out hours or days later. And at that point its often when a customer&#8217;s already upset or a refund went out that absolutely should not have. As an engineer this made me a little annoyed. The problem was never that I couldn\u2019t see what the agent did. Dashboards will happily show me \u2014 right after it\u2019s already done something I didn&#8217;t want it to do. It&#8217;s already leaked that PII, emailed the wrong guy or somehow spun up 15 subagents to run a database query.<\/p>\n<\/p>\n<p>With Prefactor you can see runs happening live, stopping the agent in its tracks. Every run gets scored live and lets the human know to step in if they need to. Instead of waiting 30 minutes to see this failed run on your custom dashboard (it&#8217;s very pretty, I&#8217;m sure), you can step in and kill it while its executing.<\/p>\n<p>In short, almost anyone can build an AI agent these days. And as the barrier to building them gets lower, the standard for running them well needs to get much higher.<\/p>\n<\/p>\n<p>We obsess over that second part, so you can spend less time investigating what your agent did at 3:14 a.m. and more time letting it do actual work.<\/p>\n<p>Would love for you to try it and tell us your experience with it!<\/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<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Ethan asked how people keep tabs on live agents, so here is my honest answer. I run scheduled agent jobs daily for SEO reporting and roughly one in three submits used to report success while the page never actually changed, so every job now ends by rereading the rendered result and comparing it against what the agent claimed. Mukil&#8217;s question of did it actually do it or did it just say it did is the exact failure I kept measuring. Can an eval in Prefactor check an external side effect like that, the page actually updated or the row actually written, instead of scoring the run transcript?<\/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\/@abdullah_javaid3\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@abdullah_javaid3<\/a>&nbsp;Thanks for your comment. Short answer: yes, and it&#8217;s basically the loop you already built.<\/p>\n<p>The re-read-and-compare step becomes the eval signal. Your job verifies the real outcome (re-reads the rendered page, or queries the row) and emits that as a span, and the eval scores against that ground truth instead of the agent&#8217;s self-reported &#8220;success.&#8221; So Prefactor never has to trust &#8220;I did it&#8221;,  it scores what actually landed.<\/p>\n<p>That&#8217;s exactly Mukil&#8217;s line: the transcript is the claim, the emitted outcome is the verification, and the eval only counts the second one. Your 1-in-3 false-success rate is precisely what surfaces once you&#8217;re scoring outcomes instead of runs.<\/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\/@abdullah_javaid3\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@abdullah_javaid3<\/a>&nbsp;Interesting question.  Alongside the LLM activity you can store whatever you like; also you can store quality assessments against an individual run.  Usually the goal is to understand what the success rate is, then use that information to improve the prompting and harness.  For your situation a hybrid of prompting and deterministic assessment makes sense.<\/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\/@abdullah_javaid3\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@abdullah_javaid3<\/a>&nbsp;The 1-in-3 false success number is pretty crazy. how often does the re read catch something the transcript said was fine? and when it does catch one, is the fix usually a prompt change or was the tool call itself wrong?<\/p>\n<p>asking becuase i keep finding teams who built the same verification loop by hand and nobody talks about 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>Fantastic product and team, very excited to see them launch here, congratulations on the successful launch of the product!<\/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\/@matthew_browne1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@matthew_browne1<\/a>&nbsp;Thanks Matt. It means a lot coming from you! Thanks for all of the support. To the moon!!!!!!<\/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>IMO the &#8216;act inside the same run&#8217; is what actually separates this from the dashboards that just score runs after the fact. Charting a bad run three days later never stopped anything. QQ &#8211;  once an eval can hold or block at runtime, that eval is sitting in the critical path &#8211; how much latency does the inline check add before it lets a step through? congrats on the launch!<\/p>\n<\/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\/@artstavenka1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@artstavenka1<\/a>&nbsp;generally the approach is to keep everything async in the runtime, this is to ensure minimal latency is introduced into production agents. Would you favor a different approach for the agents you manage? <\/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\/@artstavenka1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@artstavenka1<\/a>&nbsp;Great question.  There are a couple of approaches, depending on your needs.  You can choose to make your agent wait for permission to continue (synchronous) or just log the spans, and then that termination\/feedback signal can come at a later stage when it&#8217;s ready (asynchronous).  Obviously that isn&#8217;t the right approach in all scenarios but it can remove any possibility of latency.  The other part of it is choosing how you&#8217;re judging quality at different stages.<\/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\/@artstavenka1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@artstavenka1<\/a>&nbsp;Hey Art thanks for the question! I&#8217;ll let <a href=\"https:\/\/www.producthunt.com\/@simonru\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"simonru\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@simonru<\/a> or <a href=\"https:\/\/www.producthunt.com\/@matt_doughty\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"matt_doughty\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@matt_doughty<\/a> answer this \ud83d\ude42<\/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<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>kind of worried this just becomes the new green checkmark people stop questioning. same problem, one layer up?<\/p>\n<\/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\/@kellyops\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kellyops<\/a>&nbsp;Thanks for the question. <\/p>\n<\/p>\n<p>I see a world where we are able to leverage multiple layers of evaluation framework to reduce chance of it going wrong. It&#8217;s still software though, and even the best softtware breaks. But the key thing is knowing why it broke, when it broke, and who is the person responsible. It&#8217;s remarkable how those simple questions can&#8217;t be answered by so many companies we speak to. <\/p>\n<\/p>\n<p>Would love to understand what else you think is needed to fix that? Matt<\/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\/@kellyops\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kellyops<\/a>&nbsp;Very valid concern! <\/p>\n<p>Any scoring layer can turn into a checkmark people stop questioning, so what matters imo is whether you can see why a run scored the way it did and disagree with it, not just that a number exists. <\/p>\n<p>We would rather be wrong loudly than right silently. What would make you actually trust a score rather than just accept it?<\/p>\n<h3><\/h3>\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 really like the idea of tracking how the agent is working, as it is performing actions. Being more proactive is better than finding out something went wrong several days ago. It&#8217;s not to be overlooked that the interruption isn&#8217;t just killing the agent run, but handing it to a human too. I am going to have to play around with this and my own agents.<\/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\/@philnash\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@philnash<\/a>&nbsp;Thanks for the comment Phil. Would be happy to share some of the examples Ive built too, I&#8217;m building an eval triaging tool. 3 phases. <\/p>\n<\/p>\n<p>First phase: Tokenless Evals\/ technical reviews<br \/>Second phase: pattern management against prior activity<\/p>\n<p>Third phase: LLM as judge<\/p>\n<\/p>\n<p>All live. Let me know where you get to. <\/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\/@philnash\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@philnash<\/a>&nbsp;Thanks Phil, exactly! Killing a bad run is only half of it, the handoff to a human is where the actual value sits, otherwise you have just built a more expensive way to fail. <\/p>\n<p>Would love to hear what breaks when you try it on your own agents, that is the feedback we learn the most from. <\/p>\n<p>What are you running them on at the moment?<\/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 runtime controls are the strongest part here. Being able to hold or block an agent when an eval fails turns evaluation into an actual safety layer, not another dashboard.<\/p>\n<p>How do teams prevent a noisy or misconfigured eval from repeatedly stopping healthy production runs?<\/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\/@adityaharish2002\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@adityaharish2002<\/a>&nbsp;Absolutely. Thanks for the comment. <\/p>\n<\/p>\n<p>The beauty of the architecture, <a href=\"https:\/\/www.producthunt.com\/@simon_russell1\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"simon_russell1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@simon_russell1<\/a> is being able to hold, insert a hitl\/ agent, kill an agent mid flow. Really we would be encouraging anyone who inserts a killswitch to be absolutely sure that its the right approach. <\/p>\n<\/p>\n<p>It becomes a tiered model, where you only employ the strongest action once it&#8217;s already gone through the other steps to avoid healthy runs being stopped. <\/p>\n<\/p>\n<p>Eg, How many loops have happened, how many tool runs have occurred against the norm, how long has the run gone on. <\/p>\n<\/p>\n<p>There is an argument you could have a healthy run and it just cost a lot, so you need to be clear on what those boundaries are. <\/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>&#8216;no honest way to say which agents still do their job&#8217; nails it. when the llm-judge itself drifts, what keeps the eval honest?<\/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\/@andrewzakonov\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@andrewzakonov<\/a>&nbsp;exactly right, who judges the judge, ad infinitum. How are you managing this at scale currently?<\/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\/@andrewzakonov\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@andrewzakonov<\/a>&nbsp;Our core approach is tokenless. We\/ you use the agent run to spot problems, risks, abnormal behaviour. When an LLM is needed, then you bring it in on demand rather than sampling. The idea is that when an LLM is needed, its being brought in for a specific task to confirm what the tokenless approach has already found. <\/p>\n<\/p>\n<p>You could apply the same logic to bringing in a HITL when a customer support conversation is going off the rails which is discovered through sentiment analysis (tokenless) <\/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\/@andrewzakonov\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@andrewzakonov<\/a>&nbsp;That&#8217;s actually a great point.  Making a good judge LLM agent is actually a big challenge too &#8211; it needs just as much engineering as the thing it&#8217;s judging.  Luckily you can instrument the LLM-as-judge agent with Prefactor as well.  (I guess you could instrument that recursively but you might run into diminishing returns at some point!)<\/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>Can I use Prefactor for my fleet of Hermes and OpenClaw agents ?<\/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\/@nathan_ngz\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@nathan_ngz<\/a>&nbsp;we officially support integrating with <a href=\"https:\/\/github.com\/prefactordev\/typescript-sdk\/tree\/main\/packages\/openclaw-prefactor-plugin\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">OpenClaw<\/a>, and I have it on good authority that Hermes is very easy to instrument also. When in doubt, just point your agent at our <a href=\"https:\/\/docs.prefactor.ai\/platform\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">docs<\/a>, and SDKs on Github and let it cook!<\/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\/@nathan_ngz\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@nathan_ngz<\/a>&nbsp;You can indeed &#8212; there&#8217;s an OpenClaw plugin.  There&#8217;s no Hermes plugin at this point but we have seen someone get Hermes to integrate itself with Prefactor to great effect!<\/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\/@nathan_ngz\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@nathan_ngz<\/a>&nbsp;OpenClaw yes, Hermes not yet <\/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>Working in high-trust environments, I don\u2019t think the future is humans approving every AI action. It\u2019s agents operating independently 95% of the time, with enough visibility and confidence that when they drift outside the guardrails, a human can intervene before it matters. Looks like you\u2019re tackling that problem head on. Congrats <a href=\"https:\/\/www.producthunt.com\/@matt_doughty\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@matt_doughty<\/a>  <a href=\"https:\/\/www.producthunt.com\/@simon_russell1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@simon_russell1<\/a> and team!  <\/p>\n<p>Send me my 1M spans to give it a solid rev up! \ud83d\ude09  <\/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\/@simon_russell1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@simon_russell1<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@emotf\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@emotf<\/a>&nbsp;Done. You&#8217;ve got to set up an agent first and then you get them in your account. <\/p>\n<\/p>\n<p>You were one of our first conversations wayyyy back. LFG!<\/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\/@matt_doughty\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@matt_doughty<\/a> <a href=\"https:\/\/www.producthunt.com\/@emotf\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@emotf<\/a>&nbsp;Thanks! Those 1M are yours if you sign up now \ud83d\ude00<\/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 on the launch. <br \/>When teams try Prefactor for the first time, how do teams catch the first bad run before users notice?<\/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\/@dmitrii_volosatov\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dmitrii_volosatov<\/a>&nbsp;hey mate, thanks for the question. Every run is risk assessed, so if you see something in the run representing a high risk, you can insert a hold into the agent via the spans. Which stops the agent continuing. Or you can either manually or automatically insert a killlswitch, so the short answer is the customer should never see a bad run. <\/p>\n<\/p>\n<p>How are you handling this 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<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@dmitrii_volosatov\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dmitrii_volosatov<\/a>&nbsp;Thanks Dmitrii! Short version is we score runs as they happen rather than sampling after the fact, so a bad run gets flagged while it is still executing instead of surfacing in a dashboard the next morning. <\/p>\n<p>Most teams start with loose thresholds, watch what actually trips in week one, then tighten. <\/p>\n<p>Are you in production already or still at POC?<\/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<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The &#8220;tokenless until you actually need an LLM&#8221; design is the part that stands out, most eval tools default to LLM-as-judge for everything and eat the cost whether it&#8217;s warranted or not. Given you&#8217;re scoring 100% of production traffic, curious how Prefactor handles agents that call other agents (sub-agent chains). Does a breach in a nested sub-agent bubble up and pause the parent run too, or does each agent in the chain get evaluated as its own isolated instance?<\/p>\n<\/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\/@mittalpatel\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@mittalpatel<\/a>&nbsp;in the current design every agent whether it&#8217;s a top-level agent or a sub-agent are treated as bespoke agents within Prefactor ie. they have their own identity, with spans attached to each of their own instances. So a breach in a sub-agent would only effect that agents run. You can of course decide whether that&#8217;s also a stop condition for the parent, but that&#8217;s very much up to the end user to decide. Admittedly sub-agents is something we&#8217;ve trialed a lot of design ideas for, and are admittedly not satisfied yet. That said we&#8217;re always open to suggestions! What would your preference be for a case like this?<\/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\/@mittalpatel\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@mittalpatel<\/a>&nbsp;Thanks for a great question. We treat everything as a chain. Every reaction, step, call. All in one view. <\/p>\n<\/p>\n<p>Sub-agent break outs might occur in future versions if customers want it, but my gut tells me that people want to be able to see the whole workflow, subagents included. How they get represented is another question, but it doesnt make sense to cut them 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<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>That&#8217;s exactly the gap that matters. An agent can produce a perfect transcript and still fail the task in the real world. We&#8217;ve seen jobs report &#8220;success&#8221; while nothing actually changed. That&#8217;s why the real evaluation isn&#8217;t what the agent said\u2014it&#8217;s what actually happened. Can Prefactor validate external outcomes, like confirming a page was updated, a record was written, or an API state changed, instead of only grading the execution log?<\/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\/@md_khayruzzaman\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@md_khayruzzaman<\/a>&nbsp;Absolutely &#8212; we&#8217;ve designed it so that those outcomes can be recorded alongside the agent activity.  They are a vital part of understanding the full outcome of an agent run.<\/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\/@md_khayruzzaman\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@md_khayruzzaman<\/a>&nbsp;The way you&#8217;d handle that would be either connecting Prefactor directly into the MCP of your product and then associating the actions with spans inside the run, meaning you would be able to connect outcome to evaluation\/ run quality. <\/p>\n<\/p>\n<p>Other ways might be to send completed outcomes directly into Prefactor so you top and tail the process. Would love to talk to you about how you would want that to work. The idea of self improving agents only works if you have the outcome connected to drive next steps. <\/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>scoring the run live instead of charting it three days later is the part that actually matters. catching a bad agent after it already shipped the damage is just reporting.<\/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\/@alex_watson2110\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@alex_watson2110<\/a>&nbsp;Totally agree &#8212; evaluation needs to be part of the control loop for an agent to really be trustworthy.<\/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\/@alex_watson2110\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@alex_watson2110<\/a>&nbsp;100%, are you building many agents yourself?<\/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<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>I like that this is built around production instead of just benchmarks. That&#8217;s where things usually get interesting. Congrats on the launch!<\/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\/@henry_habib\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@henry_habib<\/a>&nbsp;Thanks Henry, and thanks for the comment. Benchmarks are great in controlled envs. Agents don&#8217;t operate in hermetically sealed containers. They exist in the wild. We needed to meet that challenge. <\/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\/@henry_habib\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@henry_habib<\/a>&nbsp;Thank you!  Yes, production is where things tend to get real pretty quickly.  Understanding how your benchmarks\/evals translate to the real world is super important.<\/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\/@henry_habib\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@henry_habib<\/a>&nbsp;thanks for the comment, Henry! We agree, an agent demo on a developers laptop is one thing, but once it hits a production environment that where the fun really begins. Are you deploying anything into production currently? <\/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 like that Perfector focuses on real production behavior instead of only passing evaluations. Many teams discover issues after release. How do you help teams trace the exact reason behind a  quality drop across different agent workflow? <\/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\">@john_michael31 thanka for the comment! you  can see every part of the agent run in Prefactor. <\/p>\n<p>Were API driven so you can see every span, every call, every agent step and act on them. Run live evals across any run or in line. <\/p>\n<p>it&#8217;s being inside the SDK that allows us the the ability to catch any drift in real time.<\/p><\/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\/@john_michael31\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@john_michael31<\/a>&nbsp;There are various approaches, but the core of it is being able to store quality metrics against runs, and then extract the full information about those runs.  Depending on the sort of agent you&#8217;re building, your coding agent can use that directly to improve things.<\/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>What kinds of failure modes or edge cases have you seen most often when an agent passes evaluation but fails in production, and how would real\u2011time scoring and drift alerts need to look for your team to trust them enough to act automatically?<\/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\/@swati_paliwal\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@swati_paliwal<\/a>&nbsp;Thanks for your comment Swati. <\/p>\n<\/p>\n<p>We are not just focused on edge cases. The first thing is are the agents being actually assessed against whether they are doing their job. <\/p>\n<\/p>\n<p>That contract you&#8217;ve built for the agent is key. Eg, what tools are they allowed to call (or not in the case of OpenAIs agent), is it looping? Are parts of the flow failing causing excessive token usage. <\/p>\n<\/p>\n<p>Evals are point in time reference points for the agents themselves. When models change, when databases get different answers, drift happens. When sampling involved 1% of all agent runs or less (and given the cost of tokens, it is increasingly less), its not the 1% that will kill you. Its the 1% of the 99% you don&#8217;t eval. <\/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! Does your tool make agents more smart over time by building right context around them, or is it still a responsibility of an agent?<\/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\/@nikitaeverywhere\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@nikitaeverywhere<\/a>&nbsp;Hey Nik. Great question. The self-improving loop is something within its capabilities but not something we currently have as native. <\/p>\n<\/p>\n<p>I ran a POC for a customer where they wanted to have their rag database self improve. I did that by setting up a HITL when a conversation went badly via sentiment analysis running over every span. The rag database would then update with the answers drawn from the agent. So the rag db was self improving. <\/p>\n<\/p>\n<p>Everything is configurable so you can literally go in and do all sorts. I am passionate about working out how to use non token evals to allow 100% coverage and only use the token coverage for the triaged cases. <\/p>\n<\/p>\n<p>Would love to talk more when you&#8217;ve given it a go. <\/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\">#2<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/KH2LLNVN2ZL3SR\" class=\"app-title\">Cekura<\/a><\/p>\n<div class=\"one-liner\">The self-improvement loop for voice agents<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">369<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Cekura\u662f\u4e00\u4e2a\u4e3a\u8bed\u97f3\u4e0e\u804a\u5929AI\u4ee3\u7406\u6253\u9020\u7684\u751f\u4ea7\u73af\u5883\u6d4b\u8bd5\u3001\u53ef\u89c2\u6d4b\u6027\u4e0e\u81ea\u6211\u4fee\u590d\u5e73\u53f0\uff0c\u901a\u8fc7\u6a21\u62df\u6570\u5343\u573a\u666f\u3001\u81ea\u52a8\u8bca\u65ad\u6545\u969c\u5e76\u95ed\u73af\u4fee\u590dAgent\uff0c\u89e3\u51b3\u5f00\u53d1\u56e2\u961f\u624b\u52a8\u8c03\u8bd5\u4f4e\u6548\u3001\u4fee\u590d\u6613\u5f15\u53d1\u65b0Bug\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\/6edcace9-79d1-4ef3-b2f4-b07a9aab1f4d.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\/aabacfcd-62c4-4acd-9839-7971e884a238.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\/6b74a926-1d37-4c86-9190-b68054ddf490.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\/00e59d35-4751-4a77-94cf-70cc7d4d7c18.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\/c03cef89-3dfe-43dc-9364-cad34bc872b5.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\/ec9d67f0-16a8-4ec9-b0a2-92004b76e8d0.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/MyxBFSv1kuY\"><source src=\"https:\/\/youtu.be\/MyxBFSv1kuY\" 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\">Developer Tools<\/span><br \/>\n            <span class=\"tag\">Audio<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u4ee3\u7406\u6d4b\u8bd5<\/span><br \/>\n            <span class=\"tag\">\u8bed\u97f3Agent<\/span><br \/>\n            <span class=\"tag\">\u53ef\u89c2\u6d4b\u6027<\/span><br \/>\n            <span class=\"tag\">\u81ea\u4fee\u590d\u5faa\u73af<\/span><br \/>\n            <span class=\"tag\">\u56de\u5f52\u6d4b\u8bd5<\/span><br \/>\n            <span class=\"tag\">\u6839\u56e0\u8bca\u65ad<\/span><br \/>\n            <span class=\"tag\">CI\/CD\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">\u751f\u4ea7\u7ea7\u8bc4\u4f30<\/span><br \/>\n            <span class=\"tag\">Prompt\u4f18\u5316<\/span><br \/>\n            <span class=\"tag\">\u8fc7\u62df\u5408\u9632\u62a4<\/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\u5176\u81ea\u52a8\u590d\u73b0Bug\u518d\u4fee\u590d\u3001\u56de\u5f52\u626b\u63cf\u9632\u6b62\u8fc7\u62df\u5408\u7684\u6838\u5fc3\u673a\u5236\u3002\u6838\u5fc3\u5173\u5207\u5305\u62ec\uff1a\u6a21\u62df\u573a\u666f\u7684\u903c\u771f\u5ea6\uff08\u5982\u566a\u97f3\u3001\u6253\u65ad\uff09\u3001\u80fd\u5426\u5904\u7406\u5916\u90e8\u7cfb\u7edf\u786e\u8ba4\u4e0eAgent\u884c\u4e3a\u7684\u5206\u79bb\u3001CI\/CD\u81ea\u52a8\u95e8\u7981\u7684\u96c6\u6210\u7a0b\u5ea6\u3001\u4ee5\u53ca\u4fee\u590d\u6cdb\u5316\u80fd\u529b\u7684\u9a8c\u8bc1\u65b9\u5f0f\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                Cekura\u89e3\u51b3\u4e86AI Agent\u5f00\u53d1\u4e2d\u201c\u6d4b\u8bd5-\u4fee\u590d-\u6253\u8865\u4e01\u201d\u7684\u65e0\u6548\u5185\u8017\u5faa\u73af\uff0c\u8fd9\u786e\u5b9e\u662f\u5f53\u524d\u5de5\u5177\u94fe\u4e2d\u4e00\u4e2a\u88ab\u5ffd\u89c6\u4f46\u6781\u5176\u75db\u82e6\u7684\u7a7a\u767d\u3002\u5176\u4ef7\u503c\u6838\u5fc3\u5e76\u975e\u7b80\u5355\u7684\u81ea\u52a8\u5316\uff0c\u800c\u662f**\u5c06\u201c\u8bca\u65ad\u201d\u548c\u201c\u4fee\u590d\u201d\u4e24\u4e2a\u73af\u8282\u7528\u95ed\u73af\u903b\u8f91\u4e32\u8054\u8d77\u6765**\uff0c\u5e76\u4ece\u201c\u4f18\u96c5\u56de\u653e\u201d\u7684\u9b54\u6cd5\u8f6c\u53d8\u4e3a\u53ef\u9a8c\u8bc1\u3001\u53ef\u56de\u6eda\u7684\u5de5\u7a0b\u89c4\u8303\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u503c\u5f97\u4e00\u63d0\u7684\u662f\uff0c\u5b83\u4e25\u683c\u8bbe\u5b9a\u4e86\u201c\u590d\u73b0\u9519\u8bef\u540e\u624d\u80fd\u4fee\u590d\u201d\u7684\u94c1\u5f8b\uff0c\u5e76\u5728\u514b\u9686\u73af\u5883\u9a8c\u8bc1\uff0c\u675c\u7edd\u4e86\u201c\u81ea\u6108\u201d\u5de5\u5177\u5e38\u5f15\u5165\u7684\u201c\u9ed1\u7bb1\u201d\u9690\u60a3\u3002\u8fd9\u89e3\u51b3\u4e86\u5de5\u7a0b\u5e08\u6700\u540e1%\u7684\u4fe1\u4efb\u987e\u8651\u3002\u7136\u800c\uff0c\u771f\u6b63\u7684\u6311\u6218\u5728\u4e8e**\u590d\u6742\u8bed\u5883\u7684\u4fdd\u771f\u5ea6**\u2014\u2014\u6a21\u62df\u7684\u201c\u566a\u58f0\u3001\u6253\u65ad\u201d\u4e0e\u771f\u5b9e\u7528\u6237\u7684\u6df7\u4e71\u3001\u60c5\u7eea\u5316\u72b6\u6001\u5b58\u5728\u5929\u58e4\u4e4b\u522b\u3002\u7528\u6237\u8bc4\u8bba\u4e5f\u5c16\u9510\u6307\u51fa\uff0c\u82e5\u573a\u666f\u96c6\u6210\u4e3a\u4f18\u5316\u76ee\u6807\uff0cAgent\u53ef\u80fd\u5728\u6d4b\u8bd5\u4e2d\u201c\u9ad8\u5206\u4f4e\u80fd\u201d\uff0c\u5c24\u5176\u5728\u5904\u7406\u90a3\u4e9b\u201cAgent\u505a\u4e86\u6b63\u786e\u64cd\u4f5c\u4f46\u5916\u90e8\u7cfb\u7edf\u672a\u63a5\u53d7\u201d\u7684\u590d\u6742\u4e1a\u52a1\u573a\u666f\u65f6\uff0cCekura\u7684\u201c\u9010\u53e5\u8f6c\u5f55+\u7ed3\u679c\u4fe1\u53f7\u201d\u80fd\u5426\u6301\u7eed\u7cbe\u51c6\u533a\u5206\u201c\u5bf9\u8bdd\u6210\u8d25\u201d\u4e0e\u201c\u4e1a\u52a1\u6210\u8d25\u201d\uff0c\u5c1a\u5b58\u9690\u5fe7\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u5f53\u524d\u4ea7\u54c1\u66f4\u50cf\u4e00\u4ef6\u950b\u5229\u7684**\u5916\u79d1\u624b\u672f\u5200**\uff0c\u7cbe\u51c6\u4f46\u5165\u95e8\u95e8\u69db\u4e0d\u4f4e\u3002\u5b83\u8981\u6c42\u56e2\u961f\u5df2\u6709\u6210\u719f\u3001\u53ef\u590d\u73b0\u7684\u6d4b\u8bd5\u573a\u666f\u5b9a\u4e49\u3002\u5bf9\u4e8e\u591a\u6570\u5c1a\u5728\u201c\u624b\u5de5\u8c03\u8bd5\u201d\u9636\u6bb5\u7684\u5c0f\u56e2\u961f\uff0c\u4ece0\u52301\u6784\u5efa\u9ad8\u8d28\u91cf\u8bc4\u4f30\u96c6\u672c\u8eab\u5c31\u662f\u5de8\u5927\u6311\u6218\u3002Cekura\u66f4\u50cf\u662f\u4e00\u4e2a\u201c\u6d4b\u8bd5\u57fa\u7840\u8bbe\u65bd\u201d\uff0c\u800c\u975e\u201c\u5373\u63d2\u5373\u7528\u7684AI\u8c03\u4f18\u5e08\u201d\u3002\u5176\u957f\u671f\u4ef7\u503c\u53d6\u51b3\u4e8e\u80fd\u5426\u6301\u7eed\u964d\u4f4e\u7528\u6237\u6784\u5efa\u548c\u9a8c\u8bc1\u573a\u666f\u7684\u6210\u672c\uff0c\u4ee5\u53ca\u80fd\u5426\u771f\u6b63\u8f93\u51fa\u4e00\u4e2a\u201c\u901a\u7528\u5316\u201d\u7684\u573a\u666f\u5e93\uff0c\u800c\u975e\u6ca6\u4e3a\u7279\u5b9a\u56e2\u961f\u7684\u6210\u672c\u4e2d\u5fc3\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\">Cekura<\/span>\n                <\/div>\n<div class=\"comment-content\">Cekura is the testing, observability, and self-improvement platform for production voice and chat AI agents. It simulates thousands of scenarios, catches failures, diagnoses the root cause, rewrites prompts and config, then re-validates with a full regression sweep. Unlike tools that hand failures back to your team, Cekura closes the loop by fixing the agent itself and proving the fix holds without overfitting.<\/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!<\/p>\n<\/p>\n<p>Sidhant here, co-founder of<a href=\"https:\/\/www.cekura.ai\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"> Cekura<\/a><\/p>\n<p>Today we are launching self-improving loops for voice agents.<\/p>\n<p>Fixing a voice agent has always been fragmented. Your testing tool tells you what failed, you diagnose it from transcripts, patch the prompt, re-run, and something else breaks. The tools find problems, but the fixing has always been a human walking between them.<\/p>\n<p>Cekura collapses that loop. It runs thousands of simulated calls and groups every failure, explained in plain English. Optimise agent hands them to the Cekura Agent, or any coding agent you use, Claude Code, Codex, anything. It reproduces each failure, makes the change, and reruns until everything passes, then verifies nothing else broke. You review the diff.<\/p>\n<p>Two rules: it must reproduce a bug before fixing it, and every fix is proven on simulated calls on a clone, never your live agent.<\/p>\n<p>Free for everyone to try, starting today. We are in the comments all day. If you want to chat more, please feel free to book time<a href=\"https:\/\/www.cekura.ai\/expert\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"> here<\/a><\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>12<\/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\/@kabra_sidhant\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kabra_sidhant<\/a>&nbsp;must reproduce a bug before fixing it is the rule that actually matters here most auto-fix tools skip straight to patching and you end up trusting a fix you can&#8217;t verify actually addressed the real failure. curious what happens when it can&#8217;t reproduce something flagged in production does it flag that as a separate category, or just drop 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<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@kabra_sidhant\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kabra_sidhant<\/a>&nbsp;Do most teams let Cekura suggest fixes, or do they mainly use it to identify issues?<\/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>Root cause diagnosis for voice agents is genuinely hard because failures compound across turns. If it traces that accurately, that alone is worth the pitch.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>9<\/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\/@peter_victor\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@peter_victor<\/a>&nbsp;Completely agree. We trace the full conversation to find where behavior first diverged, rather than patching only the final symptom.<\/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>Reading this made me think about how much time my team spends manually reproducing a bad call just to figure out what went wrong. Automating that alone would be huge.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>8<\/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\/@ramish_saje\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ramish_saje<\/a>&nbsp;Couldn&#8217;t agree more. Hunting down logs to replay a bad call takes way too much time. Automating that reproduction and root-cause diagnosis was step one for us. Really appreciate the support!<\/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>What stands out to me is the regression sweep after every fix. I&#8217;ve seen too many &#8220;self-healing&#8221; tools introduce new bugs while patching old ones. Curious how it measures whether a fix actually generalizes across edge cases.<\/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\/@kimberly_west\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kimberly_west<\/a>&nbsp;Great question. Every fix passes through an <strong>Overfitting Gate<\/strong> first to catch issue-specific or overly narrow fixes, then gets re-validated with a full regression sweep across the evaluator set<\/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>How does Vocera handle accuracy and context when conversations get more complex or users have different speaking styles? Congrats <a href=\"https:\/\/www.producthunt.com\/@kabra_sidhant\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"kabra_sidhant\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kabra_sidhant<\/a> &amp; team!<\/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\/@hamza_afzal_butt\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@hamza_afzal_butt<\/a>&nbsp;Thank you! Cekura tests agents across varied scenarios, speaking styles, interruptions, and multi-turn context\u2014not just isolated turns. It also preserves conversation history and evaluates whether the agent completed the intended outcome, so accuracy holds up as interactions get more complex.<\/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\/@hamza_afzal_butt\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@hamza_afzal_butt<\/a>&nbsp;Our evaluators are written against intent, not exact wording \u2014 conditions like &#8220;the agent asks for your name&#8221; match semantically regardless of how a specific agent phrases it, and grading runs over the full conversation using LLM\/rubric-based judging rather than pattern matching. So the same test generalizes across agents with different tones, styles, or conversational complexity, without needing to be rewritten per agent.<\/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&#8217;ve been burned by agents that pass QA and fail in production because the test scenarios were too clean. Genuinely curious how realistic it&#8217;s simulated conversations sound.<\/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\/@almuddin_ansari\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@almuddin_ansari<\/a>&nbsp;Totally agree. We test interruptions, background noise, long pauses and unexpected responses, not just clean scripted conversations.<\/p>\n<\/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\/@almuddin_ansari\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@almuddin_ansari<\/a>&nbsp;Great question , our simulated conversations use <strong>Conditional Actions<\/strong>, so the testing agent reacts dynamically to what the agent actually says (branching, interruptions, background noise, live data), not a fixed script. Please do check out our docs for more: <a href=\"https:\/\/docs.cekura.ai\/documentation\/key-concepts\/evaluators\/conditional-actions\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/docs.cekura.ai\/documentation\/key-concepts\/evaluators\/conditional-actions<\/a><\/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>Voice agents are unforgiving compared to chat, a bad pause or mistimed interruption sticks out immediately. I appreciate that it treats voice and chat as needing the same rigor rather than bolting voice support onto a chat-first tool.<\/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\/@james_will1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@james_will1<\/a>&nbsp;Thanks! That&#8217;s basically what we built Cekura for.<\/p>\n<p>Cekura doesn&#8217;t answer the calls, it stress tests the agent that does. We generate personas that talk like real users: different accents, interruptions, mumbled order numbers, background noise, code switching mid sentence.<\/p>\n<p>And we score full conversations, not single turns. Did the agent hold state after a topic switch? Did it recover from mishearing something on turn 3?<\/p>\n<p>When it fails, you get the root cause and the fix passed to your coding agent, not just a red flag on a dashboard.<\/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\/@james_will1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@james_will1<\/a>&nbsp; This is the exact thing we refused to compromise on. The moment you evaluate a voice agent by reading its transcript, you&#8217;ve deleted the dimension where it actually fails \u2014 timing, barge-in, overlapping speech. So voice is tested at the audio layer, not as chat with extra steps. Appreciate you calling it out.<\/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\">Love what you and the Cekura crew are building! This is truly solving the problem end to end. I got struck on this loop even for a simple voice agent I built with ElevenLabs for my personal website. So getting this solved for mission critical voice agents is a game changer! Rooting for you guys \ud83d\ude42<\/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\/@satiwick1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@satiwick1<\/a>&nbsp;Thanks for your encouraging comment. Means the world to us. If you get a chance do try cekura for your agent at <a href=\"https:\/\/www.cekura.ai\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">cekura.ai<\/a><\/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>The rule that a bug has to be reproduced before it gets fixed, and validated on a clone instead of the live agent, is the part that stands out to me. I build a voice companion that calls aging parents daily, and my worst fear is a silent regression in an emotionally sensitive call that nobody catches until it actually matters. How do you generate realistic edge cases for messy real speech (long pauses, hearing loss, someone talking over the agent) versus clean synthetic voices? That gap is where most of our failures hide.<\/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\/@igorgurovich\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@igorgurovich<\/a>&nbsp;That&#8217;s exactly the gap we designed for. Our simulations use Conditional Actions to reproduce real pauses, mid-sentence interruptions, and real-voice recordings, not just clean TTS , along with personalities for speaking pace and background noise. That&#8217;s where messy-speech edge cases get caught before production.<\/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>the loop-closing part is the interesting claim. the failure mode i would worry about is the simulator quietly becoming the thing you optimise against, so the agent gets very good at passing your scenario set and no better in production.<\/p>\n<\/p>\n<p>we run agents against third-party systems we do not control, and the split that ended up mattering most was &#8220;the agent did the right thing&#8221; versus &#8220;the other side actually accepted it&#8221;. those two look identical in a transcript and come apart constantly in practice.<\/p>\n<\/p>\n<p>curious how the regression sweep decides a fix generalised rather than fit the scenarios. is the held-out set drawn from real production calls, or generated the same way the training scenarios were?<\/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\/@whateverneveranywhere\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@whateverneveranywhere<\/a>&nbsp;That\u2019s exactly the failure mode we guard against. We separate \u201cthe agent attempted the right action\u201d from \u201cthe external system accepted it\u201d using provider state, tool results, and outcome signals\u2014not transcripts alone.<\/p>\n<p>The regression sweep includes the full validation set plus happy\/edge cases, with overfitting checks for scenario-specific fixes. Production-derived held-out cases are the strongest validation.<\/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>It&#8217;s like living in the future<\/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\">\n<p>The rule that a fix has to be reproduced and validated on a clone before touching the live agent is the right engineering call for anything running in production customer support. The part I want to understand is the CI\/CD integration: when a new prompt version or agent config gets committed, does Cekura run the regression suite automatically as a pipeline step that can block a deploy, or is the test run still something the team triggers manually? That boundary between an automated gate and a manual check is usually where teams cut corners under deadline pressure.<\/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\/@hazy0\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@hazy0<\/a>&nbsp;Cekura evals can run as a step in your CI\/CD pipeline via our GitHub Actions integration. We also provide a curated Infrastructure Suite that we recommend adding to that pipeline for infra regression checks.<\/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>Love seeing the focus on proving that a fix doesn&#8217;t introduce regressions elsewhere. Reliable AI systems need repeatable validation, not just faster debugging.<\/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>Simulating messy real-world conversations with interruptions, pauses, and background noise feels much closer to production than traditional scripted evaluations.<\/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\/@pratham_patel8\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@pratham_patel8<\/a>&nbsp;Thanks, appreciate 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>Lets Go Team!!!!<\/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>Congrats on the launch. The hard part of a self-improvement loop is the blast radius. When an agent rewrites its own behavior from production calls, a fix for one flow can quietly bend a compliance flow sitting next to it, and in healthcare that is the thing every security review hunts for. Closing that loop safely, so the agent improves without drifting out of its guardrails, is the whole game, and it is a genuinely hard problem to have taken on.<\/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\/@roguetink\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@roguetink<\/a>&nbsp;Thank you, really appreciate 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>the without overfitting part is doing a lot of heavy lifting in that description, and its the right thing to be worried about. an auto-fixer that cant prove the fix generalized is just prompt roulette.<\/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\/@alex_watson2110\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@alex_watson2110<\/a>&nbsp;Agreed , that&#8217;s exactly the risk we designed against. Every applied edit passes through an Overfitting Gate before validation, then gets re-run against the full evaluator set, so a fix only counts once it holds broadly, not just on the case it was written for.<\/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&#8217;m a huge fan of the work the Cekura team is doing. Closing the development loop with testing, evaluation, and paths to verifiable improvement is the single most valuable thing you can do in an agentic coding context. This is <em>hard<\/em> for voice agent development, for a bunch of reasons, including that there are many moving parts, gathering metrics robustly can be tricky and subtle, and success criteria are complex. Cekura has created great building blocks and high-leverage agent skills\/workflows for solving these problems. Congratulations to the team on this launch, and all the effort and good thinking that went into it! <\/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\/@kwindla\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kwindla<\/a>&nbsp;Thank you so much! We really appreciate your help with this<\/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>Love seeing more attention on production reliability for voice AI. The regression validation especially stood out. Curious whether Cekura can prioritize issues by business impact (for example, failed payments vs. minor conversation hiccups) or if everything is treated equally.<\/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\/@yash_jain49\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@yash_jain49<\/a>&nbsp;Great question. You can easily prioritize issues on which to self-improve your agent on Cekura. You can create custom metrics depending on your use case and can attach them to scenarios on which you are improving your agent and the self-improvement loop will consider the failure points on the attached metrics to improve your agent upon.<\/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! Really like that you\u2019re focusing on proving fixes instead of just identifying failures. One thing I\u2019m curious about: how do you decide when a suggested fix is reliable enough to recommend versus flagging it for manual review?<\/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\/@ujjval_goury\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ujjval_goury<\/a>&nbsp;Hi Ujjval the loop run a suggested fix multiple times to see if the fix consistently resolves the failure mode. If the loop isn&#8217;t sure about anything then it hands to the user for manual review.<\/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>Voice agents fail in ways text evals never catch \u2014 interruptions, latency, someone talking over the bot. The &#8220;loop&#8221; framing is the right one: testing voice once at build time is basically useless. Would love to know how many simulated calls it takes before the improvements show up.<\/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\/@lucasjpols\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@lucasjpols<\/a>&nbsp;Fair question , it&#8217;s less about a fixed number of calls and more about iterations: the loop diagnoses, fixes, and re-validates until the full evaluator set passes. We&#8217;ve seen quite a lot of improvement starting from just 1-2 rounds itself<\/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>Thanks \u2014 the GitHub Actions path is the answer to that question. The follow-up I&#8217;d have is whether the infra regression suite runs against a live agent clone or replays recorded sessions, because customer-support agents with integration state tend to behave differently on replay versus a live environment.<\/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;Hi Hazy,  every Infrastructure Suite case is a real simulated call against a real running agent. <\/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>Does Cekura provide regression testing capabilities to catch quality drops when agents are updated or retrained?<\/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_khuzuma\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@james_khuzuma<\/a>&nbsp;Yes , every prompt\/config fix is re-run against the full evaluator set as a regression sweep before it&#8217;s considered done, and the same evaluators can be run in CI\/CD on every agent update so quality drops get caught before they reach production.<\/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 customizable are the evaluation metrics? Can teams define their own quality benchmarks based on their specific use case?<\/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\/@william_leon1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@william_leon1<\/a>&nbsp;Very customizable , beyond our pre-defined metrics, teams can define their own custom metrics, including LLM-judge and Python-based ones for fully custom logic tailored to their specific use case.<\/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>For teams building voice based agents specifically, does Cekura account for latency and audio quality issues, or is the focus primarily on conversational logic?<\/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\/@sophie_louis\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sophie_louis<\/a>&nbsp;Both, not just conversational logic. We have dedicated Conversation Quality metrics for latency (with percentile breakdowns) and interruption\/turn-taking timing, plus Speech Quality metrics for audio itself , pitch, clarity, jitter, unnatural speaking-rate changes , all computed straight from the call audio<\/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 does Cekura evaluate more nuanced qualities like tone, empathy, or conversational flow, beyond just accuracy or task completion?<\/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\/@louis_hallie\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@louis_hallie<\/a>&nbsp;Yes , beyond accuracy\/task-completion, we have built-in metrics for exactly that: CSAT and Sentiment score the caller&#8217;s tone and satisfaction, Verbosity and Unnecessary Repetition flag conversational flow issues like over-explaining or re-confirming the same thing, and Voice Tone + Clarity looks at delivery quality from the audio itself. For anything more specific to your agent&#8217;s context, you can also define a custom LLM-judge metric<\/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>Does Cekura support testing across multiple languages and accents, given how critical that is for conversational AI reliability?<\/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\/@eden_halls\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@eden_halls<\/a>&nbsp;Yes , language and accent are both first-class testing surfaces. Personalities let you run the same evaluator across different languages (including code-switching, like Spanglish) and different regional\/non-native accents, with a Transcription Accuracy metric that flags exactly where STT struggles per variant, so you can compare pass rates side by side instead of relying on one aggregate 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<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>When monitoring production calls, how does Cekura detect quality issues in real time, and what kind of alerting or reporting does it provide to teams?<\/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\/@charlotte_henry\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@charlotte_henry<\/a>&nbsp;For production monitoring, Cekura runs metrics continuously on live calls and clusters failures into recurring failure-mode themes automatically, so you see patterns instead of re-reading every call. On top of that, configurable alerts (failure, trend drift, threshold breach, new failure mode, failure-mode spike) route straight to Slack with the call and context attached.<\/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>Nice launch! What CI\/CD tool integrations do you 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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@avz\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@avz<\/a>&nbsp;Hi Julien, GitHub Actions is the one we support out of the box. For some other  CI system there&#8217;s no separate integration needed: our CLI does the same job. You can check more on CI\/CD here: <a href=\"https:\/\/docs.cekura.ai\/documentation\/guides\/github-actions-ci-cd\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/docs.cekura.ai\/documentation\/guides\/github-actions-ci-cd<\/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>For teams already using CI\/CD pipelines, how much setup or configuration is typically required to integrate Cekura, and is it compatible with most existing tooling?<\/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\/@cameron_collins1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@cameron_collins1<\/a>&nbsp;Setup is minimal , once your evals are set up on Cekura, integrating into your CI\/CD pipeline is just one small step, and it works with most existing tooling, not just GitHub Actions.<\/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\">#3<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/GSHXQX2CIK3S3Y\" class=\"app-title\">Lottie Creator 2.0<\/a><\/p>\n<div class=\"one-liner\">After Effects for the web, built on Lottie<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">329<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Lottie Creator 2.0 \u662f\u4e00\u4e2a\u5728\u6d4f\u89c8\u5668\u4e2d\u76f4\u63a5\u5b8c\u6210\u77e2\u91cf\u52a8\u753b\u8bbe\u8ba1\u3001AI\u8f85\u52a9\u521b\u4f5c\u3001\u4ea4\u4e92\u903b\u8f91\u7f16\u6392\u4e0e\u751f\u4ea7\u5bfc\u51fa\u7684\u5728\u7ebf\u5de5\u5177\uff0c\u89e3\u51b3\u4e13\u4e1a\u52a8\u6548\u8bbe\u8ba1\u9700\u5b89\u88c5\u684c\u9762\u8f6f\u4ef6\u53ca\u56e2\u961f\u534f\u4f5c\u4f4e\u6548\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\/5c5318ef-15cd-4bdf-84de-3310f281686b.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=N3ilgRH-oeQ\"><source src=\"https:\/\/www.youtube.com\/watch?v=N3ilgRH-oeQ\" 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\/27240b1e-95b1-4d64-8b55-8045b90f8c37.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\/bd7f4985-5cfe-4cb2-a60d-39d53f08415d.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\/f7716ea8-ca0a-49f0-b07b-e1c78351f60f.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\/25f93d9a-0ae3-475c-be36-35cbc9cfe745.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\/56129003-7a31-4b7b-92a8-49bad6b3e8b3.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\/40a1a80e-20b7-4c97-a4cd-da927e3e7045.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\/42245aee-dbb4-49dd-aba5-c9de803ed7c2.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\/107c8030-c763-4ad9-9372-d3d1832f3cd3.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\">Graphics &#038; Design<\/span><br \/>\n            <span class=\"tag\">Animation<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u5728\u7ebf\u52a8\u753b\u5236\u4f5c<\/span><br \/>\n            <span class=\"tag\">\u77e2\u91cf\u52a8\u753b<\/span><br \/>\n            <span class=\"tag\">Lottie<\/span><br \/>\n            <span class=\"tag\">Motion Copilot AI<\/span><br \/>\n            <span class=\"tag\">\u72b6\u6001\u673a<\/span><br \/>\n            <span class=\"tag\">\u8fd0\u52a8\u4ee4\u724c<\/span><br \/>\n            <span class=\"tag\">\u65e0\u684c\u9762\u8f6f\u4ef6<\/span><br \/>\n            <span class=\"tag\">\u6d4f\u89c8\u5668\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u8fd0\u52a8\u8bbe\u8ba1\u7cfb\u7edf<\/span><br \/>\n            <span class=\"tag\">\u4ea4\u4e92\u8bbe\u8ba1<\/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\u76db\u8d5eMotion Copilot\u964d\u4f4e\u521b\u4f5c\u95e8\u69db\uff0c\u5c24\u5176\u7f13\u89e3\u201c\u7a7a\u767d\u753b\u5e03\u7126\u8651\u201d\u3002\u591a\u4eba\u53cd\u9988State Machines\u4f7f\u4ea4\u4e92\u8bbe\u8ba1\u66f4\u4eb2\u6c11\u3002\u5efa\u8bae\u96c6\u4e2d\u5728\uff1a\u671f\u671bAI\u8fdb\u4e00\u6b65\u7ec6\u5316\u80fd\u529b\uff0c\u5e76\u5e0c\u671b\u770b\u5230\u66f4\u591a\u793e\u533a\u590d\u7528\u7684\u6700\u4f73\u5b9e\u8df5\u548c\u6a21\u677f\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                Lottie Creator 2.0 \u625b\u7740\u201c\u7f51\u9875\u7248After Effects\u201d\u7684\u5927\u65d7\uff0c\u57282023\u5e74\u8fd9\u4e2a\u8282\u70b9\u4e0a\uff0c\u786e\u5b9e\u7cbe\u51c6\u5207\u4e2d\u4e86\u4e00\u4e2a\u957f\u671f\u88ab\u5ffd\u89c6\u7684\u9700\u6c42\uff1a\u9ad8\u7ea7\u52a8\u6548\u5236\u4f5c\u7684\u201c\u684c\u9762\u8f6f\u4ef6\u4f9d\u8d56\u201d\u548c\u201c\u56e2\u961f\u4ea4\u4ed8\u6210\u672c\u201d\u3002\u5176\u771f\u6b63\u7684\u4ef7\u503c\u5e76\u975e\u5b8c\u5168\u66ff\u4ee3AE\uff0c\u800c\u662f\u901a\u8fc7\u4e09\u4e2a\u201c\u53bb\u590d\u6742\u5316\u201d\u52a8\u4f5c\u5236\u9020\u4e86\u5dee\u5f02\u5316\u4f18\u52bf\uff1a\u4e00\u662f\u7528AI Copilot\u964d\u4f4e\u4ece\u96f6\u5f00\u59cb\u7684\u521b\u610f\u95e8\u69db\uff0c\u89e3\u51b3\u201c\u5f00\u573a\u96be\u201d\uff1b\u4e8c\u662f\u7528State Machines\u548cMotion Tokens\u5c06\u4ea4\u4e92\u903b\u8f91\u4e0e\u54c1\u724c\u8d44\u4ea7\u7ec4\u4ef6\u5316\uff0c\u89e3\u51b3\u4e86\u52a8\u6548\u5728\u56e2\u961f\u5185\u90e8\u89c4\u6a21\u5316\u3001\u6807\u51c6\u5316\u5e94\u7528\u7684\u96be\u9898\uff1b\u4e09\u662f\u5168\u7a0b\u4e91\u7aef\u4e0edotLottie\u5bfc\u51fa\u65b9\u6848\uff0c\u76f4\u63a5\u6d88\u9664\u4e86\u6587\u4ef6\u7248\u672c\u6df7\u4e71\u4e0e\u8de8\u5e73\u53f0\u517c\u5bb9\u7684\u9690\u6027\u6210\u672c\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u7136\u800c\uff0c\u5fc5\u987b\u6cfc\u4e00\u76c6\u51b7\u6c34\u3002\u5ba3\u79f0\u201cAfter Effects for the web\u201d\u662f\u5371\u9669\u7684\u6bd4\u55bb\uff0c\u56e0\u4e3aAE\u7684\u751f\u6001\u58c1\u5792\u5728\u4e8e\u5176\u5e9e\u5927\u6210\u719f\u7684\u7528\u6237\u7fa4\u3001\u811a\u672c\u3001\u63d2\u4ef6\u4ee5\u53ca\u9488\u5bf9\u590d\u6742\u5f71\u89c6\u7ea7\u5408\u6210\uff08\u5982\u7c92\u5b50\u3001\u62a0\u50cf\uff09\u7684\u5e95\u5c42\u6e32\u67d3\u7ba1\u7ebf\u3002Lottie Creator 2.0\u76ee\u524d\u66f4\u63a5\u8fd1\u201c\u9762\u5411UI\/UX\u52a8\u6548\u7684Figma\u201d\u2014\u2014\u64c5\u957f\u54c1\u724c\u52a8\u753b\u3001\u5fae\u4ea4\u4e92\u3001Lottie\u7d20\u6750\u751f\u4ea7\uff0c\u4f46\u7edd\u975e\u5168\u80fd\u3002\u5176AI Copilot\u76ee\u524d\u4e3b\u8981\u4f5c\u4e3a\u8d77\u70b9\u52a9\u63a8\u5668\uff0c\u800c\u5728\u7cbe\u7ec6\u5173\u952e\u5e27\u63a7\u5236\u548c\u590d\u6742\u52a8\u753b\u903b\u8f91\u7f16\u6392\u4e0a\uff0c\u8bc4\u8bba\u533a\u53cd\u9988\u4ecd\u9700\u624b\u52a8\u5927\u91cf\u8c03\u8bd5\uff0c\u8fd9\u610f\u5473\u7740\u201c\u5165\u95e8\u7b80\u5355\uff0c\u7cbe\u901a\u4ecd\u96be\u201d\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u771f\u6b63\u8981\u89e3\u51b3\u7684\u95ee\u9898\u662f\uff1a\u5b83\u80fd\u5426\u8bf4\u670d\u90a3\u4e9b\u5df2\u7ecf\u719f\u7ec3\u4f7f\u7528AE\u7684\u8bbe\u8ba1\u5e08\u5207\u6362\u5de5\u4f5c\u6d41\uff1f\u5982\u679c\u4e0d\u80fd\u89e3\u51b3\u201c\u4eceAE\u8fc1\u79fb\u7684\u5168\u5957\u8d44\u4ea7\u635f\u5931\u201d\uff0c\u5b83\u66f4\u53ef\u80fd\u626e\u6f14\u201c\u4f4e\u4ee3\u7801\u52a8\u753b\u7684\u534f\u4f5c\u5c42\u201d\u89d2\u8272\u2014\u2014\u8ba9\u4e0d\u61c2\u52a8\u6548\u7684PM\u6216\u524d\u7aef\u7528AI\u5feb\u901f\u751f\u6210\u539f\u578b\uff0c\u8ba9\u521d\u7ea7\u8bbe\u8ba1\u5e08\u4ea4\u4ed8\u6807\u51c6\u5316Lottie\uff0c\u8d44\u6df1\u8bbe\u8ba1\u5e08\u5219\u7ee7\u7eed\u5728AE\u91cc\u78e8\u7cbe\u54c1\u3002\u56e2\u961f\u82e5\u60f3\u5728\u5de5\u5177\u7ea2\u6d77\u91cc\u5b58\u6d3b\uff0c\u4e0d\u8be5\u6c89\u8ff7\u4e8e\u5bf9\u6807AE\uff0c\u800c\u5e94\u6b7b\u78d5Motion System\u548cAI Copilot\u7684\u667a\u80fd\u5316\u6df1\u5ea6\uff0c\u8ba9\u81ea\u5df1\u6210\u4e3a\u201c\u52a8\u6548\u9a71\u52a8\u7684\u4ea4\u4e92\u7cfb\u7edf\u201d\u5e95\u5ea7\uff0c\u800c\u975e\u4e00\u4e2a\u66f4\u8f7b\u5de7\u7684\u7ed8\u56fe\u8f6f\u4ef6\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\">Lottie Creator 2.0<\/span>\n                <\/div>\n<div class=\"comment-content\">Yes, we&#8217;re calling it: After Effects for the web. Design vector animations from scratch in your browser, move faster with Motion Copilot AI, wire up interactivity with State Machines, and export production-ready Lottie + dotLottie. No desktop app. No dev handoff.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hi PH!<\/p>\n<p>On behalf of the Creator team, we are beyond excited to finally share our latest milestone with you: Lottie Creator 2.0!<\/p>\n<p>Over the last year of building Lottie Creator, the same problem kept surfacing: on the modern web, there is a clear gap between simple tools and tools that enable you to unleash your full creative potential. That&#8217;s where Lottie Creator 2.0 comes in to bridge that gap!<\/p>\n<p>We\u2019ve done our best to put YOU in the driver\u2019s seat, all while automating the boring stuff away.<\/p>\n<p>Boss on your back and you need to quickly align an entire animated brand kit? Use the Motion Systems and standardize look and feel across multiple animations. Working on a one-of-a-kind masterpiece? Use the new Graph Editor to tweak every important frame to tell your story (and lets be real: every frame is important). Need to blaze through adding interactivity for your animations? Use a combo of State Machines and Copilot to perform the repetitive clicks, while your brain focuses on your next creative idea.<\/p>\n<p>We hope you give Lottie Creator 2.0 a shot, and let us know about your experience. The team is actively sourcing feedback (the good, the bad, the ugly) for us to take the product to the next level, so please don\u2019t hesitate to reach out to us. <\/p>\n<p>We\u2019re so excited to see your animations out there in the wild!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>32<\/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\/@karinfam\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@karinfam<\/a>&nbsp;Really excited to see everyone&#8217;s experiments with Creator 2.0! It&#8217;s a huge milestone and a major improvement. Can&#8217;t wait to see what the community builds with it, using the new tools and expanded capabilities available on 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<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>Motion Copilot is top of my list to try. Getting past the empty timeline is the real bottleneck. Congrats on Shipping!<\/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<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@karinfam\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@karinfam<\/a>&nbsp;Amazing!!<\/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 Hunter! &nbsp;<\/p>\n<\/p>\n<p>Lottie Creator creator here (no pun intended). This is what&#8217;s behind the Lottie Creator 2.0.<\/p>\n<ul>\n<li>\n<p>We started Creator with a challenging goal: bring advanced, production-grade animation tools to the browser while lowering the barrier to creating motion.<\/p>\n<\/li>\n<li>\n<p>Historically, producing sophisticated animations for digital products has required complex desktop software, specialized expertise, and continuous installation, maintenance and updates.<\/p>\n<\/li>\n<li>\n<p>With Creator 2.0, we\u2019re building a different kind of motion tool\u2014one that is approachable when you\u2019re juts getting started, yet powerful enough for experienced animators to create detailed, high-quality work.<\/p>\n<\/li>\n<li>\n<p>Creator gives you the precision you\u2019d expect from a professional animation environment, including keyframe animation, a graph editor, and advanced easing controls to build complex motion directly in your browser.<\/p>\n<\/li>\n<li>\n<p>We\u2019ve also designed Creator to be AI-first. Motion Copilot helps you move from an idea to an editable animation, within seconds. AI-powered raster-to-vector conversion remove repetitive steps and give you a stronger starting point. AI doesn\u2019t replace the creative process\u2014it augments your creativity where your judgment and craft matter faster.<\/p>\n<\/li>\n<\/ul>\n<p>Some of the biggest additions in Creator 2.0 include:<\/p>\n<ul>\n<li>\n<p>Advanced keyframing and graph-editor controls for precise motion<\/p>\n<\/li>\n<li>\n<p>Motion Copilot and AI-powered creation workflows<\/p>\n<\/li>\n<li>\n<p>State Machines for building interactive animations<\/p>\n<\/li>\n<li>\n<p>Motion Tokens for creating dynamic, data-driven motion<\/p>\n<\/li>\n<li>\n<p>Motion Systems for standardizing animation across products and brands<\/p>\n<\/li>\n<li>\n<p>Multiple animations and states packaged into a single dotLottie file<\/p>\n<\/li>\n<li>\n<p>An extensible plugin ecosystem for expanding what Creator can do<\/p>\n<\/li>\n<\/ul>\n<p>Creator is for motion designers, product designers, developers, and teams that want to treat animation as a core part of the product experience\u2014not as a decorative asset added at the end. Our larger vision is to make sophisticated motion easier to create, systemize, and ship at scale, without taking control away from the creator. We\u2019d love your feedback on the advanced animation workflow, our AI features, and how Motion Tokens and Motion Systems could fit into the way you build motion today.<\/p>\n<p>Thanks for checking out Lottie Creator 2.0!&nbsp;<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>16<\/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 proud to be part of the team behind Lottie Creator 2.0! <br \/>A lot of work went into this release, and it\u2019s great to finally share it with everyone.<\/p>\n<p>I\u2019m especially excited about the improved Motion Copilot. You can just describe what you want, and it can help you create animations using powerful features like Motion Tokens and State Machines. <br \/>It honestly feels a bit like magic. \u2728<\/p>\n<p>If you try it, please share your feedback with us. good or bad. We\u2019re very open to hearing what could be better and what you\u2019d like to see next!<\/p>\n<\/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\/@inerds\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@inerds<\/a>&nbsp;This is damn impressive. Being able to describe an idea and watch it turn into an animation feels a bit unreal. Can&#8217;t wait to try Motion Copilot!!! congrats to the whole team! \u2728<\/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>Massive congrats to the Creator team on this huge 2.0 milestone! \ud83c\udf89 While I\u2019m not on the core Creator team myself, but my team had an absolute blast collaborating with them to improving and integration <strong>dotLottie Motion Tokens<\/strong> and <strong>State Machines<\/strong> into this release.<\/p>\n<p>Seeing these features come to life directly in the browser is honestly surreal. State Machines completely change the game by making interactive animations incredibly accessible, and Motion Tokens opens up so many dynamic styling possibilities for production. Really proud of the cross-team effort here. I genuinely can&#8217;t wait to see all the interactive experiments the community builds with this! \ud83d\ude80<\/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\/@theashraf\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@theashraf<\/a>&nbsp;\u2764\ufe0f<\/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 to the Lottie Creator team! I&#8217;m impressed by how easy it&#8217;s gotten to make animations. Something like this would have required hours of tutorials in the past, but Creator is really intuitive.<\/p>\n<p>I also really appreciate that it works on the web. I&#8217;ve been playing around with Linux a lot lately (on top of my Mac\/Windows computers), and browser-based software makes compatibility a breeze. I don&#8217;t need to worry about downloading and installing anything.<\/p>\n<p>And the Motion Copilot AI is probably the first time I&#8217;ve seen a motion design tool implement AI properly, so major kudos to the people who put that together!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>10<\/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\/@georgeatlottiefiles\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@georgeatlottiefiles<\/a>&nbsp;Thank you, George! Don&#8217;t be shy to share some of your made-on-Linux animations, we would love to see those!<\/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>Best part of any launch: seeing what the community builds next. Show us what you make with Creator 2.0 especially motion copilot 2.0!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>8<\/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>Motion Copilot has changed the way I experiment with animations. Instead of starting from a blank timeline every time, I can quickly generate a direction, iterate on it, and spend more time polishing the final result. It&#8217;s become a regular part of my workflow.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>8<\/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\/@kshitij_minglani1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kshitij_minglani1<\/a>&nbsp;Glad to see you&#8217;re enjoying it<\/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>One thing I really like about Creator 2.0 is that everything happens directly in the browser. There is nothing to install, and I do not have to keep switching between different tools just to try something out. I can open it, start working, and see how an idea feels almost immediately.<\/p>\n<\/p>\n<p>That small difference makes the whole process feel much more approachable. I am more willing to experiment, make quick changes, and test different motion ideas because there is less setup getting in the way. It feels easier to stay focused on the work itself instead of thinking about the tools around it.<\/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>Love hearing this <a href=\"https:\/\/www.producthunt.com\/@wenjieshen\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"wenjieshen\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@wenjieshen<\/a> ! <br \/>Creator also saves your work automatically, so you can always come back and pick up where you left off. Keep exploring, and please share any feedback or ideas with us!<\/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 have spent a lot of time with LottieFiles Creator over the years, so seeing it out in the world feels really special. It has been a rewarding journey helping shape a tool built for motion designers. I hope it helps you create faster, experiment more, and enjoy the process as much as i have.<\/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<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Directly gonna share this with our team of designers \ud83d\ude42<\/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\/@busmark_w_nika\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@busmark_w_nika<\/a>&nbsp;Your team might especially love the Motion System inside Creator 2.0. It lets teams standardize color, easing, and motion presets in one place. Would love to hear what they think!<\/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\/@busmark_w_nika\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@busmark_w_nika<\/a>&nbsp;Thank you for the support, Nika! We&#8217;re excited to see your team shipping those animations!<\/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>First off, congratulations to the team on Lottie Creator 2.0! It\u2019s been a milestone we\u2019ve all been counting down to.<\/p>\n<p>For me personally, my favorite features are Motion Tokens and State Machines. Interactive and responsive animation is just so fascinating to me, and being able to build that with the power of dotLottie still blows my mind.<\/p>\n<p>As a non-designer, getting started was definitely a learning experience. But once I got the hang of a few tricks, everything started to click and the logic became more clear. I can&#8217;t wait to see what everyone creates! \ud83d\ude0a<\/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\/@lubleep\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@lubleep<\/a>&nbsp;Thank you for all your support in this launch Mariyam, we really appreciate 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<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@lubleep\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@lubleep<\/a>&nbsp;I&#8217;m with you! Apart from its web-based nature (so I don&#8217;t have to jump between tools or install heavy software) and the super helpful Motion Copilot, Motion Tokens stole my attention the most. They make editing and scaling the use of animations a lot smoother and structured. Congratulations Creator 2.0 team! <\/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>What I love about Motion Copilot is that it gets me past the hardest part, which is starting. I feed it a rough idea, it gives me something to react to, and from there I just keep refining until it feels right.<\/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\/@serhiii\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@serhiii<\/a>&nbsp;Thank you for this, Serhii! Let us know if you&#8217;ve got any more feedback, we&#8217;d love to make it easier to get started in Creator.<\/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 honestly didn&#8217;t expect Motion Copilot to become such a big part of my workflow, but here we are. \ud83d\ude04<\/p>\n<p>As someone who works with motion design and animation regularly, I constantly have ideas I&#8217;d love to try\u2014but many of them never make it past the &#8220;what if&#8221; stage because prototyping takes time. Motion Copilot has completely changed that.<\/p>\n<p>Instead of spending hours building a rough proof of concept, I can quickly explore different animation ideas, iterate on them, and see what works. That freedom to experiment has made me much more creative because the cost of trying something new is so much lower.<\/p>\n<p>It&#8217;s become one of those tools I open without even thinking about it. Whether I&#8217;m exploring interactions, testing animation concepts, or simply looking for inspiration, it helps me move from idea to prototype in minutes instead of hours.<\/p>\n<p>The biggest value for me isn&#8217;t just the time it saves\u2014it&#8217;s that it encourages experimentation. I&#8217;ve ended up creating animations I probably would have abandoned before because they seemed too time-consuming to prototype.<\/p>\n<p>If you work with motion design, animation, or interactive experiences, Motion Copilot is one of those tools that quietly becomes indispensable once it&#8217;s part of your workflow.<\/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\/@pecsundar\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@pecsundar<\/a>&nbsp;honestly motion copilot has saved me hours of chasing animation directions. the new version goes wayyyy further. it builds animations from scratch, so i start with something and I can keep refining it instead of staring at an empty canvas.<\/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>I&#8217;ve been using it for the past few months and I&#8217;m so proud of what the team has built here. I love the Physics Editor: makes confetti animations so fast and easy. Also Motion Presets and Easing Curves really help companies build their definitive Motion System, which enables a whole new level of consistency and speed on teams.<\/p>\n<p>But without a doubt, my favorite part is still Motion Copilot. Watching an idea turn into an animation in seconds with a simple prompt never gets old. Feels like absolute magic.<\/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<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>It&#8217;s been great working on Creator 2.0. I&#8217;m not an animator myself, and honestly Motion Copilot is what finally let me make animations I couldn&#8217;t before. A lot of this release came from feedback and comments we received, from small fixes to State Machines and the new Graph Editor. Still plenty on our list. Can&#8217;t wait to see what the community builds. \ud83d\ude80<\/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<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The State Machines feature is what I wanted to understand more \u2014 specifically how complex the exported dotLottie gets when you layer multiple interactive states. I use Lottie for small animated microinteractions in web projects and the dev handoff is usually where the friction shows up. Does the dotLottie bundle the state machine logic so the player handles transitions automatically, or does the developer still need to write state-triggering code around it? That answer changes whether this replaces the whole handoff or just the design side.<\/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>Great question, <a href=\"https:\/\/www.producthunt.com\/@leo404\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"leo404\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@leo404<\/a>  ! <\/p>\n<p>State machine logic is bundled inside the .lottie file, including the states, transitions, conditions, actions, interactions, and inputs. <br \/>dotLottie player reads that definition and handles the transitions at runtime.<\/p>\n<p>For interactions like clicks, hovers, pointer events, or animation completion, the triggers can live inside the state machine, so developers do not need to recreate that logic in code.<\/p>\n<p>If a transition depends on something outside the animation, such as app state or an API response, the developer only needs to pass that value or event to the state machine. The transition logic still stays inside the .lottie file.<\/p>\n<p>Adding more states will add more animation and state data, but it remains a single compressed bundle. So for many microinteractions, this should make the handoff much simpler.<\/p>\n<p>For more technical details, you can read our <a href=\"https:\/\/docs.lottiefiles.com\/en\/creator\/11_interactivity-and-state-machines\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Interactivity &amp; State Machines guide<\/a> and the full <a href=\"https:\/\/dotlottie.io\/spec\/2.0\/#state-machines\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">dotLottie 2.0 specification<\/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<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@leo404\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@leo404<\/a>&nbsp;Hey Leopold, I worked on state machines. Inad&#8217;s reply nailed it on the head but feel free to ask any more questions if you have any. I&#8217;m super excited that we implemented the gesture controls across platforms so that devs don&#8217;t have to themselves. It can be a complete frictionless handoff, cheers!<\/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\/@leo404\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@leo404<\/a>&nbsp;Thanks for this comment, Leopold! <\/p>\n<p>You can wire up transitions directly in the Creator&#8217;s state machine mode and the dotlottie player will handle it, once the right condition or trigger is met. We have a tutorial <a href=\"https:\/\/lottiefiles.com\/tutorials\/lottie-creator\/state-machines-tutorial-part-3-adding-interactions--exporting-the-radial-menu-cc8E7wmDFlf\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">here<\/a>, if you need more details!<\/p>\n<p>Don&#8217;t hesitate to reach out in <a href=\"https:\/\/www.lottie.community\/feed\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">our community<\/a> if you need more help with this.<\/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>Hey product hunters, so stoked to see what you\u2019ll be creating with Creator!&nbsp;<\/p>\n<\/p>\n<p>Been experimenting a lot with the Motion Copilot myself. As someone without motion design experience, being able to quickly animate and iterate ideas has been really fun. Can\u2019t wait to see how it fares in the hands of everyone else, whether you\u2019re a seasoned motion designer, a complete beginner or somewhere in between!<\/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\/@leemjenli\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@leemjenli<\/a>&nbsp;This is amazing work. I will definitely play more!<\/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 to everyone who shipped this \ud83c\udf89<\/p>\n<\/p>\n<p>Motion Copilot is getting most of the attention today, and fairly so, but the update I&#8217;d point people to is the Graph Editor. Easing is where an animation either feels right or feels slightly off, and that&#8217;s usually the part that sends you back to desktop software. Having real curve control in a browser tab is what makes Creator 2.0 feel like a tool you can finish work in, not just start it.<\/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<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>From design assets to full-fledged motion creation, watching the evolution of LottieFiles&#8217; ecosystem continues to inspire. Lottie Creator 2.0 makes adding interactive motion so accessible without compromising on quality or workflow speed.<\/p>\n<p>Kudos to the team on another epic launch! Wishing you all the success on PH today! \ud83d\ude4c\u2728<\/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\/@rankarpan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rankarpan<\/a>&nbsp;Thank you for the kind words and all the support for this launch, Arpan!<\/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&#8217;m really happy with the result I get from Creator. Not only I can create complex animations with Creator, but my workflow also is much faster and more efficient. Simply copy and paste .svg, animate, save it to my workspace and ship it!, all in one platform. I&#8217;m also thrilled to try really cool plugins inside Creator as well. Great work, team!!!!<\/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\/@ngoc_nguyen_lana\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ngoc_nguyen_lana<\/a>&nbsp;Thank you for the kind words. Can&#8217;t wait to see what you&#8217;ll create with Creator!<\/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 to the whole team on shipping 2.0! \ud83c\udf89<\/p>\n<p>I&#8217;ve been somewhat involved in Creator&#8217;s development on and off since the earlier stages, most recently contributing to the plugin system. I&#8217;ve also been using it internally as a testing ground for some of the work I&#8217;m doing, and the improvements in this release are really noticeable. Smoother, faster, more responsive, and just a lot closer to what you&#8217;d expect from a polished production tool.<\/p>\n<p>Proud of how far it&#8217;s come. Excited for people to try 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<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Really love the new Creator 2.0, everything feels fluid. Can\u2019t stop playing witht the copilot to quickly generate the animation with just a prompt.<\/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\/@amirul_bin_abdullah\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@amirul_bin_abdullah<\/a>&nbsp;Thank you for the kind words. Looking forward to see what is possible. <\/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 proud to see what the team has been able to build and achieve so far! Been trying it out internally and am amazed to see the potential that the community will be able to achieve with this product. <\/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=\"comment-item\">\n<div class=\"comment-content\">\n<p>Such a powerful motion design tool, especially now with Motion System! But my personal favourite hidden feature is being able to change themes \ud83d\udc99<\/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=\"comment-item\">\n<div class=\"comment-content\">\n<p>I run an app service packed with micro-interactions, and animation is a big part of making it feel fun and alive. I\u2019ve always wanted to use Lottie more, but as a non-designer, the complexity of existing tools made it hard to get started. LottieFiles Creator and Motion Copilot 2.0 feel like a whole new world ~_~ they make the creative process so much more accessible and inspiring \u2728<\/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\/@jinui\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@jinui<\/a>&nbsp;We are glad to be a small part of your process. Keep creating and come back to us if we could help. <\/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>Not gonna lie, motion design used to feel intimidating to me, but Creator 2.0 makes it feel approachable. <\/p>\n<p>Motion Copilot is my favorite, feels like having a motion designer assistant right inside the tool. Congrats team! \ud83c\udf89<\/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\/@jenelim\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@jenelim<\/a>&nbsp;Yes, Creator 2.0; your personal motion agent! Can&#8217;t wait to see what you make.<\/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>After trying quite a few browser-based animation tools, Creator 2.0 stands out as one of the few that feels powerful without being overwhelming. Motion Copilot is a nice touch for getting ideas moving quickly, the Graph Editor gives you the control when you want to fine-tune things, and I was genuinely impressed by how smooth and responsive the editor feels, even with more complex animations. Looking forward to seeing where this goes. \ud83d\ude80<\/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=\"comment-item\">\n<div class=\"comment-content\">\n<p>Having been on Creator since the early builds, seeing 2.0 go live is pretty surreal. I spent most of this cycle on the performance side, and that&#8217;s meant obsessing over a ton of under-the-hood details. That&#8217;s making sure everything from State Machines and the new Graph Editor to Motion Copilot feels insanely smooth, stable, and ready for real production work. It honestly feels like a completely different product now. <\/p>\n<\/p>\n<p>The part I&#8217;m actually waiting on is what everyone does with it, as that&#8217;s always the best bit of a launch. Thanks to everyone who reported the rough edges and kept telling us what was missing. A lot of 2.0 is your feedback.<\/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\/@kadeer\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kadeer<\/a>&nbsp;Thank you for this comment, Abdul, fully agreed! A lot of 2.0 and onwards will be feedback from this very same community.<\/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>My favorite part is how easy it is to iterate. Prompt, tweak, refine, repeat. Watching an idea transform into an animation in seconds still feels kind of wild!<\/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\">\n<p>Honored to be a part of Creator engineering team.<br \/>Creator has been an ongoing project that&#8217;s been incredibly fun to work on, from the earlier versions up until today. It&#8217;s so much more stable, intuitive and capable than ever before. I hope you enjoy using it as much as we&#8217;ve enjoyed building it.<\/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<\/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\/BFSS4PCCKOXJ56\" class=\"app-title\">Hardbook<\/a><\/p>\n<div class=\"one-liner\">The freelancer booking link that signs the contract for you<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">206<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Hardbook\u662f\u4e00\u4e2a\u5c06\u65e5\u5386\u9884\u7ea6\u3001\u5408\u540c\u7b7e\u7f72\u548c\u62bc\u91d1\u652f\u4ed8\u6574\u5408\u5728\u4e00\u4e2a\u94fe\u63a5\u4e2d\u7684\u5de5\u5177\uff0c\u4e13\u95e8\u89e3\u51b3\u81ea\u7531\u804c\u4e1a\u8005\u201c\u53e3\u5934\u786e\u8ba4\u540e\u5ba2\u6237\u53cd\u6094\u201d\u7684\u75db\u70b9\u548c\u7b7e\u7ea6\u6d41\u7a0b\u65ad\u88c2\u95ee\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\/4f131a66-552f-44d8-8e3c-aa21418ef710.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\/2adbe844-25d2-422b-9028-3090b02765db.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\/5c260124-20bc-405e-9fb4-e18f6610f0f3.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\/2f9dbd35-5cb7-4e5c-9cd3-040a342a5b84.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\/a1e8a39b-99c4-423d-8ba5-07db7f9c3633.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\/d0da91f0-5a3b-4418-a952-e808ae038e36.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\/ac590dd8-66dc-40df-8b82-382fc07b6c6b.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/Oy7eQnv9fq0\"><source src=\"https:\/\/youtu.be\/Oy7eQnv9fq0\" 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\">Productivity<\/span><br \/>\n            <span class=\"tag\">Freelance<\/span><br \/>\n            <span class=\"tag\">Calendar<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u81ea\u7531\u804c\u4e1a<\/span><br \/>\n            <span class=\"tag\">\u9884\u7ea6\u94fe\u63a5<\/span><br \/>\n            <span class=\"tag\">\u5408\u540c\u7b7e\u7f72<\/span><br \/>\n            <span class=\"tag\">\u62bc\u91d1\u652f\u4ed8<\/span><br \/>\n            <span class=\"tag\">\u65e5\u5386\u540c\u6b65<\/span><br \/>\n            <span class=\"tag\">\u65e0\u5ba2\u6237\u7aef\u6ce8\u518c<\/span><br \/>\n            <span class=\"tag\">\u5c65\u7ea6\u6548\u7387<\/span><br \/>\n            <span class=\"tag\">\u5de5\u4f5c\u6d41\u81ea\u52a8\u5316<\/span><br \/>\n            <span class=\"tag\">\u751f\u4ea7\u529b\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\u201c\u65e0\u9700\u5ba2\u6237\u6ce8\u518c\u201d\u548c\u201c\u7b7e\u5b57\u4e0e\u4ed8\u6b3e\u4e00\u4f53\u5316\u201d\u7684\u8bbe\u8ba1\u3002\u6838\u5fc3\u5efa\u8bae\u5305\u62ec\uff1a\u652f\u6301\u5408\u540c\u6761\u6b3e\u7684\u4e8b\u5148\u534f\u5546\u4fee\u6539\u3001\u63d0\u4f9b\u53ef\u8c03\u6574\u65e5\u671f\u7684\u8f7b\u91cf\u7ea7\u6539\u7b7e\u6d41\u7a0b\uff08\u800c\u975e\u4f5c\u5e9f\u91cd\u7b7e\uff09\u3001\u589e\u52a0\u57fa\u4e8e\u65f6\u95f4\u7684\u5206\u7ea7\u53d6\u6d88\u8d54\u507f\u673a\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                Hardbook\u672c\u8d28\u4e0a\u662f\u5c06\u201c\u8f7b\u91cfCRM\u201d\u4e0e\u201c\u7535\u5b50\u5408\u540c\u7b7e\u7f72\u201d\u505a\u4e86\u573a\u666f\u5316\u7f1d\u5408\uff0c\u5b83\u7684\u806a\u660e\u4e4b\u5904\u4e0d\u5728\u4e8e\u6280\u672f\u521b\u65b0\uff0c\u800c\u5728\u4e8e\u7cbe\u51c6\u780d\u6389\u4e86\u81ea\u7531\u804c\u4e1a\u8005\u4ea4\u6613\u94fe\u8def\u4e2d\u4e24\u4e2a\u6700\u5927\u7684\u6469\u64e6\u70b9\uff1a\u5ba2\u6237\u56e0\u62d6\u5ef6\u5bfc\u81f4\u7684\u201c\u53cd\u6094\u7a97\u53e3\u201d\uff0c\u4ee5\u53ca\u65e5\u7ed3\u7b97\u6a21\u5f0f\u4e0b\u6a21\u7cca\u7684\u5c65\u7ea6\u786e\u8ba4\u3002\u628a\u65e5\u5386\u9009\u5b9a\u3001\u5408\u540c\u7b7e\u7f72\u548c\u62bc\u91d1\u652f\u4ed8\u6309\u6d41\u7a0b\u786c\u6027\u6346\u7ed1\uff0c\u5f62\u6210\u201c\u7b7e\u5b57\u5373\u4ed8\u6b3e\u201d\u7684\u7ecf\u6d4e\u9501\u5b9a\uff0c\u5b9e\u8d28\u4e0a\u662f\u5c06\u4ea4\u6613\u4ece\u201c\u53e3\u5934\u610f\u5411\u201d\u524d\u7f6e\u5230\u4e86\u201c\u8d44\u91d1\u6258\u7ba1\u201d\u72b6\u6001\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u4ea7\u54c1\u7684\u62a4\u57ce\u6cb3\u672a\u5fc5\u6df1\u3002\u6838\u5fc3\u4ea4\u4e92\uff08\u65e5\u5386+\u7b7e\u540d\uff09\u5747\u6709\u6210\u719f\u7684API\u53ef\u8c03\u7528\uff0c\u5206\u62c6\u590d\u5236\u5e76\u4e0d\u56f0\u96be\u3002\u76ee\u524d\u6700\u4e25\u91cd\u7684\u529f\u80fd\u7f3a\u5931\u662f\u5bf9\u201c\u5408\u540c\u53ef\u53d8\u6027\u201d\u7684\u5904\u7406\u7f3a\u4f4d\uff1a\u81ea\u7531\u804c\u4e1a\u8005\u4e0e\u5ba2\u6237\u7684\u5408\u4f5c\u5f80\u5f80\u9700\u8981\u524d\u540e\u591a\u8f6e\u6761\u6b3e\u535a\u5f08\uff08\u5982\u8303\u56f4\u53d8\u66f4\u3001\u4ea4\u4ed8\u7269\u7ec6\u8282\uff09\uff0c\u4f46Hardbook\u76ee\u524d\u7684\u8def\u7ebf\u4f3c\u4e4e\u662f\u201c\u7b7e\u7ea6\u5373\u9501\u5b9a\uff0c\u6539\u7b7e\u5373\u4f5c\u5e9f\u201d\uff0c\u8fd9\u5728\u7b80\u5355\u4ee3\u62cd\u573a\u666f\u53ef\u884c\uff0c\u5374\u65e0\u6cd5\u8986\u76d6\u9ad8\u5ba2\u5355\u4ef7\u3001\u957f\u5468\u671f\u9879\u76ee\u7684\u52a8\u6001\u9700\u6c42\u3002\u6b64\u5916\uff0c\u5355\u7eaf\u7684\u7f8e\u56fd\u5f8b\u6240\u9ed8\u8ba4\u6a21\u677f\u548c\u81ea\u7531\u6587\u672c\u6761\u6b3e\u751f\u6210\u5668\uff0c\u5728\u9762\u5bf9\u4e0d\u540c\u6cd5\u57df\uff08\u5982GDPR\u6216\u56fd\u5185\u52b3\u52a8\u6cd5\uff09\u65f6\u6709\u6781\u5927\u6982\u7387\u51fa\u73b0\u6cd5\u5f8b\u6548\u529b\u7455\u75b5\uff0c\u8fd9\u53ef\u80fd\u662f\u4e2a\u9690\u853d\u4f46\u81f4\u547d\u7684\u96f7\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u8fd9\u6b3e\u4ea7\u54c1\u7684\u771f\u6b63\u4ef7\u503c\u4e0d\u5728\u4e8e\u201c\u7b7e\u540d\u201d\uff0c\u800c\u5728\u4e8e\u7528\u6d41\u7a0b\u6548\u7387\u628a\u201c\u53e3\u5934\u627f\u8bfa\u201d\u8f6c\u5316\u4e3a\u201c\u843d\u888b\u8d44\u91d1\u201d\u3002\u5b83\u82e5\u80fd\u5f00\u653e\u66f4\u7075\u6d3b\u7684\u6761\u6b3e\u534f\u5546\u5165\u53e3\u3001\u4ee5\u53ca\u57fa\u4e8e\u65f6\u95f4\u7ebf\u7684\u5206\u671f\u4ed8\u6b3e\u80fd\u529b\uff0c\u624d\u53ef\u80fd\u4ece\u201c\u9501\u5b9a\u8f7b\u5355\u7684\u5de5\u5177\u201d\u5347\u7ea7\u4e3a\u201c\u81ea\u7531\u804c\u4e1a\u8005\u7684\u6838\u5fc3\u7ecf\u8425\u7cfb\u7edf\u201d\u3002\u76ee\u524d\uff0c\u5b83\u66f4\u50cf\u662f\u4e00\u4e2a\u6781\u4f73\u7684\u5355\u70b9\u7834\u5c40\u8005\uff0c\u800c\u975e\u7ec8\u5c40\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\">Hardbook<\/span>\n                <\/div>\n<div class=\"comment-content\">The gap between agreed dates and a signed contract is where freelance jobs die. Hardbook fixes it. Your client picks dates and signs the contract in one flow. No app, no account, no chasing. Built by a freelancer to stop deal decay and lock in work.<\/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 \ud83d\udc4b<\/p>\n<p>Hardbook is a booking portal + contract signing in one link for day-rate freelancers.<\/p>\n<p>I lost a job to a client who agreed on dates, never signed, and by the time I followed up the window had closed. The gap between &#8220;sounds good&#8221; and &#8220;officially booked&#8221; is where most freelance work dies \u2014 not on quality, not on price, just on friction.<\/p>\n<p>The flow: send your Hardbook link, client picks dates from your Google Calendar, signs the contract, and \u2014 if you\u2019ve switched deposits on \u2014 pays one, all in the same session. No app, no account on their end. Nothing moves forward without a signature, and the deposit goes to your own Stripe account, not mine.<\/p>\n<p>motion designers, video editors, photographers, anyone billing by the day \u2014 to try it on a real client and tell me what&#8217;s broken.<\/p>\n<p>What&#8217;s your biggest point of friction between &#8220;agreed on dates&#8221; and actually being booked?<\/p>\n<p>Btw <br \/>&#8211; PHUNT65 + monthly \u2192 \u2713 &#8220;65% off for 3 months&#8221;<\/p>\n<p>&#8211; PHUNT20 + annual \u2192 \u2713 valid (20% off the first year)<\/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\/@suchback\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@suchback<\/a>&nbsp;In my experience hiring freelancers, the friction is never the calendar, it&#8217;s locking scope and terms before anyone starts working. If the contract signs at booking, can the client edit terms or scope before it goes through, or is it a fixed template? Curious how you handle the back-and-forth that usually happens before a real engagement.<\/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>As a freelancer, the hardest part is often not finding work it&#8217;s getting the commitment locked in. Nice solution! \ud83d\ude80<\/p>\n<\/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\/@gordon_bennett\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@gordon_bennett<\/a>&nbsp;not getting the commitment used to be my middle name, but now it\u2019s harry \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>Congrats on shipping! Every freelancer has a story about starting work on a verbal yes \u2014 putting the contract right into the booking flow is a clean fix. 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\/@ben_kahan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ben_kahan<\/a>&nbsp;Thanks. <\/p>\n<p>\u201cEvery freelancer has a story\u201d is so true \u2014 I built this assuming it was mostly my problem, and so far nobody\u2019s told me it isn\u2019t also theirs.<\/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 real problem, not a nice-to-have. i&#8217;ve watched exactly this happen to freelancer friends &#8211; verbal yes, calendar hold, then silence right up until the date, and there&#8217;s no clean way to force the moment where it becomes real. the deposit-tied-to-signature bit is the smart part imo, way more than the signature itself. one thing i&#8217;m curious about: once a booking is signed and the client needs to shift dates (not cancel, just move), does that need a brand new link\/contract or is there a lighter reschedule path that keeps the same deposit and terms intact?<\/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\/@omri_ben_shoham1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@omri_ben_shoham1<\/a>&nbsp;No lighter path today. Moving dates on a signed booking means cancelling and rebooking \u2014 new contract, and the deposit doesn\u2019t travel with it.<\/p>\n<p>Though there are two shapes of this and only one is a gap. If the client knows they need you around some dates but isn\u2019t sure yet, that\u2019s a pencil \u2014 soft hold, no contract, no deposit, meant to move. That case is covered. And the rigidity of the other one is deliberate: a hard booking is called that because it sits in a contract and you can build your month around it. If dates slid freely it\u2019d be a pencil with extra steps.<\/p>\n<p>But moving isn\u2019t breaking. A signed booking shifting by a week is a real thing that shouldn\u2019t cost you the contract and the deposit. That\u2019s the gap you found, and it\u2019s a fair one.<\/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\/@omri_ben_shoham1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@omri_ben_shoham1<\/a>&nbsp;couldn&#8217;t agree more! money talks. signature is secondary .<\/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 actually useful. Freelancers waste so much time going back and forth before a project even starts.<\/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 no app, no account part for clients is what makes this actually usable, nobody creates yet another login just to book a shoot. I can see photographers and video folks adopting this fast. Are deposits or partial payments at booking on the roadmap, since chasing the deposit is usually the other half of the problem?<\/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;Already shipped, not roadmap. The client signs and goes straight to card entry in the same flow \u2014 an authorization hold, captured when the booking confirms, paid into the freelancer\u2019s own Stripe account.<\/p>\n<\/p>\n<p>You\u2019re right that it\u2019s the other half. That\u2019s exactly why it\u2019s tied to the signature rather than sitting in a separate invoice nobody opens.<\/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>Every freelancer I know has been burned by starting work on a &#8220;verbal yes.&#8221; Folding the contract into the booking link means the paperwork happens when the client is most motivated. Smart sequencing. Are the templates jurisdiction-aware, or one standard agreement?<\/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\/@lucasjpols\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@lucasjpols<\/a>&nbsp;Neither, exactly. There\u2019s no library of per-jurisdiction templates \u2014 I\u2019m not going to claim coverage I haven\u2019t had reviewed.<\/p>\n<\/p>\n<p>What\u2019s there is a generator. You give it your governing law, your practice type, and your positions on IP ownership, liability cap, confidentiality term, termination notice, late payment, dispute resolution and payment terms, plus any custom clauses in plain English. It drafts an MSA against those, in your language. Then it\u2019s yours to edit, and it\u2019s version-locked at signing so you always know exactly what any given client agreed to.<\/p>\n<\/p>\n<p>Some of the presets lean US \u2014 AAA arbitration, state courts. Governing law is free text so you\u2019re not stuck with that, but I won\u2019t pretend the defaults are neutral.<\/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, Adam. Skipping a client account and doing everything through one link is exactly the friction Hardbook is trying to kill. Since that link ends up carrying all the access control, is it a long random token that can&#8217;t be guessed or iterated, or something closer to a sequential booking ID? That&#8217;s usually the first thing I&#8217;d poke at on a no-login flow like this.<\/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\/@vollos\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@vollos<\/a>&nbsp;Signed tokens, not sequential IDs \u2014 each one works for exactly one action on exactly one booking, and it expires.<\/p>\n<p>\/booking\/2 would be a fun afternoon for someone and a very bad one 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>Love the no-account approach, that alone removes so much friction. One thing I&#8217;d add: a simple payment trigger tied to the signature, like letting the client leave a deposit or set up the first milestone right in that same flow. It would close the loop from &#8220;agreed&#8221; to &#8220;funded&#8221; without needing a separate invoice step.<\/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\/@redditlurker\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@redditlurker<\/a>&nbsp;That part already exists. Client signs, and goes straight to card entry in the same flow \u2014 no separate invoice step. It\u2019s an authorization hold that gets drawn when the booking actually confirms, released if it doesn\u2019t. On the paid plans, pass-through to the freelancer\u2019s own Stripe account.<\/p>\n<p>Milestones aren\u2019t there though. Only the deposit at signing. Fair gap.<\/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>love the framing that the job dies on friction, not price or quality. one thing I&#8217;d want as a freelancer: a signed contract still doesn&#8217;t stop a client from just not showing up or cancelling last minute once the date arrives. is there any deposit or cancellation-fee mechanism built into the flow, or is that still something you&#8217;d have to chase separately even after they&#8217;ve signed<\/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;You\u2019re right that a signature doesn\u2019t stop anyone. Nothing does. What changes the conversation is money having already moved.<\/p>\n<p>Deposits are built in, taken in the same flow as the signature \u2014 client signs, card gets authorized, captured once the booking confirms. Goes to the freelancer\u2019s own Stripe account; I don\u2019t hold it or take a cut of it. So if they walk two weeks later, that money is already yours rather than something you\u2019re chasing.<\/p>\n<p>What isn\u2019t built in is a sliding cancellation scale \u2014 the 50%-inside-7-days kind of thing. The deposit is a flat amount today. And I deliberately don\u2019t adjudicate what happens after a cancellation; who\u2019s owed what is between the two of you, not something I should be deciding.<\/p>\n<p>You listed kill fee in your other comment too. Twice in one day from the sharpest person in my thread is a fairly strong hint.<\/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\/ZTOYWVYEMJZG4Y\" class=\"app-title\">Leaping AI<\/a><\/p>\n<div class=\"one-liner\">AI agents that call and text in multi-day campaigns<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">198<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Leaping AI \u662f\u4e00\u6b3e\u4e3a\u5bb6\u88c5\u3001\u5c4b\u9876\u7ef4\u4fee\u7b49\u5b9e\u4f53\u884c\u4e1a\u8bbe\u8ba1\u7684 AI \u8bed\u97f3\u4e0e\u77ed\u4fe1\u4ee3\u7406\u5e73\u53f0\uff0c\u901a\u8fc7\u591a\u65e5\u3001\u591a\u7ebf\u7a0b\u81ea\u52a8\u5316\u5916\u547c\u4e0e\u63a5\u542c\u6d41\u7a0b\uff0c\u89e3\u51b3\u4f01\u4e1a\u6f0f\u63a5\u7535\u8bdd\u3001\u8ddf\u8fdb\u7f13\u6162\u53ca\u8bed\u8a00\u969c\u788d\u7b49\u75db\u70b9\uff0c\u5b9e\u73b0\u9884\u7ea6\u5b89\u6392\u4e0e\u5ba2\u6237\u670d\u52a1\u7684\u65e0\u4eba\u5316\u8fd0\u884c\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\/7d344cb4-0d63-44bd-ac38-98b1663309f8.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\/3602bd4b-51f2-49cc-82fe-22d8d5eb330a.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\/f7f556c7-a663-4ff2-acc3-92e2a78d56c4.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\/c3ebcd1e-e866-425e-828f-9f9a44651539.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/boI-CCyc2DQ\"><source src=\"https:\/\/youtu.be\/boI-CCyc2DQ\" 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\">Artificial Intelligence<\/span><br \/>\n            <span class=\"tag\">Home improvement<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u8bed\u97f3\u4ee3\u7406<\/span><br \/>\n            <span class=\"tag\">\u77ed\u4fe1\u81ea\u52a8\u5316<\/span><br \/>\n            <span class=\"tag\">\u591a\u65e5\u8425\u9500\u6d3b\u52a8<\/span><br \/>\n            <span class=\"tag\">\u5bb6\u5c45\u6539\u9020<\/span><br \/>\n            <span class=\"tag\">\u9500\u552e\u8ddf\u8fdb<\/span><br \/>\n            <span class=\"tag\">CRM\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">\u5408\u89c4\u5916\u547c<\/span><br \/>\n            <span class=\"tag\">\u591a\u8bed\u8a00<\/span><br \/>\n            <span class=\"tag\">\u9884\u7ea6\u8c03\u5ea6<\/span><br \/>\n            <span class=\"tag\">B2B SaaS<\/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\u5173\u6ce8\u5408\u89c4\u4e0e\u4f53\u9a8c\u7ec6\u8282\uff1a\u6700\u53d7\u597d\u8bc4\u7684\u662f\u5176\u8de8\u6e20\u9053\u7edf\u4e00\u7684\u62d2\u7edd\u5904\u7406\u673a\u5236\uff08\u8bed\u97f3\u62d2\u63a5\u540c\u6b65\u5230\u77ed\u4fe1\u9ed1\u540d\u5355\uff09\u3002\u6838\u5fc3\u4e89\u8bae\u70b9\u5728\u4e8e\uff1a1\uff09\u591a\u65e5\u6d3b\u52a8\u4e2d\uff0c\u5ba2\u6237\u60c5\u51b5\u53d8\u5316\uff08\u5982\u5df2\u627e\u522b\u5bb6\uff09\u5982\u4f55\u907f\u514dAI\u663e\u5f97\u201c\u523b\u677f\u201d\uff1b2\uff09\u624b\u52a8\u8f6c\u63a5\u4eba\u7c7b\u5ba2\u670d\u65f6\u7684\u6458\u8981\u51c6\u786e\u6027\uff1b3\uff09\u5927\u89c4\u6a21\u5916\u547c\u9762\u4e34\u7684\u8fd0\u8425\u5546\u5783\u573e\u6807\u8bb0\uff08SPAM\uff09\u95ee\u9898\u3002\u521b\u59cb\u4eba\u56de\u5e94\u4e86\u53f7\u7801\u5065\u5eb7\u5ea6\u7ba1\u7406\u4e0e\u8f6c\u63a5\u6d41\u7a0b\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                Leaping AI \u7684\u4eae\u70b9\u4e0d\u5728\u201cAI\u6253\u7535\u8bdd\u201d\u672c\u8eab\uff0c\u800c\u5728\u5176\u4e3b\u52a8\u5c06\u81ea\u5df1\u5d4c\u5957\u8fdb\u5b9e\u4f53\u884c\u4e1a\u590d\u6742\u9500\u552e\u5468\u671f\u7684\u52c7\u6c14\u3002\u4ece\u6a2a\u5411\u5e73\u53f0\u5230\u5782\u76f4\u201c\u5bb6\u88c5\u201d\u7684\u6536\u655b\uff0c\u662f\u660e\u667a\u7684\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u884c\u4e1a\u6709\u9ad8\u9891\u3001\u4f4e\u5ba2\u5355\u4ef7\u8f6c\u5316\u3001\u5f3a\u5b63\u8282\u6027\u4e14\u6781\u5ea6\u4f9d\u8d56\u7535\u8bdd\u6c9f\u901a\u7684\u7279\u6027\uff0cAI\u7684\u201c\u65e0\u4f11\u4e32\u8054\u201d\u5929\u7136\u6bd4\u9500\u552e\u8f6f\u4ef6\uff08HubSpot\uff09\u66f4\u76f4\u63a5\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u4f60\u5fc5\u987b\u8b66\u60d5\u201c\u81ea\u52a8\u5316\u201d\u4ea7\u751f\u7684\u5e7b\u89c9\u3002\u8bc4\u8bba\u4e2d\u4e24\u4e2a\u5c16\u9510\u95ee\u9898\u76f4\u51fb\u5176\u8f6f\u808b\uff1a\u4e00\u662f\u5ba2\u6237\u72b6\u6001\u52a8\u6001\u53d8\u5316\uff08\u5982\u5df2\u4fee\u597d\u623f\u9876\uff09\uff0cAI\u82e5\u4ecd\u6309\u811a\u672c\u63a8\u8fdb\uff0c\u4f1a\u4ece\u201c\u5e2e\u624b\u201d\u53d8\u6210\u201c\u9a9a\u6270\u201d\uff1b\u4e8c\u662f\u201c\u8001\u7ebf\u7d22\u590d\u6d3b\u201d\uff0cCRM\u91cc\u7684\u201c\u65e0\u660e\u786e\u62d2\u7edd\u201d\u4e0e\u5ba2\u6237\u8bb0\u5fc6\u4e2d\u7684\u201c\u6211\u5df2\u62d2\u7edd\u8fc7\u201d\u4e4b\u95f4\u5b58\u5728\u7070\u8272\u5730\u5e26\uff0c\u8fd9\u6bd4\u6f0f\u63a5\u7535\u8bdd\u66f4\u4f24\u54c1\u724c\u4fe1\u4efb\u3002\u672c\u8d28\u4e0a\uff0c\u4f60\u5728\u505a\u7684\u662f\u5c06\u4eba\u7c7b\u9500\u552e\u4e2d\u201c\u901a\u8fc7\u76f4\u89c9\u4e0e\u60c5\u611f\u5224\u65ad\u65f6\u673a\u201d\u7684\u6a21\u7cca\u827a\u672f\uff0c\u786c\u7f16\u7801\u6210\u4e86\u4e00\u5957\u4e25\u683c\u7684\u65f6\u5e8f\u89c4\u5219\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ea7\u54c1\u7684\u62a4\u57ce\u6cb3\uff0c\u5e76\u975e\u5bf9\u8bdd\u6d41\u7545\u5ea6\uff08\u4e1a\u5185\u5df2\u8d8b\u540c\uff09\uff0c\u800c\u662f\u90a3\u4e2a\u201c\u8de8\u6e20\u9053\u7edf\u4e00DNC\u8bb0\u5f55\u201d\u548c\u201c\u8fd0\u8425\u5546\u53f7\u7801\u5065\u5eb7\u5ea6\u7ba1\u7406\u201d\u7684\u5e95\u5c42\u5408\u89c4\u57fa\u5efa\u3002\u5bf9\u4e8e\u5c0f\u4f01\u4e1a\u4e3b\uff0c\u6570\u636e\u9690\u79c1\u662f\u9ebb\u70e6\uff0c\u800c\u5bf9\u5de8\u5934\uff0c\u8fd9\u662f\u751f\u6b7b\u7ebf\u3002\u4e0b\u4e00\u6b65\u771f\u6b63\u6709\u4ef7\u503c\u7684\u65b9\u5411\uff0c\u4e0d\u5e94\u662f\u66f4\u591a\u6e20\u9053\uff0c\u800c\u662f\u5f15\u5165\u201c\u610f\u56fe\u8bc6\u522b\u4e0e\u751f\u547d\u5468\u671f\u9884\u6d4b\u201d\u2014\u2014\u5f53AI\u68c0\u6d4b\u5230\u5ba2\u6237\u5f53\u524d\u8bed\u5883\uff08\u5982\u201c\u6211\u95ee\u95ee\u8001\u5a46\u201d\uff09\u4e0e\u5386\u53f2\u72b6\u6001\uff083\u5929\u6c89\u9ed8\uff09\u77db\u76fe\u65f6\uff0c\u81ea\u52a8\u964d\u9891\u6216\u5207\u6362\u7b56\u7565\u3002\u5426\u5219\uff0c\u4e00\u65e6\u5ba2\u6237\u62b1\u6028\u7387\u98d9\u5347\uff0c\u8fd0\u8425\u5546\u5c01\u53f7\u6216\u6cd5\u5f8b\u98ce\u9669\uff0c\u5c06\u6bd4\u7ade\u54c1\u4e22\u5355\u66f4\u81f4\u547d\u3002\u6210\u4e5f\u201c\u52a8\u4f5c\u201d\uff0c\u8d25\u4e5f\u201c\u65f6\u673a\u201d\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\">Leaping AI<\/span>\n                <\/div>\n<div class=\"comment-content\">We allow companies that operate in the physical world (home remodeling, roofing, trades) to automate inbound and outbound calling &#038; texting and run multi-threaded campaigns spanning several weeks. Our AI agents can hold 100+ parallel conversations, speak in multiple languages and integrate into any CRM. We help put appointment scheduling, customer service &#038; confirmation calls on autopilot and eliminate missed calls, slow speed to lead and insufficient lead follow ups for our customers.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hey ProductHunt!<\/p>\n<\/p>\n<p>I am Kevin, maker at Leaping AI.<\/p>\n<\/p>\n<p>Today we are launching our AI voice and texting platform, specifically for home remodeling companies. We started originally as a horizontal voice AI calling platform and have gradually niched down to the home remodeling industry.<\/p>\n<\/p>\n<p>Why? We signed up our first home remodeling companies because they approached us inbound via our website and we discovered that they have a list of specific pain points that makes our voice AI solution almost a no-brainer.<\/p>\n<\/p>\n<p><strong>Pain points that we address<\/strong><\/p>\n<\/p>\n<p>Home remodeling companies miss calls on the weekend or after-hours because no one is in the office, struggle to reach out to web leads fast enough over the phone and therefore lose leads to competitors, cannot serve Spanish speaking customers because usually no on on the team speaks Spanish and cannot (at scale) reactivate old leads that didn&#8217;t buy in the past but might now be interested again.<\/p>\n<\/p>\n<p><strong>Our solution<\/strong><\/p>\n<\/p>\n<p>Our solution is AI agents that can take inbound phone calls and make outbound dials, specifically to schedule appointments and confirm appointments. They can hold 100+ conversations in parallel, are always active and stick to the script (a big problem in the industry). We can deploy both English and Spanish speaking agents. Inbound leads are being reached out to in under 10 seconds.<\/p>\n<\/p>\n<p>If leads do not pick up, our AI texting agents will send them a text message and follow the same conversation flow.<\/p>\n<\/p>\n<p><strong>Our differentiator<\/strong><\/p>\n<\/p>\n<p>Something that differentiates us is that the AI calling and texting agents can now be weaved together in multi-threaded campaigns. It&#8217;s similar to sales software, like HubSpot, where you can create multi-day sequencing with email sequences mixed together with LinkedIn outreach and cold calling. In our platform, our customers can create similar campaigns where new leads, that have opted in to be reached out to (strict requirement), will be contacted via calling and texting until they pick up and schedule an appointment. Leads can at all times opt out of these campaigns by texting STOP via SMS. We maintain our own DNC database and strictly respect that.<\/p>\n<\/p>\n<p>It can be configured how long the campaigns last, what the exit conditions are and also what the cadence should be (e.g., how many calls and texts on day 7 vs. day 14 of the campaign). Home remodeling companies already have a similar process in place with humans and now our AI agents can complement that team and provide more firepower.<\/p>\n<\/p>\n<p>We have been live with this already with several large brands in the space, e.g. Bath Experts, Aspen Contracting, etc.<\/p>\n<\/p>\n<p><strong>Our ask<\/strong><\/p>\n<\/p>\n<p>Please give us feedback on our solution and what features we should build next. We are constantly iterating and are always open for new inspiration.<\/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\/@kevin_wu25\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kevin_wu25<\/a>&nbsp;the DNC database + strict opt-in requirement stood out most voice\/text automation launches lead with the tech and bury compliance as a footnote, you led with it. we run multi-day sequencing on the email\/LinkedIn side and cadence tuning is the hardest part to get right too aggressive and reply rate craters, too spaced out and leads go cold before you&#8217;ve made contact. curious how you&#8217;re deciding cadence per campaign right now is it something home remodeling companies configure themselves based on their own experience, or are you seeing patterns across customers that inform a default?<\/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\/@kevin_wu25\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kevin_wu25<\/a>&nbsp;i&#8217;d say you&#8217;re building an interesting stuff. curious how you&#8217;re handling consent and identity when the same lead gets both a call and a text from different agent threads, is that tracked at the campaign level or per agent? btw, congrats on the launch team Leaping Ai. <\/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 &#8220;similar to HubSpot sequencing but for calls\/texts&#8221; framing makes total sense, and the channel-agnostic DNC record (spoken stop = texted STOP) is the kind of detail most teams skip until it bites them. We deal with a version of this on the WhatsApp\/email side, once someone&#8217;s mid-conversation with our AI and a human needs to step in, we keep the same thread going so there&#8217;s no &#8220;starting over&#8221; moment. <\/p>\n<p>Curious how the handoff feels on your end when a homeowner insists on a real person mid-call, does the human rep see the full call history instantly, or is there a summary step first?<\/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\/@mittalpatel\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@mittalpatel<\/a>&nbsp;There&#8217;s a summary step. We condense the conversation down to what matters: enough that the human never has to re-ask something the homeowner already said, but not so much that they&#8217;re hunting for the important pieces while someone&#8217;s waiting on the line. Full transcript is there if they want it, but the summary is what they land on.<\/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>Kevin, the multi-day campaign is the part I would stress test, and it is not the dialing. You covered opt in and STOP over SMS, which is more than most voice products say out loud. What I would check is the spoken revocation.<\/p>\n<\/p>\n<p>If someone tells the agent on day 7 to stop calling, that counts even though it never touched your SMS keyword path, and it has to end the remaining calls and the texts. I work in a regulated space where consent is tracked per channel, and the failure always has the same shape: the person revokes on the channel in front of them and the sequence keeps running on the other one.<\/p>\n<\/p>\n<p>Does a spoken stop write to the same DNC record as a texted STOP, and does it close the whole campaign or only the call leg?<\/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\/@clemente_lopez1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@clemente_lopez1<\/a>&nbsp;Yes: one DNC pool, channel-agnostic. A spoken stop writes to the same record as a texted STOP, and once the number is on the list it suppresses every further attempt across all channels for that customer, so it closes the whole campaign, not just the call leg. It also works from any direction: if they call into an unrelated inbound agent and ask to stop, that agent can add them and the outbound sequence ends too. That&#8217;s how we make sure nothing falls through the cracks.<\/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\">This is really impressive. The multithreaded campaigns are really interesting. Curious how you handle conversations that need a human to step in mid flow? \ufffc<\/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 reactivation angle is the one that would worry me most honestly. an old lead who didn&#8217;t buy could mean &#8220;not ready yet, try again later&#8221; or it could mean someone who told a rep months ago they weren&#8217;t interested and that just never got logged properly. both look identical in a CRM as &#8220;no purchase, no explicit opt-out on file.&#8221; if the campaign resurfaces someone who already said no once, even politely, that&#8217;s a much worse experience than a missed call. how do you handle that gap between what&#8217;s actually in the DNC list versus what a homeowner remembers telling someone on the phone six months ago?<\/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><a href=\"https:\/\/www.producthunt.com\/@kevin_wu25\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"kevin_wu25\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kevin_wu25<\/a> Congrats on the launch! You\u2019ve deployed voice agents into messy, real-world workflows where conversations can span multiple calls and texts over several weeks. What surprised you most about where AI works well and where customers still clearly want a human?<\/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! <\/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 multi-day part is what stands out to me too, but from a different angle than the consent\/DNC thread below &#8211; a lead&#8217;s situation can just change between calls. someone&#8217;s roofing quote request from day 1 might be moot by day 5 because they already hired a competitor or got it patched themselves. does the agent pick up on that kind of signal mid-call and update the campaign, or is there a real risk of the agent sounding tone-deaf by following up on a problem the homeowner already solved elsewhere, which seems like it&#8217;d burn trust faster than a missed call ever would<\/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>Missed calls and slow speed-to-lead are massive pain for local service businesses, banks especially lol. Putting appointment scheduling and confirmations on autopilot with multi-day campaigns is a game-changer for trades. Congrats on the launch, goated!<\/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\">Congrats on the launch! Multi-day AI campaigns are an interesting approach. How do you measure success across longer customer journeys compared to traditional outreach?<\/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>multi-day is the part that sounds small and is not. a campaign running for weeks means the agent&#8217;s picture of a contact has to survive between sessions, and every stale field is a chance to say something that was true last tuesday.<\/p>\n<\/p>\n<p>the thing i would want measured is the gap between &#8220;we placed the call&#8221; and &#8220;a human heard it&#8221;. we work on an adjacent problem, confirming a form submission actually registered on someone else&#8217;s system, and the honest version needed independent confirmation rather than our own send log. voicemail, a carrier drop, and someone who hung up in two seconds all look like a completed attempt from the sender&#8217;s side.<\/p>\n<\/p>\n<p>how are you counting those?<\/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>Good luck with the launch guys! <\/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>Leaping has come so far from its first launch! What challenges did you have to solve to maintain context and memory across these channels?<\/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>That&#8217;s interesting. When a homeowner insists on a real person, how does the handoff actually work?<\/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\/@dhiraj_patel5\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dhiraj_patel5<\/a>&nbsp;The agent picks up on the request and transfers the call to an available rep, along with a short summary of what&#8217;s been discussed \u2013 so the rep comes in knowing who they&#8217;re talking to and what the homeowner already said, instead of starting from zero. If nobody&#8217;s available, it doesn&#8217;t dead-end: the request gets logged and a callback scheduled rather than leaving the person stuck with a bot.<\/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 horizontal to home remodeling niche-down is a smart call, the physical-world trades are so underserved by voice AI. I work on the consumer side (daily check-in calls to aging parents), and the thing that quietly kills outbound for us is carrier spam labeling: even a wanted, friendly call gets flagged &#8220;Scam Likely&#8221; and never picked up. With 100+ parallel outbound calls, how are you handling number reputation and STIR\/SHAKEN attestation so calls actually connect? Would love to hear what held up 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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@igorgurovich\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@igorgurovich<\/a>&nbsp;We run our numbers through a third-party reputation service that tracks number health and handles remediation, so we see a number degrading before connect rates drop and can rest it instead of burning it. You&#8217;d want to keep the number of dials per day per number low (usually below 100 dials\/day is optimal). 100+ parallel calls is fine as long as no single number carries 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\">Awesome product!<\/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\">#6<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/4SXXVFWMM64FI7\" class=\"app-title\">EasyCircuit<\/a><\/p>\n<div class=\"one-liner\">Hardware prototyping, as simple as vibe-coding<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">176<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>EasyCircuit\u662f\u4e00\u4e2aAI\u7535\u8def\u8bbe\u8ba1\u52a9\u624b\uff0c\u7528\u6237\u7528\u81ea\u7136\u8bed\u8a00\u63cf\u8ff0\u9700\u6c42\uff0c\u5373\u53ef\u81ea\u52a8\u751f\u6210\u7535\u8def\u539f\u7406\u56fe\u3001\u5339\u914d\u771f\u5b9e\u5e93\u5b58\u96f6\u4ef6\u3001\u8f93\u51fa\u9762\u5305\u677f\u5230\u6d1e\u6d1e\u677f\u7684\u7ec4\u88c5\u65b9\u6848\uff0c\u8ba9\u96f6\u7535\u5b50\u5de5\u7a0b\u7ecf\u9a8c\u7684\u4eba\u4e5f\u80fd\u5feb\u901f\u5b8c\u6210\u786c\u4ef6\u539f\u578b\u5236\u4f5c\u3002<\/p>\n<p>### \u5173\u952e\u8bcd<br \/>\nAI\u7535\u8def\u8bbe\u8ba1, \u786c\u4ef6\u539f\u578b, \u7535\u5b50\u8bbe\u8ba1\u81ea\u52a8\u5316, \u5143\u5668\u4ef6\u91c7\u8d2d, \u81ea\u7136\u8bed\u8a00\u751f\u6210, \u9762\u5305\u677f, \u521b\u5ba2, \u5d4c\u5165\u5f0f\u5f00\u53d1, \u786c\u4ef6\u5165\u95e8, \u4ea7\u54c1\u4f17\u7b79\u5de5\u5177<\/p><\/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\/aa8195f7-06ab-4aab-8308-aa50b8954350.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\/4a9fe277-48f7-4525-b99d-f1ae37410ff8.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\/c233f90d-5042-4754-8e42-9b9ae903e9f4.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\/6495f0d1-cb59-4028-8e79-0ea30e1f2a07.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\/aab0f8c7-218f-4a81-b8fd-b96a3722c670.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\/c563965b-98ae-4d4b-87c3-74e397a91569.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/5Pk8HHn1JAc\"><source src=\"https:\/\/youtu.be\/5Pk8HHn1JAc\" 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\">Design Tools<\/span><br \/>\n            <span class=\"tag\">Prototyping<\/span><br \/>\n            <span class=\"tag\">Hardware<\/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\u79f0\u8d5e\u201c\u81ea\u52a8\u5339\u914d\u771f\u5b9e\u5e93\u5b58\u96f6\u4ef6\u201d\u548c\u201c\u9762\u5305\u677f\u5230\u6d1e\u6d1e\u677f\u201d\u6d41\u7a0b\u662f\u75db\u70b9\u89e3\u51b3\u65b9\u6848\uff1b\u6838\u5fc3\u95ee\u9898\u96c6\u4e2d\u5728\uff1a\u7535\u6c14\u7ea6\u675f\u68c0\u67e5\uff08\u7535\u6d41\/\u5b89\u5168\uff09\u662f\u5426\u8db3\u591f\u3001\u80fd\u5426\u5bfc\u51faPDF\/SVG\u539f\u7406\u56fe\u3001\u662f\u5426\u652f\u6301\u5411\u5de5\u5382BOM\u8fc7\u6e21\u3002\u5f00\u53d1\u8005\u56de\u5e94\u5df2\u5b9e\u73b0\u7ed3\u6784\u7ea7\u68c0\u67e5\uff08\u5982GND\u5f15\u811a\u3001I2C\u8fde\u63a5\uff09\uff0c\u5bf9\u5e02\u7535\uff08AC\uff09\u548c\u9502\u7535\u6c60\uff08LiPo\uff09\u6709\u786c\u6027\u5b89\u5168\u62e6\u622a\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                EasyCircuit\u7cbe\u51c6\u5207\u4e2d\u4e86\u201c\u4f1a\u5199\u4ee3\u7801\u4f46\u4e0d\u4f1a\u7535\u8def\u201d\u7684\u521b\u5ba2\u7fa4\u4f53\u65ad\u5c42\uff0c\u5176\u4ef7\u503c\u4e0d\u5728\u4e8eAI\u7684\u667a\u80fd\u7a0b\u5ea6\uff0c\u800c\u5728\u4e8e\u5c06\u786c\u4ef6\u539f\u578b\u4ece\u201c\u77e5\u8bc6\u5bc6\u96c6\u578b\u201d\u964d\u7ef4\u4e3a\u201c\u8d44\u6e90\u5bc6\u96c6\u578b\u201d\u3002\u5b83\u628a\u6700\u6298\u78e8\u4eba\u7684\u4e24\u4e2a\u6b65\u9aa4\u2014\u2014\u7535\u6c14\u56fe\u8bbe\u8ba1\u4e0e\u96f6\u4ef6\u9009\u578b\u91c7\u8d2d\u2014\u2014\u4e00\u952e\u6253\u5305\uff0c\u8ba9\u7528\u6237\u53ea\u9700\u5173\u6ce8\u201c\u60f3\u8981\u4ec0\u4e48\u529f\u80fd\u201d\uff0c\u800c\u975e\u201c\u54ea\u4e2a\u7535\u963b\u4e0d\u4f1a\u70e7\u201d\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ea7\u54c1\u76ee\u524d\u6ca1\u6709\u8bd5\u56fe\u505a\u201c\u5168\u529f\u80fdEDA\u201d\u7684\u91ce\u5fc3\uff0c\u800c\u662f\u806a\u660e\u5730\u9009\u62e9\u4e86\u201c\u9762\u5305\u677f\u2192\u6d1e\u6d1e\u677f\u201d\u8fd9\u4e2a\u6709\u9650\u4f46\u771f\u5b9e\u7684\u573a\u666f\u3002\u6838\u5fc3\u4eae\u70b9\u6709\u4e09\uff1a\u4e00\u662f\u96f6\u4ef6\u5e93\u4e0e\u5b9e\u65f6\u5e93\u5b58\u6302\u94a9\uff0c\u4e8c\u662f\u7ed3\u6784\u5316\u68c0\u67e5\uff08\u800c\u975eLLM\u78b0\u8fd0\u6c14\uff09\u62e6\u622a\u7a7a\u710a\u548c\u5371\u9669\u914d\u7f6e\uff0c\u4e09\u662f\u5f15\u5bfc\u7528\u6237\u4ece\u53ef\u5b9e\u9a8c\u7684\u539f\u578b\u51fa\u53d1\uff0c\u800c\u975e\u76f4\u63a5\u8df3\u5411PCB\u3002\u521b\u59cb\u4eba\u5bf9\u201c\u5b89\u5168\u8fb9\u754c\u201d\u7684\u6e05\u9192\u8ba4\u77e5\u503c\u5f97\u80af\u5b9a\uff1a\u4e0d\u7ed9\u65b0\u624b\u64cd\u4f5c\u5e02\u7535\u7684\u673a\u4f1a\uff0c\u7528\u786c\u505c\u6b62\u800c\u975e\u8f6f\u8b66\u544a\uff0c\u8fd9\u5bf9\u786c\u4ef6\u4ea7\u54c1\u81f3\u5173\u91cd\u8981\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u9700\u8b66\u60d5\u201c\u5269\u4f59\u95ee\u9898\u7a7a\u95f4\u201d\u7684\u6311\u6218\u3002\u5f53\u524d\u68c0\u67e5\u4ec5\u57fa\u4e8e\u62d3\u6251\u548c\u5178\u578b\u529f\u8017\u4f30\u7b97\uff0c\u5bf9\u6a21\u62df\u4fe1\u53f7\u3001\u9ad8\u9891\u3001\u566a\u58f0\u7b49\u573a\u666f\u65e0\u611f\u77e5\u3002\u4e00\u65e6\u7528\u6237\u7a81\u7834\u201c\u6a21\u5757\u7ec4\u5408\u201d\u7684\u8fb9\u754c\uff08\u5982\u9700\u8981\u81ea\u5df1\u8bbe\u8ba1\u653e\u5927\u7535\u8def\u3001\u6ee4\u6ce2\u5668\uff09\uff0c\u5de5\u5177\u4f1a\u8fc5\u901f\u5931\u6548\u3002\u6b64\u5916\uff0c290\u4e2a\u96f6\u4ef6\u5e93\u76ee\u524d\u8986\u76d6\u6709\u9650\uff0c\u5bf9\u201c\u51b7\u95e8\u4f20\u611f\u5668+\u7279\u5b9a\u7535\u6e90\u7ec4\u5408\u201d\u53ef\u80fd\u65e0\u6cd5\u7ed9\u51fa\u53ef\u9760\u65b9\u6848\u2014\u2014\u8fd9\u6070\u6070\u662f\u8bb8\u591a\u201c\u6709\u8da3\u9879\u76ee\u201d\u7684\u6838\u5fc3\u75db\u70b9\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u771f\u6b63\u7684\u957f\u671f\u4ef7\u503c\uff0c\u5728\u4e8e\u5b83\u80fd\u5426\u79ef\u7d2f\u201c\u8bbe\u8ba1-\u9a8c\u8bc1-\u70e7\u5f55\u201d\u95ed\u73af\u4e2d\u7684\u6d8c\u73b0\u6570\u636e\uff1a\u7528\u6237\u63cf\u8ff0\u4ec0\u4e48\u3001AI\u600e\u4e48\u62c6\u89e3\u3001\u642d\u5efa\u540e\u54ea\u4e9b\u5931\u8d25\u3001\u5982\u4f55\u4fee\u6b63\u3002\u8fd9\u6761\u6570\u636e\u98de\u8f6e\u624d\u662f\u6784\u5efa\u4e0b\u4e00\u4ee3\u201c\u786c\u4ef6\u8bbe\u8ba1\u7ecf\u9a8c\u5e93\u201d\u7684\u5173\u952e\u3002\u76ee\u524d\u4ea7\u54c1\u505c\u7559\u5728\u201c\u5165\u95e8\u52a0\u901f\u5668\u201d\uff0c\u79bb\u201c\u8bbe\u8ba1\u52a9\u624b\u201d\u8fd8\u6709\u4e00\u6bb5\u8ddd\u79bb\u3002\u5982\u679c\u53ea\u5356\u5957\u88c5\u548c\u7b80\u5316\u6d41\u7a0b\uff0c\u62a4\u57ce\u6cb3\u4e0d\u6df1\uff1b\u4f46\u5982\u679c\u80fd\u501f\u7528\u6237\u6570\u636e\u53cd\u54fa\u8bbe\u8ba1\u5efa\u8bae\uff0c\u672a\u6765\u53ef\u80fd\u6210\u4e3a\u9762\u5411\u6d88\u8d39\u8005\u7684\u201c\u786c\u4ef6\u8bbe\u8ba1\u77e5\u8bc6\u5f15\u64ce\u201d\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\">EasyCircuit<\/span>\n                <\/div>\n<div class=\"comment-content\">An AI circuit copilot that designs your project and sources the parts automatically \u2014 no electrical engineering experience needed. Describe it in plain language, get a verified parts kit, and build it staged from breadboard to soldered perfboard.<\/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>I built EasyCircuit because of a much weirder project: an instrumented orchid<br \/>\ngrowth chamber. I wanted to run real causal-inference experiments on plant<br \/>\ngrowth \u2014 controlled interventions on temperature, humidity, light \u2014 which<br \/>\nmeant I needed a custom sensor\/actuator circuit with an ESP32, humidity<br \/>\nsensors, a pump, heaters, LEDs, all wired together correctly.<\/p>\n<p>I know how to write code. I did not know how to design a circuit. Every time<br \/>\nI tried, I&#8217;d hit the same wall: which pins are safe to use, what resistor<br \/>\nvalues won&#8217;t fry a sensor, whether a part I liked online was actually in<br \/>\nstock anywhere. Days would disappear into datasheets before I&#8217;d wired a<br \/>\nsingle connection.<\/p>\n<p>So I built the tool I wished existed: describe what you want in plain<br \/>\nEnglish, and a copilot designs the full schematic, lays it out for a<br \/>\nbreadboard so you can prototype before anything is soldered, and matches<br \/>\nevery part to a real, in-stock supplier \u2014 then bundles it into one<br \/>\nmade-to-order kit if you want it shipped.<\/p>\n<p>It&#8217;s still early \u2014 290+ parts in the catalog today, more added weekly \u2014 and<br \/>\nit&#8217;s meant for exactly the person I was a few months ago: comfortable with<br \/>\ncode, new to electronics, tired of losing a weekend to a part that turned<br \/>\nout to be discontinued.<\/p>\n<p>Would love your feedback, especially if you try describing something weird<br \/>\nand see what it designs. That&#8217;s the best way to find where it breaks.<\/p><\/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>Sourcing real in-stock parts is the underrated feature here, half the pain of hobby electronics is finding out the part in the tutorial went obsolete years ago. The breadboard to perfboard progression is a nice touch too. How does verification work under the hood, does it actually check electrical constraints like current limits or is it matching known patterns from the parts library?<\/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\/@adamkamaneh\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@adamkamaneh<\/a> Good question, and the honest answer is it&#8217;s pattern\/topology matching today, not full electrical-rules simulation. It checks things like whether there&#8217;s a GND pin, whether an I2C device has both SDA and SCL, whether the fuse is before the load. Real checks, but structural. I looked hard at whether Ohm&#8217;s-law current\/voltage-limit math is actually the missing piece, and mostly it isn&#8217;t: almost everything in the catalog is a pre-made breakout module, so the resistor sizing and regulator selection are already solved on the module itself, the same reason nobody hand-calculates resistor values for an off-the-shelf sensor breakout. The real gap was narrower: total power budget, whether your pump plus fan plus heater plus servo actually fits the supply you picked. That&#8217;s live now too: it sums conservative, well-known typical current draw for actuator-class parts and checks it against the supply&#8217;s stated amp rating, and only surfaces when both sides are actually known, never a fabricated number. So: real, scoped safety checks stacking up, not a general verification engine. Glad the sourcing and breadboard-to-perfboard progression are landing, that&#8217;s the part I care most about getting right. If you&#8217;re into what we&#8217;re building, we&#8217;d love a follow at @try_easycircuit on Instagram.<\/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 orchid chamber origin story is great, that is exactly the kind of project people abandon once the wiring gets confusing. This would get me to finally attempt a hardware side project instead of stopping at the idea stage. With 290 parts in the library so far, how do you decide what gets added next, sensors, motors, or whatever users request most?<\/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;Glad you like it! On the parts question, it&#8217;s a mix. We use AI to simulate the most common project types beginners actually build. Then in production, whenever someone&#8217;s actual request needs a part that isn&#8217;t stocked yet, that gets captured and queued for sourcing rather than just failing quietly. So the library grows from anticipating the popular scopes and from the real long tail people ask for, nothing gets left off, it just might take a bit to source. Follow us on Instagram at @try_easycircuit if you like what we&#8217;re building.<\/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>Do you see EasyCircuit evolving into a full KiCad workflow? It would be amazing if beginners could go from a plain-English idea all the way to a PCB while learning <em>why<\/em> design decisions were made.<\/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\/@tarqiya_forgah\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@tarqiya_forgah<\/a>&nbsp;Yes, that&#8217;s exactly the aspiration, not a hypothetical. I met a 13 year old at a hackathon who built a robotic dog from scratch: 3D printed the body himself, soldered the electronics, had a real PCB manufactured, and trained the kinetics with reinforcement learning. That&#8217;s proof this is achievable, the ceiling is genuinely that high. Our mission is making that pathway available to everyone, not just the kid who happens to already have an engineer in the family or years of a head start. Going from a working prototype to real PCB fabrication isn&#8217;t built yet, that part is honest, but what you pointed at, learning why design decisions were made, is already the core of how this works today, not something we&#8217;d bolt on later. The copilot already explains its reasoning at the schematic and breadboard stage, which pin is safe and why, what a fuse is protecting against. Extending that same explain as you go approach all the way to a manufacturable board is the natural continuation of the actual product philosophy, not a pivot. Appreciate you painting the picture, and if you&#8217;re into what we&#8217;re building, we&#8217;d love a follow at @try_easycircuit on Instagram.<\/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>Hardware is the last place where iteration still costs weeks and real money, so lowering the barrier here matters more than another web-app builder. The question I&#8217;d have as a user: how far does it get me before I need an EE to check the work? 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\">\n<p><a href=\"https:\/\/www.producthunt.com\/@lucasjpols\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@lucasjpols<\/a>&nbsp;Appreciate that, and it&#8217;s the right question for a beginner to ask before committing time. Honest answer: further than you&#8217;d think for a real working prototype. My own instrumented orchid growth chamber, sensors, pump, heater, the whole thing, was built this way and actually works, running real experiments, not a demo. That&#8217;s the bar I care about, one person going from an idea to a working unit on their desk. Where it stops today is mass production, real industrial electronics, PCB fabrication at scale, that&#8217;s genuinely more work and not solved yet. We&#8217;re focused on getting people started first, and figuring out how far that path can extend toward manufacturing is the next question for us, not something we&#8217;re pretending is already done. Thanks for the sharp question and the congrats. Follow us on Instagram at @try_easycircuit if you like what we&#8217;re building.<\/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 fried-sensor case is one thing, but I&#8217;d want to know about the failure modes that are actually dangerous rather than just annoying &#8211; anything touching mains voltage or LiPo battery charging. does the tool flag current\/voltage limits that could cause a real safety issue (overheating, fire risk) as a hard stop, or is that still something a beginner could accidentally wire past since it technically &#8220;works&#8221; on the breadboard?<\/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\/@galdayan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@galdayan<\/a>&nbsp;Fair callout, and you&#8217;re right that fried-sensor vs. fire-risk are very different bars. As of today it&#8217;s a hard stop, not a soft warning. If a prompt shows clear intent to wire directly into mains\/wall-AC, the Copilot refuses to generate anything and tells you to use a pre-built, enclosed mains-rated module instead, checked before it even reaches the model, not relying on the LLM to &#8220;remember&#8221; to refuse. That&#8217;s a deliberate positioning choice, not just a limitation. EasyCircuit is for people who don&#8217;t know what they&#8217;re doing yet, and mains is exactly where not-knowing gets genuinely dangerous rather than just expensive. It doesn&#8217;t shut the door on mains-adjacent projects though (smart plugs, appliance control): the catalog already has 5V-coil relay modules and DC-AC solid-state relays, so EasyCircuit will design the low-voltage control side and require a sealed, mains-rated module for the actual switching, never bare wires. Same idea for LiPo\/Li-ion: a bare cell in a design now requires a protection circuit (TP4056\/BMS) present, flagged as a blocking check. It&#8217;s scoped hazard-detection, not a general electrical-rules engine, but the two failure modes that can actually hurt someone are real, tested guardrails now, not just hoped-for LLM behavior. Thanks for pushing on this. If you spot other failure modes worth a hard stop, I&#8217;d genuinely like to hear them. And if you&#8217;re into what we&#8217;re building, we&#8217;d love a follow at @try_easycircuit on Instagram.<\/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 prototype is the easy half, honestly. I do sourcing and QC in Yiwu, and what usually stalls people is the handoff: the factory asks for a BOM with acceptable substitutes, and the answer is &#8220;whatever the prototype used.&#8221; Then someone swaps a capacitor to hit a price target and nobody catches it until the first batch lands.<\/p>\n<p>Curious whether you export anything a factory could actually quote from, or is that outside what you&#8217;re solving?<\/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\/@supplymo\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@supplymo<\/a>&nbsp;Good question, and it points at a real seam. Today EasyCircuit is focused on breadboard to perfboard: prove the design on a breadboard, then a packed perfboard layout you hand-solder from a made-to-order kit. It&#8217;s built for one person building one unit, not a production run. What you&#8217;re describing, a factory quoting from a BOM with tracked acceptable substitutes before a batch lands, is the next stage after that, going from a working prototype to real manufacturing, and it&#8217;s a natural next step for this rather than something bolted onto what exists now. The right version of it needs substitute\/equivalent mappings per component, which is genuinely the next thing to build once the perfboard side is solid. Given you do exactly this handoff for a living, I&#8217;d rather shape that next step with someone who&#8217;s seen the capacitor-swap failure happen than guess at it myself. Worth a direct conversation if you&#8217;re open to it, feel free to DM.<\/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>A schematic view export would be amazing, especially as a downloadable PDF or SVG. Right now you get the parts kit but if I want to tweak the design myself or share it with a maker friend, I have nothing to work from visually. That would make this way more useful for anyone learning along the way.<\/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>Looks like I&#8217;m about to lose myself in this for quite a few fun evenings! \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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@mike_kosenkov\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@mike_kosenkov<\/a>&nbsp;Glad you like it \ud83d\ude09 Enjoy the evenings, and if you build something fun, would love to hear about 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>the orchid growth chamber backstory sells this way better than a generic pitch would. one thing that gives me pause with AI-designed hardware specifically vs AI-designed software: a bad software deploy just rolls back, but a bad resistor value or wiring choice doesn&#8217;t show up until you&#8217;ve already soldered a real board and maybe cooked a sensor. does the breadboard stage actually catch those mistakes before anything&#8217;s committed, or is it mostly a physical-layout check rather than a real electrical sanity 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<\/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\/C72UKW3QLZRAJC\" class=\"app-title\">Ycode AI Agents<\/a><\/p>\n<div class=\"one-liner\">Build websites with AI<\/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>Ycode AI Agents \u5141\u8bb8\u7528\u6237\u5728\u53ef\u89c6\u5316\u7f51\u7ad9\u6784\u5efa\u5668\u4e2d\u63a5\u5165Claude\u3001OpenAI\u7b49AI\u6a21\u578b\uff0c\u8ba9AI\u76f4\u63a5\u7406\u89e3\u5e76\u4fee\u6539\u73b0\u6709\u9879\u76ee\uff0c\u89e3\u51b3\u4f20\u7edfAI\u5efa\u7ad9\u5de5\u5177\u201c\u4e00\u6b21\u6027\u751f\u6210\u3001\u65e0\u6cd5\u6301\u7eed\u8fed\u4ee3\u201d\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\/f047ccb7-a3b6-4aca-ac00-534b3a8a5275.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\/04fc4d8b-7163-4f9e-b360-7798f3188110.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\/eee255c3-8972-4042-ac4b-684274feb11d.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\/21eb83c8-90d5-43c2-bdf8-4e9f85daade1.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\/887ea4c3-ce3f-4066-932c-4ba494431ca7.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\">Website Builder<\/span><br \/>\n            <span class=\"tag\">Web Design<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u7f51\u7ad9\u6784\u5efa<\/span><br \/>\n            <span class=\"tag\">\u53ef\u89c6\u5316\u7f16\u8f91\u5668<\/span><br \/>\n            <span class=\"tag\">\u591a\u6a21\u578b\u63a5\u5165<\/span><br \/>\n            <span class=\"tag\">\u81ea\u5e26API\u5bc6\u94a5<\/span><br \/>\n            <span class=\"tag\">CMS\u5185\u5bb9\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">\u8bbe\u8ba1\u8fed\u4ee3<\/span><br \/>\n            <span class=\"tag\">\u5f00\u6e90<\/span><br \/>\n            <span class=\"tag\">AI\u4ee3\u7406<\/span><br \/>\n            <span class=\"tag\">\u7f51\u7ad9\u5f00\u53d1\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u65e0\u4f9b\u5e94\u5546\u9501\u5b9a<\/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\u53efBYOK\uff08\u81ea\u5e26\u5bc6\u94a5\uff09\u6a21\u5f0f\u900f\u660e\u4e14\u65e0\u52a0\u4ef7\uff0c\u907f\u514d\u4f20\u7edfAI\u79ef\u5206\u5236\u7684\u6210\u672c\u4e0d\u900f\u660e\u3002\u6838\u5fc3\u95ee\u9898\u805a\u7126\u4e8e\uff1aAI\u4fee\u6539\u662f\u5426\u6709\u7248\u672c\u56de\u6eda\uff08\u56de\u590d\u79f0\u6709\u68c0\u67e5\u70b9\u548c\u64a4\u9500\u529f\u80fd\uff09\u3001\u5982\u4f55\u786e\u4fddAI\u5bf9CMS\u5199\u5165\u7684\u771f\u5b9e\u6027\uff08\u56de\u590d\u5f3a\u8c03\u7531\u670d\u52a1\u7aef\u6570\u636e\u5e93\u62a5\u544a\uff0c\u975e\u6a21\u578b\u81ea\u8ff0\uff0c\u4e14\u6bcf\u6b21\u64cd\u4f5c\u540e\u8bfb\u53d6\u6743\u5a01\u5feb\u7167\uff09\u3001\u591a\u6a21\u578b\u5207\u6362\u662f\u5426\u4fdd\u7559\u4e0a\u4e0b\u6587\uff08\u56de\u590d\u786e\u8ba4\u53ef\u8de8\u6a21\u578b\u65e0\u7f1d\u7eed\u804a\uff09\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                Ycode AI Agents \u7684\u6838\u5fc3\u7a81\u7834\u4e0d\u5728\u4e8e\u201c\u7528AI\u5efa\u7ad9\u201d\uff0c\u800c\u5728\u4e8e\u89e3\u51b3\u4e86AI\u5efa\u7ad9\u884c\u4e1a\u7684\u4e00\u4e2a\u7ed3\u6784\u6027\u77db\u76fe\u2014\u2014\u7edd\u5927\u591a\u6570\u5de5\u5177\uff08\u5982Framer AI\u3001Wix ADI\uff09\u901a\u8fc7\u9ed1\u76d2\u751f\u6210\u4e00\u6b21\u6210\u578b\uff0c\u7528\u6237\u82e5\u9700\u8fed\u4ee3\u53ea\u80fd\u63a8\u5012\u91cd\u6765\u3002Ycode\u53cd\u5176\u9053\u800c\u884c\uff1aAI\u4e0d\u518d\u638c\u63a7\u5168\u6d41\u7a0b\uff0c\u800c\u662f\u4f5c\u4e3a\u73b0\u6709\u9879\u76ee\u7684\u534f\u4f5c\u8005\uff0c\u57fa\u4e8e\u7528\u6237\u5df2\u6709\u7684\u8bbe\u8ba1\u3001\u5185\u5bb9\u3001\u7ec4\u4ef6\u8fdb\u884c\u589e\u91cf\u4fee\u6539\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u8fd9\u79cd\u5b9a\u4f4d\u7684\u806a\u660e\u4e4b\u5904\u5728\u4e8e\uff1a\u5b83\u5207\u4e2d\u4e86\u4ece\u201c\u539f\u578b\u201d\u5230\u201c\u4ea7\u54c1\u201d\u7684\u771f\u5b9e\u5de5\u4f5c\u6d41\u75db\u70b9\u3002\u6570\u636e\u663e\u793a\uff0c\u7f51\u7ad9\u521b\u5efa\u540e80%\u4ee5\u4e0a\u7684\u65f6\u95f4\u82b1\u5728\u7ef4\u62a4\u548c\u8fed\u4ee3\u4e0a\uff0c\u800c\u975e\u521d\u59cb\u642d\u5efa\u3002Ycode\u7684\u201c\u68c0\u67e5\u70b9-\u64a4\u9500\u201d\u673a\u5236\u3001\u670d\u52a1\u7aef\u53cc\u6821\u9a8c\uff08\u6570\u636e\u5e93\u786e\u8ba4+\u72b6\u6001\u5feb\u7167\uff09\u548c\u5f00\u6e90BYOK\u6a21\u5f0f\uff0c\u5171\u540c\u6784\u5efa\u4e86\u4e00\u4e2a\u5bf9\u4e13\u4e1a\u7528\u6237\u53cb\u597d\u7684\u4fe1\u4efb\u67b6\u6784\u2014\u2014\u6a21\u578b\u53ef\u4ee5\u51fa\u9519\uff0c\u4f46\u5de5\u5177\u5c42\u4e0d\u4f1a\u6492\u8c0e\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u7136\u800c\uff0c\u98ce\u9669\u540c\u6837\u5b58\u5728\uff1a\u7b2c\u4e00\uff0c\u652f\u63014\u4e2a\u6a21\u578b\u610f\u5473\u7740\u7ef4\u62a4\u6210\u672c\u9aa4\u5347\u4e14\u65e0\u6cd5\u7edf\u4e00\u4f18\u5316prompt\uff0c\u4e0d\u540c\u6a21\u578b\u5728\u89c6\u89c9\u7f16\u8f91\u573a\u666f\u4e0b\u7684\u7cbe\u5ea6\u5dee\u5f02\u53ef\u80fd\u5bfc\u81f4\u7528\u6237\u4f53\u9a8c\u5206\u88c2\uff1b\u7b2c\u4e8c\uff0c\u201c\u5207\u6362\u6a21\u578b\u4fdd\u7559\u4e0a\u4e0b\u6587\u201d\u867d\u7136\u6280\u672f\u4e0a\u53ef\u884c\uff0c\u4f46\u4e0a\u4e0b\u6587\u5305\u542b\u5927\u91cf\u7ed3\u6784\u5316\u6307\u4ee4\uff08DOM\u7ed3\u6784\u3001CSS\u72b6\u6001\uff09\uff0c\u6a21\u578b\u95f4\u7684\u6ce8\u610f\u529b\u8fc1\u79fb\u53ef\u80fd\u5f15\u53d1\u8bed\u4e49\u6f02\u79fb\uff1b\u7b2c\u4e09\uff0cBYOK\u867d\u7136\u900f\u660e\uff0c\u5374\u53ef\u80fd\u529d\u9000\u90a3\u4e9b\u4e0d\u61c2API\u914d\u7f6e\u7684\u8f7b\u5ea6\u7528\u6237\uff0c\u8ba9\u4ea7\u54c1\u5929\u7136\u504f\u5411\u5f00\u53d1\u8005\u7fa4\u4f53\u3002Ycode\u9700\u8981\u5728\u201c\u7075\u6d3b\u201d\u4e0e\u201c\u6613\u7528\u201d\u4e4b\u95f4\u627e\u5230\u4e00\u4e2a\u66f4\u7cbe\u5999\u7684\u5e73\u8861\u70b9\uff0c\u5426\u5219\u5b83\u6700\u7ec8\u53ef\u80fd\u53ea\u662f\u4e00\u6b3e\u9762\u5411\u6280\u5ba2\u7684\u201cAI\u7f16\u8f91\u5668\u201d\uff0c\u800c\u975e\u5927\u4f17\u5316\u7684AI\u5efa\u7ad9\u5e73\u53f0\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\">Ycode AI Agents<\/span>\n                <\/div>\n<div class=\"comment-content\">Connect Claude, OpenAI, Gemini or Grok to Ycode and use your preferred AI directly inside the website builder. Describe what you want to change, and the agent can update designs, manage CMS content, and build or improve components for you<\/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! \ud83d\udc4b<\/p>\n<p>We built Ycode to give designers and developers more control over how they create websites, and this launch takes that idea further.<\/p>\n<p>You can now connect Claude, OpenAI, Gemini or Grok and use your preferred AI directly inside Ycode. The agent can help you refine designs, manage CMS content, and create or update components without leaving the editor.<\/p>\n<p>Instead of generating a website once and starting over, the AI works with your existing project and helps you keep improving it.<\/p>\n<p>We\u2019d love to hear what you think, how you would use it, and what you would like us to build next. Thanks for checking out Ycode! \ud83d\ude4c<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>8<\/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\/@lunenas\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@lunenas<\/a>&nbsp;Congratulations on the launch! <\/p>\n<\/p>\n<p>I really like this direction. Most AI website builders help you create something from scratch, but real projects spend far more time evolving than being created. Having AI understand and work with an existing project feels much more practical.<\/p>\n<\/p>\n<p>I&#8217;m curious, after seeing people use this, what&#8217;s the most common workflow? Do they rely on AI more for design iteration, CMS management, or component building? It would be interesting to see where users naturally trust AI the most. 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>Love that I can use my own Claude\/OpenAI key instead of buying AI credits with a markup. You pay your provider directly and Ycode charges nothing for AI usage.<\/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=\"comment-item\">\n<div class=\"comment-content\">\n<p>Huge congrats\ud83d\ude4c on the launch <a href=\"https:\/\/www.producthunt.com\/products\/ycode\" data-node-type=\"mention\" data-mention-type=\"product\" data-mention-id=\"ycode\" target=\"_blank\" rel=\"noopener\">@Ycode<\/a> team.. giving creators choice over their AI model directly inside a visual builder is a game-changer qq Is there a version history rollback for AI edits, so if a prompt yields a messy layout we can instantly restore the canvas to the previous state?<\/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\/@vikramp7470\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@vikramp7470<\/a>&nbsp;Yes! When the AI makes a change, it creates a checkpoint of your canvas first. So if a prompt gives you a layout you do not like, you can hit Undo right in the AI chat and instantly snap back to how things were before that prompt, no manual cleanup needed. \ud83d\ude4c<\/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>the bring-your-own-model part is the interesting risk here. we run a browser-driving agent and swapped the loop model across four candidates on one fixed task, and the failure that cost us most was not a model that errored. it was one that reported every step as successful while committing nothing, so the run read clean and the output was empty.<\/p>\n<\/p>\n<p>if your agents write to the CMS, that shape is worth guarding against, because a tool result saying it updated something is the model&#8217;s own claim rather than the CMS&#8217;s. do you read the record back after a write, or take the tool return at its word?<\/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\/@whateverneveranywhere\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@whateverneveranywhere<\/a>&nbsp;We guard against exactly that. Tools execute server-side against the project DB, so a tool return is the database&#8217;s report, not the model&#8217;s claim \u2014 errors propagate into the loop instead of being narrated away. Then every turn ends with an authoritative snapshot read back from the DB (state + server-compiled CSS), and that&#8217;s what the canvas renders \u2014 so a silently failed write would be visibly missing, not invisibly &#8220;successful&#8221;. Final backstop: everything is draft-first with a per-turn Changes card built from actual writes, and only a human can hit Publish.<\/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>Since you support Claude, OpenAI, Gemini and Grok, are users bringing their own keys per provider, or would you consider a single unified endpoint to abstract the model routing and billing? Curious how you&#8217;re handling failover when one provider&#8217;s API is degraded.<\/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\/@tian_yi1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@tian_yi1<\/a>&nbsp;Bring-your-own-key per provider. Each project can hold a key for Claude, OpenAI, Gemini, and Grok side by side \u2014 keys can be shared with the whole project or scoped &#8220;only me&#8221; so contributors bill their own accounts. We deliberately didn&#8217;t put a unified endpoint in the middle: Ycode is open source and we don&#8217;t want to be a billing middleman or add markup \u2014 you pay your provider directly and see exactly what each session cost in the usage badge.<\/p>\n<p>No silent cross-provider failover (we&#8217;d rather not swap models behind your back mid-build). Instead, provider errors surface as readable messages in the chat, and if a provider is degraded you can switch models from the picker mid-conversation \u2014 the session context carries over, so the new model picks up where the previous one left off.<\/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 the approach here. Bringing your own API key and paying providers directly is a much more transparent model than the usual markup. Pair that with being open source, and it gives users real flexibility without vendor lock-in. Wishing the team a fantastic launch!<\/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>Giving users the freedom to work with Claude, OpenAI, Gemini, or Grok directly inside the builder is a strong level of flexibility. Can users easily switch models within the same project while keeping the previous context?<\/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\/@nico_mandera\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@nico_mandera<\/a>&nbsp;Yes, absolutely! You can switch models anytime, right from the chat (even mid-conversation). Pick from Claude (Opus 5, Fable 5, Sonnet 5), GPT (5.5, 5 Mini), Gemini (3.1 Pro, 3.5 Flash), or Grok (4.5, 4.3), and swap between them whenever you like. The full conversation context carries over, so you can start on one model and switch to another without losing your thread or repeating yourself, and it&#8217;s all working against your current project state either way.<\/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\/@nico_mandera\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@nico_mandera<\/a>&nbsp;Yes, you can switch models right in the chat composer, mid-conversation. The session context carries over, so the new model picks up where the last one left off.<\/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>Most AI websites tools optimize for convenience <a href=\"https:\/\/www.producthunt.com\/@lunenas\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"lunenas\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@lunenas<\/a> . This seems to balance convenience with flexibility <\/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<\/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\/KE33DH7C7KRGFV\" class=\"app-title\">Jotform Website Widgets<\/a><\/p>\n<div class=\"one-liner\">Build and embed no-code website widgets in minutes<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">156<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Jotform Website Widgets \u8ba9\u7528\u6237\u5728\u65e0\u9700\u7f16\u7801\u7684\u60c5\u51b5\u4e0b\uff0c\u5feb\u901f\u4e3a\u7f51\u7ad9\u6dfb\u52a0\u8bc4\u8bba\u3001\u9884\u7ea6\u3001\u804a\u5929\u3001\u5f39\u7a97\u7b49\u4e92\u52a8\u7ec4\u4ef6\uff0c\u89e3\u51b3\u7f51\u7ad9\u529f\u80fd\u788e\u7247\u5316\u548c\u591a\u5de5\u5177\u7ba1\u7406\u7e41\u7410\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\/a71e8d14-bf9c-4dc9-b670-833ee4001b9c.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\/c2d62dc5-03b4-449b-8643-f250124ceea4.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\/9e132a30-1560-4238-a63b-6abfa306f651.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\/9ac77cfa-dc29-4493-a45c-29142d50687e.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\/4e22ee25-f625-4587-aba3-7c668281856a.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=wAWSP0CD_R8\"><source src=\"https:\/\/www.youtube.com\/watch?v=wAWSP0CD_R8\" 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\">Marketing<\/span><br \/>\n            <span class=\"tag\">Website Builder<\/span><br \/>\n            <span class=\"tag\">No-Code<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u65e0\u4ee3\u7801\u7f51\u7ad9\u7ec4\u4ef6<\/span><br \/>\n            <span class=\"tag\">\u7f51\u7ad9\u4e92\u52a8\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u8868\u5355\u6269\u5c55<\/span><br \/>\n            <span class=\"tag\">\u62d6\u62fd\u5f0f\u6784\u5efa<\/span><br \/>\n            <span class=\"tag\">\u5d4c\u5165\u7ec4\u4ef6<\/span><br \/>\n            <span class=\"tag\">\u5ba2\u6237\u4e92\u52a8<\/span><br \/>\n            <span class=\"tag\">\u9884\u7ea6\u7cfb\u7edf<\/span><br \/>\n            <span class=\"tag\">\u804a\u5929\u63d2\u4ef6<\/span><br \/>\n            <span class=\"tag\">\u5f39\u7a97\u516c\u544a<\/span><br \/>\n            <span class=\"tag\">Janform\u751f\u6001<\/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\u65e0\u4ee3\u7801\u62d6\u62fd\u4f53\u9a8c\u548c\u4e0eJotform\u8d26\u6236\u7684\u96c6\u6210\u4ef7\u503c\u3002\u4e3b\u8981\u7591\u95ee\u96c6\u4e2d\u5728\uff1a\u4e0e\u5176\u4ed6\u5de5\u5177\u76f8\u6bd4\u7684\u72ec\u7279\u4f18\u52bf\uff08\u8bc4\u8bba\u56de\u7b54\u5f3a\u8c03150+\u7ec4\u4ef6\u4e0e\u7edf\u4e00\u8d26\u6237\uff09\uff1b\u591a\u7ec4\u4ef6\u540c\u65f6\u5d4c\u5165\u65f6\u7684\u6027\u80fd\u8f7b\u91cf\u6027\u95ee\u9898\uff08\u5b98\u65b9\u56de\u590d\u79f0\u53ef\u72ec\u7acb\u52a0\u8f7d\u5e76\u6301\u7eed\u4f18\u5316\uff09\uff1b\u5efa\u8bae\u589e\u52a0\u6761\u4ef6\u903b\u8f91\u7684\u53ef\u89c6\u5316\u9884\u89c8\u6a21\u5f0f\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                Jotform\u8fd9\u4e00\u6b65\u68cb\u8d70\u5f97\u65e2\u806a\u660e\u53c8\u4fdd\u5b88\u3002\u806a\u660e\u4e4b\u5904\u5728\u4e8e\uff0c\u5b83\u7cbe\u51c6\u6293\u4f4f\u4e86\u73b0\u6709\u6570\u767e\u4e07\u8868\u5355\u7528\u6237\u7684\u201c\u5269\u4f59\u9700\u6c42\u201d\uff1a\u65e2\u7136\u4f60\u4fe1\u4efb\u6211\u7528\u8868\u5355\u6536\u96c6\u6570\u636e\uff0c\u90a3\u4e48\u7f51\u7ad9\u4e0a\u7684\u9884\u7ea6\u3001\u804a\u5929\u3001FAQ\u7b49\u4e92\u52a8\u73af\u8282\uff0c\u81ea\u7136\u4e5f\u8be5\u7531\u6211\u6765\u627f\u5305\u3002\u8fd9\u672c\u8d28\u4e0a\u662f\u5728\u505a\u201c\u5ba2\u6237\u751f\u547d\u5468\u671f\u4ef7\u503c\u201d\u7684\u6df1\u5ea6\u6316\u6398\uff0c\u5c06\u4e00\u4e2a\u5de5\u5177\u578b\u4ea7\u54c1\u5411\u8f7b\u91cf\u7ea7\u7f51\u7ad9\u8fd0\u8425\u5e73\u53f0\u5ef6\u4f38\uff0c\u610f\u56fe\u964d\u4f4e\u7528\u6237\u7684\u591a\u5de5\u5177\u5207\u6362\u6210\u672c\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u51b7\u9759\u6765\u770b\uff0c\u4ea7\u54c1\u672c\u8eab\u5e76\u65e0\u98a0\u8986\u6027\u521b\u65b0\u3002\u6240\u8c13\u7684\u201c150+\u7ec4\u4ef6\u201d\u66f4\u591a\u662f\u5bf9\u5e02\u9762\u4e0a\u6210\u719f\u6a21\u5757\uff08\u5982Calendly\u7684\u9884\u7ea6\u3001Intercom\u7684\u804a\u5929\uff09\u7684\u6574\u5408\u4e0e\u65e0\u4ee3\u7801\u5316\uff0c\u800c\u975e\u5e95\u5c42\u6280\u672f\u7a81\u7834\u3002\u8bc4\u8bba\u4e2d\u5df2\u6709\u7528\u6237\u654f\u9510\u5730\u6307\u51fa\u201cindividual widgets may not be entirely new\u201d\uff0c\u6070\u6070\u70b9\u51fa\u4e86\u5176\u8f6f\u808b\uff1a\u7f3a\u4e4f\u5dee\u5f02\u5316\u7684\u6838\u5fc3\u80fd\u529b\u3002\u5f53\u7528\u6237\u9700\u8981\u9ad8\u5ea6\u5b9a\u5236\u6216\u590d\u6742\u4e1a\u52a1\u903b\u8f91\u65f6\uff0c\u8fd9\u5957\u5de5\u5177\u94fe\u7684\u7075\u6d3b\u6027\u53ef\u80fd\u5f88\u5feb\u89c1\u9876\uff0c\u800cJotform\u6b64\u524d\u5728\u8868\u5355\u9886\u57df\u7684\u201c\u5927\u800c\u5168\u201d\u6709\u65f6\u53cd\u800c\u610f\u5473\u7740\u201c\u7cbe\u800c\u4e0d\u6df1\u201d\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u66f4\u503c\u5f97\u5173\u6ce8\u7684\u98ce\u9669\u5728\u4e8e\u6027\u80fd\u4e0e\u751f\u6001\u4f9d\u8d56\u3002\u867d\u7136\u5b98\u65b9\u5f3a\u8c03\u4e86\u72ec\u7acb\u52a0\u8f7d\uff0c\u4f46\u591a\u4e2aWidget\u5728\u540c\u4e00\u9875\u9762\u53e0\u52a0\u540e\u7684\u5b9e\u9645\u6027\u80fd\u8868\u73b0\uff0c\u624d\u662f\u51b3\u5b9a\u7528\u6237\u662f\u5426\u957f\u671f\u4f7f\u7528\u7684\u5173\u952e\u3002\u6b64\u5916\uff0c\u5c06\u7f51\u7ad9\u4ea4\u4e92\u5c42\u6df1\u5ea6\u7ed1\u5b9a\u5728\u5355\u4e00\u5e73\u53f0\u8d26\u6237\u4e0a\uff0c\u4e00\u65e6Jotform\u8c03\u6574\u5b9a\u4ef7\u6216\u529f\u80fd\u7b56\u7565\uff0c\u7528\u6237\u5c06\u9762\u4e34\u8f83\u9ad8\u7684\u8fc1\u79fb\u6210\u672c\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u603b\u800c\u8a00\u4e4b\uff0cJotform Website Widgets\u5bf9\u73b0\u6709\u7528\u6237\u662f\u9ad8\u6548\u5b9e\u7528\u7684\u201c\u9526\u4e0a\u6dfb\u82b1\u201d\uff0c\u5bf9\u8ffd\u6c42\u6781\u81f4\u6027\u80fd\u6216\u590d\u6742\u4ea4\u4e92\u7684\u7f51\u7ad9\u5f00\u53d1\u8005\u800c\u8a00\uff0c\u5219\u66f4\u50cf\u4e00\u4e2a\u201c\u5907\u9009\u65b9\u6848\u201d\u800c\u975e\u201c\u5fc5\u9009\u7b54\u6848\u201d\u3002\u5176\u771f\u6b63\u7684\u4ef7\u503c\uff0c\u5728\u4e8e\u9a8c\u8bc1\u4e86\u201c\u8868\u5355\u5de5\u5177\u5411\u7f51\u7ad9\u4ea4\u4e92\u5e73\u53f0\u6f14\u8fdb\u201d\u8fd9\u6761\u8def\u5f84\u7684\u5546\u4e1a\u53ef\u884c\u6027\uff0c\u800c\u975e\u4ea7\u54c1\u672c\u8eab\u7684\u6280\u672f\u58c1\u5792\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\">Jotform Website Widgets<\/span>\n                <\/div>\n<div class=\"comment-content\">Upgrade your website with customizable no-code widgets. Create interactive experiences with reviews, booking, chat, popups, countdowns, FAQs, media galleries, announcements, and much more, then personalize every widget and embed it on any website in minutes.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\ud83d\udc4b Hi Product Hunt! <\/p>\n<p>We&#8217;re excited to introduce Jotform Website Widgets.<\/p>\n<p>Over the years, we&#8217;ve helped millions of people build forms without code. One thing we kept hearing was that users wanted an equally simple way to improve the rest of their websites, not just their forms.<\/p>\n<p>That&#8217;s what inspired Website Widgets.<\/p>\n<p>Whether you want to showcase reviews, add booking, chat with visitors, answer FAQs, display media, or launch a countdown, you can now create and customize website widgets in minutes and embed them on virtually any website, no coding required.<\/p>\n<p>We designed this launch to be as accessible as possible, so you can start building right away and explore different widgets for your website with ease.<\/p>\n<p>This is just the beginning, and we&#8217;re already working on expanding the widget library with more ideas.<\/p>\n<p>We&#8217;d love to hear what you think:<\/p>\n<p>\ud83d\udc49 Which widget are you most excited to use?<\/p>\n<p>Or if there&#8217;s a widget you&#8217;ve always wished existed, let us know, we&#8217;d love to build it.<\/p>\n<p>Thanks so much for checking us out, and we can&#8217;t wait to hear your feedback!<\/p><\/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\/@aytekintank\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@aytekintank<\/a>&nbsp;Which widget would make the biggest immediate difference on your site; and how would you use it? For example, would you add a booking widget to reduce back-and-forth messages, a reviews widget to boost trust, or a chat widget to capture visitors in real time? Tell us what problem you\u2019d solve first and why.<\/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\/@aytekintank\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@aytekintank<\/a>&nbsp;the FAQ\/chat\/booking bundle makes sense as a natural extension you already have the trust surface from forms, so widgets feel like the same toolkit for the rest of the site instead of a new product to learn. which widget are people actually reaching for first at launch booking, or chat?<\/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! There are quite a few website widget tools out there. What do you think is the one feature that makes Jotform Website Widgets stand out from the rest?<\/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\/@saksham_shukla3\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@saksham_shukla3<\/a>&nbsp;Thanks so much! I&#8217;d say it&#8217;s the combination of variety and simplicity. With 150+ customizable website widgets, you can add everything from reviews and booking to chat, popups, FAQs, countdowns, and more all from a single Jotform account with a familiar no-code experience.<\/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>jotform is been my all time used product and this new feature makes it even better<\/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\/@bibhash_dutta\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bibhash_dutta<\/a>&nbsp;Thank you so much! That truly means a lot to us. We&#8217;re thrilled to hear Jotform has been a part of your workflow, and we hope Website Widgets becomes another tool you&#8217;ll enjoy using. Thanks for your continued 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<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Jot has evolved a lot! Been watching Jot for so many years now. 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<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Honestly, the drag and drop builder is way more intuitive than I expected. Threw together a feedback survey in like two minutes without touching any code.<\/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>honestly the drag-and-drop builder feels really polished, like every element just snaps into place without that finicky alignment frustration you get with other form tools.<\/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>Used Jotform to spin up a feedback form for a small project and was honestly surprised how fast it came together. The drag and drop felt snappy on my laptop, and the conditional logic just worked without me needing to mess with anything.<\/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>Jotform has grown far beyond a form builder, and this feels like a logical extension of the ecosystem rather than a random add-on. The individual widgets may not be entirely new, but having reviews, popups, FAQs, booking, chat, and forms under one account could remove a lot of small-tool fragmentation for website owners. I\u2019m especially curious about performance \u2014 how lightweight are the embeds when several widgets are used on the same page? 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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@andrey_ivanchenko\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@andrey_ivanchenko<\/a>&nbsp;Thanks so much! We really appreciate that perspective, that&#8217;s exactly how we think about it. <\/p>\n<\/p>\n<p>Rather than asking users to juggle multiple tools, we wanted to bring the most common website enhancements together in one place, all within the Jotform ecosystem.<\/p>\n<\/p>\n<p>As for performance, each widget is designed to be embedded independently, so you only load the widgets you actually use. <\/p>\n<\/p>\n<p>We know page performance is important, especially for websites using multiple widgets, and it&#8217;s something we&#8217;re actively optimizing as we continue to improve the product.<\/p>\n<\/p>\n<p>We&#8217;d love to hear which widgets you&#8217;d use together on the same page!<\/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>One thing I&#8217;d love to see is a built-in conditional logic preview mode that lets me test branching paths visually before publishing. Would save a lot of back-and-forth with test submissions.<\/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\">#9<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/A5C7RWUJJMXOLN\" class=\"app-title\">Firstpass<\/a><\/p>\n<div class=\"one-liner\">Actionable input so you nail every launch<\/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>Firstpass\u662f\u4e00\u6b3e\u4e3a\u4ea7\u54c1\u53d1\u5e03\u8005\u8bbe\u8ba1\u7684\u9884\u89c8\u68c0\u67e5\u5de5\u5177\uff0c\u80fd\u5728\u53d1\u5e03\u524d\u6a21\u62df\u4ea7\u54c1\u5728Product Hunt\u3001Glaze Store\u7b49\u591a\u4e2a\u5e73\u53f0\u9875\u9762\u4e0a\u7684\u771f\u5b9e\u5c55\u793a\u6548\u679c\uff0c\u5e76\u6807\u6ce8\u51fa\u6587\u6848\u88ab\u622a\u65ad\u3001\u6b67\u4e49\u7b49\u81f4\u547d\u95ee\u9898\uff0c\u89e3\u51b3\u56e0\u4e0d\u540c\u5e73\u53f0\u5b57\u7b26\u9650\u5236\u5bfc\u81f4\u8425\u9500\u4fe1\u606f\u5931\u6548\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\/cb7c57e6-f712-4f39-8839-6468a8009b76.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\/6c44f697-61b8-4a1f-b174-533c7d903257.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\/1fd91289-7255-4c68-a79b-e7a1f5451c80.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\/f94be893-bbbe-49be-b8e9-8ec2c3853f15.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\/75c84c31-6ff8-496c-9e97-0d169e1591ed.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\/59d9a9a5-2859-4f70-8fe3-536428702fdb.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\/09ab5a52-fc20-4a3c-885a-e4d55bb2fac4.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\">UX Design<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u53d1\u5e03\u68c0\u67e5<\/span><br \/>\n            <span class=\"tag\">\u6587\u6848\u9884\u89c8<\/span><br \/>\n            <span class=\"tag\">\u4ea7\u54c1\u4e0a\u7ebf<\/span><br \/>\n            <span class=\"tag\">\u5b57\u7b26\u9650\u5236<\/span><br \/>\n            <span class=\"tag\">\u667a\u80fd\u63d0\u9192<\/span><br \/>\n            <span class=\"tag\">\u5185\u5bb9\u4f18\u5316<\/span><br \/>\n            <span class=\"tag\">\u521b\u4e1a\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u8425\u9500\u6821\u9a8c<\/span><br \/>\n            <span class=\"tag\">\u5e73\u53f0\u9002\u914d<\/span><br \/>\n            <span class=\"tag\">\u7528\u6237\u53cd\u9988<\/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\u201c\u5148\u9884\u89c8\u540e\u53d1\u5e03\u201d\u7684\u5b9e\u7528\u4ef7\u503c\uff0c\u5e76\u5173\u6ce8\uff1a\u80fd\u5426\u652f\u6301X\u3001iOS\u5e94\u7528\u5546\u5e97\u7b49\u66f4\u591a\u5e73\u53f0\uff1b\u80fd\u5426\u89e3\u91ca\u95ee\u9898\u80cc\u540e\u7684\u539f\u5219\u4ee5\u4fbf\u5b66\u4e60\uff1b\u5de5\u5177\u662f\u5426\u8003\u8651SEO\u641c\u7d22\u5173\u952e\u8bcd\u7684\u9690\u5f62\u635f\u5931\uff1b\u4ee5\u53ca\u5982\u4f55\u8bc4\u5206\u53ea\u770b\u622a\u65ad\u70b9\u800c\u4e0d\u770b\u68c0\u7d22\u4ef7\u503c\u3002\u6b64\u5916\uff0c\u6709\u7528\u6237\u63d0\u51faGDPR\u9690\u79c1\u5408\u89c4\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                Firstpass\u5207\u4e2d\u4e86\u4e00\u4e2a\u6781\u7ec6\u5fae\u5374\u6781\u75db\u7684\u201c\u6700\u540e\u4e00\u516c\u91cc\u201d\u95ee\u9898\uff1a\u65e0\u6570\u4ea7\u54c1\u6b7b\u5728\u53d1\u5e03\u77ac\u95f4\u7684\u4fe1\u606f\u9519\u4f4d\u3002\u521b\u59cb\u4eba\u7528\u4eb2\u8eab\u7ecf\u5386\u548c300\u591a\u6761\u4e0a\u7ebf\u7684\u6821\u51c6\u6570\u636e\uff0c\u8bc1\u660e\u4e86\u201c60\u5b57\u6a2a\u5e45\u226040\u5b57\u5546\u5e97\u226033\u5b57\u7f51\u683c\u201d\u8fd9\u4e2a\u88ab99%\u7684\u53d1\u5e03\u8005\u5ffd\u89c6\u7684\u5ba2\u89c2\u4e8b\u5b9e\u3002\u5176\u6838\u5fc3\u4ef7\u503c\u4e0d\u5728\u4e8e\u201c\u6539\u5199\u201d\u800c\u5728\u4e8e\u201c\u5448\u73b0\u201d\u2014\u2014\u5b83\u50cf\u4e00\u9762\u51b7\u9177\u7684\u955c\u5b50\uff0c\u8ba9\u521b\u4f5c\u8005\u76f4\u9762\u4e00\u4e2a\u964c\u751f\u4eba\u5728\u4e0d\u540c\u573a\u666f\u4e0b\u5982\u4f55\u771f\u6b63\u201c\u770b\u89c1\u201d\u81ea\u5df1\u7684\u4ea7\u54c1\u3002\u8fd9\u79cd\u53cd\u76f4\u89c9\u7684\u89c6\u89d2\u8f6c\u6362\uff0c\u5f80\u5f80\u6bd4\u4efb\u4f55AI\u5efa\u8bae\u90fd\u66f4\u5177\u6740\u4f24\u529b\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u7136\u800c\uff0c\u4ea7\u54c1\u7684\u62a4\u57ce\u6cb3\u4ee4\u4eba\u62c5\u5fe7\u3002\u6838\u5fc3\u529f\u80fd\u672c\u8d28\u4e0a\u662f\u201c\u5b57\u7b26\u9884\u68c0+\u89c4\u5219\u5316\u63d0\u9192\u201d\uff0c\u6280\u672f\u4e0a\u4e0d\u5b58\u5728\u4e0d\u53ef\u903e\u8d8a\u7684\u95e8\u69db\uff0c\u5f88\u5bb9\u6613\u88ab\u5176\u4ed6\u5ba1\u67e5\u5de5\u5177\u6216AI\u63d2\u4ef6\u4f5c\u4e3a\u9644\u52a0\u529f\u80fd\u5b9e\u73b0\u3002\u8bc4\u8bba\u4e2d\u5df2\u6709\u7528\u6237\u6307\u51fa\uff0c\u5de5\u5177\u76ee\u524d\u201c\u53ea\u5173\u5fc3\u8bfb\u8005\u4f55\u65f6\u505c\u6b62\u9605\u8bfb\u201d\uff0c\u5374\u5b8c\u5168\u5ffd\u7565\u4e86\u201c\u7528\u6237\u5982\u4f55\u641c\u7d22\u3001\u6392\u540d\u8bcd\u5982\u4f55\u5b58\u6d3b\u201d\u7b49\u66f4\u590d\u6742\u7684\u8425\u9500\u7ef4\u5ea6\uff0c\u8fd9\u4ece\u903b\u8f91\u4e0a\u66b4\u9732\u4e86Firstpass\u7684\u504f\u79d1\u2014\u2014\u5b83\u89e3\u51b3\u7684\u662f\u5f62\u5f0f\u95ee\u9898\uff08\u9002\u5e94\u6027\uff09\uff0c\u800c\u975e\u6548\u7387\u95ee\u9898\uff08\u8f6c\u5316\u7387\uff09\u3002\u66f4\u5173\u952e\u7684\u662f\uff0c\u521b\u59cb\u4eba\u7684\u56de\u590d\u4e2d\u627f\u8ba4\u201c\u8fd8\u6ca1\u6709\u5b8c\u7f8e\u7b54\u6848\u201d\uff0c\u8fd9\u6697\u793a\u7740\u4ea7\u54c1\u76ee\u524d\u4ecd\u505c\u7559\u5728\u201c\u53d1\u73b0\u75db\u70b9\u201d\u9636\u6bb5\uff0c\u800c\u975e\u201c\u5f7b\u5e95\u89e3\u51b3\u75db\u70b9\u201d\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ece\u8bc4\u8bba\u70ed\u5ea6\u770b\uff0c\u7528\u6237\u6700\u5173\u5fc3\u7684\u5e76\u975e\u5de5\u5177\u672c\u8eab\uff0c\u800c\u662f\u5b83\u63ed\u793a\u7684\u6df1\u5c42\u95ee\u9898\u2014\u2014\u201c\u4e3a\u4ec0\u4e48\u6211\u603b\u80fd\u53d1\u73b0\u66f4\u597d\u7684\u529e\u6cd5\uff0c\u5374\u603b\u5728\u53d1\u5e03\u540e\u624d\u540e\u6094\u201d\u3002Firstpass\u5982\u679c\u4ec5\u4ec5\u505a\u4e00\u4e2a\u63d0\u9192\u5de5\u5177\uff0c\u5c06\u5f88\u5feb\u6ca6\u4e3a\u201c\u53d1\u5e03\u8005\u5b89\u6170\u5242\u201d\u3002\u771f\u6b63\u7684\u8fdb\u5316\u65b9\u5411\u5e94\u662f\uff1a\u57fa\u4e8e\u5386\u53f2\u6570\u636e\u9884\u6d4b\u54ea\u4e2a\u5b57\u7b26\u6539\u52a8\u80fd\u5e26\u6765\u66f4\u591a\u66dd\u5149\u6216\u7559\u5b58\uff0c\u751a\u81f3\u8054\u52a8\u5e73\u53f0API\u8fdb\u884c\u5b9e\u65f6\u4f18\u5316\u5efa\u8bae\u3002\u5426\u5219\uff0c\u5b83\u7ec8\u7a76\u53ea\u662f\u53d1\u5e03\u524d\u7684\u4e00\u9488\u5f3a\u5fc3\u5242\uff0c\u800c\u975e\u4ea7\u54c1\u589e\u957f\u7684\u6218\u7565\u5f15\u64ce\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\">Firstpass<\/span>\n                <\/div>\n<div class=\"comment-content\">If you&#8217;ve ever shipped a launch and watched your copy get truncated, ignored, or misread \u2014 Firstpass shows you every surface a stranger meets your product on (the Product Hunt page, the leaderboard row, the Glaze Store grid) and pins handwritten crit notes to what breaks in each one, before you publish. The same tagline lives or dies differently depending on where it lands: PH gives you 60 characters, the Glaze Store caps at 40, the browse grid cuts near 33. Nobody checks \u2014 until it&#8217;s live.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hey hey fam \u2014 time for me to jump in the maker seat!<\/p>\n<\/p>\n<p>Since January I&#8217;ve done <a href=\"https:\/\/book.chrismessina.me\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><strong>nearly 200 coaching calls<\/strong><\/a> focused on launch positioning and product feedback for Product Hunt.<\/p>\n<\/p>\n<p>I&#8217;ve watched more great products die on bad copy than bad code.<\/p>\n<\/p>\n<p>And now thanks to agentic coding, non-developers like myself can finally bring their ideas to life.<\/p>\n<\/p>\n<p>The problem is \u2014 all those non-devs need to connect with their audience, and AI slop isn&#8217;t going to cut it.<\/p>\n<\/p>\n<p>To stand out in a leaderboard that regularly <a href=\"https:\/\/www.producthunt.com\/p\/producthunt\/1-100-products-launched-in-a-single-24-hour-period\" target=\"_blank\" rel=\"noopener\">exceeds 1000 products launched every 24 hour period<\/a>, you need powerful, muscular prose that grabs the audience by the lapels and demands they pay attention.<\/p>\n<\/p>\n<p><strong>Firstpass gives you feedback before you launch<\/strong>\u2049\ufe0f<\/p>\n<p>Not &#8220;make it pop&#8221; \u2014 a real adversarial content crit.<\/p>\n<\/p>\n<p>Here&#8217;s what few people realize: the same tagline lives or dies differently depending on <em>where it appears<\/em>.<\/p>\n<\/p>\n<p>Product Hunt gives you 60 characters. The Glaze Store caps at 40. The browse grid where people actually scan cuts near 33. A tagline that&#8217;s perfectly legal in one place is <em>unpublishable<\/em> in another \u2014 and you find out <em>after<\/em> you&#8217;ve shipped.<\/p>\n<\/p>\n<p>\u26a1 <strong>How it works:<\/strong> you paste your launch copy once. <strong>Firstpass<\/strong> renders it on every surface a stranger will actually meet it \u2014 PH page, the leaderboard row, the store grid \u2014 and pins handwritten crit notes to whatever breaks in each. It scores against a real rubric: tagline, description, gallery, maker comment, message consistency. Calibrated against 305 live listings.<\/p>\n<\/p>\n<p>\ud83d\udd0e <strong>Why it&#8217;s different:<\/strong> other tools rewrite your copy. Firstpass shows you <em>where a stranger stops reading<\/em> \u2014 per surface, before you publish. It&#8217;s a design crit wall, not a chatbot.<\/p>\n<\/p>\n<p>\ud83d\udd75\ud83c\udffb <strong>The proof:<\/strong> I ran <strong>Firstpass<\/strong> on this launch. It caught that my tagline gets cut mid-word on the Glaze grid \u2014 the exact failure the app exists to find \u2014 and flagged an earlier draft of this comment for ending on two questions. It critiques itself.<\/p>\n<\/p>\n<p><strong>It&#8217;s early \u2014 <\/strong><em>pre-beta <\/em>and free while under development. If you find the concept compelling, you can <a href=\"https:\/\/www.glaze.app\/app\/firstpass-JwDea4\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">get it<\/a> from the <a href=\"https:\/\/go.glz.so\/product-hunt\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Glaze store<\/a> and if you like it, I&#8217;d love your support in the <a href=\"https:\/\/go.glz.so\/awards\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Glaze Awards<\/a>: \ud83e\udef6\ud83c\udffb<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/c4206ac9-460f-4a40-ab0a-b9bd96f4da26.png?auto=compress,format&amp;codec=mozjpeg&amp;cs=strip\" style=\"max-width: 100%\"><\/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\">@chrismessina congrats on the launch! I like the idea a lot. is there any gdpr concerns?<\/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\/@chrismessina\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@chrismessina<\/a>&nbsp;Quick question: what\u2019s the single most common copy mistake you see that actually costs launches upvotes or attention, and can you share one tiny, practical rule we can apply right away to avoid it?<\/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\/@chrismessina\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@chrismessina<\/a>&nbsp;Congratulations on the launch! \ud83c\udf89 This is a genuinely useful idea. I like that Firstpass doesn&#8217;t try to rewrite everything\u2014instead, it shows exactly where your messaging breaks across different launch surfaces before you publish. That&#8217;s practical feedback makers can actually act on. Wishing you a fantastic launch! I&#8217;m curious: after analyzing 305+ listings, what was the most common messaging mistake you found among otherwise great products?<\/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\">I found Firstpass on Glaze awards but I didn\u2019t see how to support it!<\/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\/@ishita_jindal2\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ishita_jindal2<\/a>&nbsp;oh! If you <a href=\"https:\/\/go.glz.so\/chris\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">download Glaze<\/a>, search in the store for Firstpass, and open its page, you should see an upvote button, like here: <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/d00a3482-9b60-413a-b735-f60fbaa9a6a6.png?auto=compress,format&amp;codec=mozjpeg&amp;cs=strip\" style=\"max-width: 100%\"><\/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 useful part for me is that it shows where a stranger stops reading instead of rewriting the copy for you. One&nbsp;question: when a crit note flags a break, does it explain the principle behind it so it carries to the next launch, or is it scoped to that one listing?<\/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\/@alieksia\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@alieksia<\/a>&nbsp;great question. <\/p>\n<\/p>\n<p>The intention <em>is<\/em> to identify a principle when content misses the mark (so you can address the underlying concern), but if it&#8217;s just a matter of truncation, that&#8217;s less a principle and more a pragmatic consideration meant to help you see how listings might harm your presentation.<\/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\">Chris, is this optimized for PH or also for X and HN launches?<\/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\/@ishita_jindal2\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ishita_jindal2<\/a>&nbsp;only Glaze and Product Hunt, but I will be adding more! <\/p>\n<\/p>\n<p>I&#8217;m a little worried that X is harder to optimize for, since it now supports such long posts and is an art unto itself! <\/p>\n<\/p>\n<p>Firstpass is better for launches where you have fixed metadata or content fields, like the Chrome Web Store or the App Store, etc. <\/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\">This is dope! I&#8217;m working on a project right now so this timing is perfect. I&#8217;ve been a lurker on your other work, so excited to see how well this works.<\/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\/@zackdn\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@zackdn<\/a>&nbsp;woo, thanks! Give it a shot and lemme know how I can improve it!<\/p>\n<\/p>\n<p>What project are you working on?<\/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>Launching today myself, sitting at 3 points, so your timing is either perfect or cruel.<\/p>\n<p>The feedback I actually needed came earlier than launch day. Our tagline went through four versions and the one we shipped came from cutting it to fit the 60 character limit, not from anyone telling me the earlier ones were weak. That forced edit did feedback&#8217;s job by accident.<\/p>\n<p>Does it work on a pre-launch draft, or only once the page is live?<\/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\/@supplymo\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@supplymo<\/a>&nbsp;this is definitely meant to be used <em>before<\/em> launch \u2014 to make sure that your copy looks good and reads well in the various contexts where it&#8217;ll appear.<\/p>\n<\/p>\n<p>You could still use it on launch day to see if you can squeeze any more clarity in. <\/p>\n<\/p>\n<p>I see that you went with &#8220;12 free tools to check a China supplier before you pay&#8221;. Here&#8217;s the Firstpass analysis: <\/p>\n<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/cea71ea6-bf84-4c87-a265-14f3d1ac6d6d.png?auto=compress,format&amp;codec=mozjpeg&amp;cs=strip\" style=\"max-width: 100%\"><\/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>Reading copy where it actually renders instead of where you wrote it is the whole trick, and it generalizes past launches. Last week I ran a copy and alignment pass on my agency site and every fix that mattered came from checking each string on the rendered page, the mega menu and the footer both read fine in the file and wrong in the browser. Out of the 305 live listings you calibrated the rubric against, which surface kills the most taglines? My money is on the 33 character browse grid, since nobody writes for a surface they cannot see in the editor.<\/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\/@abdullah_javaid3\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@abdullah_javaid3<\/a>&nbsp;I re-ran the rubric against the total 500+ launches&#8230;! I imagine that the most important surfaces are defined by the funnel \u2014 so wherever the most number of people are likely to see your copy. <\/p>\n<\/p>\n<p>On Product Hunt, that&#8217;s the leaderboard; for Glaze, that&#8217;s probably the store homepage, where you really only get 40 (!!) characters: <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/7c17a96d-41de-48a4-a268-7cc0ac5d16ee.png?auto=compress,format&amp;codec=mozjpeg&amp;cs=strip\" style=\"max-width: 100%\"><\/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\">Love the name ahaha!<\/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\/@nishkarsh_srivastava\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@nishkarsh_srivastava<\/a>&nbsp;\ud83d\ude0e<\/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>Chris, the per-surface render is the right primitive, and I want to push on one axis the crit wall can&#8217;t see by construction.<\/p>\n<\/p>\n<p>I do this dance on the App Store, where the same string holds two jobs at once. The title is a headline a human skims in a results row, and it&#8217;s also an indexed retrieval field. So when a character limit forces a cut, the visible fix and the invisible cost land in different places: the tagline reads tighter and cleaner, and you&#8217;ve quietly dropped the word you were ranking on. Nothing on the rendered surface tells you that happened. You find out weeks later in the impressions, if you go looking.<\/p>\n<\/p>\n<p>Product Hunt is friendlier here because the leaderboard row is mostly a reading surface. It isn&#8217;t purely one though. There&#8217;s search, there are topic pages, and there&#8217;s whatever the models are ingesting now when somebody asks them for &#8220;tools like X&#8221;.<\/p>\n<\/p>\n<p>So: does the rubric have any notion of a term that has to survive, or is it scored entirely on where a stranger stops reading? A crit that says &#8220;this cut reads better and costs you the only word anyone searches for&#8221; is a note I&#8217;ve never gotten from any tool, and I&#8217;ve had to run that check by hand every time.<\/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\/@narek_keshishyan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@narek_keshishyan<\/a>&nbsp;great call out, and one that I don&#8217;t have a perfect answer to! <\/p>\n<\/p>\n<p>Another way to phrase your point is that <strong>there are two audiences of product metadata: human readers and robot indexers.<\/strong> <\/p>\n<\/p>\n<p>Firstpass currently (given its initial focus on Product Hunt launches) prioritizes human readers scrolling through the leaderboard, where you might be up against 20-30 competitors and need to stand out. <\/p>\n<\/p>\n<p>Longer term, or in other contexts like the App Store, or in Google results, it might be more important to over-index on SEO\/AEO terms or phrases that can actually turn off or annoy humans.<\/p>\n<\/p>\n<p>Finding a balance between both is an unsettled science, and may never be. <\/p>\n<\/p>\n<p>But it&#8217;s something I&#8217;ll consider for Firstpass \u2014 especially since <a href=\"https:\/\/www.producthunt.com\/p\/producthunt\/case-study-how-product-hunt-can-improve-ai-visibility-in-2026\" target=\"_blank\" rel=\"noopener\">Product Hunt itself is prioritizing AEO performance<\/a> more these days!<\/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\/AIJVHGKNFOZEPM\" class=\"app-title\">FlowTask 2.0<\/a><\/p>\n<div class=\"one-liner\">Company brain for AI Agents<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">136<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>FlowTask 2.0 \u662f\u4e00\u6b3e\u4f01\u4e1a\u7ea7AI\u77e5\u8bc6\u4e2d\u67a2\uff0c\u901a\u8fc7\u5ba1\u6279\u5c42\u8fde\u63a5Slack\u3001WhatsApp\u3001\u90ae\u4ef6\u7b49\u5206\u6563\u6e20\u9053\uff0c\u5b9e\u65f6\u66f4\u65b0\u7ed3\u6784\u5316\u4e0a\u4e0b\u6587\uff0c\u8ba9AI\u4ee3\u7406\u5728\u4e0d\u6cc4\u9732\u9690\u79c1\u3001\u4e0d\u91cd\u590d\u8f93\u5165\u7684\u524d\u63d0\u4e0b\u83b7\u5f97\u5206\u949f\u7ea7\u7cbe\u51c6\u7684\u516c\u53f8\u8bb0\u5fc6\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\/46825bdf-a155-4f71-91de-4b76f27f4671.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\/bf54886e-8b40-4b5e-acc5-6f25ea601f9a.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\/813004fc-2695-4519-9130-0b13ddd97045.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\/84ac3f17-8eda-425e-a934-23a7cd82e085.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\/6e5e967a-1b0e-4d12-af33-f5878451a13b.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/ApCjmQbO-gw\"><source src=\"https:\/\/youtu.be\/ApCjmQbO-gw\" 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\">Productivity<\/span><br \/>\n            <span class=\"tag\">Developer Tools<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u77e5\u8bc6\u5e93<\/span><br \/>\n            <span class=\"tag\">\u4f01\u4e1a\u8bb0\u5fc6<\/span><br \/>\n            <span class=\"tag\">AI\u4ee3\u7406\u4e0a\u4e0b\u6587<\/span><br \/>\n            <span class=\"tag\">MCP\u534f\u8bae<\/span><br \/>\n            <span class=\"tag\">\u6570\u636e\u5ba1\u6279\u5c42<\/span><br \/>\n            <span class=\"tag\">\u5b9e\u65f6\u540c\u6b65<\/span><br \/>\n            <span class=\"tag\">\u9690\u79c1\u9694\u79bb<\/span><br \/>\n            <span class=\"tag\">Slack\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">WhatsApp\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">\u5de5\u4f5c\u6d41\u81ea\u52a8\u5316<\/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\u5ba1\u6279\u5c42\u8bbe\u8ba1\uff0c\u4f46\u6838\u5fc3\u8d28\u7591\u96c6\u4e2d\u5728\uff1a\u624b\u52a8\u5ba1\u6279\u662f\u5426\u4f1a\u6210\u4e3a\u65e5\u5e38\u5835\u585e\uff1f\u8bb0\u5fc6\u66f4\u65b0\u540e\uff0c\u8fc7\u65f6\u6216\u77db\u76fe\u4e8b\u5b9e\u5982\u4f55\u81ea\u52a8\u6dd8\u6c70\uff1f\u591a\u4e2a\u4ee3\u7406\u540c\u65f6\u8bfb\u53d6\u540c\u4e00\u8111\u5e93\u65f6\uff0c\u5982\u4f55\u9632\u6b62\u56e0\u65f6\u95f4\u5dee\u5bfc\u81f4\u7684\u884c\u52a8\u51b2\u7a81\uff1f\u53e6\u5916\u6709\u7528\u6237\u53cd\u9988Google Workspace\u548cSlack\u8fde\u63a5\u5668\u6545\u969c\uff0c\u5f71\u54cd\u4f53\u9a8c\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                FlowTask 2.0 \u5207\u4e2d\u4e86\u4e00\u4e2a\u771f\u5b9e\u4f46\u72e1\u733e\u7684\u75db\u70b9\uff1aAI\u4ee3\u7406\u4e0d\u662f\u4e0d\u591f\u806a\u660e\uff0c\u800c\u662f\u201c\u5931\u5fc6\u201d\u592a\u5feb\u3002\u4f01\u4e1a\u6570\u636e\u6563\u843d\u5728Slack\u3001\u90ae\u4ef6\u3001WhatsApp\u7b49\u5b64\u5c9b\uff0c\u8c03\u7528\u65f6\u8981\u4e48\u5582\u8fdb\u4e00\u5806\u5783\u573e\uff0c\u8981\u4e48\u6bcf\u6b21\u90fd\u8981\u624b\u52a8\u704c\u4e0a\u4e0b\u6587\u2014\u2014\u6210\u672c\u9ad8\u3001\u65f6\u6548\u5dee\u3001\u9690\u79c1\u96be\u4fdd\u3002FlowTask\u7684\u89e3\u51b3\u65b9\u6848\u672c\u8d28\u4e0a\u662f\u5728\u201c\u6570\u636e\u5165\u53e3\u201d\u4e0e\u201cAI\u4e0a\u4e0b\u6587\u201d\u4e4b\u95f4\u52a0\u4e86\u4e00\u5c42\u5e26\u95f8\u95e8\u7684\u5b9e\u65f6\u7ba1\u9053\uff1a\u901a\u8fc7\u5ba1\u6279\u5c42\u8fc7\u6ee4\u79c1\u4eba\u4fe1\u606f\uff0c\u901a\u8fc7MCP\u534f\u8bae\u5411\u591a\u4ee3\u7406\u7edf\u4e00\u4f9b\u7ed9\u4e0d\u65ad\u5237\u65b0\u7684\u7ed3\u6784\u5316\u8bb0\u5fc6\u3002\u8fd9\u4e2a\u601d\u8def\u662f\u5bf9\u7684\uff0c\u751a\u81f3\u53ef\u4ee5\u8bf4\u6bd4\u5355\u7eaf\u505aRAG\u6216\u5411\u91cf\u6570\u636e\u5e93\u66f4\u63a5\u8fd1\u4f01\u4e1a\u771f\u5b9e\u9700\u6c42\u2014\u2014\u540e\u8005\u53ea\u89e3\u51b3\u201c\u641c\u7d22\u201d\uff0c\u4e0d\u89e3\u51b3\u201c\u5207\u7247\u548c\u7ba1\u63a7\u201d\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u8bc4\u8bba\u533a\u7684\u8ffd\u95ee\u66b4\u9732\u4e86\u4ea7\u54c1\u5c1a\u672a\u771f\u6b63\u89e3\u51b3\u7684\u4e09\u4e2a\u88c2\u7f1d\uff1a\u7b2c\u4e00\uff0c\u5ba1\u6279\u5c42\u7684\u53ef\u6269\u5c55\u6027\u5b58\u7591\u3002\u65e5\u5e38\u4e1a\u52a1\u4e2dSlack\u548cWhatsApp\u6bcf\u5c0f\u65f6\u6d8c\u8fdb\u6570\u767e\u6761\u6d88\u606f\uff0c\u5982\u679c\u5ba1\u6279\u662f\u4eba\u5de5\u961f\u5217\uff0c\u90a3\u4e48\u201c\u5ba1\u6279\u5c42\u201d\u5c31\u4f1a\u4ece\u5b89\u5168\u76fe\u724c\u9000\u5316\u4e3a\u6548\u7387\u74f6\u9888\u3002\u7b2c\u4e8c\uff0c\u4e8b\u5b9e\u65f6\u6548\u4e0e\u7ba1\u7406\u673a\u5236\u7f3a\u5931\u3002\u8bb0\u5fc6\u6bcf\u5206\u949f\u66f4\u65b0\uff0c\u4f46\u65e7\u4e8b\u5b9e\u662f\u5426\u81ea\u52a8\u8fc7\u671f\uff1f\u77db\u76fe\u4e8b\u5b9e\u5982\u4f55\u5904\u7406\uff1f\u5f53\u524d\u4ea7\u54c1\u53ea\u56de\u7b54\u4e86\u201c\u5982\u4f55\u8ba9\u4fe1\u606f\u8fdb\u6765\u201d\uff0c\u5374\u6ca1\u6709\u56de\u7b54\u201c\u5982\u4f55\u8ba9\u9519\u8bef\u4fe1\u606f\u51fa\u53bb\u201d\u3002\u7b2c\u4e09\uff0c\u591a\u4ee3\u7406\u5e76\u53d1\u52a8\u4f5c\u7684\u4e00\u81f4\u6027\u672a\u89e3\u51b3\u3002\u4e24\u4e2aAI\u5728\u76f8\u5dee\u4e00\u5206\u949f\u5185\u8bfb\u5230\u4e0d\u540c\u7248\u672c\u7684\u4e8b\u5b9e\uff0c\u5206\u522b\u91c7\u53d6\u884c\u52a8\u5e76\u5bfc\u81f4\u4e1a\u52a1\u51b2\u7a81\u2014\u2014\u8fd9\u4e0d\u662fBug\uff0c\u800c\u662f\u5728\u7ebf\u8111\u5e93\u67b6\u6784\u4e0b\u5fc5\u7136\u51fa\u73b0\u7684\u65f6\u5e8f\u95ee\u9898\uff0c\u76ee\u524d\u4ea7\u54c1\u7f3a\u4e4f\u7248\u672c\u6233\u6216\u4e8b\u52a1\u4e00\u81f4\u6027\u4fdd\u969c\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ece\u793e\u533a\u53cd\u5e94\u770b\uff0cFlowTask 2.0\u7684\u771f\u6b63\u4ef7\u503c\u4e0d\u5728\u4e8e\u201c\u8fde\u4e0a\u6240\u6709\u6570\u636e\u6e90\u201d\uff0c\u800c\u5728\u4e8e\u5b83\u8ba9\u4f01\u4e1a\u9996\u6b21\u6709\u4e86\u4e00\u4e2a\u53ef\u5ba1\u8ba1\u3001\u53ef\u6388\u6743\u3001\u53ef\u8ffd\u8e2a\u7684AI\u4e0a\u4e0b\u6587\u6cbb\u7406\u6846\u67b6\u3002\u4f46\u5766\u767d\u8bf4\uff0c\u5b83\u73b0\u5728\u7684\u7248\u672c\u66f4\u50cf\u662f\u201c\u4e00\u4e2a\u806a\u660e\u7684\u6570\u636e\u7ba1\u9053\u201d\uff0c\u8ddd\u79bb\u201c\u516c\u53f8\u5927\u8111\u201d\u8fd8\u5f88\u8fdc\u3002\u65b9\u5411\u6b63\u786e\uff0c\u5de5\u7a0b\u843d\u5730\u4ecd\u9700\u8865\u4e0a\u4e00\u81f4\u6027\u3001\u65f6\u6548\u6027\u548c\u81ea\u52a8\u5316\u5ba1\u6279\u4e09\u5757\u5173\u952e\u62fc\u56fe\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\">FlowTask 2.0<\/span>\n                <\/div>\n<div class=\"comment-content\">Company Brain for AI agents, Fragmented communication and data of a company which is left on channels Emails, Slacks, WhatsApp and LinkedIn connect it all in one place with approval layer attach so personal and works chats don&#8217;t gets mixed and connect it with any ai agents simultaneously, where records are keep getting updated minutes by minutes and so AI agents are getting updated as well so use AI agents with less cost of context and don&#8217;t have to repeat.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>A company brain for AI agents (the question is why)<\/p>\n<p>So I posted one simple question on Reddit about a frustration I have while using AI.<\/p>\n<p>got 8.5k views in 5hrs with 45+ comments<\/p>\n<p>Almost nobody said the problem didn&#8217;t exist, instead everyone shared their own workaround.<\/p>\n<p>Some use Chatgpt Projects. Some maintain <a href=\"http:\/\/PROJECT.md\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PROJECT.md<\/a> or <a href=\"http:\/\/CLAUDE.md\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">CLAUDE.md<\/a> files.<\/p>\n<p>Some build knowledge graphs. Some create automation pipelines with n8n or Zapier.<\/p>\n<p>Some use RAG connectors and custom memory systems.<\/p>\n<p>The pattern was surprisingly consistent.<\/p>\n<p>The real problem is Claude doesn&#8217;t know what&#8217;s happening minute to minute people said use an API or connect it manually. But then you&#8217;re still feeding it everything including the useless stuff so we added an approval layer you decide what goes to AI combined with MCP, no need for Make, Zapier, or n8n it just works.<\/p>\n<\/p>\n<p>And what&#8217;s the output<\/p>\n<p>AI agents 10x better, knows what&#8217;s happening minutes by minutes + no daily updates<\/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>the everyone independently duct-taped the same fix pattern in your Reddit post says it all that&#8217;s always a sign the fix belongs in the platform, not everyone&#8217;s personal setup. genuinely curious: does the approval layer stay a one-time setup per source, or does it become an ongoing queue someone has to clear daily?<\/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\/@bibhash_dutta\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bibhash_dutta<\/a>&nbsp;the approval layer for whatsapp and slack is smart to block personal chats but if a team sends 100s of messages a day. does someone actually have to sit there and manually approve every single one before the agent sees 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>Very Happy to announce FlowTask on Today&#8217;s Product Launch. After working for months on out SaaS we have finally launched FlowTask 2.0 which has much better Operations Management, now comes with a larger AI context for companies with large number of employees. Hope ya&#8217;ll enjoy it!! Happy Coding.<\/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>I like that you&#8217;re tackling the context problem instead of trying to cram more data into the model. Congrats on the launch!<\/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>Congrats on the launch. The approval layer is the part I like most \u2014 most tools that pull from Slack and WhatsApp just take everything, so personal and work chats get mixed. Letting you decide what actually enters the brain is a smart call.<\/p>\n<p>One thing I keep thinking about: when the memory updates every few minutes from so many channels, how do you handle facts that go stale or contradict each other? Like a decision made in Slack last week that gets reversed today \u2014 does the brain catch that on its own, or does someone have to approve the change?<\/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>The &#8220;approval layer so personal stays personal&#8221; line is the part I&#8217;d want to understand more. Once Slack, WhatsApp and Gmail are all feeding the same brain and any agent can read from it via MCP, is the approval\/redaction happening per-source before it ever enters the brain, or per-agent at query time? Asking because those give very different guarantees \u2014 one keeps sensitive stuff out entirely, the other trusts every agent to respect scope once it&#8217;s already in.<\/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>This is something I say to every C-level I talk to: if a person&#8217;s knowledge doesn&#8217;t become the company&#8217;s knowledge, the hire was meaningless. Most teams lose that expertise the moment someone&#8217;s out sick or leaves. Turning scattered Slack, email, and WhatsApp threads into one living memory solves something I run into constantly. Well done.<\/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\">Congrats on the launch; a really interesting project. I\u2019m interested in the approval layer specifically as this is something I\u2019ve been wrestling with in my own business. <\/p>\n<p>Controlling what the model gets is definitely a critical factor in success on company implementations. So, I\u2019m curious; how does that work in practice? <\/p>\n<p>If I\u2019m approving what gets through, that\u2019s a queue where I\u2019m the gatekeeper and quite possibly the blocker. No one wants that admin role if they can help it. Is it rules based? Does it learn what you keep rejecting or is it a manual job?<\/p>\n<p>What happens if someone stops approving things for a fortnight? Does the agent know it\u2019s working off a stale picture? Or does it carry on regardless, confidently working from its outdated view?<\/p><\/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>The approval layer on top of the ingestion pipeline is what makes this safe to use with real company data \u2014 without it, connecting WhatsApp and Slack is effectively giving every AI session access to every conversation that got pulled in. The thing I want to understand is the MCP server lifecycle: when an agent session connects to the FlowTask MCP, does the knowledge snapshot stay consistent for the duration of that session, or can it update mid-session as the brain ingests new messages? That matters for multi-step workflows where context drift mid-task would break the run.<\/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>the staleness questions above are the obvious concern, but there&#8217;s a related one nobody&#8217;s asked yet: if Claude and ChatGPT are both reading from the same brain at the same moment via MCP, and the brain is updating minute by minute, could two agents working in parallel end up citing two different &#8216;current&#8217; answers to the same question just because one queried a few minutes before an update landed and the other after? not a bug exactly, just a consistency question that matters more once you&#8217;ve got multiple agents acting on the same context instead of one person reading 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\/@omri_ben_shoham1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@omri_ben_shoham1<\/a>&nbsp;good catch, and I&#8217;d push it one step further &#8211; it&#8217;s not just two agents citing different facts, it&#8217;s two agents acting on different facts. if Claude reads the brain before an update and goes and sends an email based on the old state while ChatGPT reads it a minute later and takes a different action based on the new state, you don&#8217;t get a wrong answer sitting in a chat window, you get two real-world actions that contradict each other and nobody notices until someone has to clean it up. curious if there&#8217;s any kind of version stamp on a read, so at least you could trace which snapshot an action was taken against after the fact<\/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>&#8220;No more stale <a href=\"http:\/\/CLAUDE.md\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">CLAUDE.md<\/a> files&#8221; is the right problem to name \u2014 we run agents across eight repos and those files rot faster than anyone gets around to updating them.<\/p>\n<p>The thing I&#8217;d worry about with an always-updated memory is a quieter kind of staleness: a fact that was true the day it was written and silently stopped being true when the code changed underneath it. Nothing in the original Slack thread ever says it expired. Does the approval layer carry any notion of a fact aging out, or is it mainly a gate on what gets in?<\/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! \ud83d\udc4f<\/p>\n<p>Curious\u2014what&#8217;s the one workflow your users keep coming back to?<\/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>both the Google Workspace and Slack connectors are broken which means there&#8217;s no way to actually proceed into the app and try it out. bit disappointing and not a great experience for new potential customers<\/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<\/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\/D375A2G57STQLU\" class=\"app-title\">Superunit<\/a><\/p>\n<div class=\"one-liner\">AI agents that verify employment by phone, email &#038; fax <\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">125<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Superunit\u901a\u8fc7AI\u667a\u80fd\u4f53\uff08Ava\uff09\u81ea\u52a8\u62e8\u6253\u7535\u8bdd\u3001\u53d1\u9001\u90ae\u4ef6\u548c\u4f20\u771f\uff0c\u66ff\u4ee3\u4eba\u5de5\u5b8c\u6210\u5c31\u4e1a\u6838\u5b9e\u6d41\u7a0b\uff0c\u89e3\u51b3\u80cc\u666f\u7b5b\u67e5\u3001\u623f\u8d37\u7533\u8bf7\u3001\u79df\u8d41\u5ba1\u6838\u7b49\u573a\u666f\u4e2dHR\u90e8\u95e8\u201c\u63a5\u7535\u8bdd-\u7b49\u56de\u7535-\u8f6c\u4ea4\u201d\u7684\u7e41\u7410\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\/ca8a48f2-ee1b-4057-9036-8f6531d91e2d.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\/66a03cbc-89a5-40f2-80e0-c491686c5911.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\/0529fea9-98d7-4efe-b442-31c7132d3fdc.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\/5de0784c-eaee-4275-8bb7-c0e0db662ae8.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\/b3fd169b-ee6c-4126-b7e8-381276a233fa.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/ZbJR4CiSXfk\"><source src=\"https:\/\/youtu.be\/ZbJR4CiSXfk\" 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\">Artificial Intelligence<\/span><br \/>\n            <span class=\"tag\">Human Resources<\/span><br \/>\n            <span class=\"tag\">Banking<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u4ee3\u7406<\/span><br \/>\n            <span class=\"tag\">\u5c31\u4e1a\u80cc\u666f\u6838\u5b9e<\/span><br \/>\n            <span class=\"tag\">\u81ea\u52a8\u5316\u547c\u53eb<\/span><br \/>\n            <span class=\"tag\">\u4eba\u529b\u8d44\u6e90\u6d41\u7a0b<\/span><br \/>\n            <span class=\"tag\">\u62b5\u62bc\u8d37\u6b3e\u5ba1\u6838<\/span><br \/>\n            <span class=\"tag\">\u79df\u8d41\u5ba1\u67e5<\/span><br \/>\n            <span class=\"tag\">\u6570\u636e\u9a8c\u8bc1<\/span><br \/>\n            <span class=\"tag\">\u7535\u8bdd\u673a\u5668\u4eba<\/span><br \/>\n            <span class=\"tag\">\u4f20\u771f\u81ea\u52a8\u5316<\/span><br \/>\n            <span class=\"tag\">\u5408\u89c4\u6838\u67e5<\/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\u6ce8AI\u901a\u8bdd\u662f\u5426\u660e\u793a\u8eab\u4efd\uff08\u662f\uff09\u53caHR\u5bf9AI\u7684\u4fe1\u4efb\u95ee\u9898\uff08\u63d0\u4f9b\u7b7e\u7f72\u6388\u6743\u51fd\/\u8f6c\u63a5\u4eba\u5de5\uff09\u3002\u8d28\u759130%\u672a\u5b8c\u6210\u6848\u4f8b\u7684\u5361\u70b9\uff08\u96c7\u4e3b\u5931\u8054\/\u9700\u4eba\u5de5\u4ecb\u5165\uff09\uff0c\u5e76\u62c5\u5fe7\u8bed\u97f3\u514b\u9686\u98ce\u9669\uff08\u9700\u9a8c\u8bc1\u56de\u8c03\u673a\u5236\uff09\u3002\u8d5e\u8d4f\u89e3\u51b3HR\u6838\u5b9e\u201c\u7075\u9b42\u6298\u78e8\u201d\u7684\u5b9e\u9645\u4ef7\u503c\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                Superunit\u7684\u5b9a\u4f4d\u7cbe\u51c6\u800c\u52a1\u5b9e\u2014\u2014\u5b83\u6ca1\u6709\u5984\u60f3\u7528AI\u98a0\u8986\u6574\u4e2a\u62db\u8058\u6216\u91d1\u878d\u6d41\u7a0b\uff0c\u800c\u662f\u9009\u62e9\u4e86\u5176\u4e2d\u6700\u67af\u71e5\u3001\u6700\u53cd\u4eba\u6027\u3001\u4f46\u884c\u4e1a\u5171\u8bc6\u5ea6\u6700\u9ad8\u7684\u201c\u87ba\u4e1d\u9489\u73af\u8282\u201d\uff1a\u5c31\u4e1a\u6838\u5b9e\u3002125\u7968\u7684\u793e\u533a\u70ed\u5ea6\u4e0d\u7b97\u4eae\u773c\uff0c\u4f46200k\u6b21\u5b8c\u6210\u91cf\u548c70%\u7684\u6b21\u65e5\u5b8c\u6210\u7387\u8db3\u591f\u8bf4\u660e\u4ea7\u54c1\u5df2\u6709\u5f39\u836f\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ea7\u54c1\u6700\u5927\u7684\u4ef7\u503c\u951a\u70b9\u5728\u4e8e\u201c\u5403\u6389\u810f\u6d3b\u201d\uff1aHR\u90e8\u95e8\u624b\u52a8\u63a5\u7535\u8bdd\u3001\u7b49\u4f20\u771f\u3001\u7559\u8bed\u97f3\u90ae\u4ef6\uff0c\u8fd9\u79cd\u4f4e\u6548\u6d88\u8017\u5728\u5927\u4f01\u4e1a\u5408\u89c4\u6d41\u7a0b\u4e2d\u957f\u671f\u5b58\u5728\u3002\u800cAva\u7684\u81ea\u52a8\u5316\u5e76\u975e\u7b80\u5355\u5916\u547c\uff0c\u800c\u662f\u5d4c\u5165\u4e86\u201c\u7814\u7a76-\u62e8\u6253-\u5bfc\u822a\u7535\u8bdd\u6811-\u4f20\u771f-\u8f93\u51fa\u5ba1\u8ba1\u62a5\u544a\u201d\u7684\u5b8c\u6574\u95ed\u73af\u3002\u5bf9\u80cc\u666f\u8c03\u67e5\u516c\u53f8\u548c\u62b5\u62bc\u8d37\u6b3e\u65b9\u6765\u8bf4\uff0c\u8fd9\u76f4\u63a5\u8f6c\u5316\u4e3a\u4eba\u5747\u4ea7\u80fd\u63d0\u5347\u548c\u5ba2\u6237\u4f53\u9a8c\u8dc3\u8fc1\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u503c\u5f97\u8b66\u60d5\u7684\u662f\uff0c\u533b\u7597\u533b\u4fdd\u884c\u4e1a\u7684\u9a8c\u8bc1\u5177\u6709\u4e25\u683c\u76d1\u7ba1\uff08\u5f55\u97f3\/\u8f6c\u5f55\u9700\u6388\u6743\u8bb8\u53ef\uff09\uff0c\u5ba2\u6237\u8bc4\u8bba\u5df2\u660e\u786e\u6307\u51fa\u201c\u901a\u8bdd\u4e2d\u63d0\u53ca\u60a3\u8005\u59d3\u540d\u5373\u89e6\u53d1\u6cd5\u89c4\u8bb0\u5f55\u201d\u3002Superunit\u660e\u786e\u6682\u4e0d\u6d89\u8db3\u8be5\u9886\u57df\uff0c\u8bf4\u660e\u5176\u5bf9\u5408\u89c4\u590d\u6742\u5ea6\u6709\u8ba4\u77e5\uff0c\u4f46\u8fd9\u610f\u5473\u7740TAM\u4e0a\u9650\u53d7\u9650\u2014\u2014\u76ee\u524d\u4f9d\u8d56\u80cc\u666f\u8c03\u67e5\u3001\u91d1\u878d\u79df\u8d41\u7b49\u76f8\u5bf9\u5bbd\u677e\u9886\u57df\uff0c\u4e00\u65e6\u884c\u4e1a\u666e\u904d\u63a8\u884cAI\u76d1\u7ba1\u6cd5\u6848\uff0c\u7c7b\u4f3c\u4ea7\u54c1\u53ef\u80fd\u9996\u5148\u88ab\u8981\u6c42\u589e\u52a0\u201c\u900f\u660e\u64ad\u62a5+\u5b9e\u65f6\u9a8c\u8bc1\u7801\u201d\u4ea4\u4e92\u5c42\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u53e6\u4e00\u4e2a\u98ce\u9669\u70b9\u662f\u5b89\u5168\u9006\u5411\uff1a\u82e5\u514b\u9686Ava\u7684\u811a\u672c\u5bf9HR\u8fdb\u884c\u793e\u5de5\u653b\u51fb\uff0c\u5e73\u53f0\u7f3a\u4e4f\u5373\u65f6\u9632\u4f2a\u673a\u5236\uff08\u5982\u56de\u8c03\u9a8c\u8bc1\u6216\u4e00\u952e\u67e5\u8be2\u5165\u53e3\uff09\uff0c\u5c31\u4f1a\u4ece\u4e00\u4e2a\u6548\u7387\u5de5\u5177\u6f14\u53d8\u6210\u4fe1\u606f\u6cc4\u9732\u7684\u655e\u53e3\u3002\u521b\u59cb\u4eba\u56de\u590d\u201c\u5efa\u8baeHR\u8981\u6c42\u63d0\u4f9b\u7b7e\u7f72\u6388\u6743\u51fd\u201d\u8fd9\u4e00\u9632\u5fa1\u59ff\u6001\uff0c\u53cd\u800c\u900f\u9732\u51fa\u4ea7\u54c1\u76ee\u524d\u66f4\u591a\u4f9d\u8d56\u4eba\u5de5\u8b66\u89c9\uff0c\u800c\u975e\u6280\u672f\u5c42\u9762\u7684\u53ef\u4fe1\u901a\u4fe1\u534f\u8bae\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u6574\u4f53\u6765\u770b\uff0cSuperunit\u662f\u5728\u4e00\u4e2a\u201c\u4eba\u4eba\u90fd\u77e5\u9053\u75bc\uff0c\u4f46\u6ca1\u4eba\u613f\u505a\u5927\u201d\u7684\u7f1d\u9699\u5e02\u573a\u91cc\uff0c\u7528AI\u505a\u4e86\u6807\u51c6\u5316\u7684\u5de5\u7a0b\u5b9e\u73b0\u3002\u5176\u62a4\u57ce\u6cb3\u4e0d\u5728\u58c1\u5792\uff0c\u800c\u5728\u4f53\u91cf\uff1a\u505a\u5f97\u8d8a\u4e45\uff0c\u79ef\u7d2f\u7684\u7535\u8bdd\u6811\u6a21\u677f\u3001\u96c7\u4e3b\u8054\u7cfb\u4eba\u5e93\u3001\u4f20\u771f\u7ebf\u8def\u8d28\u91cf\u8d8a\u9ad8\u3002\u5982\u679c\u540e\u7eed\u80fd\u5c06\u5df2\u5b8c\u6210\u9a8c\u8bc1\u7684\u96c7\u4e3b\u4fe1\u606f\u8131\u654f\u540e\u5f62\u6210\u52a8\u6001\u201c\u53ef\u4fe1\u96c7\u4e3b\u56fe\u8c31\u201d\uff0c\u4ea7\u54c1\u5c06\u4e0d\u4ec5\u662f\u4e00\u4e2a\u5de5\u5177\uff0c\u66f4\u53ef\u80fd\u6210\u4e3a\u884c\u4e1a\u9a8c\u8bc1\u57fa\u7840\u8bbe\u65bd\u3002\u4f46\u5728\u6b64\u4e4b\u524d\uff0c\u5408\u89c4\u900f\u660e\u5ea6\u548c\u53cd\u6b3a\u8bc8\u4fe1\u4efb\u6784\u5efa\uff0c\u662f\u51b3\u5b9a\u5b83\u80fd\u98de\u591a\u9ad8\u7684\u4e24\u7ffc\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\">Superunit<\/span>\n                <\/div>\n<div class=\"comment-content\">Every time someone gets hired, applies for a mortgage, or leases an apartment, someone has to confirm they actually worked where they said they did. That means millions of calls, emails, faxes (yes, in 2026), to HR and payroll departments. Superunit&#8217;s AI agents do all of that from start to finish. They research, call, email, fax and handle documents until the verification is done.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Peter, the fax detail is the part nobody outside these workflows believes. Healthcare runs the same rails, and the queue shaped exactly like yours is insurance benefit and eligibility verification, which sits directly on whether a practice gets paid.<\/p>\n<\/p>\n<p>What changes there is the content of the call. The moment your agent says a patient name to a payer, the recording, the transcript and the auditable result are all regulated records, and whoever holds them needs a signed agreement before a compliance team approves the pilot. That requirement stops this kind of automation more often than the phone tree does.<\/p>\n<\/p>\n<p>Have you pointed Ava at payer calls yet, and could a customer have the recording and transcript dropped so only the result survives?<\/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\/@clemente_lopez1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@clemente_lopez1<\/a>&nbsp;I know, AI running faxes feels very dystopian right? But it&#8217;s about 2% of companies require it that way. I&#8217;ve definitely heard of this more in healthcare (have you heard of Tennr?). I didn&#8217;t know that about the regulatory hurdle with the patient name &#8211; I can imagine it being a compliance nightmare. I do believe with HIPAA compliance that recordings and transcripts don&#8217;t need to survive for the result to, but not 100% sure. We&#8217;re not planning to enter that space in the near future. <\/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>Hey Product Hunt \ud83d\udc4b I&#8217;m Peter, co-founder of Superunit.<\/p>\n<\/p>\n<p>Every time someone gets hired, applies for a mortgage, or signs a lease, somebody has to confirm they actually worked where they said they did. In practice that&#8217;s millions of phone calls a year to HR and payroll \u2014 leaving voicemails, sending emails, sending faxes (yes, in 2026), waiting days for a callback, getting transferred, leaving another voicemail.<\/p>\n<\/p>\n<p>Background screeners, lenders, and property managers hire whole teams to do this. It&#8217;s tedious, expensive, and turnover is brutal because the work is mind-numbing.<\/p>\n<\/p>\n<p>Tbh we didn&#8217;t set out to fix this. We went through YC&#8217;s S24 batch working on something else entirely (in the accounting space), and at Demo Day it landed with a thud, which sucked. By the end of the year we made the  call to rip it all out and start over.<\/p>\n<\/p>\n<p>The restart came from a chance conversation: a product leader at Checkr told us employment verifications were &#8220;soul-crushing.&#8221; We got curious, started building in January 2025, and haven&#8217;t looked back.<\/p>\n<\/p>\n<p>So we built Ava (not the most original agent name, I know\u2026), an AI agent that runs employment verifications end to end. She does the contact research, calls HR and payroll, navigates phone trees, sends the emails and faxes, handles compliance, and publishes a clean, auditable result back to your system. <\/p>\n<\/p>\n<p>In the past year we&#8217;ve made 1.5M calls and emails to complete 200k verifications across 17 countries for 50+ customers, including some of the largest background screeners and lenders in the US. 70% completed, most back in under a day.<\/p>\n<\/p>\n<p>Building this also gave us a look at the verification layer almost nobody gets to see, so we&#8217;re publishing some of it today in our <strong>State of Employment Verification 2026<\/strong> report. One finding that surprised even us: when a verification routes through a named third-party platform, ~73% of the time it&#8217;s a single company. More in the report \u2192 <a href=\"http:\/\/superunit.com\/launch\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">superunit.com\/launch<\/a><\/p>\n<\/p>\n<p>Happy to answer anything, how Ava handles a live call, the compliance side, the international data, whatever you&#8217;re curious about. Ask away, excited to be here.  \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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@petersuperunit\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@petersuperunit<\/a>&nbsp;the 73% stat is the kind of thing that only shows up when you&#8217;ve actually run the volume nobody guesses that from outside. 70% completion in under a day for something that used to mean voicemail-tag for a week is a real number, not a marketing one. curious about the 30% that don&#8217;t complete fast is that mostly employers who genuinely can&#8217;t be reached, or does Ava hit a wall where a human has to take over (weird phone tree, someone insists on a callback, etc.)?<\/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\/@petersuperunit\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@petersuperunit<\/a>&nbsp;glad to see AI being applied to this workflow!<\/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 idea is great! one thing I&#8217;m wondering about is how the calls work. does it clarify its an AI?<\/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\/@ethan_cheng\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ethan_cheng<\/a>&nbsp;It does! <\/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 voice-phishing sounding this convincing now, I&#8217;d actually worry less about HR being cautious of you and more about the reverse: what stops a bad actor from cloning Ava&#8217;s script and running the same kind of call to social-engineer real employee data out of an unsuspecting HR rep, using your legitimacy as cover? is there a way for the person on the other end to verify a call is genuinely from you, like a callback number or portal link, rather than just trusting whoever calls and says they&#8217;re an automated verification agent?<\/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>Great idea and product for solving an everyday problem.  As a business owner, I would get verification phone calls (and even faxes), all the time.  Businesses want to respond, to help employees with their loans, rentals, etc, but the existing system was very cumbersome and annoying.  Anything that streamlines and simplifies it is valuable, great use of technology.<\/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\/@howard_lind\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@howard_lind<\/a>&nbsp;Thanks for the comment, appreciate that you&#8217;ve felt this before! <\/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, sounds like you&#8217;ve made some good progress.  Question &#8211; what happens to a verification you can&#8217;t complete?  Does that happen often?<\/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\/@mike_stachowiak\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@mike_stachowiak<\/a>&nbsp;Great question! We have about a 70% completion rate directly from the employers we contact. If we can&#8217;t get it from them most commonly we&#8217;ll collect proof docs from the applicants (e.g. W2s, paystubs). Another common path is to get it from a third party that holds the payroll info (e.g. Equifax). Sometimes we&#8217;ll return it to our clients for them to give it a shake. And sometimes it&#8217;s just not gettable (e.g. business no longer exists). <\/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 your launch! Do receivers of the call like HR or employers get cautious cause its an AI Agent on the phone and don&#8217;t want to confirm sensitive information?<\/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\/@jacklyn_i\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@jacklyn_i<\/a>&nbsp;Yes they do! In those cases we always let them know that we have a signed release from the applicant that we&#8217;re happy to send over by email. Or that they have the option to speak to a live person on our team if they&#8217;d like. <\/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\/LLNQ2MGTZXMQDH\" class=\"app-title\">Cercle<\/a><\/p>\n<div class=\"one-liner\">The bat signal for your closest friends.<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">121<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Cercle \u662f\u4e00\u6b3e\u8ba9\u7528\u6237\u901a\u8fc7\u8f7b\u91cf\u7ea7\u5fc3\u60c5\u7b7e\u5230\u66f4\u65b0\u684c\u9762\u5c0f\u7ec4\u4ef6\uff0c\u76f4\u63a5\u5411\u5bc6\u53cb\u4f20\u9012\u72b6\u6001\u4e0e\u9700\u6c42\u3001\u5373\u65f6\u7834\u89e3\u5b64\u72ec\u4e0e\u56de\u907f\u5f0f\u6c89\u9ed8\u7684\u4fe1\u4efb\u578b\u5c0f\u5708\u5b50\u793e\u4ea4\u5de5\u5177\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\/84a58c7c-fbd1-45ba-8cd5-c8504834f367.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\/18d57c81-8763-45c5-a658-a331d43da22d.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\/65963214-6792-4466-882a-e1ff0b099e6d.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\/b0c2b56f-eda1-4178-a94f-77c29bc28399.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\/8d4e7356-1c9d-485d-9bc2-85accec9cfbb.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\/3a2da1d8-c164-4478-b20b-bb2dc36a3647.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\/aae2a79f-7ca4-4eda-89a3-e125abc9831f.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\/09b7024b-54cd-499b-b029-2cfdb2dcd44e.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\">Health &#038; Fitness<\/span><br \/>\n            <span class=\"tag\">Messaging<\/span><br \/>\n            <span class=\"tag\">Social Media<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u5fc3\u60c5\u65e5\u5fd7<\/span><br \/>\n            <span class=\"tag\">\u5bc6\u53cb\u5708<\/span><br \/>\n            <span class=\"tag\">\u684c\u9762\u5c0f\u7ec4\u4ef6<\/span><br \/>\n            <span class=\"tag\">\u60c5\u7eea\u611f\u77e5<\/span><br \/>\n            <span class=\"tag\">\u5b64\u72ec\u75c7<\/span><br \/>\n            <span class=\"tag\">\u793e\u4ea4\u8f7b\u91cf\u8fde\u63a5<\/span><br \/>\n            <span class=\"tag\">\u60c5\u611f\u4e92\u52a9<\/span><br \/>\n            <span class=\"tag\">\u7b7e\u5230\u673a\u5236<\/span><br \/>\n            <span class=\"tag\">\u9690\u79c1\u8fb9\u754c<\/span><br \/>\n            <span class=\"tag\">\u5c0f\u5708\u5b50\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\u5173\u6ce8\u4e92\u60e0\u95e8\u69db\u5bfc\u81f4\u6c89\u5bc2\u8005\u88ab\u52a8\u8131\u79bb\uff1b\u9ad8\u9891\u4f4e\u843d\u7684\u4fe1\u53f7\u566a\u97f3\u524a\u5f31\u8b66\u89c9\uff1b\u9694\u79bb\u504f\u597d\uff08\u60f3\u72ec\u5904\uff09\u4e0e\u5c0f\u7ec4\u4ef6\u901a\u77e5\u7684\u77db\u76fe\uff1b\u957f\u671f\u6c89\u9ed8\u662f\u5426\u5e94\u4f5c\u4e3a\u4fe1\u53f7\uff1bAndroid\u5e73\u53f0\u7f3a\u5931\uff1b\u4e60\u60ef\u517b\u6210\u5bf9\u6301\u7eed\u4f7f\u7528\u7684\u6311\u6218\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                Cercle \u7684\u7acb\u610f\u8ba9\u4eba\u65e0\u6cd5\u5ffd\u89c6\u2014\u2014\u5b83\u75db\u51fb\u4e86\u5f53\u4ee3\u793e\u4ea4\u91cc\u6700\u865a\u4f2a\u7684\u6e29\u67d4\uff1a\u7528\u201c\u6015\u6253\u6270\u201d\u5305\u88c5\u7684\u51b7\u843d\uff0c\u7528\u201c\u5927\u5bb6\u90fd\u5f88\u5fd9\u201d\u63a9\u76d6\u7684\u65e0\u89c6\u3002\u628a\u201c\u4f60\u8fd8\u597d\u5417\uff1f\u201d\u8fd9\u4e2a\u9ad8\u6c9f\u901a\u6210\u672c\u95ee\u9898\u538b\u7f29\u6210\u4e00\u6b21\u70b9\u51fb\uff0c\u653e\u5230\u684c\u9762\u9996\u9875\uff0c\u8ba9\u53cb\u8c0a\u4ece\u731c\u6d4b\u53d8\u6210\u89c6\u89c9\u4fe1\u53f7\uff0c\u8fd9\u4e2a\u8bbe\u8ba1\u76f4\u89c9\u662f\u5bf9\u7684\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u771f\u6b63\u81f4\u547d\u7684\u4e0d\u662f\u5b83\u89e3\u51b3\u4e86\u4ec0\u4e48\u573a\u666f\uff0c\u800c\u662f\u8fd9\u6761\u8bc4\u8bba\u91cc\u53cd\u590d\u88ab\u6495\u5f00\u7684\u88c2\u75d5\uff1a\u4e92\u60e0\u95e8\u69db\u3002\u4ea7\u54c1\u7528\u201c\u4f60\u5fc5\u987b\u5148\u7b7e\u5230\u624d\u80fd\u770b\u89c1\u670b\u53cb\u7684\u72b6\u6001\u201d\u6765\u7ef4\u6301\u6d3b\u8dc3\u5ea6\uff0c\u8fd9\u542c\u8d77\u6765\u5f88\u516c\u5e73\uff0c\u4f46\u5b83\u7ed1\u67b6\u4e86\u90a3\u6279\u6700\u9700\u8981\u88ab\u770b\u89c1\u7684\u4eba\u2014\u2014\u90a3\u4e9b\u5df2\u7ecf\u6c89\u9ed8\u591a\u65e5\u3001\u70b9\u5f00App\u5374\u6ca1\u6709\u529b\u6c14\u5b8c\u6210\u4e00\u6b21\u7b7e\u5230\u7684\u7528\u6237\u3002\u4ed6\u4eec\u4f9d\u7136\u88ab\u9501\u5728\u95e8\u5916\uff0c\u6084\u65e0\u58f0\u606f\u3002\u800c\u53e6\u4e00\u8fb9\uff0c\u9ad8\u9891\u4f4e\u843d\u8005\u7684\u4fe1\u53f7\u4f1a\u88ab\u670b\u53cb\u53ef\u89c6\u5316\u4e3a\u201c\u5e38\u6001\u201d\uff0c\u8d77\u521d\u7684\u5173\u5207\u53d8\u6210\u6ed1\u8fc7\u56fe\u6807\u65f6\u7684\u9ebb\u6728\u3002\u4f60\u731c\u5bf9\u4e86\uff0c\u201c\u60f3\u72ec\u5904\u201d\u8fd9\u4e2a\u6700\u8bda\u5b9e\u7684\u9009\u9879\uff0c\u6700\u7ec8\u8fd8\u662f\u539f\u5c01\u4e0d\u52a8\u5730\u63a8\u5230\u4e86\u5bf9\u65b9\u684c\u9762\u4e0a\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u5982\u679c\u628aCercle\u770b\u4f5c\u201c\u60c5\u611f\u7684\u6697\u53f7\u7cfb\u7edf\u201d\uff0c\u5b83\u786e\u5b9e\u964d\u4f4e\u4e86\u6c42\u52a9\u7684\u597d\u5947\u5fc3\u548c\u5f00\u573a\u7684\u538b\u529b\u3002\u4f46\u6697\u53f7\u7cfb\u7edf\u7684\u6096\u8bba\u5728\u4e8e\uff1a\u5b83\u4f9d\u8d56\u53cc\u65b9\u540c\u65f6\u542f\u7528\u4fe1\u53f7\u4eea\u624d\u80fd\u4ea4\u6362\u610f\u4e49\u3002\u4e00\u65e6\u67d0\u4e00\u8fb9\u65ad\u7535\uff0c\u6574\u4e2a\u7f51\u7edc\u5c31\u53d8\u6210\u7a7a\u5fc3\u7684\u3002\u76ee\u524d\u4ea7\u54c1\u5bf9\u6c89\u9ed8\u548c\u566a\u97f3\u7684\u5355\u5411\u5904\u7406\uff0c\u8bf4\u660e\u5b83\u8fd8\u6ca1\u6709\u60f3\u6e05\u695a\u201c\u8c01\u6765\u652f\u4ed8\u95e8\u69db\u201d\uff0c\u4e5f\u6ca1\u6709\u60f3\u6e05\u695a\u201c\u4f20\u611f\u5668\u5931\u7075\u65f6\uff0c\u7cfb\u7edf\u8981\u4e0d\u8981\u4e3b\u52a8\u62a5\u8b66\u201d\u3002\u8fd9\u4e0d\u662f\u4e00\u4e2a\u529f\u80fd\u7f3a\u9677\uff0c\u800c\u662f\u5bf9\u5b64\u72ec\u95ee\u9898\u672c\u8d28\u7406\u89e3\u7684\u6df1\u5ea6\u95ee\u9898\u3002\n            <\/p>\n<p class=\"ai-content\">\n                Cercle\u662f\u4f53\u9762\u7684\u3001\u6709\u6e29\u5ea6\u7684\u3001\u529f\u80fd\u5b8c\u6210\u5ea6\u4e0d\u4f4e\u7684\u3002\u4f46\u5b83\u76ee\u524d\u6700\u50cf\u4e00\u5ea7\u7cbe\u81f4\u7684\u706f\u5854\u2014\u2014\u7167\u4eae\u4e86\u90a3\u4e9b\u5df2\u7ecf\u7ad9\u5728\u4e00\u8d77\u3001\u53ea\u662f\u6ca1\u8bf4\u8bdd\u7684\u4eba\u3002\u800c\u4f60\u771f\u6b63\u8981\u76d6\u7684\uff0c\u662f\u4e00\u5ea7\u5728\u66b4\u98ce\u96e8\u91cc\u4f9d\u7136\u80fd\u641c\u7d22\u751f\u547d\u4fe1\u53f7\u7684\u96f7\u8fbe\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\">Cercle<\/span>\n                <\/div>\n<div class=\"comment-content\">Cercle is conquering the loneliness epidemic by bringing back connections with the people that matter most. Check in with yourself and share your mood with your close friends or your entire Cercle. Take the guesswork out of your friendships, know how they&#8217;re feeling before that phone call or text. Your friends&#8217; mood updates live on your home-screen widget, so you know who needs you before they have to ask. Built after watching a series of close friends live and struggle in silence<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Sheeta, the founding story has a detail the rest of the thread hasn&#8217;t picked up. Your friend went quiet for ten months because she didn&#8217;t have it in her to have a conversation. That same person also doesn&#8217;t have it in her to complete a daily check-in.<\/p>\n<\/p>\n<p>Which is why the reciprocal gate is the thing I&#8217;d pressure-test. You offered it to Irene as the retention answer and it clearly works for the engaged middle. But it&#8217;s a lock, and the people it locks out are the tail the app was built for. Three weeks into a bad stretch someone opens Cercle, gets asked to log first, and closes it. Her friends see nothing, and she sees nothing either, on the day it matters most.<\/p>\n<\/p>\n<p>I build in a different category, in-the-moment support for parents, where the user is depleted by definition, and the rule I keep coming back to is that any gate in front of the thing that helps gets paid by whoever is worst off. Mutuality is a fair principle when everyone is fine.<\/p>\n<\/p>\n<p>Two things I&#8217;d want to know. Does lighting the bat signal bypass the gate in both directions, so a low mood logged after a long silence still reaches friends who also haven&#8217;t logged lately? And do you treat prolonged silence as a signal in itself? In your own story the ten months was the message, but a mood log renders silence as no data.<\/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\/@narek_keshishyan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@narek_keshishyan<\/a>&nbsp;Hi Narek! Users actually showed they were more likely to log a negative mood to their friend on Cercle because they didn&#8217;t have it in them to have a conversation. The check in takes seconds while a conversation can go from minutes to hours. <\/p>\n<p>Lighting the bat signal notifies all your friends to &#8220;check in and see how your friends are doing&#8221;. This nudges people to see how their friends are doing without telling the explicitly that someone is struggling. If someone doesn&#8217;t log for more than 3 days, the app checks in and asks them to log. <\/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\">My friend went through extreme depression and didn&#8217;t speak to us for 10 months. Lack of communication made it hard to know what they need. Countless texts and calls went out, but we never got a response. Months later she finally reached out saying &#8220;I wanted to tell you guys what&#8217;s going on but I didn&#8217;t have it in me to have a conversation. I just wanted to light my bat signal that I am struggling and have you guys know without needing to explain until I am ready&#8221;. That&#8217;s when it hit me. <\/p>\n<p>We watch our friends on social media, send a like and pretend it&#8217;s connection. We avoid conversations and say &#8220;maybe they&#8217;re busy&#8221;, &#8220;what if they aren&#8217;t in a place to chat&#8221;, &#8220;maybe now isn&#8217;t a good time to reach out&#8221; but in reality we are dressing up avoidance as consideration. <\/p>\n<p>WHAT IF WE TOOK THIS CONFUSION AND PRESSURE OFF FRIENDSHIPS AND STILL HAD A WAY TO BUILD CONNECTIONS, AUTHENTICALLY?<br \/>\nCercle allows you to check in on your friends, see their active mood updates in app or through the widget on your phone, and it tells you what your friends need. <\/p>\n<p>How users are currently using Cercle:<br \/>\n&#8211; Long distance couples are able to log and know how the other is doing. They know how the other is feeling so there isn&#8217;t any miscommunication when they FaceTime. For example, boyfriend is stressed from job hunting and girlfriend had a great day at work. Instead of the girlfriend getting upset over the tone shift, she knows how he&#8217;s feeling before they even call (and vice versa).<br \/>\n&#8211; Siblings know how each other is doing, especially when keeping touch is hard and they live apart. They can be there for each other when they light the bat signal.<br \/>\n&#8211; Friend groups that aren&#8217;t able to keep up every day but want to know how friends are doing so they can reach out to chat or to help them through something.<\/p><\/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\/@sheetaverma\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sheetaverma<\/a>&nbsp;I think a lot of people want to check in but don&#8217;t know how. Has there been a feature that&#8217;s helped start those conversations naturally?<\/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 reciprocal-gate thread above is the real design tension here, but there&#8217;s a second one on the other side: what happens when someone logs low mood often, not once after ten months of silence, but as their baseline. does the friend group eventually stop reacting the same way to a widget that&#8217;s been on &#8220;struggling&#8221; for three weeks straight? the whole point is catching the person who&#8217;s usually fine and suddenly isn&#8217;t, but I&#8217;d worry the signal gets noisier the more someone actually needs it long-term, not less.<\/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;There&#8217;s definitely a difference between each low mood. If the mood tells people they are struggling, the difference is &#8220;feeling chatty&#8221;, &#8220;enjoying peace&#8221;. &#8220;want to isolate&#8221;. This allows people to know what they need and what is happening. The note also allows people to add details so people know what&#8217;s going on and if it&#8217;s something they can handle. Currently we are working on this: if the app sees continuous low mood logging, it will offer the user options to feel better along with mental health resources. <\/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>People almost never say they&#8217;re struggling, they just go quiet. Having your closest circle&#8217;s state show up on your home screen before the phone call, without anyone having to perform okay-ness, matches exactly what I&#8217;ve seen after years of running group retreats. Loneliness spreads in silence long before anyone names it. Rooting for this 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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@alex_gidirim\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@alex_gidirim<\/a>&nbsp;Thank you so much Alex. Hope you and your Cercle enjoy this!<\/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 reciprocal check-in mechanic \u2014 you have to log before you can see \u2014 is smart because it makes the value exchange explicit and keeps it feeling mutual rather than one-sided. What I&#8217;m curious about is the Cercle size itself: is there a cap on how many people can be in one circle, or does it scale to the size of your friend group? That changes whether this works as a tight inner-circle tool or something bigger with looser ties.<\/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\/@leo404\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@leo404<\/a>&nbsp;There is no cap \ud83d\ude42 We are currently working on adding more groups. For now you can share your mood with your &#8220;favorited friends&#8221; which can be your people of choice, all friends, or just with yourself. <\/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>Great idea! Wish it was on Android 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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@rich_sun\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rich_sun<\/a>&nbsp;working on it soon \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>Love that the mood lives on a home screen widget, so support becomes proactive instead of waiting for someone to find the words to ask 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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@ilko_kacharov\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ilko_kacharov<\/a>&nbsp;exactly! thank you for your 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<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Would you consider making available on Android as well? \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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@satchmo_saunders\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@satchmo_saunders<\/a>&nbsp;soon! \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>I really like the idea of focusing on close friends instead of trying to build another social network.<\/p>\n<p>I&#8217;m curious: after people complete the first few check-ins, do they tend to keep using it consistently, or is building the habit the biggest 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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@ir3ne\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ir3ne<\/a>&nbsp;People use it consistently because it allows them to see how their friends are doing. In order to see your friend&#8217;s moods you must log in your own otherwise you can&#8217;t view it. This brings consistent momentum!<\/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 considered take on a hard problem. A question about the self side rather than the friend side: does a daily mood check-in change how well people come to understand their own patterns over time, or is the log mainly a signal for others?<\/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\/@alieksia\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@alieksia<\/a>&nbsp;Both! You get a private mood view so you can see how you&#8217;ve felt in a month and what your most logged mood is. Your friends cannot see this. You can only see how they&#8217;re doing once you log in your own mood. <\/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>Sheeta, the screen that stopped me was the third check-in step, because Want to Isolate is the hardest state to build for and you already named it.<\/p>\n<\/p>\n<p>The preference lives in the log, but the delivery surface may not honor it. A low mood still lands on a home screen widget, and the person seeing it is the same friend from your story who sent countless texts. I build AI for clinicians and the rule there is identical: a stated preference about being contacted only counts if the system downstream enforces it, otherwise it is a note nobody acts on.<\/p>\n<\/p>\n<p>Does the widget hold or soften an update when someone picks Want to Isolate, or does the mood go out either way?<\/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\/@clemente_lopez1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@clemente_lopez1<\/a>&nbsp;great question! The mood goes out anyway so that people are aware that friend needs their space. If someone logs a low mood and says they &#8220;need a friend&#8221; then a notification will go out to their friends saying &#8220;check in on your friends&#8221; prompting people to go on the app so they can see that a friend is struggling. <\/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\">#13<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/N4CDWFFXAYD7VG\" class=\"app-title\">MCP-Billing<\/a><\/p>\n<div class=\"one-liner\">OAuth 2.1 + usage-based Stripe billing for MCP servers<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">118<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>MCP-Billing \u662f\u4e00\u4e2a\u9762\u5411MCP\u670d\u52a1\u5668\u7684\u81ea\u6258\u7ba1\u540e\u7aef\u6837\u677f\uff0c\u901a\u8fc7\u5185\u7f6eOAuth 2.1\u8ba4\u8bc1\u3001API\u5bc6\u94a5\u8f6e\u6362\u548c\u57fa\u4e8e\u7528\u91cf\u7684Stripe\u8ba1\u8d39\uff0c\u89e3\u51b3\u5f00\u53d1\u8005\u5feb\u901f\u642d\u5efa\u8ba1\u8d39\u4e0e\u8ba4\u8bc1\u57fa\u7840\u8bbe\u65bd\u7684\u75db\u70b9\uff0c\u5c24\u5176\u89c4\u907f\u4e86AI\u751f\u6210\u4ee3\u7801\u4e2d\u56e0\u8fb9\u7f18\u903b\u8f91\u9519\u8bef\u5bfc\u81f4\u8ba1\u8d39\u5931\u6548\u7684\u9690\u6027\u98ce\u9669\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\/25cb428f-769e-467c-8e75-addd4a300d2c.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/hzzPkL3Ro5g\"><source src=\"https:\/\/youtu.be\/hzzPkL3Ro5g\" 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\/32b86767-13a1-46d5-ac21-df9dcdca65ca.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\/ae672ad4-1581-4a39-b44b-4188ed758c1a.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\/f27655ab-87e3-45fa-9897-01232de6d1cf.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\/174248d4-7db8-454c-b0ec-5648d8df6790.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\">API<\/span><br \/>\n            <span class=\"tag\">SaaS<\/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\">MCP\u670d\u52a1\u5668<\/span><br \/>\n            <span class=\"tag\">OAuth 2.1<\/span><br \/>\n            <span class=\"tag\">API\u5bc6\u94a5\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">Stripe\u8ba1\u8d39<\/span><br \/>\n            <span class=\"tag\">\u81ea\u6258\u7ba1\u6837\u677f<\/span><br \/>\n            <span class=\"tag\">\u7528\u91cf\u8ba1\u8d39<\/span><br \/>\n            <span class=\"tag\">Redis\u9650\u6d41<\/span><br \/>\n            <span class=\"tag\">Next.js<\/span><br \/>\n            <span class=\"tag\">TypeScript<\/span><br \/>\n            <span class=\"tag\">\u5f00\u6e90\u8ba4\u8bc1<\/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\u5f00\u653e\u6838\u5fc3\u8ba1\u8d39\u6a21\u5757\u4e3a\u53ef\u4fe1\u5ea6\u52a0\u5206\uff1b\u91cd\u70b9\u8d28\u7591\uff1a1\uff09\u4e0d\u540cAPI\u5bc6\u94a5\u662f\u5426\u652f\u6301\u4e0d\u540c\u5b9a\u4ef7\u5c42\u7ea7\uff1b2\uff09\u975e\u6d4f\u89c8\u5668\u5ba2\u6237\u7aef\uff08\u5982\u684c\u9762\u539f\u751f\u5e94\u7528\uff09\u7684OAuth\u6d41\u7a0b\u9002\u914d\u60c5\u51b5\uff1b3\uff09Stripe\u91cd\u8bd5\u65f6\u662f\u5426\u81ea\u52a8\u53bb\u91cd\u9632\u6b62\u91cd\u590d\u8ba1\u8d39\uff1b4\uff09\u5bf9\u201c\u96f6\u5b95\u673a\u5bc6\u94a5\u8f6e\u6362\u201d\u7684\u5b9e\u9645\u6548\u679c\u548c\u7aef\u5230\u7aef\u6d4b\u8bd5\u73af\u5883\u6709\u5f3a\u70c8\u9700\u6c42\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                MCP-Billing\u7684\u4ef7\u503c\u4e0d\u5728\u4ee3\u7801\uff0c\u800c\u5728\u201c\u573a\u666f\u8ba4\u77e5\u201d\u4e0e\u201c\u4fe1\u4efb\u5b9a\u4ef7\u201d\u7684\u7cbe\u51c6\u8ba1\u7b97\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u6838\u5fc3\u903b\u8f91\u5f88\u806a\u660e\uff1a\u5c06\u7528\u6237\u4ece\u201cAI\u4ee3\u7801\u9677\u9631\u201d\u4e2d\u5524\u9192\u3002Maker\u7528\u81ea\u8eab\u8e29\u8fc7\u7684\u5751\u2014\u2014Stripe webhook\u56e0\u9519\u8bef\u5904\u7406\u4e0d\u5f53\u5bfc\u81f4\u8ba1\u8d39\u4e8b\u4ef6\u9759\u9ed8\u4e22\u5931\u2014\u2014\u76f4\u63a5\u547d\u4e2dAI\u5f00\u53d1\u8005\u7684\u75db\u70b9\uff1a\u73b0\u5728\u7684AI\u80fd\u5feb\u901f\u751f\u6210\u201c\u770b\u8d77\u6765\u5bf9\u201d\u7684\u4ee3\u7801\uff0c\u5374\u65e0\u6cd5\u6784\u5efa\u201c\u5728\u7ebf\u8def\u4e0a\u5bf9\u201d\u7684\u67b6\u6784\u3002\u8fd9\u6070\u6070\u662f\u6837\u677f\u9879\u76ee\u6700\u503c\u5f97\u6ea2\u4ef7\u7684\u5730\u65b9\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u8fd9\u6b3e\u4ea7\u54c1\u5e76\u975e\u65e0\u61c8\u53ef\u51fb\u3002\u9996\u5148\uff0c\u4ece\u8bc4\u8bba\u53cd\u9988\u770b\uff0c\u5b83\u9762\u5bf9\u7684\u662f\u201c\u6709\u4f7f\u7528\u7ecf\u9a8c\u7684\u5f00\u53d1\u8005\u201d\u800c\u975e\u65b0\u624b\u2014\u2014\u4f60\u9700\u8981\u6e05\u695a\u81ea\u5df1\u7684API\u5bc6\u94a5\u662f\u5426\u9700\u8981\u591a\u5c42\u7ea7\u5b9a\u4ef7\u3001\u662f\u5426\u670d\u52a1\u4e8e\u684c\u9762\u539f\u751f\u5ba2\u6237\u7aef\uff08loopback\/OAuth 2.0 Device Grant\uff09\uff0c\u8fd9\u4e9b\u7f3a\u5931\u7684\u573a\u666f\u76f4\u63a5\u4ece\u201c\u901a\u7528\u6837\u677f\u201d\u964d\u7ea7\u4e3a\u201c\u7279\u5b9a\u573a\u666f\u6837\u677f\u201d\uff0c\u72ed\u7a84\u4e86\u76ee\u6807\u5e02\u573a\u3002\u5176\u6b21\uff0c79\u6b27\u7684\u4e00\u53e3\u4ef7\u5bf9\u6807\u7684\u662f\u201c\u5f00\u7bb1\u5373\u7528\u7684\u4fe1\u4efb\u201d\uff0c\u4f46\u6838\u5fc3\u8ba1\u8d39\u6a21\u5757\u5f00\u6e90\u540e\uff0c\u5c3e\u90e8\u7528\u6237\u5b8c\u5168\u53ef\u80fd\u53ea\u53d6\u5f00\u6e90\u90e8\u5206\u81ea\u5efa\u8ba1\u8d39\u2014\u2014\u4ea7\u54c1\u62a4\u57ce\u6cb3\u53d6\u51b3\u4e8eOAuth 2.1\u548c\u5bc6\u94a5\u7ba1\u7406\u90e8\u5206\u7684\u72ec\u6709\u96be\u5ea6\u662f\u5426\u6709\u8db3\u591f\u58c1\u5792\uff0c\u76ee\u524d\u770bOAuth\u90e8\u5206\u4ecd\u6709\u9002\u914d\u9e3f\u6c9f\uff08\u5982\u5bf9RFC 8252\u7684\u652f\u6301\u4e0d\u5b8c\u6574\uff09\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u6700\u5927\u7684\u9500\u552e\u6760\u6746\u5728\u4e8e\u201c\u5148\u9a8c\u540e\u4e70\u201d\u2014\u2014\u91ca\u51fa\u5f00\u6e90\u8ba1\u8d39\u5f15\u64ce\u4f5c\u4e3a\u4fe1\u4efb\u951a\u70b9\uff0c\u8fd9\u662f\u826f\u5fc3\u4e4b\u4e3e\uff0c\u4e5f\u662f\u514b\u5236\u7b56\u7565\u3002\u4f46\u8fd9\u6070\u6070\u53cd\u5411\u8981\u6c42\uff1a79\u6b27\u5fc5\u987b\u4e70\u5230\u7684\u662f\u4e00\u5957\u201c\u65e2\u626b\u6e05AI\u751f\u6210\u75d5\u8ff9\u3001\u53c8\u5403\u900fStripe\u8ba1\u8d39\u54f2\u5b66\u201d\u7684\u786c\u6838\u5de5\u7a0b\u51b3\u7b56\uff0c\u800c\u975e\u53e6\u4e00\u4e2aNext.js\u6587\u4ef6\u5939\u3002\u4e00\u53e5\u8bdd\u8bc4\u4ef7\uff1a\u5546\u4e1a\u6a21\u5f0f\u662f\u806a\u660e\u7684\uff0c\u4ea7\u54c1\u8fb9\u754c\u662f\u52a1\u5b9e\u4f46\u6709\u77ed\u677f\u7684\u2014\u2014\u5782\u76f4\u9886\u57df\u7684\u7cbe\u76ca\u5de5\u5177\uff0c\u4e0d\u662f\u4e07\u80fd\u811a\u624b\u67b6\u3002\u5e02\u573a\u53cd\u9988\u9700\u8981\u770b\u662f\u5426\u6709\u4e00\u6ce2\u201c\u5403\u8fc7\u8ba1\u8d39\u4e8f\u201d\u7684MCP\u5f00\u53d1\u8005\u613f\u610f\u4e3a\u201c\u5c11\u8e29\u4e00\u4e2a\u5751\u201d\u4e70\u5355\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\">MCP-Billing<\/span>\n                <\/div>\n<div class=\"comment-content\">Self-hosted Next.js\/TypeScript boilerplate: full OAuth 2.1 + PKCE, API key management with zero-downtime rotation, usage-based Stripe billing, and Redis rate limiting. 7 modules, 300+ tests. One-time \u20ac79, no revenue share, no platform lock-in. The metering core is free and open source on npm.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">a few months ago i started building custom MCP servers on the side. the tool logic took me an afternoon; the auth and billing infrastructure took weeks. after spending four hours reading RFC 9728 at 3 AM, i ended up parking it with a static API key.<\/p>\n<p>i eventually decided to build it properly using Claude Code as a pair. and yes, AI writes code insanely fast now, that\u2019s literally how this project started. but what an LLM draft doesn&#8217;t do by default is make the right architectural decisions when money is on the line. early on, the AI generated a webhook handler that returned the exact same 400 error for an invalid signature as it did for a temporary DB outage. that meant Stripe never retried the event, and billing updates vanished in silence. finding, testing, and fixing those silent failures is the actual work. generating code is cheap now; the decisions, the tests, and the edge cases someone already paid to discover are not.<\/p>\n<p>you don\u2019t have to take my word for it, though. I extracted and published the core metering logic as a standalone, free MIT package on npm (`mcp-metering`). you can install it, inspect the code, and judge the engineering quality yourself before deciding if the rest of the stack is worth \u20ac79. it\u2019s a full proof of quality, not a stripped-down teaser.<\/p>\n<p>the full boilerplate includes full OAuth 2.1 + PKCE, per-user API key management with zero-downtime rotation, usage-based Stripe billing, and Redis rate-limiting. it\u2019s organized into 7 decoupled modules with 300+ tests. one-time payment of \u20ac79, full source code, no revenue share, no platform lock-in, and a 7-day refund policy.<\/p>\n<p>would love to hear your feedback on the architecture or any of the documented trade-offs in the README!<\/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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@marc_gil1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@marc_gil1<\/a>&nbsp;The webhook 400-error story is the part that&#8217;ll stick with people an LLM producing code that looks correct but silently drops billing events on a DB outage is exactly the kind of bug that doesn&#8217;t show up until it&#8217;s already cost someone money. publishing the metering core as inspectable MIT before asking for \u20ac79 for the rest is a smart trust move too, most boilerplate sellers just show a demo video. how many of these edge cases (like the webhook one) did you catch through testing vs. only found after they&#8217;d already happened once?<\/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 decision to keep the metering core open source while charging for the rest is genuinely smart, basically lets people trust the math before they trust the product. Love that there&#8217;s no revenue share either, feels refreshing.<\/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 decision to ship the metering core as free open source while keeping the full stack paid is a really thoughtful move, it lets developers build trust with the hardest part before committing to the boilerplate.<\/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 webhook story is the right thing to lead with. I shipped a Stripe integration this month where everything was green in test mode and the first real card 400&#8217;d on a currency param test mode never asked for &#8211; and separately found receipts failing silently because the send helper never throws and a try\/catch was eating the reason. Money bugs don&#8217;t announce themselves; you find them by walking the path with a real card and reading the logs like a skeptic.<\/p>\n<\/p>\n<p>Which is why I&#8217;d second Grace&#8217;s checklist ask, and add one architectural vote: treat metering as a ledger, not a counter. Reserve before the metered call, settle exactly once keyed on the attempt, refund on failure &#8211; Gal&#8217;s retry-dedupe question mostly dissolves when the settle is idempotent by construction. The counter tells you what happened; the ledger makes sure it only happened once.<\/p>\n<\/p>\n<p>Publishing mcp-metering free and inspectable is a genuinely good trust move. \u20ac79 for the edge cases someone already paid to discover is fair.<\/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 zero-downtime API key rotation is the detail that would save the most pain in practice \u2014 keys usually get replaced when something breaks, not during planned maintenance, and any rotation downtime cascades into support tickets. The question I would ask before building on this: does the usage-based metering support different pricing tiers per API key, or is billing flat across all keys on the account? That matters when you want to give different API keys to different customer tiers without running separate instances.<\/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 OAuth 2.1 + PKCE half is the part I&#8217;d have paid for. We ship an MCP server next to a local CLI binary, and the awkward case was authenticating a client that has no redirect target of its own \u2014 we ended up binding a loopback listener on 127.0.0.1 and handing back a <a href=\"http:\/\/localhost:<port>\/callback&#8221; target=&#8221;_blank&#8221; rel=&#8221;nofollow noopener noreferrer&#8221;>http:\/\/localhost:&amp;lt;port&amp;gt;\/ca&#8230;<\/a> redirect URI. That took longer to get right than the billing did.<\/p>\n<p>Does the boilerplate cover that non-browser client path (loopback or device code), or is it aimed at hosted MCP servers where a normal redirect URI already exists? Also curious what led you to one-time \u20ac79 with no revenue share when the metering core is already open source \u2014 that&#8217;s a deliberate-looking choice.<\/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 Stripe webhook example is a strong trust signal. For MCP servers, billing is one of those areas where AI-generated code can look complete while the edge cases quietly decide whether the product is usable.<\/p>\n<\/p>\n<p>One onboarding thing I\u2019d want as a small builder: a checklist or test mode that proves the money path end to end \u2014 auth, metering, retry behavior, failed payments, and key rotation \u2014 before I connect a real server.<\/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 webhook silent-failure story in your maker comment is the one that would actually keep me up at night, not the OAuth stuff everyone&#8217;s asking about. on the usage-based billing side specifically: if Stripe retries a webhook (which it does on any non-2xx, including your own transient DB hiccups), does mcp-metering dedupe on the event id before incrementing usage, or is double-counting on retry something the integrator has to guard against themselves? that&#8217;s the kind of bug that doesn&#8217;t throw an error, it just quietly overcharges someone until they notice their invoice looks 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<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The OAuth half of this is the part I would pay for before the billing half. I connect MCP servers to my Claude setup as a user most weeks, and the pattern from that side is blunt, a server whose auth works on the first try gets used the same day, and one that fails sits unauthenticated for weeks. I have one in that exact state right now. Does your OAuth 2.1 flow cover the interactive consent dance the desktop AI clients run, or is it aimed at headless API consumers with keys?<\/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\/@abdullah_javaid3\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@abdullah_javaid3<\/a>&nbsp;<\/p>\n<p>it covers the real interactive consent flow, not an auto-approve shortcut. when a client kicks off the OAuth 2.1 PKCE authorization code grant, the user lands on an actual consent page in the dashboard to review requested scopes and click &#8220;Allow&#8221; or &#8220;Deny&#8221; (backed by TOCTOU protection in the server action and explicit tests for both decisions). so it&#8217;s definitely built for interactive consent rather than just headless API keys.<\/p>\n<p>that said, to be 100% transparent about a current gap that might affect your exact setup: right now the redirect_uri validation relies on a web-app whitelist checking for https:\/\/ or standard <a href=\"http:\/\/localhost:port\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">http:\/\/localhost:port\/<\/a>. if the desktop client you&#8217;re using relies on RFC 8252 native app patterns like loopbacks with dynamic ports or custom schemes (like claude:\/\/), my current validation regex won&#8217;t cover it \u2014 it&#8217;s a narrow whitelist, easy to extend but not built in yet.<\/p>\n<p>i also haven&#8217;t tested it end-to-end against a live Claude Desktop client instance yet\u2014the test suite exercises the server actions and handlers directly with mock clients.<\/p>\n<p>curious though, what&#8217;s the auth setup or custom scheme on the server sitting unauthenticated in your setup right now? would love to know if it&#8217;s hitting that exact loopback\/scheme restriction so i can prioritize it.<\/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<\/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\/YDRU7ZJOP4RYSO\" class=\"app-title\">Conduit<\/a><\/p>\n<div class=\"one-liner\">AI agents purpose-built for Hospitality<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">116<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Conduit\u662f\u9488\u5bf9\u9152\u5e97\u884c\u4e1a\u7684AI\u667a\u80fd\u4f53\uff0c\u80fd\u81ea\u52a8\u5904\u7406\u5ba2\u4eba\u4ece\u54a8\u8be2\u5230\u64cd\u4f5c\u7684\u5168\u6d41\u7a0b\uff08\u5982\u5165\u4f4f\u7533\u8bf7\u3001\u4fdd\u6d01\u8c03\u5ea6\u7b49\uff09\uff0c\u89e3\u51b3\u4f20\u7edfAI\u52a9\u624b\u53ea\u56de\u590d\u4e0d\u529e\u4e8b\u7684\u75db\u70b9\uff0c\u5c06\u6c9f\u901a\u4e0e\u540e\u53f0\u7cfb\u7edf\u6267\u884c\u65e0\u7f1d\u8854\u63a5\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\/439a6f98-4cc4-4fcc-a07e-753a8397f04f.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\/677b0538-6318-4464-9326-61a189fb5fe5.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\/c0864449-0990-4f8c-9514-c5c2bb9f89dc.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\/e4ef7660-3304-4dc6-8cb5-a56e3f67beed.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\/a30ee219-67f9-4805-b3c4-1e104f176903.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\/ec09e7b8-10cf-4b29-97e6-1011467be831.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\/242d3164-7af5-4419-bc4f-ee53d5a92889.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=Vn6Ezi0rKPE\"><source src=\"https:\/\/www.youtube.com\/watch?v=Vn6Ezi0rKPE\" 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 Communication<\/span><br \/>\n            <span class=\"tag\">Travel<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u9152\u5e97AI\u667a\u80fd\u4f53<\/span><br \/>\n            <span class=\"tag\">\u81ea\u52a8\u5316\u5ba2\u670d<\/span><br \/>\n            <span class=\"tag\">PMS\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">\u9152\u5e97\u8fd0\u8425\u6548\u7387<\/span><br \/>\n            <span class=\"tag\">\u8bed\u97f3\u4ee3\u7406<\/span><br \/>\n            <span class=\"tag\">\u591a\u8bed\u8a00\u652f\u6301<\/span><br \/>\n            <span class=\"tag\">AI+CRM<\/span><br \/>\n            <span class=\"tag\">\u540e\u53f0\u81ea\u52a8\u5316<\/span><br \/>\n            <span class=\"tag\">OTA\u5bf9\u63a5<\/span><br \/>\n            <span class=\"tag\">\u5e94\u6025\u8f6c\u4eba\u5de5<\/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\u76db\u8d5e\u5176\u89e3\u51b3\u201c\u534a\u591c\u65e0\u4eba\u63a5\u7535\u8bdd\u201d\u7684\u75db\u70b9\uff0c\u5e76\u5173\u6ce8\u8bed\u97f3\u4ee3\u7406\u5728\u7d27\u6025\u60c5\u51b5\uff08\u5982\u5ba2\u4eba\u9501\u95e8\u3001\u533b\u7597\u95ee\u9898\uff09\u4e0b\u7684\u8f6c\u4eba\u5de5\u673a\u5236\u3002\u521b\u59cb\u4eba\u56de\u590d\u5df2\u8bbe\u786c\u7f16\u7801\u89c4\u5219\uff0c\u53ef\u5b9a\u4e49\u201c\u5fc5\u987b\u8f6c\u4eba\u5de5\u201d\u7684\u8bdd\u9898\uff08\u5982\u706b\u707e\u3001\u5ba2\u4eba\u6124\u6012\uff09\uff0c\u4e14\u652f\u6301\u5e26\u80cc\u666f\u4fe1\u606f\u7684\u6e29\u6696\u8f6c\u63a5\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                Conduit\u7684\u771f\u6b63\u4ef7\u503c\u4e0d\u5728\u4e8e\u201c\u5199\u56de\u4fe1\u201d\uff0c\u800c\u5728\u4e8e\u201c\u5173\u5de5\u5355\u201d\u3002\u5b83\u5207\u4e2d\u4e86\u9152\u5e97\u4e1a\u4e00\u4e2a\u88ab\u5ffd\u7565\u7684\u6df1\u5c42\u75db\u70b9\uff1aAI\u5ba2\u670d\u52a9\u624b\u5f80\u5f80\u6b62\u6b65\u4e8e\u201c\u6211\u6765\u67e5\u4e00\u4e0b\u201d\uff0c\u7136\u540e\u8ba9\u8fd0\u8425\u4eba\u5458\u7ee7\u7eed\u5f00\u56db\u4e2a\u9875\u9762\u3001\u624b\u52a8\u64cd\u4f5cPMS\u3001\u5bf9\u63a5\u4fdd\u6d01\u7cfb\u7edf\u2014\u2014\u8fd9\u6839\u672c\u6ca1\u6709\u964d\u4f4e\u4eba\u7684\u52b3\u52a8\u5f3a\u5ea6\uff0c\u53ea\u662f\u628a\u6253\u5b57\u73af\u8282\u5916\u5305\u7ed9\u4e86AI\u3002Conduit\u7684\u806a\u660e\u4e4b\u5904\u5728\u4e8e\uff0c\u5b83\u628aAI\u4ece\u201c\u5bf9\u8bdd\u5c42\u201d\u4e0b\u6c89\u5230\u201c\u6267\u884c\u5c42\u201d\uff0c\u8ba9\u667a\u80fd\u4f53\u80fd\u76f4\u63a5\u8c03\u7528\u9152\u5e97\u5df2\u6709\u7684\u6280\u672f\u6808\uff08\u95e8\u9501\u3001\u652f\u4ed8\u3001\u6392\u73ed\u3001PMS\uff09\uff0c\u5f62\u6210\u4ece\u8bf7\u6c42\u5230\u5b8c\u6210\u7684\u6709\u6548\u95ed\u73af\u3002\n            <\/p>\n<p class=\"ai-content\">\n                116\u7968\u7684\u4ea7\u54c1\u730e\u624b\u6295\u7968\u548cMarriott\u3001Hilton\u7b49\u54c1\u724c\u80cc\u4e66\u8bf4\u660e\u884c\u4e1a\u8ba4\u53ef\u5ea6\u4e0d\u4f4e\uff0c\u4f46\u771f\u6b63\u7684\u8003\u9a8c\u5728\u4e8e\u201c\u957f\u5c3e\u5f02\u5e38\u201d\uff1a\u5f53\u5ba2\u4eba\u56e0\u7cfb\u7edf\u6743\u9650\u4e0d\u8db3\u3001\u65e5\u5386\u51b2\u7a81\u3001\u652f\u4ed8\u5931\u8d25\u7b49\u65e0\u6cd5\u81ea\u52a8\u5b8c\u6210\u7684\u64cd\u4f5c\u51fa\u73b0\u65f6\uff0cConduit\u7684\u7ea0\u9519\u673a\u5236\u548c\u4eba\u5de5\u4ea4\u63a5\u6548\u7387\u5982\u4f55\uff1f\u76ee\u524d\u53ea\u770b\u5230\u5bf9\u7d27\u6025\u4e8b\u4ef6\u7684\u786c\u7f16\u7801\u8f6c\u79fb\uff0c\u65e5\u5e38\u903b\u8f91\u504f\u5dee\u7684\u5904\u7406\u5c1a\u672a\u88ab\u5ba1\u89c6\u3002\u53e6\u5916\uff0c\u4e0e300\u591a\u4e2a\u54c1\u724c\u3001\u62e5\u670950M+\u5bf9\u8bdd\u548c30\u4ebf\u7f8e\u91d1\u9884\u8ba2\u503c\u7684\u6218\u7ee9\u56fa\u7136\u4eae\u773c\uff0c\u4f46\u9152\u5e97\u7cfb\u7edf\u7684\u788e\u7247\u5316\u7a0b\u5ea6\u6781\u9ad8\uff0cPMS\u4f9b\u5e94\u5546\u5343\u5dee\u4e07\u522b\uff0c\u80fd\u5426\u5b9e\u73b0\u201c\u5f00\u7bb1\u5373\u7528\u201d\u7684\u6df1\u5ea6\u6574\u5408\uff0c\u5c06\u51b3\u5b9aConduit\u662f\u6210\u4e3a\u9152\u5e97\u4e1a\u7684Zendesk\uff0c\u8fd8\u662f\u53c8\u4e00\u4e2a\u9700\u8981\u5927\u91cf\u5b9a\u5236\u5316SOW\u7684\u9879\u76ee\u3002\u6280\u672f\u4e0aSOC 2 Type II\u5408\u89c4\u662f\u57fa\u672c\u95e8\u69db\uff0c\u4f46\u771f\u6b63\u80fd\u628a\u8fd9\u6b3e\u4ea7\u54c1\u63a8\u4e0a\u4e3b\u6d41\u7684\u662f\u5b83\u5bf9\u9152\u5e97\u8fd0\u8425\u6d41\u7a0b\u7684\u9897\u7c92\u5ea6\u7406\u89e3\uff0c\u800c\u975eAgent\u67b6\u6784\u7684\u70ab\u6280\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\">Conduit<\/span>\n                <\/div>\n<div class=\"comment-content\">Conduit automates guest conversations and the work behind it. Conduit agents reply across email, WhatsApp, OTAs and social, voice calls. Agents dispatch subagents to act inside your PMS and tech stack: dispatching cleaners, updating calendars, closing the loop. Agents learn from every interaction, and you can inspect every step. 140+ languages, SOC 2 Type II. 50M+ conversations and $3B+ in reservation value for 300+ brands including Marriott, Hilton, Nobu and Fairmont.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hey Product Hunt,<\/p>\n<p>Punn here, co-founder and CTO at Conduit.<\/p>\n<p>Most &#8220;AI for hospitality&#8221; tools stop at the reply. They draft a nice message to the guest and hand the actual work back to a human. The guest asks for a 2pm check-in, the agent says &#8220;let me check&#8221;, and then someone on the ops team opens four tabs.<\/p>\n<p>We spent the last year on the other half. Conduit&#8217;s agents read your PMS, your ticketing, your door locks, your payment system, and take action in them. Early check-in request: the agent checks availability, dispatches housekeeping, charges the fee, confirms with the guest, logs it. No tabs.<\/p>\n<p>Three surfaces:<br \/>\n&#8211; Chat agents on email, WhatsApp, OTAs, socials<br \/>\n&#8211; Voice agents for the calls nobody picks up at 11pm<br \/>\n&#8211; Internal agents your team talks to like a coworker<\/p>\n<p>Our first launch was an inbox with agents bolted on. We built it in that order and it was backwards. This one is the fix.<\/p>\n<p>Would love your feedback, especially from anyone running ops at scale. I&#8217;m in the comments all day.<\/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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>This is incredible. Congrats <a href=\"https:\/\/www.producthunt.com\/@punn_kam\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@punn_kam<\/a>&nbsp;and the Conduit 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=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@punn_kam\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@punn_kam<\/a>&nbsp;I like that the goal isn&#8217;t just faster replies but actually resolving requests. Have you seen that translate into better guest satisfaction scores?<\/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 &#8220;calls nobody picks up at 11pm&#8221; line is the real value prop here, but that&#8217;s also exactly when the riskier calls happen, a guest locked out with a medical issue, a smoke smell, someone who sounds actually panicked versus just annoyed about checkout time. does the voice agent have a hard trigger for escalating straight to a human on-call instead of trying to resolve it itself, or is that judgment call left to the model reading tone in the moment? for something touching door locks and payment systems already, I&#8217;d want the emergency path to be the most boring, hardcoded part of the whole system.<\/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;Yes, we have configurable escalation rules that allow customers to define topics that should ALWAYS be transferred to a human instead of being handled by AI. Common examples include lockouts, smoke or fire-related issues, and situations where a guest expresses frustration.<\/p>\n<\/p>\n<p>When one of these conditions is met, the AI immediately escalates the call. It also performs a warm transfer. During the transfer, it briefs the receiver on who the guest is and any relevant information the guest has already shared.<\/p>\n<\/p>\n<p>This creates a much better guest experience, especially in stressful situations because guests don&#8217;t have to explain the issue 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<\/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\/ER7YLHPEU3PSNV\" class=\"app-title\">Liminal<\/a><\/p>\n<div class=\"one-liner\">A workspace &#038; 2nd brain for you, your agent, and your team<\/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>Liminal\u662f\u4e00\u4e2a\u8ba9\u4eba\u7c7b\u3001AI Agent\u548c\u56e2\u961f\u5728\u540c\u4e00\u5de5\u4f5c\u533a\u901a\u8fc7\u672c\u5730Markdown\/HTML\u6587\u4ef6\u534f\u4f5c\u7684\u201c\u7b2c\u4e8c\u5927\u8111\u201d\uff0c\u89e3\u51b3\u4e86Agent\u751f\u6210\u5185\u5bb9\u540e\u65e0\u6cd5\u5b9e\u65f6\u3001\u7f8e\u89c2\u5171\u4eab\u4e0e\u534f\u540c\u7f16\u8f91\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\/ba4b42a0-56ed-4190-9401-40b051448ddb.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\/adec1786-2535-45ae-a1e0-b5928ff1e3ec.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\/eeced5db-385b-48e6-bcd9-7d29f101bfb4.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\/0939c271-a503-425d-8a1e-0842d45caa9e.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\/0b403daf-4941-44fd-bbce-fed37b5ad9f4.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/mtCXbkQlp18\"><source src=\"https:\/\/youtu.be\/mtCXbkQlp18\" 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\">Productivity<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u534f\u4f5c\u5de5\u4f5c\u533a<\/span><br \/>\n            <span class=\"tag\">\u7b2c\u4e8c\u5927\u8111<\/span><br \/>\n            <span class=\"tag\">\u56e2\u961f\u77e5\u8bc6\u5e93<\/span><br \/>\n            <span class=\"tag\">\u5b9e\u65f6\u540c\u6b65<\/span><br \/>\n            <span class=\"tag\">Markdown\u7f16\u8f91\u5668<\/span><br \/>\n            <span class=\"tag\">\u672c\u5730\u4f18\u5148<\/span><br \/>\n            <span class=\"tag\">Agent\u539f\u751f<\/span><br \/>\n            <span class=\"tag\">\u6587\u4ef6\u534f\u540c<\/span><br \/>\n            <span class=\"tag\">\u4e91\u7aef\u540c\u6b65<\/span><br \/>\n            <span class=\"tag\">\u5f00\u6e90\u66ff\u4ee3<\/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\u5171\u9e23\uff1a\u672c\u5730Markdown+Agent\u534f\u4f5c\u662f\u771f\u5b9e\u75db\u70b9\u3002\u6838\u5fc3\u5efa\u8bae\uff1a1\uff09\u9700\u89e3\u51b3\u7b14\u8bb0\u8fc7\u65f6\u5bfc\u81f4Agent\u8bef\u5f15\u7684\u201c\u9648\u65e7\u6027\u201d\u95ee\u9898\uff1b2\uff09\u968f\u6587\u4ef6\u589e\u591a\u9700\u52a0\u5165\u641c\u7d22\u6216\u7d22\u5f15\u673a\u5236\uff1b3\uff09\u5927\u8d5e\u201c\u6309\u5199\u4f5c\u8005\u8ffd\u52a0\u65e5\u5fd7\u201d\u907f\u514d\u51b2\u7a81\uff0c\u4ee5\u53ca\u5408\u5e76\u4f18\u4e8e\u201c\u540e\u5199\u8986\u76d6\u201d\u7684\u8bed\u4e49\u3002\u79bb\u7ebf\u53ef\u7528\u4e0e\u7ec6\u7c92\u5ea6\u6743\u9650\u83b7\u80af\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                Liminal\u7684\u8d70\u7ea2\u5e76\u975e\u56e0\u4e3a\u5176\u6280\u672f\u6709\u591a\u98a0\u8986\u2014\u2014Syncthing\u3001Git + Markdown\u6e32\u67d3\u5668\u7ec4\u5408\u4e5f\u80fd\u62fc\u51d1\u51fa\u7c7b\u4f3c\u6548\u679c\u3002\u5b83\u771f\u6b63\u7684\u4ef7\u503c\u5728\u4e8e\u7cbe\u51c6\u547d\u4e2d\u4e86AI\u7f16\u7a0b\u65f6\u4ee3\u4e00\u4e2a\u88ab\u5ffd\u89c6\u7684\u201c\u57fa\u7840\u8bbe\u65bd\u771f\u7a7a\u201d\uff1a\u5f53Claude Code\u3001Codex\u7b49Agent\u6210\u4e3a\u65b0\u7684\u751f\u4ea7\u529b\u4e2d\u5fc3\uff0c\u4f20\u7edf\u534f\u4f5c\u5de5\u5177\uff08Notion\u3001Google Docs\uff09\u548c\u6587\u4ef6\u7cfb\u7edf\uff08VS Code\u9884\u89c8\uff09\u90fd\u5728\u8fd9\u4e2a\u65b0\u5de5\u4f5c\u6d41\u4e2d\u66b4\u9732\u51fa\u5de8\u5927\u7684\u6469\u64e6\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ea7\u54c1\u6700\u806a\u660e\u7684\u5730\u65b9\u5728\u4e8e\u201c\u4e0d\u505a\u4e2d\u95f4\u5546\u201d\u3002\u5b83\u653e\u5f03\u4e86\u901a\u8fc7MCP\uff08Model Context Protocol\uff09\u53bb\u201c\u9002\u914d\u201dAI\uff0c\u8f6c\u800c\u62e5\u62b1Agent\u6700\u64c5\u957f\u7684\u672c\u5730\u6587\u4ef6\u8bfb\u5199\u3002\u8fd9\u8ba9Agent\u7684\u5de5\u4f5c\u6210\u672c\u964d\u81f3\u6700\u4f4e\uff08\u65e0Token\u6d6a\u8d39\uff09\uff0c\u540c\u65f6\u4fdd\u6301\u4e86\u6700\u7ec8\u7528\u6237\uff08\u4eba\u7c7b\uff09\u7684\u7f16\u8f91\u4f53\u9a8c\uff08WYSIWYG UI\uff09\u3002\u8fd9\u79cd\u201c\u6587\u4ef6\u4e3a\u738b\u201d\u7684\u6781\u7b80\u54f2\u5b66\u76f4\u63a5\u5207\u4e2d\u4e86AI\u91cd\u5ea6\u7528\u6237\u7684\u8981\u5bb3\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u7136\u800c\uff0cLiminal\u9762\u4e34\u7684\u6311\u6218\u6bd4\u5b83\u60f3\u8c61\u7684\u66f4\u5927\u3002\u7528\u6237\u7684\u201c\u9648\u65e7\u6027\u201d\u548c\u201c\u89c4\u6a21\u7d22\u5f15\u201d\u4e24\u5927\u62f7\u95ee\u76f4\u6307\u4ea7\u54c1\u5929\u82b1\u677f\uff1a\u4e00\u4e2a\u53ea\u505a\u201c\u5c55\u793a\u4e0e\u540c\u6b65\u201d\u800c\u7f3a\u4e4f\u77e5\u8bc6\u7ba1\u7406\uff08\u53ef\u91cd\u9a8c\u8bc1\u3001\u81ea\u52a8\u6807\u8bb0\u3001\u8bed\u4e49\u641c\u7d22\uff09\u7684\u201c\u7b2c\u4e8c\u5927\u8111\u201d\uff0c\u672c\u8d28\u4e0a\u662f\u4e00\u4e2a\u8fdb\u5316\u7248\u7684\u6587\u4ef6\u6d4f\u89c8\u5668\u3002\u5f53\u6587\u4ef6\u4ece\u51e0\u767e\u4e2a\u53d8\u6210\u51e0\u5343\u4e2a\uff0c\u5f53\u591a\u4e2aAgent\u5199\u5165\u51b2\u7a81\uff0c\u4ec5\u9760\u201cUI\u5408\u5e76\u201d\u548c\u201cLLM\u641c\u7d22\u201d\u5c06\u5f88\u5feb\u6349\u895f\u89c1\u8098\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u5b83\u66f4\u50cf\u662f\u4e00\u4e2a\u4f18\u79c0\u7684\u201cMVP\u201d\u2014\u2014\u89e3\u51b3\u4e86\u4e00\u4e2a\u771f\u5b9e\u4f46\u72ed\u5c0f\u7684\u95ee\u9898\uff1aAgent\u5de5\u4f5c\u6d41\u7684\u6e32\u67d3\u4e0e\u5171\u4eab\u3002\u8981\u60f3\u6210\u4e3a\u771f\u6b63\u7684\u201c\u7b2c\u4e8c\u5927\u8111\u201d\uff0c\u5b83\u5fc5\u987b\u4ece\u201c\u6587\u4ef6\u6d4f\u89c8\u5668\u201d\u8fdb\u5316\u4e3a\u201c\u77e5\u8bc6\u4ef2\u88c1\u8005\u201d\uff0c\u5b66\u4f1a\u81ea\u52a8\u6807\u6ce8\u6570\u636e\u53ef\u4fe1\u5ea6\u3001\u8ffd\u8e2a\u77e5\u8bc6\u53d8\u66f4\u3001\u5e76\u4e3b\u52a8\u5904\u7406\u51b2\u7a81\u3002\u5426\u5219\uff0c\u5b83\u4e0d\u8fc7\u662f\u53c8\u4e00\u4e2a\u7cbe\u81f4\u7684\u201c\u4e34\u65f6\u65b9\u6848\u201d\uff0c\u7b49Notion\u6216Cursor\u4eec\u53cd\u5e94\u8fc7\u6765\uff0c\u539f\u751f\u96c6\u6210Agent\u6587\u4ef6\u652f\u6301\u540e\uff0c\u5176\u62a4\u57ce\u6cb3\u5c06\u77ac\u95f4\u6d88\u5931\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\">Liminal<\/span>\n                <\/div>\n<div class=\"comment-content\">Your agent writes files locally in markdown and HTML, the formats it already speaks. Liminal renders them as clean UI instantly and syncs to your team in real time. Share a link and everyone sees the same live workspace, editable in the browser. No sending markdown over Slack, no hosting your own HTML, no waiting on Google Drive. No MCP calls, no proprietary formats, no wasted tokens. Over time, it becomes a shared second brain for your team and every agent working with you.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p><strong>Hey Product Hunt \ud83d\udc4b<\/strong><\/p>\n<p>I&#8217;m Justin, the maker of Liminal, and I&#8217;m stoked to finally share what I&#8217;ve been building!<\/p>\n<p>Heads up: this is the first cut. I&#8217;m launching now to find out if the friction I&#8217;ve been feeling is real for other people too. Please let me know if you run into any bugs or problems, I&#8217;ll get them fix asap!<\/p>\n<p><strong>Quick backstory<\/strong><\/p>\n<p>Last summer, the way I work changed. Agents got good enough to become the place I did the work. Claude Code became my main interface, the intelligence layer everything flowed through. My job shifted from writing and producing to directing an agent to do it.<\/p>\n<p>Notion and Google Docs weren&#8217;t built for this. They were bolting agents into their apps, but that&#8217;s not where my agent lived, and their MCPs were slow and expensive to talk to. Claude Code worked much better and faster with local markdown files, a format the agent already speaks. So I stopped writing in Notion and Google Docs and went all in on local markdown.<\/p>\n<p>I was doing all of this in VS Code because that&#8217;s where I coded. But viewing and editing markdown there is clunky. You use the preview to render it nicely, then jump to the raw side to actually edit. So I built a WYSIWYG editor on top of the local files.<\/p>\n<p>Then I tried to share something. Nobody wants to be sent a raw markdown file, and Google Drive doesn&#8217;t render it nicely. Passing files back and forth killed any hope of collaboration. So I built real-time live collaboration on top of local files: a lightweight CLI watches your workspace folder and syncs bidirectionally with the cloud. Share a link and your teammate opens the same live workspace in a browser. Their edits land back on your disk instantly.<\/p>\n<p>Once that worked, the thing I hadn&#8217;t designed for showed up. My agent and my teammates&#8217; agents were all reading and writing into the same workspace. Liminal had quietly become a shared second brain. Company knowledge that keeps updating and compounding as the team works, sitting on every agent&#8217;s local disk as plain files they can directly access.<\/p>\n<p><strong>What Liminal is<\/strong><\/p>\n<p>A collaborative workspace for humans, agents, and teams. Your AI-native second brain. Bring your own agents. Own your files.<\/p>\n<p>How it works:<\/p>\n<p>\ud83d\udfe2 Work with your agent, not just through it. Your agent writes files to disk in markdown or HTML. Liminal renders them as clean UI the moment they save. Review and edit naturally in the browser, without wrestling with raw markdown.<\/p>\n<p>\ud83d\udfe2 Share instantly, without the friction. A lightweight CLI syncs your workspace to the cloud in real time. Send a link and your teammate is in the same live workspace. No sending markdown over Slack, no hosting your own HTML, no waiting on Google Drive.<\/p>\n<p>\ud83d\udfe2 A shared second brain for every agent on the team. Files live locally, so every agent has direct access to everything the team has written, decided, and learned. No external calls, no lag, no losing context between sessions.<\/p>\n<p>\ud83d\udfe2 No middleman, no MCP tax. Direct file access means no MCP round-trips, no proprietary formats, no wasted tokens. Context is cheap, fast, and always fresh.<\/p>\n<p><strong>The ask<\/strong><\/p>\n<p>Would love your feedback, especially if you&#8217;re living in Claude Code, Codex, or another agent all day: does this map to your experience, or am I solving a problem only I have?<\/p>\n<p>Justin<\/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\/@justinonthelam\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@justinonthelam<\/a>&nbsp;Abdullah&#8217;s staleness question above is the real one a note pointing at something that no longer exists is worse than no note at all, since it sounds confident either way. curious if this is on your roadmap or an accepted tradeoff for now.<\/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 &#8220;everyone with the link sees the same live workspace&#8221; part is the piece I&#8217;d want to understand before using this for real team work &#8211; once an agent is writing files into a shared space, it&#8217;s going to write things that were meant for one person&#8217;s eyes at some point (a draft perf note, a client&#8217;s rough numbers, whatever). is there any per-file or per-folder permission layer, or is the model still &#8220;anyone with the link sees everything,&#8221; just like the underlying markdown files would if you handed someone the folder<\/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\/@galdayan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@galdayan<\/a>&nbsp;100%! Liminal is built with per file access controls, just like Notion or Google Docs. Users can have their own personal workspaces, or limit access to files in a shared workspace!<\/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>Everyone&#8217;s building second brains for individuals. Almost nobody&#8217;s built one for a founder plus their agents plus their people sharing the same context. That&#8217;s the harder and more interesting problem. 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>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_gidirim\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@alex_gidirim<\/a>&nbsp;Thank you! The funny thing is that I never meant to build a second brain. I stumbled into it by focusing on building a great workspace for humans and their agents &#8212; it just turned out that the result is a shared collection of files\/docs\/knowledge that&#8217;s easy to access and stays up to date because that&#8217;s where all of the work is<\/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>You&#8217;re not solving a problem only you have. I&#8217;ve run exactly this architecture for months \u2014 a folder of markdown that multiple agents on multiple machines read and write, synced through git because nothing better existed. It quietly became the most load-bearing thing in my stack, so the friction is real and so is the payoff.<\/p>\n<\/p>\n<p>Some conventions from living it, offered as free product opinions since you said Liminal doesn&#8217;t have any yet:<\/p>\n<\/p>\n<p>Per-writer append-only files \u2014 each machine and agent gets its own daily log \u2014 make conflicts structurally rare instead of resolved-after-the-fact. Shared files become the exception, and the exceptional ones are the ones worth merge UI.<\/p>\n<\/p>\n<p>One small always-loaded index with a hard rule that detail lives elsewhere. At 500 files the index is the search: the agent greps the index, not the corpus. Omri&#8217;s question is the one that decides whether this scales.<\/p>\n<\/p>\n<p>An authoritative current-state file that wins when it disagrees with older notes. Abdullah&#8217;s staleness case bites hardest \u2014 my standing rule is that notes record what was true when written, and anything actionable gets re-verified before an agent acts on it. A tool that aged or flagged entries when the thing they point to disappears would be the first genuinely new feature in this category.<\/p>\n<\/p>\n<p>And merging over last-write-wins is the right call \u2014 this week two of my agents wrote the same knowledge as different commits and taught me that multi-writer brains want merge semantics everywhere, not just the editor. Good launch. This one&#8217;s aimed at a real hole.<\/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\/@ryan_davis23\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ryan_davis23<\/a>&nbsp;that&#8217;s great feedback, thank you so much!<\/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 one of those launches where the backstory tracks exactly with my own workflow &#8211; i ended up doing the same VS-Code-preview-then-raw-edit dance before giving up and just living in Claude Code with a folder of notes. the part i&#8217;m most curious about is scale rather than sync: once a team&#8217;s second brain grows to a few hundred files across months of work, how do you actually find the right one? plain markdown in folders works great at 20 files and turns into its own kind of clutter at 500 &#8211; is there real search\/structure on top, or is it still mostly relying on the agent to know where to look?<\/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\/@omri_ben_shoham1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@omri_ben_shoham1<\/a>&nbsp;It turns out that LLMs are amazing at search already, and giving agents the ability to just grep your entire workspace is pretty effective even when you have hundreds or thousands of files! So today Liminal has no separate search capabilities and I believe that AI model companies will build better search faster than I can<\/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>Love the positioning.<\/p>\n<p>What type of teams are seeing the most value so far?<\/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\/@getfoundertools\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@getfoundertools<\/a> This should most benefit people, teams, and companies who are all in on using a single agent as their interface for work and want to collaborate with each other, but TBD since this is day 1!<\/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><a href=\"https:\/\/www.producthunt.com\/@justinonthelam\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"justinonthelam\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@justinonthelam<\/a> The concurrent write answer above covers editing at the same time, but I&#8217;m curious about the offline case: if you&#8217;re working locally with the sync CLI not running, say on a flight, does everything just work as plain markdown with nothing lost?<\/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\">@clement_avq yup! All the files sit locally on your machine so you have always-on offline access. Once you sync back up, there\u2019s merging and conflict resolution baked in to handle any  changes that conflict<\/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>&#8216;work with your agent, not just through it&#8217; is the real reframe. when two agents write the same file at once, does it merge or last-write-win?<\/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\">@andrewzakonov there\u2019s merging and version control, though right now conflict resolutions is done in the UI. Next step is to make it so agents can handle that for 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>You asked whether this maps to people living in Claude Code all day, and from my desk the answer is yes, the friction is real. My whole setup runs on a folder of markdown memory files with an index loaded each session, and it quietly became the most durable part of my workflow because notes survive every context reset. The failure mode I keep hitting is staleness, a note written three weeks ago names a file or a flag that no longer exists and the agent recommends it confidently anyway. Does Liminal do anything to age or flag entries when the thing a note points to changes, or is pruning still on the human?<\/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\/@abdullah_javaid3\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@abdullah_javaid3<\/a>&nbsp;Right now Liminal has no opinions about your data and files, it&#8217;s just a workspace that makes collaboration between humans, agents, and teams easy and accessible, but I can see a future where it does more than that!<\/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>finally something that doesn&#8217;t make me wrangle markdown back and forth. plugged in an agent output and it just showed up as a clean page my coworker could edit, which honestly felt kind of magical<\/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\/@sedanurz5c4\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sedanurz5c4<\/a>&nbsp;I&#8217;m glad you found the experience useful! <\/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\">#16<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/2ESKHIT7EPENFD\" class=\"app-title\">Phantom<\/a><\/p>\n<div class=\"one-liner\">Voice-first AI agent that operates your Mac<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">112<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Phantom \u662f\u4e00\u6b3e\u5e38\u9a7b Mac \u5218\u6d77\u533a\u57df\u7684\u8bed\u97f3\u4f18\u5148AI\u4ee3\u7406\uff0c\u65e0\u9700\u5207\u6362\u5e94\u7528\u6216\u6253\u5f00\u65b0\u7a97\u53e3\uff0c\u7528\u6237\u53ef\u76f4\u63a5\u901a\u8fc7\u8bed\u97f3\u6216\u6587\u5b57\u5728\u4efb\u610f\u754c\u9762\u64cd\u63a7\u7535\u8111\u5b8c\u6210\u4efb\u52a1\uff0c\u89e3\u51b3\u4e86\u4f20\u7edfAI\u52a9\u624b\u9700\u4e2d\u65ad\u5de5\u4f5c\u6d41\u3001\u64cd\u4f5c\u7e41\u7410\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\/58f87b8e-eaea-4cc7-8110-d0192de1e896.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/PKlBtAvD2Pc\"><source src=\"https:\/\/youtu.be\/PKlBtAvD2Pc\" 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\/7bedb9b6-fbbd-4d0e-9f71-cf44230e5cae.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\/a6f0c86e-08a3-4488-ba53-e61432760a33.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\/ec75693f-bab8-4d59-bda9-21fde2bb0bd4.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\">Productivity<\/span><br \/>\n            <span class=\"tag\">Education<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u8bed\u97f3AI\u4ee3\u7406<\/span><br \/>\n            <span class=\"tag\">MacOS<\/span><br \/>\n            <span class=\"tag\">\u5218\u6d77\u4ea4\u4e92<\/span><br \/>\n            <span class=\"tag\">AI\u5de5\u4f5c\u6d41<\/span><br \/>\n            <span class=\"tag\">\u684c\u9762\u81ea\u52a8\u5316<\/span><br \/>\n            <span class=\"tag\">\u6548\u7387\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u65e0\u5e72\u6270\u64cd\u4f5c<\/span><br \/>\n            <span class=\"tag\">\u5c4f\u5e55\u4e0a\u4e0b\u6587\u611f\u77e5<\/span><br \/>\n            <span class=\"tag\">AI\u63a7\u5236\u7535\u8111<\/span><br \/>\n            <span class=\"tag\">\u672a\u6765\u5de5\u4f5c\u65b9\u5f0f<\/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\u80af\u5b9a\u5218\u6d77\u8bbe\u8ba1\u5e26\u6765\u7684\u4f4e\u6253\u6270\u611f\u4e0e\u5c4f\u5e55\u4e0a\u4e0b\u6587\u611f\u77e5\u7684\u5b9e\u7528\u6027\u3002\u6838\u5fc3\u8d28\u7591\u96c6\u4e2d\u5728\u64cd\u4f5c\u7684**\u53ef\u9006\u6027**\uff1a\u8bed\u97f3\u8bef\u8bc6\u522b\u5bfc\u81f4\u8bef\u5220\u6587\u4ef6\u3001\u53d1\u9001\u6d88\u606f\u7b49\u4e0d\u53ef\u9006\u64cd\u4f5c\u7684\u540e\u679c\u4e0d\u660e\u3002\u62c5\u5fe7\u6301\u7eed\u76d1\u542c\u9690\u79c1\u53ca\u4f1a\u8bae\u8bef\u89e6\u53d1\u3002\u5efa\u8bae\u660e\u786e\u64a4\u9500\u673a\u5236\u4e0e\u5524\u9192\u65b9\u5f0f\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                Phantom \u7684\u201c\u5218\u6d77\u4ea4\u4e92\u201d\u5728\u5f62\u5f0f\u4e0a\u786e\u5b9e\u662f\u4e00\u6b21\u6f02\u4eae\u7684\u51cf\u6cd5\u2014\u2014\u5b83\u7ec8\u7ed3\u4e86\u201c\u6253\u5f00\u65b0\u6807\u7b7e\u9875-\u7c98\u8d34\u63d0\u793a-\u7b49\u5f85\u8fd4\u56de-\u590d\u5236\u7c98\u8d34-\u5207\u56de\u5de5\u4f5c\u201d\u7684\u788e\u7247\u5316\u6d41\u7a0b\uff0c\u5c06AI\u4ece\u6b21\u7ea7\u7a97\u53e3\u63d0\u5347\u4e3a\u64cd\u4f5c\u7cfb\u7edf\u7684\u539f\u751f\u4ea4\u4e92\u5c42\u3002\u8fd9\u79cd\u8bbe\u8ba1\u54f2\u5b66\u503c\u5f97\u80af\u5b9a\uff1aAI\u4e0d\u5e94\u662f\u5de5\u4f5c\u6d41\u7684\u6253\u65ad\u8005\uff0c\u800c\u5e94\u662f\u5185\u5d4c\u4e8e\u52a8\u4f5c\u7684\u5ef6\u4f38\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u7136\u800c\uff0c\u4ea7\u54c1\u76ee\u524d\u66b4\u9732\u51fa\u7684\u6700\u5927\u7f3a\u9677\u5e76\u975e\u529f\u80fd\u4e0d\u8db3\uff0c\u800c\u662f**\u4fe1\u4efb\u6a21\u578b\u7684\u91cd\u5efa\u5931\u8d25**\u3002\u8bc4\u8bba\u4e2d\u53cd\u590d\u51fa\u73b0\u7684\u201c\u53ef\u9006\u6027\u201d\u8d28\u7591\uff0c\u76f4\u6307AI\u4ee3\u7406\u5728PC\u9886\u57df\u843d\u5730\u7684\u6838\u5fc3\u77db\u76fe\uff1a\u4f20\u7edf\u9f20\u6807\u952e\u76d8\u7684\u6bcf\u4e00\u6b21\u70b9\u51fb\u90fd\u662f\u7269\u7406\u786e\u8ba4\uff0c\u800c\u8bed\u97f3\u5929\u7136\u5e26\u6709\u6b67\u4e49\u6027\u4e0e\u4e0d\u53ef\u9006\u6027\u3002\u5f53\u4e00\u4e2a\u9519\u8bef\u547d\u4ee4\u80fd\u76f4\u63a5\u5bfc\u81f4\u6587\u4ef6\u8bef\u5220\u6216\u6d88\u606f\u8bef\u53d1\u65f6\uff0cPhantom\u5e76\u672a\u7ed9\u51fa\u4efb\u4f55\u8d85\u8d8a\u201cCtrl+Z\u201d\u7684\u53d9\u4e8b\u3002\u5bf9\u4e8e\u201c\u4e0d\u53ef\u9006\u64cd\u4f5c\u201d\uff0c\u5176\u9ed8\u8ba4\u7684\u5047\u8bbe\u662f\u201c\u7528\u6237\u80fd\u5373\u65f6\u53d1\u73b0\u5e76\u64a4\u9500\u201d\uff0c\u8fd9\u5728\u5feb\u901f\u5bf9\u8bdd\u573a\u666f\u4e2d\u51e0\u4e4e\u4e0d\u53ef\u80fd\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u66f4\u6df1\u5c42\u7684\u95ee\u9898\u5728\u4e8e\uff0c\u5b83\u6df7\u6dc6\u4e86\u201c\u6548\u7387\u201d\u4e0e\u201c\u63a7\u5236\u6743\u201d\u3002\u7528\u6237\u5728\u8bc4\u8bba\u4e2d\u62c5\u5fc3\u7684\u4e0d\u662fAI\u4e0d\u591f\u806a\u660e\uff0c\u800c\u662f\u5b83\u592a\u201c\u4e3b\u52a8\u201d\u3002Voice-first \u7684\u771f\u6b63\u4ef7\u503c\u4e0d\u5728\u4e8e\u4ee3\u66ff\u7528\u6237\u70b9\u51fb\uff0c\u800c\u5728\u4e8e\u5c06\u7528\u6237\u7684\u610f\u56fe\u7cbe\u51c6\u5730\u8f6c\u5316\u4e3a\u7cfb\u7edf\u52a8\u4f5c\uff1b\u4f46\u76ee\u524d\u7684\u6267\u884c\u5c42\u9762\uff0c\u4ea7\u54c1\u66f4\u50cf\u662f\u5728\u7528\u65b0\u4ea4\u4e92\u5305\u88c5\u65e7\u547d\u4ee4\uff0c\u7f3a\u4e4f\u9488\u5bf9\u8bed\u97f3\u8bef\u8bc6\u522b\u3001\u4e0a\u4e0b\u6587\u51b2\u7a81\uff08\u5982\u4f1a\u8bae\u8bef\u89e6\u53d1\uff09\u7684\u5bb9\u9519\u4e0e\u6821\u9a8c\u673a\u5236\u3002\n            <\/p>\n<p class=\"ai-content\">\n                Phantom \u7684\u613f\u666f\u662f\u201cAI\u4e0d\u53ea\u662f\u56de\u7b54\u95ee\u9898\uff0c\u800c\u662f\u91c7\u53d6\u884c\u52a8\u201d\uff0c\u8fd9\u6070\u6070\u66b4\u9732\u4e86\u5b83\u5f53\u524d\u7684\u77ed\u677f\uff1a\u5b83\u8bd5\u56fe\u76f4\u63a5\u8d8a\u8fc7\u201c\u884c\u52a8\u610f\u56fe\u786e\u8ba4\u201d\u7684\u4fdd\u9669\u6813\uff0c\u8ba9AI\u4ece\u201c\u53c2\u8c0b\u201d\u53d8\u201c\u6267\u884c\u8005\u201d\uff0c\u5374\u6ca1\u6709\u7ed9\u51fa\u7528\u6237\u6562\u4e8e\u653e\u4e0b\u9f20\u6807\u7684\u5fc3\u7406\u5b89\u5168\u57ab\u3002\u4e00\u53e5\u8bdd\uff1a\u4ea4\u4e92\u9769\u547d\u558a\u5f97\u6f02\u4eae\uff0c\u4f46\u5b89\u5168\u5e95\u7ebf\u9700\u8981\u91cd\u5199\u3002\u5728\u672a\u5b9e\u73b0\u201c\u53ef\u64a4\u9500\u7684\u786e\u5b9a\u6027\u201d\u4e4b\u524d\uff0c\u5b83\u4ecd\u662f\u4e00\u6b3e\u5371\u9669\u7684\u6548\u7387\u73a9\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\">Phantom<\/span>\n                <\/div>\n<div class=\"comment-content\">Phantom is a voice-first AI agent for macOS that is always accessible via the Mac notch. Instead of opening a chatbot window and moving work into a separate conversation, users speak or type from anywhere on their Mac, without interrupting their work. Phantom understands the relevant screen and app context and completes tasks directly within the user&#8217;s workflow. The possibilities are only limited by the imagination of the user.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Introducing a new generation of AI interfaces.<\/p>\n<p>For the past few years, we\u2019ve interacted with AI in essentially the same way:<br \/>\nOpen a new tab.<br \/>\nType a prompt.<br \/>\nWait for an answer.<br \/>\nCopy it.<br \/>\nSwitch back to what we were doing.<\/p>\n<p>Powerful intelligence, but trapped inside an outdated interface.<br \/>\nI built Phantom to change that.<\/p>\n<p>Phantom is an AI assistant that lives entirely in your Mac\u2019s notch. It\u2019s always there when you need it and out of the way when you don\u2019t.<\/p>\n<p>Instead of explaining every step, you simply tell Phantom what you want to accomplish.<\/p>\n<p>It can navigate your Mac, work across applications, click, type, organize, and carry out tasks just as you would; and even more.<\/p>\n<p>I believe the future of AI isn\u2019t another chatbot you have to visit. It\u2019s an intelligent interface built directly into the place where your work already happens.<\/p>\n<p>AI shouldn\u2019t just answer questions.<br \/>\nIt should take action. <\/p>\n<p>Meet Phantom. \ud83d\udc7b<br \/>\n<a href=\"http:\/\/www.heyphantom.app\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">www.heyphantom.app<\/a><\/p>\n<p>#AI #ArtificialIntelligence #MacOS #Productivity #FutureOfWork<\/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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@benaja_heger\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@benaja_heger<\/a>&nbsp;voice-first for actually operating the Mac (clicking, organizing, navigating apps) is a different trust bar than voice-first for dictation one misheard command and it&#8217;s clicking the wrong thing or closing unsaved work. what&#8217;s the confirm\/undo story for anything that can&#8217;t be easily reversed?<\/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 reversibility question above is the big one, but there&#8217;s a smaller version that would hit way more often: if it&#8217;s voice-first and always accessible, is it listening for a wake word continuously, or do you have to trigger it? because the failure mode I&#8217;d actually run into daily isn&#8217;t a misheard delete, it&#8217;s being on a screen share or call and someone else&#8217;s voice on the meeting triggering an action mid-conversation. does it know the difference between you talking to it and you talking to a person while it happens to be open?<\/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 tried Phantom and the notch placement feels genuinely clever, I can just dictate a quick question without leaving whatever I was working on. Screen context awareness works better than I expected for grabbing text from a doc.<\/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>I like the idea of making AI available everywhere instead of living in yet another chat window.<\/p>\n<p>I&#8217;m curious: after using Phantom internally, what are the tasks where people naturally switch to voice instead of typing? I&#8217;d love to know what became the biggest &#8220;aha!&#8221; moment for your 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<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>the part I&#8217;m stuck on isn&#8217;t privacy, it&#8217;s reversibility. &#8220;click, type, organize, carry out tasks just as you would&#8221; means it can also delete the wrong file, send a message before you meant to, or submit a form, and voice commands are inherently less precise than a mouse click you can see land. what&#8217;s the undo story for an action that&#8217;s already irreversible by the time you notice it misheard you? until that&#8217;s answered clearly I&#8217;d be nervous giving something this much control over my actual Mac, not just a sandboxed chat window<\/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>How about privacy? How and where do you process it? Do you then store it anywhere?<\/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\/@kamil_infeld\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kamil_infeld<\/a>&nbsp;Stupid question <\/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\/BJWYI7VM6I3T33\" class=\"app-title\">qsa.sh <\/a><\/p>\n<div class=\"one-liner\">External security scan of your own IP, in your terminal<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">109<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>qsa.sh \u662f\u4e00\u6b3e\u901a\u8fc7\u4e00\u884c `curl` \u547d\u4ee4\uff0c\u5728\u7ec8\u7aef\u5185\u5bf9\u670d\u52a1\u5668\u516c\u7f51 IP \u8fdb\u884c\u5916\u90e8\u5b89\u5168\u626b\u63cf\u7684\u5de5\u5177\uff0c\u5e2e\u52a9\u7528\u6237\u5feb\u901f\u4e86\u89e3\u81ea\u8eab\u4e3b\u673a\u66b4\u9732\u5728\u4e92\u8054\u7f51\u4e0a\u7684\u5f00\u653e\u7aef\u53e3\u3001\u670d\u52a1\u7248\u672c\u53ca\u5df2\u77e5\u6f0f\u6d1e\uff0c\u65e0\u9700\u6ce8\u518c\u8d26\u6237\uff0c\u65e0\u6570\u636e\u5b58\u50a8\uff0c\u89e3\u51b3\u670d\u52a1\u5668\u7ba1\u7406\u8005\u5bf9\u81ea\u8eab\u5b89\u5168\u914d\u7f6e\u201c\u770b\u4e0d\u89c1\u6478\u4e0d\u7740\u201d\u7684\u7126\u8651\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\/e4b20713-62c3-4ab5-a4d1-be12394dee4e.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/krqok4f-5x4\"><source src=\"https:\/\/youtu.be\/krqok4f-5x4\" 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\/559f6ffe-e388-4ecd-8011-08845a43b6d6.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\/3d98a790-2750-4a7c-9f84-ccb33739421e.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\">Developer Tools<\/span><br \/>\n            <span class=\"tag\">Business Intelligence<\/span><br \/>\n            <span class=\"tag\">Security<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u5916\u90e8\u5b89\u5168\u626b\u63cf<\/span><br \/>\n            <span class=\"tag\">\u7ec8\u7aef\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">Curl\u4e00\u952e\u626b\u63cf<\/span><br \/>\n            <span class=\"tag\">\u7aef\u53e3\u6620\u5c04<\/span><br \/>\n            <span class=\"tag\">CVE\u6f0f\u6d1e\u68c0\u6d4b<\/span><br \/>\n            <span class=\"tag\">Nmap\u626b\u63cf<\/span><br \/>\n            <span class=\"tag\">Nuclei\u626b\u63cf<\/span><br \/>\n            <span class=\"tag\">\u670d\u52a1\u5668\u5b89\u5168<\/span><br \/>\n            <span class=\"tag\">\u514d\u8d39\u626b\u63cf<\/span><br \/>\n            <span class=\"tag\">\u5faeSaaS<\/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\u8d4f\u5176\u96f6\u6ce8\u518c\u3001\u96f6\u5b58\u50a8\u3001\u4ec5\u901a\u8fc7Curl\u8fd4\u56de\u6587\u672c\u7684\u7b80\u6d01\u8bbe\u8ba1\uff0c\u4ee5\u53ca15\u79d2\u4e2d\u6b62\u7a97\u53e3\u7684\u9690\u79c1\u673a\u5236\u3002\u4e3b\u8981\u62c5\u5fe7\u96c6\u4e2d\u5728\u95ed\u6e90\u4ee3\u7801\u7684\u4fe1\u4efb\u95ee\u9898\uff08Curl\u8bf7\u6c42\u672c\u8eab\u662f\u5426\u5b89\u5168\uff09\uff0c\u4ee5\u53ca\u662f\u5426\u652f\u6301Serverless\/Edge\u73af\u5883\u3002\u4f5c\u8005\u56de\u5e94\u79f0\u4e0d\u6267\u884c\u7ba1\u9053\u4e0b\u8f7d\uff0c\u626b\u63cf\u8f6f\u4ef6\u5f00\u6e90\uff0c\u5e76\u5c06\u53d1\u5e03\u81ea\u52a8\u62a5\u8b66\u6559\u7a0b\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                qsa.sh \u7684\u201c\u4e00\u884cCurl\u201d\u8bbe\u8ba1\u5728\u7406\u5ff5\u4e0a\u662f\u4e00\u4e2a\u6f02\u4eae\u7684\u51cf\u6cd5\u2014\u2014\u5b83\u628a\u4f20\u7edf\u5b89\u5168\u626b\u63cf\u7684\u6ce8\u518c\u3001\u914d\u7f6e\u3001\u6570\u636e\u7559\u5b58\u7b49\u5197\u4f59\u73af\u8282\u5168\u90e8\u780d\u6389\uff0c\u76f4\u63a5\u9762\u5411\u201c\u6211\u60f3\u77e5\u9053\u4e92\u8054\u7f51\u600e\u4e48\u770b\u6211\u201d\u8fd9\u4e00\u539f\u59cb\u9700\u6c42\u3002\u8fd9\u79cd\u6781\u7b80\u4e3b\u4e49\u5e26\u6765\u7684\u4f53\u9a8c\u662f\u5176\u4ed6\u5b89\u5168SaaS\u96be\u4ee5\u6bd4\u62df\u7684\uff1a\u79d2\u7ea7\u54cd\u5e94\u3001\u65e0\u4fe1\u4efb\u8d1f\u62c5\u3001\u7ec8\u7aef\u539f\u751f\u3002\u7136\u800c\uff0c\u5176\u771f\u6b63\u7684\u4ef7\u503c\u8fdc\u4e0d\u6b62\u4e8e\u4fbf\u5229\u6027\uff0c\u800c\u5728\u4e8e\u5b83\u5de7\u5999\u5730\u5c06\u201c\u5b89\u5168\u626b\u63cf\u201d\u4ece\u4e13\u4e1a\u8fd0\u7ef4\u7684\u5de5\u5177\uff0c\u964d\u7ef4\u6210\u4e00\u4e2a\u7c7b\u4f3c\u4e8e `ping` \u6216 `curl ifconfig.me` \u7684\u65e5\u5e38\u8bca\u65ad\u547d\u4ee4\uff0c\u8fd9\u6709\u53ef\u80fd\u89e6\u53ca\u4e00\u4e2a\u9ad8\u5ea6\u788e\u7247\u5316\u7684\u957f\u5c3e\u5e02\u573a\u2014\u2014\u90a3\u4e9b\u62e5\u6709VPS\u7684\u72ec\u7acb\u5f00\u53d1\u8005\u3001\u5c0f\u56e2\u961f\u3001\u751a\u81f3\u8fd0\u7ef4\u65b0\u624b\u3002\u4f46\u4ea7\u54c1\u5b58\u5728\u663e\u8457\u7684\u786c\u4f24\uff1a\u95ed\u6e90\u5305\u88c5\u3001\u4f9d\u8d56\u5916\u90e8IP\u60c5\u62a5\u5e93\uff08\u4e14\u62d2\u7edd\u4ee3\u7406\u548c\u4e91\u5e73\u53f0\uff09\u3001\u6df1\u626b\u4f9d\u8d56\u4ed8\u8d39\u3002\u6838\u5fc3\u626b\u63cf\u8f6f\u4ef6\u867d\u5f00\u6e90\uff0c\u4f46\u201c\u95ed\u6e90\u5305\u88c5\u201d\u5728\u5b89\u5168\u884c\u4e1a\u5929\u7136\u4e0e\u4fe1\u4efb\u611f\u5bf9\u7acb\uff0c\u5c24\u5176\u5f53\u6267\u884c\u547d\u4ee4\u672c\u8eab\u5c31\u662f\u653b\u51fb\u9762\u65f6\uff0c\u7528\u6237\u7684\u8d28\u7591\u7edd\u975e\u65e0\u75c5\u547b\u541f\u3002Pro\u7248\uff0865535\u7aef\u53e3\u5f02\u6b65\u626b\u63cf\uff09\u548cDeep\u7248\uff08\u5168Nuclei\u90ae\u4ef6\u62a5\u544a\uff09\u80fd\u5426\u6491\u8d77\u4ed8\u8d39\u903b\u8f91\uff0c\u5b8c\u5168\u53d6\u51b3\u4e8e\u7528\u6237\u5bf9\u201c\u81ea\u5df1\u624b\u52a8\u642d\u4e00\u5957\u540c\u6837\u5de5\u5177\u7684\u65f6\u95f4\u6210\u672c\u201d\u7684\u8bc4\u4f30\u3002\u5982\u679c\u4ea7\u54c1\u80fd\u5f00\u653e\u626b\u63cf\u811a\u672c\u6216\u63d0\u4f9b\u81ea\u52a8\u5316\u544a\u8b66\u7ba1\u9053\uff0c\u5176\u201c\u5faeSaaS\u201d\u6a21\u5f0f\u624d\u53ef\u80fd\u8dd1\u901a\u3002\u76ee\u524d\u770b\uff0c\u5b83\u662f\u4e00\u4e2a\u4f18\u79c0\u7684\u4f53\u9a8c\u539f\u578b\uff0c\u4f46\u8ddd\u79bb\u5546\u4e1a\u95ed\u73af\u8fd8\u5dee\u4e00\u4e2a\u7a33\u56fa\u7684\u4fe1\u4efb\u57fa\u5efa\u548c\u660e\u786e\u7684\u5dee\u5f02\u5316\u5546\u4e1a\u529f\u80fd\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\">qsa.sh <\/span>\n                <\/div>\n<div class=\"comment-content\">Run curl qsa.sh for a one-command external security scan of your server&#8217;s own public IP \u2014 naabu, nmap + vulners, and nuclei map your open ports, service versions, and known CVEs, streamed straight to your terminal in ~30 seconds. See exactly what the internet sees of your host: no account, nothing stored. Free scans run live; paid Pro (all 65,535 ports, async) and one-time Deep (the full nuclei firehose, emailed) dig deeper uncovering vulnerabilities below the surface.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Seeing my own setup the way a stranger on the outside would is oddly reassuring, and I like that it just tells me plainly what looks open without any fuss.<\/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>@amine_aziz_alaoui It is a very useful tool. I will be publishing a blog post soon with a how-to on setting up a crontab diff checker to auto-alert users when new vulns pop up. The entire micro-SaaS idea behind it is that everything is self-service. If you want auto-alerts with a diff checker, you create it, but our website will give you guidance. This keeps us from storing any data on users&#8217; server scans.<\/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>Nice that curl here just streams text back, no piping into bash like typical installers. The 15-second abort window before scanning starts is a smart consent mechanism too.<\/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\/@aidan_codefox\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@aidan_codefox<\/a>&nbsp;After doing the research that was the first thing I noticed and wanted to eliminate compared to many others out there, no piping\/downloading (no trust) and wanted some type of terms acceptance, so I figured treat it like a checkout. It worked out nicely. Thanks for the feedback.<\/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 how frictionless this is. curl <a href=\"http:\/\/qsa.sh\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">qsa.sh<\/a> scanning the IP you&#8217;re calling from means it&#8217;s guaranteed your own host with no account or consent faff, which is a genuinely clever bit of design, and not retaining results is the right call for trust. <\/p>\n<\/p>\n<p>One question from my corner: for those of us mostly on serverless\/edge now (Cloudflare Workers and the like) where there&#8217;s no box with an open IP to point at, is there a version of this that makes sense, or is it firmly aimed at VPS\/server setups? Either way, 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\/@dalemooney\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"dalemooney\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dalemooney<\/a> This version uses IP intelligence from <a href=\"http:\/\/WorldIP.io\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">WorldIP.io<\/a> to classify the requesting IP, and it actively refuses detected proxies, VPNs, mobile devices, and Cloud platforms. However, because you&#8217;re executing the command from your server and not the proxy egress, the scanner should pick up the actual IPv4 for proper scanning. All of my testing was completed on my web servers running Cloudflared.<\/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\/@dalemooney\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dalemooney<\/a>&nbsp;I&#8217;d like to ask, does it support both Linux and Windows?<\/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 the one-curl approach is kind of genius \u2014 no signup wall, just instant results streamed to your terminal. love that the free scan stays honest about what the internet actually sees instead of burying the real findings behind a paywall.<\/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>This i s great! Would love to try it! &#8230;but &#8230;..Is it opensource? I couldnt find a github link. Runing curl is in it self a security risk. Basically you allow anything to run on your computer. No gatekeeper nothing. So having it be closed source is a very red flag \ud83d\ude05. Its fine to do from big vendors like claud eor openai. But small vendors, opensource + curl is a must. IMO. Thanks \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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p>@conduit_design I completely understand the concern! To clarify, you never pipe anything into your terminal here (e.g., curl <a href=\"http:\/\/qsa.sh\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">qsa.sh<\/a> | bash). We don&#8217;t require that like other sites do, so nothing is downloading or executing code on your server. curl <a href=\"http:\/\/qsa.sh\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">qsa.sh<\/a> simply sends a standard web request. QSA reads the headers, and if the request comes from curl, it provides the results directly to your terminal (just like a website displays a page, but formatted for the CLI). It is a 100% external scan, not internal. To give you another example on this, another site of mine is <a href=\"https:\/\/curlhub.sh\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">curlhub.sh<\/a> which &#8220;curl curlhub.sh&#8221; will provide you with an entire set of useful tools.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/566c8989-5af8-483c-8185-18e9d41062c0.png?auto=compress,format&amp;codec=mozjpeg&amp;cs=strip\" style=\"max-width: 100%\"><\/p>\n<\/p>\n<p>Is it open source? All of the scanning software we use (naabu, nmap + vulners, and nuclei) is open source. We&#8217;ve just put them together in an easy-to-use tool, though the website&#8217;s wrapper code itself is closed source. The micro-SaaS idea is purely to save time for people who don&#8217;t want to set up and maintain an entire security stack. One quick command gives you basic data, while the premium packages offer deeper, sub-surface scans.<\/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\">#18<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/37VDNWNIB7P7K2\" class=\"app-title\">G.I.A.ac<\/a><\/p>\n<div class=\"one-liner\">Build real, working apps from a single sentence<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">106<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>G.I.A.ac \u8ba9\u7528\u6237\u53ea\u9700\u8f93\u5165\u4e00\u53e5\u8bdd\u63cf\u8ff0\uff0c\u5c31\u80fd\u5b9e\u65f6\u751f\u6210\u53ef\u76f4\u63a5\u90e8\u7f72\u5230\u81ea\u6709 GitHub \u548c Vercel \u8d26\u6237\u7684\u5b8c\u6574\u5e94\u7528\uff0c\u5e76\u5185\u7f6e\u4e1a\u52a1\u4e13\u5c5e AI \u52a9\u624b\uff0c\u89e3\u51b3\u4f20\u7edf AI \u5e94\u7528\u751f\u6210\u5668\u4ee3\u7801\u4e0d\u5f00\u653e\u3001\u6613\u88ab\u5382\u5546\u9501\u5b9a\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\/9ab46303-03e4-4540-beb6-a13c1108f8fd.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\/bf9b40b1-606a-4375-97d7-5ed4505babc1.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\/140bb4bf-e47c-4091-b118-8cb1daf2400b.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\/59690646-debf-47ad-9c14-46343f2bb7d2.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\/b5adbf65-7b73-4c01-a0cf-1737f9708b43.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\">Developer Tools<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u4e00\u53e5\u8bdd\u751f\u6210\u5e94\u7528<\/span><br \/>\n            <span class=\"tag\">AI \u7f16\u7a0b\u52a9\u624b<\/span><br \/>\n            <span class=\"tag\">\u4ee3\u7801\u81ea\u4e3b\u53ef\u63a7<\/span><br \/>\n            <span class=\"tag\">\u5b9e\u65f6\u6784\u5efa\u5c55\u793a<\/span><br \/>\n            <span class=\"tag\">GitHub \u90e8\u7f72<\/span><br \/>\n            <span class=\"tag\">Vercel \u90e8\u7f72<\/span><br \/>\n            <span class=\"tag\">AI \u5ba2\u670d\u5d4c\u5165<\/span><br \/>\n            <span class=\"tag\">SaaS \u65e0\u9501\u5b9a<\/span><br \/>\n            <span class=\"tag\">\u5e94\u7528\u751f\u6210\u5668<\/span><br \/>\n            <span class=\"tag\">\u4f4e\u4ee3\u7801\u5f00\u53d1<\/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\u4e0e Lovable\u3001Replit \u7b49\u5de5\u5177\u7684\u5dee\u5f02\uff0c\u6838\u5fc3\u8d28\u7591\u4e24\u70b9\uff1a\u4e00\u662f\u4ee3\u7801\u662f\u5426\u771f\u6b63\u5f00\u653e\u3001\u80fd\u5426\u5bfc\u51fa\u540e\u7ee7\u7eed\u8fed\u4ee3\uff1b\u4e8c\u662f\u4ea7\u54c1\u5bf9\u65b0\u624b\u7684\u6700\u5feb\u4ef7\u503c\u573a\u666f\u5728\u54ea\u3002\u5f00\u53d1\u8005\u56de\u5e94\u5f3a\u8c03\u81ea\u6709\u8d26\u6237\u90e8\u7f72\u3001\u5b9e\u65f6\u7f16\u7801\u8fc7\u7a0b\u53ef\u89c1\u3001\u5185\u7f6e\u884c\u4e1a AI \u5ba2\u670d\uff0c\u5e76\u91c7\u7528\u5148\u8bd5\u7528\u540e\u4ed8\u8d39\u6a21\u5f0f\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                G.I.A.ac \u5207\u5165\u4e86\u4e00\u4e2a\u88ab\u4e0d\u5c11\u73a9\u5bb6\u5ffd\u89c6\u7684\u75db\u70b9\uff1aAI \u751f\u6210\u7684\u4ee3\u7801\u5230\u5e95\u5f52\u8c01\uff1f\u5f53 Lovable\u3001Replit \u4eec\u70ed\u8877\u4e8e\u201c\u5e73\u53f0\u5185\u95ed\u73af\u201d\u65f6\uff0cGIA \u76f4\u63a5\u628a\u4ee3\u7801\u63a8\u5411\u7528\u6237\u7684 GitHub \u548c Vercel\uff0c\u770b\u4f3c\u662f\u6280\u672f\u9009\u62e9\uff0c\u5b9e\u5219\u662f\u5546\u4e1a\u6a21\u5f0f\u7684\u53db\u9006\u2014\u2014\u653e\u5f03\u6258\u7ba1\u62bd\u6210\uff0c\u8f6c\u800c\u5bf9\u4ee3\u7801\u5bfc\u51fa\u6536\u8d39\u3002\u8fd9\u62db\u806a\u660e\u4e14\u5371\u9669\uff1a\u806a\u660e\u5728\u4e8e\uff0c\u5b83\u7cbe\u51c6\u51fb\u4e2d\u4e86\u5f00\u53d1\u8005\u548c\u521b\u4e1a\u8005\u7684\u201c\u9501\u4ed3\u6050\u60e7\u201d\uff0c\u5c24\u5176\u5bf9\u66fe\u56e0 Notion\u3001Webflow \u6da8\u4ef7\u800c\u88ab\u8feb\u8fc1\u79fb\u7684\u7fa4\u4f53\u800c\u8a00\uff0c\u4e00\u53e5\u201cyour code, no lock-in\u201d\u6bd4\u4efb\u4f55\u534e\u4e3d\u6f14\u793a\u90fd\u66f4\u5177\u8bf4\u670d\u529b\u3002\u5371\u9669\u5728\u4e8e\uff0c\u4e00\u65e6\u5bfc\u51fa\u540e\u7528\u6237\u81ea\u884c\u5927\u6539\u4ee3\u7801\uff0cGIA \u7684 AI \u80fd\u5426\u518d\u6b21\u7406\u89e3\u548c\u8fed\u4ee3\u8fd9\u4e9b\u201c\u88ab\u4fee\u6539\u8fc7\u7684\u201d\u4ee3\u7801\uff1f\u5f00\u53d1\u8005\u5728\u8bc4\u8bba\u533a\u7684\u8ffd\u95ee\u6070\u6070\u547d\u4e2d\u4e86\u8fd9\u4e2a\u547d\u95e8\u2014\u2014\u5f53\u524d\u7248\u672c\u7684 GIA \u5927\u6982\u7387\u4f9d\u8d56\u81ea\u8eab\u6784\u5efa\u65f6\u7684\u5185\u90e8\u72b6\u6001\uff0c\u5bf9\u5bfc\u51fa\u540e\u518d\u7f16\u8f91\u7684\u4ee3\u7801\u7f3a\u4e4f\u9006\u5411\u7406\u89e3\u80fd\u529b\u3002\u8fd9\u4f1a\u5bfc\u81f4\u4e00\u4e2a\u5c34\u5c2c\u573a\u666f\uff1a\u7528\u6237\u8981\u4e48\u6c38\u8fdc\u7559\u5728 GIA \u7684\u6784\u5efa\u73af\u5883\u4e2d\u4fee\u6539\uff0c\u8981\u4e48\u7b2c\u4e00\u6b21\u5bfc\u51fa\u540e\u5c31\u4e0e AI \u8f85\u52a9\u529f\u80fd\u201c\u65ad\u4ea4\u201d\u3002\u8fd9\u4e0d\u53eb\u771f\u6b63\u7684\u81ea\u4e3b\u53ef\u63a7\uff0c\u8fd9\u662f\u201c\u4e00\u6b21\u6027\u7684\u81ea\u4e3b\u53ef\u63a7\u201d\u3002\u53e6\u5916\uff0c\u6807\u8bb0\u201cBuilt solo in Morocco\u201d\u867d\u662f\u60c5\u6000\u52a0\u5206\u9879\uff0c\u4f46\u5355\u4eba\u7ef4\u62a4\u7684\u5b9e\u65f6\u6784\u5efa\u5de5\u5177\u5728\u5e76\u53d1\u3001\u5d29\u6e83\u4fee\u590d\u3001\u529f\u80fd\u8fed\u4ee3\u4e0a\u7684\u53ef\u6301\u7eed\u6027\uff0c\u6295\u8d44\u4eba\u548c\u65e9\u671f\u7528\u6237\u90fd\u5e94\u4fdd\u6301\u5ba1\u614e\u3002\u4e00\u53e5\u8bdd\u603b\u7ed3\uff1aGIA \u5728\u4ea7\u54c1\u54f2\u5b66\u4e0a\u6253\u5bf9\u4e86\u724c\uff0c\u4f46\u540e\u7eed\u201c\u65ad\u8054\u540e\u5982\u4f55\u7eed\u547d\u201d\u7684\u6280\u672f\u96be\u9898\u5c1a\u672a\u771f\u6b63\u56de\u7b54\u3002\u5982\u679c\u5b83\u80fd\u5b9e\u73b0\u8de8\u8bed\u8a00\u3001\u8de8\u6846\u67b6\u5730\u7406\u89e3\u548c\u8fed\u4ee3\u7528\u6237\u5bfc\u51fa\u7684\u4ee3\u7801\uff0c\u90a3\u5b83\u624d\u914d\u5f97\u4e0a\u201cGeneral\u201d\u4e4b\u540d\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\">G.I.A.ac<\/span>\n                <\/div>\n<div class=\"comment-content\">General Intelligence Architect \u2014 describe an app and watch it get built live.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>How is it different from Lovable or Replit (or any other similar tools that are able to code your own solution)?<\/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\/@busmark_w_nika\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@busmark_w_nika<\/a>&nbsp;hey Nika, Great question \u2014 three real differences:<\/p>\n<ol>\n<li>\n<p><strong>Where your code ends up.<\/strong> GIA deploys to your own GitHub and your own Vercel accounts. Not hosted on my platform, no per-app hosting fees, export anytime. Most tools in this space keep your app inside their walls \u2014 that&#8217;s the business model. Mine is: you own it, you can leave whenever.<\/p>\n<\/li>\n<li>\n<p><strong>A real coding agent under the hood \u2014 not a loop over a pile of templates.<\/strong> You see the actual files being written, tested, and repaired in real time \u2014 not a loading bar and a reveal. If it makes a mistake, you watch it fix it. Nothing to take on faith \u2014 the build IS the demo.<\/p>\n<\/li>\n<li>\n<p><strong>Every app ships with a built-in AI assistant<\/strong> that knows that specific business \u2014 services, prices, availability, pulled from the app&#8217;s own data \u2014 answering that app&#8217;s customers from day one. A nail salon gets a booking receptionist, automatically. I haven&#8217;t seen another builder do this.<\/p>\n<\/li>\n<\/ol>\n<p>And the pricing philosophy: the full build + live preview is free, no card. You pay (\u20ac9.99\/mo) only to download the code or deploy. Try before you pay, always.<\/p>\n<p>Genuinely happy to be compared side by side \u2014 same prompt in both, see where the code lands. That&#8217;s the test I built GIA to win.<\/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\">Type one sentence \u2014 &#8220;a booking site for a nail salon in Paris&#8221; \u2014 and watch G.I.A build it live: real code, working app, no black box. Every app ships with a built-in AI assistant that knows that business (services, prices, availability) and answers customers from day one. Deploy to YOUR own GitHub and Vercel \u2014 your code, no lock-in, export anytime. Try everything free in a full live preview; pay \u20ac9.99\/mo only when you&#8217;re ready to ship. Built solo in Morocco. Describe it. Watch it build. Ship it.<\/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\/@elhoucine_idousaid\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@elhoucine_idousaid<\/a>&nbsp;The deploy to your own GitHub and Vercel, export anytime part is the detail that actually matters more than the one-sentence generation most AI app builders keep you locked into their hosting, so you&#8217;re one pricing change away from being stuck. curious what happens after the first export though: if I ask G.I.A to add a feature later, does it re-read my (possibly now-edited) exported code, or does it only work if I keep building inside the platform?<\/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,  what early workflow usually gives users the quickest win?<\/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\">#19<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/FL5LQN66HXBORB\" class=\"app-title\">RecipeBook by Shofo<\/a><\/p>\n<div class=\"one-liner\">Buy video training data by the hour featuring 25M+ clips<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">105<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>RecipeBook\u662f\u4e00\u4e2a\u89c6\u9891\u6570\u636e\u5e73\u53f0\uff0c\u8ba9AI\u6a21\u578b\u8bad\u7ec3\u8005\u901a\u8fc7\u8bed\u4e49\u641c\u7d22\u3001\u6295\u7968\u6392\u5e8f\uff0c\u4ee53\u7f8e\u5143\/\u5c0f\u65f6\u7684\u4ef7\u683c\u5feb\u901f\u8d2d\u4e70\u7cbe\u51c6\u7684\u89c6\u9891\u8bad\u7ec3\u6570\u636e\uff0c\u7701\u53bb\u4f20\u7edf\u9500\u552e\u6c9f\u901a\u548c\u6f2b\u957f\u7b49\u5f85\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\/047acc7c-7f08-480a-9a5d-51dc4a190f20.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=-N1K74NG_aY\"><source src=\"https:\/\/www.youtube.com\/watch?v=-N1K74NG_aY\" 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\/a0dbba5c-70b3-4b68-87ad-052fb0165667.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\/9dd38054-ff2c-4383-bbc0-d6e0f9ec874f.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\/50438163-1f36-4b70-951b-9fdd90000182.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\">Developer Tools<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u89c6\u9891\u6570\u636e\u5e73\u53f0<\/span><br \/>\n            <span class=\"tag\">AI\u8bad\u7ec3\u6570\u636e<\/span><br \/>\n            <span class=\"tag\">\u89c6\u9891\u6570\u636e\u96c6<\/span><br \/>\n            <span class=\"tag\">\u8bed\u4e49\u641c\u7d22<\/span><br \/>\n            <span class=\"tag\">\u6570\u636e\u6807\u6ce8<\/span><br \/>\n            <span class=\"tag\">\u6570\u636e\u96c6\u8d2d\u4e70<\/span><br \/>\n            <span class=\"tag\">\u6570\u636e\u91c7\u96c6<\/span><br \/>\n            <span class=\"tag\">\u673a\u5668\u5b66\u4e60\u6570\u636e<\/span><br \/>\n            <span class=\"tag\">\u89c6\u9891\u7b5b\u9009<\/span><br \/>\n            <span class=\"tag\">\u8bad\u7ec3\u6570\u636e\u5e02\u573a<\/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\u79f0\u8d5e\u641c\u7d22\u540e\u6295\u7968\u91cd\u6392\u7684\u6548\u679c\u548c\u6309\u5c0f\u65f6\u8d2d\u4e70\u7684\u4fbf\u6377\u6d41\u7a0b\u3002\u6838\u5fc3\u95ee\u9898\u5728\u4e8e\u6570\u636e\u7248\u6743\uff1a\u7528\u6237\u62c5\u5fc3\u201c\u516c\u5f00\u53ef\u7528\u201d\u4e0d\u7b49\u4e8e\u201c\u5546\u7528\u5408\u6cd5\u201d\uff0c\u53ef\u80fd\u9762\u4e34\u8bc9\u8bbc\u98ce\u9669\u3002\u56e2\u961f\u56de\u5e94\u79f0\u6570\u636e\u6536\u96c6\u4e0d\u6d89\u53ca\u767b\u5f55\u3001\u4f2a\u9020\u8d26\u6237\u7b49\uff0c\u5e76\u5f15\u7528\u516c\u5f00\u6570\u636e\u5224\u4f8b\u6cd5\u3002\u6b64\u5916\uff0c\u5143\u6570\u636e\uff08\u5982\u5b57\u5e55\u3001\u4e92\u52a8\u6570\u636e\uff09\u76ee\u524d\u8f83\u5f31\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                RecipeBook\u7684\u4ef7\u503c\u4e0d\u5728\u4e8e\u201c25M+\u89c6\u9891\u201d\u8fd9\u4e2a\u6570\u5b57\uff0c\u800c\u5728\u4e8e\u5b83\u7cbe\u51c6\u5207\u4e2d\u4e86AI\u8bad\u7ec3\u6570\u636e\u5e02\u573a\u4e2d\u4e00\u4e2a\u88ab\u5ffd\u89c6\u7684\u75db\u70b9\uff1a\u91c7\u8d2d\u6548\u7387\u3002\u4f20\u7edf\u6a21\u5f0f\u4e0b\uff0c\u65e0\u8bba\u81ea\u5efa\u8fd8\u662f\u8d2d\u4e70\uff0c\u6570\u636e\u56e2\u961f\u90fd\u8981\u5728\u5de5\u7a0b\u6d88\u8017\u548c\u9500\u552e\u6c9f\u901a\u4e2d\u8017\u8d39\u5927\u91cf\u65f6\u95f4\uff0c\u800cRecipeBook\u7528\u201c\u641c\u7d22-\u6295\u7968-\u6309\u9700\u8d2d\u4e70\u201d\u7684\u95ed\u73af\uff0c\u5c06\u91c7\u8d2d\u5468\u671f\u4ece\u6570\u5468\u538b\u7f29\u5230\u4e00\u5929\u5185\uff0c\u8fd9\u662f\u771f\u6b63\u7684\u6548\u7387\u9769\u547d\u30023\u7f8e\u5143\/\u5c0f\u65f6\u7684\u5b9a\u4ef7\u66f4\u662f\u6781\u5177\u4fb5\u7565\u6027\uff0c\u76f4\u63a5\u6495\u5f00\u4e86\u9ad8\u6ea2\u4ef7\u6570\u636e\u5e02\u573a\u7684\u53e3\u5b50\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u4ea7\u54c1\u6700\u5927\u7684\u9690\u60a3\u5199\u5728\u4e86\u8bc4\u8bba\u533a\uff1a\u7248\u6743\u95ee\u9898\u3002\u521b\u59cb\u4eba\u58f0\u79f0\u201c\u6536\u96c6\u65b9\u5f0f\u4e0d\u6d89\u53ca\u8fdd\u89c4\u201d\u5e76\u63f4\u5f15\u516c\u5171\u6570\u636e\u5224\u4f8b\u6cd5\uff0c\u4f46\u201c\u516c\u5f00\u722c\u53d6\u201d\u4e0e\u201c\u5546\u7528\u8bad\u7ec3\u201d\u4e4b\u95f4\u7684\u6cd5\u5f8b\u7070\u8272\u5730\u5e26\u6b63\u5728\u6210\u4e3a\u884c\u4e1a\u96f7\u533a\u3002OpenAI\u3001Stability AI\u90fd\u56e0\u7c7b\u4f3c\u505a\u6cd5\u5403\u5b98\u53f8\uff0cRecipeBook\u4e0d\u80fd\u4ec5\u9760\u81ea\u8bf4\u81ea\u8bdd\u7684\u6761\u6b3e\u514d\u8d23\u3002\u82e5\u65e0\u6cd5\u63d0\u4f9b\u660e\u786e\u7684\u6388\u6743\u94fe\u6216\u53ef\u8ffd\u6eaf\u7684\u5408\u89c4\u5c42\uff0c\u5bf9\u5546\u4e1a\u5ba2\u6237\u800c\u8a00\u5c31\u662f\u5b9a\u65f6\u70b8\u5f39\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u6b64\u5916\uff0c\u5143\u6570\u636e\u8584\u5f31\uff08\u65e0\u5b57\u5e55\u3001\u65e0\u4e92\u52a8\u6570\u636e\uff09\u610f\u5473\u7740\u641c\u7d22\u4f9d\u8d56\u7eaf\u89c6\u89c9\u8bed\u4e49\uff0c\u8fd9\u9650\u5236\u4e86\u9ad8\u8d28\u91cf\u573a\u666f\uff08\u5982\u5bf9\u8bdd\u7406\u89e3\u3001\u60c5\u611f\u5206\u6790\uff09\u7684\u53ef\u7528\u6027\u3002\u4ea7\u54c1\u662f\u597d\u4ea7\u54c1\uff0c\u4f46\u60f3\u4ece\u201c\u5b9e\u9a8c\u5ba4\u597d\u5de5\u5177\u201d\u5347\u7ea7\u4e3a\u201c\u4f01\u4e1a\u7ea7\u57fa\u7840\u8bbe\u65bd\u201d\uff0c\u5fc5\u987b\u5148\u89e3\u51b3\u6cd5\u5f8b\u5408\u89c4\u548c\u5143\u6570\u636e\u6df1\u5ea6\u95ee\u9898\u2014\u2014\u5426\u5219\uff0c\u4f4e\u4ef7\u548c\u6548\u7387\u53ea\u662f\u52a0\u901f\u8e29\u96f7\u7684\u6cb9\u95e8\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\">RecipeBook by Shofo<\/span>\n                <\/div>\n<div class=\"comment-content\">Recipe Book is a video data platform where you can semantically search 25M+ clips, iterate on the results, and buy the exact dataset you need to train your model in one sitting. Search -> rate a few clips -> we train a probe on your votes to re-rank the whole catalog to your taste. No contact forms, no sales calls, $3\/hour.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">What&#8217;s up PH, I&#8217;m Braiden, co-founder of Shofo (YC W26). <\/p>\n<p>Every team training a model faces the same data decision: build or buy. Building means spending engineering talent on collection (reverse engineer APIs, deal w proxies, fight scraping defenses, filtering, maintenance) all to collect data sitting in the open. Buying isn&#8217;t much better. Prices run from $15 to $480 per hour, and your ideal dataset still sits behind a wall of sales calls, samples, and weeks (sometimes months) of collection and iteration. That time can be the difference between SOTA and irrelevant.<\/p>\n<p>RecipeBook gives you the ability to search, filter, and build training datasets from millions of publicly available videos in the same day. You search in plain language, narrow with metadata filters (fps, resolution, duration, aspect ratio), and upvote and downvote clips based on needs. Once you vote, we train a classifier on your picks to re-rank the whole catalog to your taste, so you get the exact dataset you need. (Just a few votes can meaningfully change results)<\/p>\n<p>Once you&#8217;re happy with results, you type in how many hours you want. Ask for 1,000 and you get a review sheet: the score distribution, a playable grid of the worst clips in the order so you can see the floor, and a trim slider where the count and price all live. Check out at $3\/hour and a manifest CSV with download links hits your inbox within a couple minutes (or instantly depending on size of purchase).<\/p>\n<p>Biggest downfall is that metadata isn&#8217;t super strong right now. No captions or engagement on the corpus (yet), so search is purely visual. (If you think it&#8217;s something else please tell me!!)<\/p>\n<p>Our team has spent years in data collection and curation. We&#8217;ve indexed billions of videos across the internet and built systems to serve that data on request across all modalities. Along the way we learned the data you need to train your model is already public, you just haven&#8217;t found it yet.<\/p>\n<p>If you&#8217;re training a video or multimodal model, give it a try and tell me what you think. <\/p>\n<p>If you know a team sourcing large-scale video data (video gen, VLMs, world models, seed to Series A), intro us and I&#8217;ll buy you dinner.<\/p><\/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\/@braiden_dishman1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@braiden_dishman1<\/a>&nbsp;Congrats on shipping this. The volume of data processed is impressive<\/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 search-then-buy flow is clever, but the thing i&#8217;d want answered before using this commercially is rights, not workflow. &#8220;publicly available&#8221; and &#8220;cleared for training a model you&#8217;re going to sell&#8221; are two very different bars, and that gap is exactly what&#8217;s driving a bunch of the current lawsuits against scrapers. is there any licensing\/consent layer behind the 25M clips, or is it on the buyer to figure out whether a given clip is actually safe to train on?<\/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\/@omri_ben_shoham1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@omri_ben_shoham1<\/a>&nbsp;Hey Omri, when we collect data we do so in a way that does not require logins, agreeing to TOS, creating fake accounts, etc. Our bar for collection methods is quite high and our approach is supported by public data case law. There are terms on RecipeBook&#8217;s website that provide a bit more detail as well as a takedown form if that&#8217;s helpful!<\/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>Searched for a tricky cooking motion I&#8217;d been hunting for and the re-rank after a few votes actually nailed it. The no-sales-call, pay-by-hour setup is refreshing.<\/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\/U43MYE3V76RPVV\" class=\"app-title\">SUB\/WAVE<\/a><\/p>\n<div class=\"one-liner\">Self-hosted radio with an AI DJ and one shared stream<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">104<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>SUB\/WAVE\u80fd\u5c06\u4f60\u7684\u672c\u5730\u97f3\u4e50\u5e93\u53d8\u6210\u4e00\u53f0\u771f\u6b63\u7684\u5e7f\u64ad\u7535\u53f0\uff0c\u901a\u8fc7AI DJ\u7edf\u4e00\u9009\u66f2\u3001\u53e3\u64ad\u548c\u63a5\u53d7\u81ea\u7136\u8bed\u8a00\u70b9\u6b4c\uff0c\u89e3\u51b3\u6d41\u5a92\u4f53\u65f6\u4ee3\u4e2a\u4eba\u542c\u6b4c\u5b64\u72ec\u3001\u7f3a\u4e4f\u5171\u4eab\u4f53\u9a8c\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\/87de9485-aa01-4df0-bf54-906dcc023b3b.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\/038e80c3-aa26-4947-ae8b-e97c8265bc00.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\/37dbed5a-ce61-43e3-9a52-93ba6a96c0d9.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\/a5213444-5376-49dc-9b64-654dba411b19.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\/29e4ebf0-887b-4139-a5aa-b0fd417bb804.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\/d786d9a1-f467-4f8f-b334-dc9ec09d21dd.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\">Open Source<\/span><br \/>\n            <span class=\"tag\">Streaming Services<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u81ea\u6258\u7ba1\u5e7f\u64ad<\/span><br \/>\n            <span class=\"tag\">AI DJ<\/span><br \/>\n            <span class=\"tag\">\u672c\u5730\u97f3\u4e50\u5e93<\/span><br \/>\n            <span class=\"tag\">\u5171\u4eab\u6d41\u5a92\u4f53<\/span><br \/>\n            <span class=\"tag\">\u5f00\u6e90<\/span><br \/>\n            <span class=\"tag\">\u79c1\u6709\u90e8\u7f72<\/span><br \/>\n            <span class=\"tag\">\u97f3\u4e50\u53d1\u73b0<\/span><br \/>\n            <span class=\"tag\">\u7535\u53f0\u4f53\u9a8c<\/span><br \/>\n            <span class=\"tag\">\u672c\u5730LLM<\/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\u79f0\u8d5e\u5176\u8ba9\u97f3\u4e50\u5e93\u201c\u6d3b\u8d77\u6765\u201d\u7684\u5171\u4eab\u4f53\u9a8c\uff1b\u4f46\u591a\u6570\u4eba\u53cd\u9988\u5df2\u4e0d\u4f7f\u7528\u672c\u5730\u6587\u4ef6\uff0c\u4f9d\u8d56Spotify\u7b49\u6d41\u5a92\u4f53\u3002\u6709\u7528\u6237\u5e0c\u671b\u589e\u52a0\u201c\u4ec5\u64ad\u653e\u4e45\u672a\u542c\u66f2\u76ee\u201d\u7684\u5f3a\u5236\u53d1\u73b0\u6a21\u5f0f\uff0c\u5f00\u53d1\u8005\u56de\u5e94\u90e8\u5206\u529f\u80fd\u5df2\u5b58\u5728\uff0c\u5e76\u8ba4\u53ef\u8be5\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                SUB\/WAVE\u5728\u201c\u53cd\u7b97\u6cd5\u201d\u548c\u201c\u5171\u4eab\u4eea\u5f0f\u611f\u201d\u4e0a\u505a\u4e86\u4e00\u6b21\u6f02\u4eae\u7684\u590d\u53e4\u521b\u65b0\u3002\u5b83\u7cbe\u51c6\u7784\u51c6\u4e86\u4e00\u4e2a\u5c0f\u4f17\u4f46\u771f\u5b9e\u5b58\u5728\u7684\u7fa4\u4f53\uff1a\u62e5\u6709NAS\u3001Plex\u6216Navidrome\u7684\u201c\u6570\u5b57\u56e4\u79ef\u8005\u201d\u2014\u2014\u8fd9\u4e9b\u4eba\u4e0d\u662f\u6ca1\u6709\u6b4c\uff0c\u800c\u662f\u7f3a\u4e00\u4e2a\u8ba9\u6b4c\u201c\u6d41\u52a8\u8d77\u6765\u201d\u7684\u53d9\u4e8b\u8005\u3002AI DJ\u4e0d\u662f\u53d6\u4ee3\u4eba\uff0c\u800c\u662f\u626e\u6f14\u4e86\u201c\u7535\u53f0\u5bfc\u64ad\u201d\u89d2\u8272\uff1a\u5b83\u61c2\u6b4c\u66f2\u8fc7\u6e21\u7684\u7269\u7406\u7279\u6027\uff08\u6e10\u5f31\u3001\u9aa4\u505c\u3001\u5206\u8f68\u6df7\u97f3\uff09\uff0c\u80fd\u751f\u6210\u4e0d\u540c\u4eba\u683c\u7684\u4e32\u573a\u8bcd\uff0c\u751a\u81f3\u5141\u8bb8\u8282\u76ee\u7f16\u6392\u3002\u8fd9\u80cc\u540e\u662f\u5bf9\u201c\u4fe1\u606f\u5206\u53d1\u65b9\u5f0f\u201d\u7684\u91cd\u65b0\u601d\u8003\uff1a\u5355\u4e2a\u542c\u4f17\u65e0\u6cd5\u8df3\u8fc7\u6216\u79c1\u5bc6\u5316\u64ad\u653e\u5217\u8868\uff0c\u6240\u6709\u4eba\u5171\u4eab\u540c\u4e00\u6bb5\u58f0\u97f3\u65f6\u95f4\u7ebf\uff0c\u672c\u8d28\u4e0a\u662f\u628a\u97f3\u4e50\u4ece\u79c1\u4eba\u6d88\u8d39\u62c9\u56de\u516c\u5171\u6587\u5316\u7a7a\u95f4\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u5b83\u7684\u5c40\u9650\u6027\u540c\u6837\u660e\u663e\uff1a\u5b8c\u5168\u4f9d\u8d56\u7528\u6237\u62e5\u6709\u672c\u5730\u9ad8\u8d28\u91cf\u66f2\u5e93\uff0c\u4e14\u5bf9\u672c\u5730\u90e8\u7f72LLM\u548cTTS\u6709\u4e00\u5b9a\u6280\u672f\u95e8\u69db\uff0c\u8fd9\u6ce8\u5b9a\u65e0\u6cd5\u8fdb\u5165\u5927\u4f17\u5e02\u573a\u3002\u4ea7\u54c1\u5f53\u524d\u7684\u6838\u5fc3\u4ef7\u503c\u4e0d\u662f\u5bf9\u6297Spotify\uff0c\u800c\u662f\u4e3a\u81ea\u6258\u7ba1\u751f\u6001\u589e\u52a0\u4e00\u4e2a\u201c\u6709\u6e29\u5ea6\u7684\u4e2d\u67a2\u201d\u2014\u2014\u5b83\u628a\u539f\u672c\u6b7b\u677f\u7684\u6587\u4ef6\u7cfb\u7edf\u53d8\u6210\u4e86\u6709\u547c\u5438\u8282\u594f\u7684\u5e7f\u64ad\u6d41\u3002\u771f\u6b63\u4eae\u773c\u7684\u662f\u5176\u5e95\u5c42\u67b6\u6784\u8bbe\u8ba1\uff1a\u672c\u5730\u5316\u4f18\u5148\u3001LLM\u4ec5\u7528\u4e8e\u5185\u5bb9\u751f\u6210\u800c\u4e0d\u4f20\u8f93\u5143\u6570\u636e\u3001\u5bf9Streaming\u534f\u8bae\uff08Subsonic\/Sonos\uff09\u7684\u517c\u5bb9\uff0c\u8fd9\u4e9b\u624d\u662f\u5f00\u53d1\u8005\u4f5c\u4e3a\u201c\u5f00\u6e90\u57fa\u5efa\u6d3e\u201d\u7684\u771f\u5b9e\u529f\u529b\u3002\u5982\u679c\u672a\u6765\u80fd\u652f\u6301\u4eceYouTube\u7b49\u5e73\u53f0\u6309\u9700\u4e0b\u8f7d\u5e76\u6e90\u7ba1\u7406\uff0c\u6216\u5f15\u5165\u793e\u533a\u516c\u5171\u7535\u53f0\u6a21\u5f0f\uff0c\u53ef\u80fd\u4f1a\u89e6\u53d1\u66f4\u5927\u7684\u88c2\u53d8\u3002\u76ee\u524d\u6765\u770b\uff0c\u5b83\u66f4\u50cf\u4e00\u4ef6\u201c\u6570\u5b57\u85cf\u54c1\u201d\u2014\u2014\u5c5e\u4e8e\u90a3\u4e9b\u613f\u610f\u4e3a\u81ea\u5df1\u97f3\u4e50\u5e93\u5efa\u7b51\u4e00\u5ea7\u53d1\u5c04\u5854\u7684\u4eba\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\">SUB\/WAVE<\/span>\n                <\/div>\n<div class=\"comment-content\">SUB\/WAVE turns your music library into a real radio station: one shared stream, an AI DJ that picks tracks, reads idents and takes requests in plain language. Self-hosted, works with local LLMs, MIT licensed. Web, iOS, Android and desktop players.<\/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>I&#8217;m Parminder, and for the last three months I&#8217;ve been building the radio station I always wanted.<\/p>\n<p>Streaming apps gave us infinite choice and somehow made music lonely. Everyone sits in their own algorithmic bubble. I missed radio: one broadcast, everyone hearing the same song at the same time, a voice between tracks that makes it feel alive.<\/p>\n<p>SUB\/WAVE is that, self-hosted. Point it at your music library (Navidrome or any Subsonic server), give it an LLM (a local Ollama model is enough) and you get a 24\/7 station: an AI DJ picks the tracks, does station idents, reads the time and weather, and takes song requests in plain language. People tune in from the web player, native iOS and Android apps, a desktop app, or anything that plays an MP3 stream, including Sonos and car radios.<\/p>\n<p>Some things I&#8217;m proud of:<\/p>\n<p>&#8211; It&#8217;s radio, not a playlist. No skip button, no per-listener shuffle. You tune in and hear whatever&#8217;s on.<br \/>\n&#8211; Transitions are ending-aware. The DJ knows whether a song fades out or ends cold, and can even blend stems between tracks.<br \/>\n&#8211; DJ personas, guest co-hosts with banter, and produced programmes with per-episode plans.<br \/>\n&#8211; Everything can run locally: LLM via Ollama, local TTS, your own music files. No cloud required.<br \/>\n&#8211; MIT licensed. 48 releases in three months, and it just hit 1.0 this week.<\/p>\n<p>There&#8217;s a live demo station if you want to hear it before installing anything: <a href=\"https:\/\/www.getsubwave.com\/listen\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/www.getsubwave.com\/listen<\/a><\/p>\n<p>I&#8217;d love to hear what you&#8217;d want from a station of your own. I&#8217;ll be around all day answering questions.<\/p><\/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\/@perminder_klair\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@perminder_klair<\/a>&nbsp;Congratulations on the 1.0 launch, Parminder! \ud83c\udf89 This is one of the most unique takes on AI and music I&#8217;ve seen. Bringing back the shared experience of radio\u2014while keeping everything self-hosted and privacy-friendly\u2014is a compelling idea. The ending-aware transitions and AI DJ personalities are especially impressive. Wishing you a fantastic launch day! I&#8217;m curious: what&#8217;s been the most surprising way people are using SUB\/WAVE so far?<\/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>It looks good, but a problem for me and for most people now i guess is that we don&#8217;t store our music files, just use spotify or apple music<\/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\/@kamil_infeld\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@kamil_infeld<\/a>&nbsp;Fair, and you&#8217;re right that it&#8217;s most people. SUB\/WAVE needs a library you actually hold, so if you&#8217;re all-in on Spotify or Apple Music it isn&#8217;t for you and I&#8217;m not going to pretend otherwise.<\/p>\n<p>The people it&#8217;s built for are the ones with a Navidrome or Plex server and a few hundred gigs of files they never get through. Smaller crowd, but it&#8217;s a real one.<\/p>\n<p>If you ever do pull your library down, it&#8217;s here. Either way, thanks for looking.<\/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 app has been the highlight of my summer. <\/p>\n<p>My music library feel alive now. <\/p>\n<p>10\/10 excellent project and incredible dev behind 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\/@tinkermesomething\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@tinkermesomething<\/a>&nbsp;That&#8217;s genuinely made my week. Thank you.<\/p>\n<p>Curious what persona you settled on too, most people rewrite the built-in ones within a week.<\/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 very cool! Like a self-sovereign Spotify AI DJ \ud83d\ude00<\/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\/@conduit_design\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@conduit_design<\/a>&nbsp;Thanks. Self-sovereign is a good way to put it. If you run Ollama and local TTS, nothing leaves the box at all. The only thing it phones out for is the weather.<\/p>\n<p>Closer to a station than a DJ though. One stream, everyone hears the same track, no skip button.<\/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>Love the self-hosted angle and the AI DJ taking plain-language requests is a great touch. One thing I&#8217;d love: a &#8220;discover from my own library&#8221; mode where the DJ only pulls from tracks you haven&#8217;t played in a while, so it actually helps you rediscover music instead of leaning on the same favorites.<\/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\/@referralpro\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@referralpro<\/a>&nbsp;Thanks. Part of that is already in there: the picker builds its candidate pool from several sources, and deep cuts and rarely-played tracks are one of them. There&#8217;s also a deep-cut skill where the DJ digs something out of the back of the library and talks about why it&#8217;s been sitting there.<\/p>\n<p>What doesn&#8217;t exist yet is the hard version you&#8217;re describing, something like &#8220;nothing I&#8217;ve played in the last 60 days, no exceptions&#8221;. That&#8217;s a pool-level filter and it&#8217;s a good idea.<\/p>\n<p>If you want to hear the current behaviour, the demo station is at <a href=\"http:\/\/getsubwave.com\/listen\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">getsubwave.com\/listen<\/a>. It&#8217;ll play things I&#8217;d forgotten I owned.<\/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\">I probably wouldn\u2019t replace Spotify with this, but I do like the idea of turning a personal music library into something that feels alive instead of just another playlist. The shared stream and local setup give it a character most music apps have lost. Congrats on the launch!<\/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\/@etiennegarcia\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@etiennegarcia<\/a>&nbsp;Thanks. And you shouldn&#8217;t replace Spotify with it, that&#8217;s not the job. It only works if you already have the files.<\/p>\n<p>The alive part is the bit I care about most. One stream, no per-listener anything, no skip button. You tune in and whatever&#8217;s on is what&#8217;s on. Turns out that changes how you listen more than I expected.<\/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<\/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-28 PH\u70ed\u699c | 2026-07-28 #1 Prefa [&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-296","post","type-post","status-publish","format-standard","hentry","category-producthunt"],"_links":{"self":[{"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/posts\/296","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=296"}],"version-history":[{"count":0,"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/posts\/296\/revisions"}],"wp:attachment":[{"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/media?parent=296"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/categories?post=296"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/tags?post=296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}