{"id":266,"date":"2026-06-29T13:03:47","date_gmt":"2026-06-29T05:03:47","guid":{"rendered":"https:\/\/ph.listeningo.cn\/index.php\/2026\/06\/29\/2026-06-28\/"},"modified":"2026-06-29T13:03:47","modified_gmt":"2026-06-29T05:03:47","slug":"2026-06-28","status":"publish","type":"post","link":"https:\/\/ph.listeningo.cn\/index.php\/2026\/06\/29\/2026-06-28\/","title":{"rendered":"PH\u70ed\u699c | 2026-06-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-06-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-06-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\/FBBEAOCYJDEVTT\" class=\"app-title\">discode.ai<\/a><\/p>\n<div class=\"one-liner\">100+ AI models, one interface. ECO friendly.<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">333<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Discode.ai \u662f\u4e00\u4e2a\u73af\u4fdd\u578bAI\u8def\u7531\u5668\uff0c\u901a\u8fc7\u7edf\u4e00\u63a5\u53e3\u81ea\u52a8\u8c03\u5ea6100+\u6a21\u578b\uff0c\u5728\u4fdd\u8bc1\u4efb\u52a1\u8d28\u91cf\u7684\u540c\u65f6\uff0c\u6309\u7528\u6237\u8bbe\u5b9a\u7684\u201c\u667a\u80fd\u3001\u901f\u5ea6\u3001\u73af\u4fdd\u201d\u504f\u597d\uff0c\u5b9e\u65f6\u8ba1\u7b97\u5e76\u5c55\u793a\u6bcf\u6b21\u8bf7\u6c42\u7684\u78b3\u3001\u6c34\u3001\u80fd\u8017\u8db3\u8ff9\uff0c\u89e3\u51b3\u7528\u6237\u5728\u591a\u6a21\u578b\u9009\u62e9\u4e2d\u6548\u7387\u4f4e\u3001\u6210\u672c\u9ad8\u3001\u73af\u5883\u4ee3\u4ef7\u4e0d\u900f\u660e\u7684\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\/106b9bca-50b4-4983-94c5-4f65119d2dac.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\/95aba8ce-aa19-4d28-8875-28d22daa5646.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\/96bf01bc-4cfe-45f9-b476-416dfb0f40a2.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\/906699e0-dad7-4b4a-802d-c1017f4c9c01.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\/25044955-4cec-4639-845f-f44081ed701a.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\/2a98cd7c-4f15-475f-aedd-48e603d111de.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\/bcc78bb0-0eb8-49d3-bd47-c8760c2cb64a.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=MHGjefLrkv4\"><source src=\"https:\/\/www.youtube.com\/watch?v=MHGjefLrkv4\" 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\">SaaS<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u8def\u7531\u5668<\/span><br \/>\n            <span class=\"tag\">\u591a\u6a21\u578b\u8c03\u5ea6<\/span><br \/>\n            <span class=\"tag\">\u73af\u4fddAI<\/span><br \/>\n            <span class=\"tag\">\u9690\u79c1\u8fc7\u6ee4<\/span><br \/>\n            <span class=\"tag\">\u78b3\u8db3\u8ff9\u8ffd\u8e2a<\/span><br \/>\n            <span class=\"tag\">\u5f00\u6e90\u66ff\u4ee3<\/span><br \/>\n            <span class=\"tag\">\u6b27\u6d32AI<\/span><br \/>\n            <span class=\"tag\">\u667a\u80fd\u8def\u7531<\/span><br \/>\n            <span class=\"tag\">\u751f\u6001\u6ed1\u5757<\/span><br \/>\n            <span class=\"tag\">\u6a21\u578b\u900f\u660e<\/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\u73af\u4fdd\u89c6\u89d2\u548c\u9690\u79c1\u8fc7\u6ee4\u529f\u80fd\uff0c\u4f46\u63d0\u51fa\u6838\u5fc3\u7591\u95ee\uff1a\u73af\u4fdd\u8def\u7531\u82e5\u5148\u9009\u4e86\u4f4e\u529f\u8017\u6a21\u578b\u5bfc\u81f4\u56de\u7b54\u4e0d\u4f73\u9700\u91cd\u8bd5\uff0c\u53cd\u800c\u589e\u52a0\u603b\u78b3\u6392\u3002\u8fd8\u6709\u7528\u6237\u5173\u6ce8\u591a\u6a21\u578b\u95f4\u4e0a\u4e0b\u6587\u5982\u4f55\u4fdd\u6301\u3001\u4f01\u4e1a\u7248\u8ba1\u5212\u3001\u4ee5\u53ca\u80fd\u5426\u6309\u767e\u5206\u6bd4\u81ea\u5b9a\u4e49\u4f18\u5316\u6743\u91cd\u3002\u56e2\u961f\u56de\u5e94\u8bda\u6073\uff0c\u627f\u8ba4\u91cd\u8bd5\u8ba1\u5165\u78b3\u6392\uff0c\u6b63\u4f18\u5316\u667a\u80fd\u5347\u7ea7\u903b\u8f91\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                Discode.ai \u505a\u4e86\u4e00\u4ef6AI\u884c\u4e1a\u51e0\u4e4e\u6ca1\u4eba\u613f\u610f\u505a\u7684\u4e8b\uff1a\u628a\u9690\u5f62\u6210\u672c\u6446\u4e0a\u53f0\u9762\u3002\u5b83\u4e0d\u662f\u53c8\u4e00\u4e2a\u5806\u53c2\u6570\u7684\u804a\u5929\u673a\u5668\u4eba\uff0c\u800c\u662f\u4e00\u4e2a\u4ef7\u503c\u89c2\u9a71\u52a8\u7684\u8def\u7531\u5668\u2014\u2014\u5728\u201c\u6a21\u578b\u8db3\u591f\u597d\u201d\u548c\u201c\u6027\u80fd\u6700\u5f3a\u201d\u4e4b\u95f4\u6495\u5f00\u4e00\u9053\u53e3\u5b50\uff0c\u585e\u8fdb\u4e86\u73af\u4fdd\u3001\u9690\u79c1\u4e0e\u900f\u660e\u5ea6\u3002\u8fd9\u79cd\u5b9a\u4f4d\u806a\u660e\u800c\u5371\u9669\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u806a\u660e\u4e4b\u5904\u5728\u4e8e\uff0c\u5b83\u7cbe\u51c6\u51fb\u4e2d\u4e86\u4e24\u4e2a\u7fa4\u4f53\uff1a\u4e00\u662f\u6b27\u6d32\u5e02\u573a\u5bf9\u6570\u636e\u4e3b\u6743\u7684\u7126\u8651\uff0c\u4e8c\u662f\u884c\u4e1a\u5bf9\u201cAI\u80fd\u8017\u6ce1\u6cab\u201d\u7684\u8b66\u89c9\u3002\u56e2\u961f\u523b\u610f\u533a\u5206\u4e86\u201c\u66f4\u5f3a\u201d\u4e0e\u201c\u66f4\u597d\u201d\u7684\u53d9\u4e8b\uff0c\u7528Eco\u6ed1\u5757\u3001Challenger\u6a21\u5f0f\u548c\u78b3\u6392\u653e\u8bfb\u6570\uff0c\u5c06\u7528\u6237\u4ece\u88ab\u52a8\u6d88\u8d39\u8005\u8f6c\u5316\u4e3a\u4e3b\u52a8\u51b3\u7b56\u8005\u3002\u5c24\u5176\u662f\u201c\u663e\u793a\u8c01\u56de\u7b54\u4e86\u4e3a\u4ec0\u4e48\u201d\u8fd9\u4e00\u8bbe\u8ba1\uff0c\u5bf9\u5f53\u4e0b\u6a21\u578b\u8c03\u7528\u7684\u9ed1\u7bb1\u903b\u8f91\u662f\u76f4\u63a5\u7684\u53cd\u53db\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u5371\u9669\u4e4b\u5904\u540c\u6837\u660e\u663e\u3002\u6838\u5fc3\u5356\u70b9\u201c\u73af\u4fdd\u8def\u7531\u201d\u5b58\u5728\u903b\u8f91\u6096\u8bba\uff1a\u82e5\u521d\u9009\u5931\u51c6\u5bfc\u81f4\u91cd\u8bd5\uff0c\u80fd\u8017\u53ef\u80fd\u8d85\u8fc7\u76f4\u63a5\u8c03\u7528\u65d7\u8230\u6a21\u578b\u3002\u521b\u59cb\u4eba\u4eb2\u81ea\u56de\u5e94\u7528\u6237\u8d28\u7591\uff0c\u627f\u8ba4\u91cd\u8bd5\u8ba1\u5165\u78b3\u6392\uff0c\u4f46\u201c\u5b66\u4e60\u5347\u7ea7\u201d\u8fd8\u5728\u8def\u4e0a\u2014\u2014\u8fd9\u672c\u8d28\u4e0a\u662f\u62bc\u6ce8\u9884\u6d4b\u51c6\u786e\u7387\u7684\u957f\u671f\u8fdb\u5316\uff0c\u800c\u76ee\u524d\u4ecd\u4f9d\u8d56\u9759\u6001\u5206\u6863\u548c\u4eba\u5de5\u53cd\u9988\uff0c\u7cbe\u5ea6\u5b58\u7591\u3002\u6b64\u5916\uff0c100+\u6a21\u578b\u7684\u8def\u7531\u610f\u5473\u7740\u590d\u6742\u7684\u4e0a\u4e0b\u6587\u7ba1\u7406\u548c\u5ef6\u8fdf\u63a7\u5236\uff0c\u7528\u201c\u975e\u6280\u672f\u4eba\u5458\u201d\u7684\u521b\u59cb\u4eba\u6545\u4e8b\u8425\u9500\u867d\u52a8\u4eba\uff0c\u4f46\u6280\u672f\u843d\u5730\u662f\u5426\u7a33\u5b9a\uff0c\u8fd8\u9700\u9a8c\u8bc1\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u771f\u6b63\u503c\u5f97\u79f0\u9053\u7684\u662f\u4ea7\u54c1\u7406\u5ff5\u7684\u591a\u5c42\u514b\u5236\uff1a\u4e0d\u5356\u201c\u6700\u5f3a\u6a21\u578b\u201d\uff0c\u4e0d\u9ed1\u7bb1\u5316\u51b3\u7b56\uff0c\u4e0d\u56de\u907f\u73af\u5883\u4ee3\u4ef7\uff0c\u4e0d\u628a\u9690\u79c1\u5f53\u4f01\u4e1a\u4ed8\u8d39\u529f\u80fd\u3002\u8fd9\u79cd\u201c\u53cd\u4e3b\u6d41\u201d\u7684\u8eab\u4efd\u6784\u5efa\uff0c\u6bd4\u8bb8\u591a\u9ad8\u4e3e\u9ad8\u6253\u7684AI\u5de5\u5177\u66f4\u5177\u957f\u671f\u8bf4\u670d\u529b\u3002\u4f46\u514b\u5236\u4e0d\u7b49\u4e8e\u597d\u5356\uff0c\u4f01\u4e1a\u7248\u8ba1\u5212\u5c1a\u5728\u5236\u4f5c\u3001\u8def\u7531\u7b97\u6cd5\u7684\u81ea\u6211\u4f18\u5316\u672a\u95ed\u73af\u2014\u2014\u8fd9\u53f0\u201c\u901a\u5f80\u66f4\u597dAI\u7684\u7f57\u76d8\u201d\uff0c\u8fd8\u9700\u5728\u5b9e\u6218\u4e2d\u8bc1\u660e\uff0c\u5b83\u4e0d\u53ea\u662f\u7ed9\u4eba\u8bb2\u4e86\u4e00\u4e2a\u597d\u542c\u7684\u6545\u4e8b\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\">discode.ai<\/span>\n                <\/div>\n<div class=\"comment-content\">discode is your EU-friendly AI router: one interface for 100+ models, with every prompt auto-routed to the best one for the job. Or fine-tune it yourself along Smarter, Speed and Eco. It shows you which model answered and why, redacts your personal data on-device before anything leaves, checks the hard answers across multiple models, and estimates the CO\u2082, water and energy footprint of every request. Built in Vienna \ud83c\udde6\ud83c\uddf9. Your AI, your rhythm.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hey makers!<\/p>\n<p>I&#8217;m Pete from discode, thanks for checking out our launch.<\/p>\n<p>discode is an EU-friendly AI router that turns 100+ models into one interface. <\/p>\n<p>Every prompt gets auto-routed to the best model for the job, or you fine-tune it yourself along Smarter, Speed and Eco.<\/p>\n<p>The part I&#8217;m most excited about is <strong>Eco<\/strong>.<\/p>\n<p>Every AI answer burns electricity, water and CO\u2082. Most AI tools don&#8217;t put that bill in front of you. discode shows CO\u2082, water and energy for every request \u2013 across 100+ models.<br \/>So a one-line summary might fire up a frontier model: driving the van to the ice-cream shop around the corner when a bike would&#8217;ve done.<\/p>\n<p>\ud83c\udf31 Every answer shows a readout: CO\u2082, water, energy.<br \/>\ud83d\udeb2 Eco-Routing by default picks the most frugal model that can handle your task. 60\u201370% of requests run in the most efficient tier.<br \/>\ud83c\udf9a\ufe0f An Eco-Slider from 1 to 5 lets you push discode toward leaner models. You set the rhythm, not the algorithm.<\/p>\n<p>It&#8217;s a compass, not a measuring device: Honest estimates built on public research, which is why it&#8217;s in beta.<\/p>\n<p>And there&#8217;s plenty more under the hood: <strong>Challenger Mode<\/strong> (a different model reviews every answer), <strong>Trio Mode<\/strong> (3 models, one question, blind-judged), and on-device <strong>privacy filtering<\/strong> that redacts personal data before anything leaves your machine.<\/p>\n<p>Built in Vienna \ud83c\udde6\ud83c\uddf9, for everyone who&#8217;d like their AI to not cost the planet more than it has to.<\/p>\n<p>Would love your feedback &lt;3<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>20<\/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\/@peterbuch\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@peterbuch<\/a> Love the eco angle, nobody frames model choice this way. The failure mode I&#8217;d worry about: eco-routing picks the frugal model, it under-delivers, the user re-asks or you retry on a bigger one, and now you&#8217;ve burned MORE CO2 than just starting with the right model. How do you avoid the cheap-first-then-escalate tax, predict task difficulty up front, or does that retry cost get hidden from the readout?&nbsp;<\/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\/@peterbuch\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@peterbuch<\/a>&nbsp;Congratulations to you and the team first for building and second for the launch. I completely know the amount of work and dedication that went into production to finish line. One question, most AI model have memory of user&#8217;s activities or tasks. When multiple models are dispatched across a single task or conversation, how is memory and context handled? Does discode maintain a central context layer, or does each model only see what&#8217;s passed to it at that moment?<\/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\/@peterbuch\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@peterbuch<\/a>&nbsp;Congrats on the launch !!!<\/p>\n<p>The Eco angle is what really caught my attention. We talk a lot about model quality, speed, and cost, but almost never about the environmental impact of choosing one model over another.<\/p>\n<p>One thing I\u2019m curious about: after seeing the CO\u2082, water, and energy estimates, do users actually change their model choices, or do they mostly use the data for awareness? I&#8217;d love to know if you&#8217;ve seen behavior shift because of that transparency.<\/p>\n<\/p>\n<p>Also, Challenger Mode and Trio Mode sound like really fun ways to improve confidence in AI outputs.<\/p>\n<p>Excited to see where this goes.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hi Moriz and team; congratulations to the launch. I really like the one-device privacy filtering feature and the overall ECO dimension (amid the hottest days ever in our region\ud83d\ude13) Good luck and keep going!<\/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\/@georg_kopetz\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@georg_kopetz<\/a>&nbsp;Lieber Georg, thank you, that means a lot, especially from you.<\/p>\n<p>Those two are the heart of it for us, and really one idea. The on-device privacy filter is the sovereignty part we care about most: your data stays on your own machine, so using AI doesn&#8217;t quietly hand Europe&#8217;s data and value to infrastructure we don&#8217;t own or control. The eco side is the other half, and a week like this makes it painfully literal (this heat we&#8217;re both sitting in is no joke). That&#8217;s the different race we&#8217;d rather run: not who builds the most powerful system, but whether Europe can build AI that stays sustainable and keeps the person in control, here, on our own terms.<\/p>\n<p>We&#8217;re early and we own it, the eco numbers are estimates and a first step, so having you see what we&#8217;re reaching for is real fuel. Thank you, and stay cool in this heat.<\/p>\n<p>Mo<\/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\/@georg_kopetz\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@georg_kopetz<\/a>&nbsp;thank you, Georg!!<\/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\">@georg_kopetz thank you!<\/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>Hi! It\u2018s finally live!<\/p>\n<p>From corporate design and UI-design to branding and illustration, I\u2018m happy to be part of the disco. Let\u2018s explore and improve the visual side of discode!<\/p>\n<p> H<\/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\/@harald_lustinger1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@harald_lustinger1<\/a>&nbsp;thanks Harry, it&#8217;s been a fun working with you and the time. Let&#8217;s keep making discode 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<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">@harald_lustinger1 you did such an outstanding job to create a unique, yet usable identity!!<\/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\/@harald_lustinger1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@harald_lustinger1<\/a>&nbsp;Harry, the whole look people are falling for, the characters, the disco, the way it feels calm instead of techy, that&#8217;s very much you. Thank you for giving discode a face that&#8217;s actually a joy to look at. Plenty more to explore on the visual side together. \ud83e\udea9<\/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 everyone, Moriz here, the one who started this whole disco. \ud83e\udea9<\/p>\n<p>Quick confession: <strong>I can&#8217;t code<\/strong>. My last brush with it was an HTML course in the late 90s, and I&#8217;m part of a coffee-house project in Vienna. So, very much not a techie. A few months ago I got stuck on questions nobody seemed to be building for:<\/p>\n<ol>\n<li>\n<p>What does AI <strong>cost the planet<\/strong>, and how do you let people see it, steer it, and weigh the trade-offs without guilt?<\/p>\n<\/li>\n<li>\n<p>AI is confidently wrong. What does honest uncertainty look like <strong>when reliability matters<\/strong>?<\/p>\n<\/li>\n<li>\n<p>When a doctor or lawyer uses AI, their patients and clients are exposed, usually without anyone noticing. Why isn&#8217;t <strong>privacy the default<\/strong> for ordinary people, not just an enterprise feature?<\/p>\n<\/li>\n<\/ol>\n<p>So I went down the vibecoding rabbit hole. The irony isn&#8217;t lost on me: using Claude Code to build something meant to be more responsible than Claude itself. <strong>Three Claude Max subscriptions and $2,000 in API tokens later<\/strong>, my first version was a glorious <strong>417,000-line<\/strong> monster. After countless night shifts and weekends next to the day job, I understood I&#8217;d need real <strong>pros to ship<\/strong> this. A small crew of engineers and designers then carved that monster into something beautiful that actually works. Thousands of hours and a lot of love and creativity went into it. Thank you, all of you. (We&#8217;re hoping to earn that carbon back, too.)<\/p>\n<p>Pete already gave you the what: the routing, Eco, Challenger, the on-device privacy filter. So let me give you the why.<\/p>\n<p>The race everyone&#8217;s running is about <strong>who has the biggest model, who has the biggest&#8230; data centers<\/strong>, who has the biggest IPO. We want to open a different one. Not how AI gets more powerful or how you get rich off it, but <strong>how we build the best interface<\/strong> between people and these machines, so they serve us, and so Europe is more than the raw material quietly feeding them our data. Pro-European, not anti-American. I don&#8217;t think we should only consume what others build.<\/p>\n<p>We&#8217;re nowhere near done. The Eco score is a first step, which is why it&#8217;s in beta. discode is a lab and a playground for human-centered AI, and it gets better with you in it. So please: tell us what&#8217;s broken, what&#8217;s missing, what you&#8217;d do differently. And if we ship your idea, there are discode credits in it for you. Every honest note steers where this goes. \ud83d\ude4f<\/p>\n<p><strong>You choose the rhythm, not the algorithm.<\/strong><\/p>\n<p>Mo<\/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\/@mo_riz\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@mo_riz<\/a>&nbsp;it&#8217;s been a great pleasure working on this mission with you and the team.<br \/>Let&#8217;s go! <\/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>100+ models behind one interface is a bold scope tbh, curious how you keep the UX from feeling overwhelming when there&#8217;s that much choice. also the &#8220;eco friendly&#8221; angle is interesting, what&#8217;s actually driving that \u2014 smarter routing, less wasted compute, or something else.<\/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\/@martin_mo\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@martin_mo<\/a>&nbsp;Martin, agree, it&#8217;s bold, and it&#8217;s a lot of models. For us it was important to make sure we have the best model for each task, so we are starting with many. Regarding the ECO we are still in an R&amp;D phase, but what you&#8217;re mentioning is certainly important: less wasted compute, smarter routing, also using the model that&#8217;s good enough but not overkill. <\/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>As an AI chatbot that routes queries across 100+ models, protects user privacy, and tracks the environmental cost of each interaction, <a href=\"https:\/\/discode.ai\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">discode.ai<\/a> is to me an act of resistance against the extractive, engagement-driven business logic behind most of the internet.<\/p>\n<\/p>\n<p>And it&#8217;s live. And everyone can use it!<\/p>\n<p>\ud83e\udea9<\/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\/@juan_sebastian_gomez\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@juan_sebastian_gomez<\/a>&nbsp;it&#8217;s been great working with you on this. Let&#8217;s keep it up<\/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\/@juan_sebastian_gomez\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@juan_sebastian_gomez<\/a>&nbsp;An act of resistance against the extractive, engagement-driven logic behind most of the internet&#8221; is exactly the race we wanted to run, Sebastian, and you helped us actually mean it. Thank you for caring about the why as much as the what. And yeah: it&#8217;s live, and it&#8217;s for everyone. \ud83e\udea9<\/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 an ai-chatbot that protects user privacy, and tracks the environmental cost of each interaction, <a href=\"https:\/\/discode.ai\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">discode.ai<\/a> seems an act of resistance against the extractive, engagement-driven business logic behind most of the internet.<\/p>\n<\/p>\n<p>\ud83e\udea9<\/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\/@juan_sebastian_gomez\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@juan_sebastian_gomez<\/a>&nbsp;exciting to see where we can take the disco(de) <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The &#8220;you set the rhythm&#8221; line is what got me, most multi-model tools feel like a model zoo dump, but framing it around the user&#8217;s own pace is a nice touch.<\/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\">@yibo_wang3 thank you! That\u2019s what we were aiming for. Please let us know if you have any questions. Welcome to the discode.ai party!<\/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\/@yibo_wang3\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@yibo_wang3<\/a>&nbsp;thanks so much, Yibo, happy it resonates <\/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 the eco slider!<\/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\/@alexandra_prasch\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@alexandra_prasch<\/a>&nbsp;thank you, Alexandra. Also a big fan of that feature. Please let us know if you have any more feedback, happy to chat<\/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 eco-slider is interesting! Wondering&#8230;When the frugal tier under-serves a hard prompt and I re-ask, that retry probably burns more than just hitting a frontier model once? Does a re-ask count against the eco budget? Showing which model answered and why is the right call regardless!<\/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;Hi Art, you&#8217;ve put your finger on two of the things we care about most, and the transparency you mentioned, showing which model answered and why, is deliberate for exactly this situation.<\/p>\n<p>On the honest part: yes, a re-ask counts. Every attempt is metered, in cost and in CO\u2082, water and energy, so on a genuinely hard prompt a couple of tries can outweigh a single direct call. We don&#8217;t pretend otherwise, and that visibility is the point: you get to see it and decide, rather than us quietly spending more on your behalf.<\/p>\n<p>Where we&#8217;re headed is smarter about this: escalation that can bump a weak first answer up a tier without a full manual retry, and folding your retries back into routing so the system learns from them. The data for both is already being logged, so it&#8217;s a matter of wiring it through. Thanks for the nudge, this is exactly the kind of feedback that shapes what we build next.<\/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<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The Eco framing is the fresh part here, most routers sell speed and cost and stop there. One thing I keep wondering about with auto-routing. Deciding a prompt is hard enough to fan out across multiple models is itself a judgment call, and getting it wrong either wastes the eco budget or under-serves a real question. How is that difficulty call made, and how do you verify after the fact that the cheaper or greener route actually matched what a frontier model would have answered?<\/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>Great question, you&#8217;ve put your finger on the exact tension, and we take it seriously.<\/p>\n<p>First, the difficulty call. Selection runs on domain, speed, cost and eco together, bounded by where you&#8217;ve set your Turntables (Smarter, Speed, Eco). The domain benchmark does a lot of the work, since a coding question and a casual translation have very different model requirements; we route within four tiers, so light tasks stay cheap and low-footprint while harder ones escalate to specialists or frontier models. On top of that we classify every prompt for complexity, output shape and task type, plus a few other signals. I&#8217;ll be honest about where that stands: those signals are captured and stored against actual outcomes, but not all of them are live routing inputs yet. We&#8217;re building the calibration dataset first, so that when they do shape selection, the thresholds come from real data rather than intuition. Two things keep it honest in the meantime: every answer shows which model ran and why (no black box), and when the routing misses, your feedback flows straight back into the model choice. The tiers aren&#8217;t static either: a nightly sweep re-scores all 100+ models on fresh benchmarks, pricing and real user signals.<\/p>\n<p>On verification, I&#8217;ll be straight with you: we don&#8217;t claim to know what a frontier model &#8220;would have said.&#8221; There&#8217;s no crystal ball that runs for free, no oracle, and you can&#8217;t check that without running the frontier model yourself, which burns the eco budget you just saved. So no phantom comparison. What we do instead is measure: every routed response persists its actual token count, energy and cost next to the complexity classification. The plan is to bucket those outcomes by model, mode and task type, and only let a finer routing rule promote itself if it measurably reduces prediction error without increasing context overruns. Challenger already produces side-by-side quality comparisons; wiring that quality signal into the calibration loop is the next step.<\/p>\n<p>And for the here and now, when truth actually matters you switch on the multi-model check. Trio sends your question to three models from three different provider families; a separate judge scores them blind and in random order, merges the best, and flags where they disagree. Challenger goes the other way: a different family takes one answer apart and rebuilds it over a few rounds. Different families have different blind spots, so what one invents, the others usually catch.<\/p>\n<p>It cuts errors hard, but it doesn&#8217;t zero them. You stay the judge. Happy to go deeper on any piece.<\/p>\n<p>Mo<\/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\/@dipankar_sarkar\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dipankar_sarkar<\/a>&nbsp;thank you for your question, appreciate you.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The CO2 footprint tracking per prompt is a genuinely fresh angle &#8212; most AI tools pretend environmental cost does not exist, but making it visible nudges users to think twice before over-prompting, which is a quiet but powerful design choice.<\/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\/@ilko_kacharov\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ilko_kacharov<\/a>&nbsp;agree, thanks Ilko for the feedback. We believe in transparency, and in helping users understand the impact of models used. Let me know if you have any further questions <\/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\">Hi Discode team!<br \/>\nInteresting and valuable product &#8211; congratulations on the launch. I\u2019m keen on saving admin by establishing one subscription instead of multiple. Curious if I as user can steer optimization parameters &#8211; output, cost or environment as % distribution?<br \/>\nUlrika<\/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\/@ulrikah\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ulrikah<\/a>&nbsp;thanks so much for your support. Great question, yes you can use our sliders to define how important ECO, QUALITY, and\/or SPEED is for you. This will determine which models we are using.<\/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>Will there be a corporate or team Plan? Very interesting!<\/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\">@johanna_piffl thank you for bringing this up- it\u2019s in the works already! During our co creation session this topic came up multiple times so we learned early in about the interest.<br \/>\nWelcome to the discode.ai party!<\/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\/@johanna_piffl\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@johanna_piffl<\/a>&nbsp;I&#8217;d also be interested in a team plan!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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\/@johanna_piffl\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@johanna_piffl<\/a>&nbsp;great idea, we are working on 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>Hello makers!<\/p>\n<p>I hope you find the eco aspect of discode as valuable as I do.<\/p>\n<p>With many AI tools, it is easy to overlook switching models manually. I often find myself selecting the most capable model and then using it for every task, regardless of its complexity.<\/p>\n<p>That is exactly why Eco Routing matters to me. It automatically matches each request with a model that is capable enough for the task, while avoiding unnecessary energy and resource consumption.<\/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\/@shibacodelabs\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@shibacodelabs<\/a>&nbsp;Michael, it&#8217;s been great working with you on discode. Quite a monster project you&#8217;ve created there. <\/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>Hey Makers,<\/p>\n<p>We are live!!!!<\/p>\n<p>I&#8217;m Veronika, and I lead Product Strategy and User Experience.at discode.ai and I spend my days thinking of ways of making humans and technology tolerate each other.<\/p>\n<\/p>\n<p>I&#8217;m SO excited about what we&#8217;re building here because it tackles the questions that have followed AI from the very start: Does it all have to cost the planet? Do I get to have to hand over my data and still get a good answer?<\/p>\n<\/p>\n<p>Our goal here is to make LLMs approachable, understandable, and intentional. <br \/>We remove the guesswork! <br \/>We help you use only as much AI as you actually need!  <br \/>And we keep your personal data where it belongs: with you.<\/p>\n<\/p>\n<p>We wrapped all of that in an interface that&#8217;s unapologetically progressive, unmistakably European, and just the right amount of snarky. <br \/>It&#8217;s designed for your control, clarity, calm- and the occasional drizzle of disco. <\/p>\n<\/p>\n<p>Come join the party!! <\/p>\n<p>Let&#8217;s dance \u2014respectfully, frugally, and with better AI. <\/p>\n<\/p>\n<p>\u2014 Veronika<\/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\/@veronika_stabinger1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@veronika_stabinger1<\/a>&nbsp;it&#8217;s been great fun building with you these past few weeks. Excited for what&#8217;s to come<\/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\/@veronika_stabinger1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@veronika_stabinger1<\/a>&nbsp;This is the heart of it, Vroni, and a lot of that heart is yours. &#8220;Making humans and technology tolerate each other&#8221; is the whole job, and the control, clarity and calm people feel is your fingerprint on every screen. Thank you for keeping it human, European, and just snarky enough. Couldn&#8217;t have danced this one without you. \ud83e\udea9<\/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 Eco routing angle is genuinely interesting but I&#8217;d love to know how the difficulty classification works upstream. If the routing decision itself runs on a heavyweight model every time, does that overhead cancel out the savings on simpler queries? Curious if you&#8217;ve benchmarked the router&#8217;s own footprint.<\/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\/@vishal_thakor9\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@vishal_thakor9<\/a>&nbsp;Hi Vishal, great question, and exactly the one that would sink the whole idea if we got it wrong.<\/p>\n<p>The router doesn&#8217;t run on a heavyweight model, and on simple queries it often runs no model at all. It works in two stages: a fast pattern-matching pass reads the domain, language and locale for zero tokens, and a lot of straightforward queries are fully sorted right there. Only when that pass isn&#8217;t confident does a small classification model step in, and even then it&#8217;s a tiny call, cached so repeats and near-repeats cost nothing. The routing decision is then frozen for that request, so we never route the same thing twice.<\/p>\n<p>On whether we&#8217;ve measured it: yes. We log each classifier call on its own, so the router&#8217;s footprint is something we can read directly rather than hand-wave. In practice it&#8217;s a tiny call set against the savings of keeping a simple request on a lightweight model instead of a frontier one, so the overhead is a rounding error next to that. And the classifier&#8217;s own cost sits on our side as infrastructure, not on your bill.<\/p>\n<p>One honest nuance: difficulty alone doesn&#8217;t pick the model. It feeds a tiered score across domain benchmarks, speed, eco and price, weighted by where you&#8217;ve set your sliders, so the classifier informs the decision, it isn&#8217;t the decision. Happy to go deeper if that&#8217;s useful.<\/p>\n<p>Mo<\/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\/@vishal_thakor9\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@vishal_thakor9<\/a>&nbsp;Vishal, appreciate your question, please let us know if you have any further questions<\/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 on-device PII redaction before anything leaves is the part most AI routers skip &#8211; model routing and cost views are everywhere, but client-side redaction is what actually makes this safe to put in front of a team. My one concrete worry: when a name or ID gets redacted but is needed for the current answer and was first mentioned 10 messages back, does it consistently re-mask the same entity to the same token across the thread so the model still gets coherent context, or can it lose that reference once it is stripped?<\/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>@hazy0 You&#8217;re zeroing in on the exact thing that makes naive redaction useless: black out a name and the model loses the thread &#8211; coreference breaks, the answer turns incoherent.<\/p>\n<p>So we don&#8217;t black anything out, and you don&#8217;t have to hunt for the sensitive bits yourself. A local assistant does that on your device, before anything leaves: pattern matching catches the structured stuff (email, phone, IBAN, cards), and a small model running in your browser catches names, companies and places. It surfaces every find and proposes what to anonymize; you approve or override per data point. The assistant does the work, you keep the decision, and nothing is uploaded just to detect it. That is what makes it safe in front of a team: nobody has to catch every name or IBAN by hand before hitting send.<\/p>\n<p>Each detected entity is then swapped for a realistic look-alike, and that stand-in is baked into the conversation history that travels with every request. When something introduced 10 messages back is needed now, the model reads the same consistent stand-in from that history &#8211; a coherent conversation of plausible people, not a wall of [REDACTED]. You see your real values; the model only ever sees the stand-ins.<\/p>\n<p>That real-to-stand-in map lives only on your device, in your browser &#8211; never logged, never in our database, never sent to our servers. That&#8217;s also why the next edge exists at all.<\/p>\n<p>Honest edges: detection isn&#8217;t perfect (rare spellings, or an identity that only emerges from combining several harmless details); the map is device-local, so ask on your phone and open the thread on your laptop and you&#8217;ll see stand-ins there; and restoration is a literal match, so if the model reformats a stand-in &#8211; abbreviating &#8220;Street&#8221; to &#8220;St.&#8221;, changing case, inflecting a name &#8211; that spot can show the plausible stand-in instead of your real value. That last one is cosmetic, never a leak: the unrestored text is the fake, and your real value never left your device.<\/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\/@hazy0\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@hazy0<\/a>&nbsp;thanks for your question, let us know if you have any more feedback, thank you<\/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>Is there a way to bring our own API keys for specific models if we already have corporate credits, or is everything managed through a unified discode subscription tier? congrats for shipping <a href=\"https:\/\/www.producthunt.com\/@peterbuch\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"peterbuch\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@peterbuch<\/a> \ud83d\udc4f<\/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\/@priya_kushwaha1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@priya_kushwaha1<\/a>&nbsp;thanks Priya, that&#8217;s a great question. There currently isn&#8217;t any way to bring corporate credits to discode, but that&#8217;s certainly something we are looking into. <br \/>Happy to chat more, if you have more feedback, thanks again for your support.<\/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<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Such a great initiative. Definitely feeling conflicting trying to keep up with all the incredible AI progress while being mindful of the resource strain. <\/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\">@agathe_roubert thank you for that thought! We keep developing along those core beliefs!<\/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>Austria \ud83d\udc4b Building AI in adjacent space (DTC ad generation) and the multi-model routing point lands hard. Used to force everything through one pipeline early on, outputs were always mediocre at one step. Different tasks need different models.<\/p>\n<\/p>\n<p>The Eco angle is the part nobody else is showing. Most users don&#8217;t know that a 1-line prompt to GPT-5 costs more than 50 to a smaller model. Curious, do users actually shift behavior when they see the readout, or is it more of a conscience check?<\/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\/@elias_motionfy\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@elias_motionfy<\/a>&nbsp;Elias, great question, and totally agree. We have just launched into beta so we don&#8217;t have much data on user behavior yet. We certainly hope though that we can bring actual change in behavior. Do you think that&#8217;s possible?<\/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\/@elias_motionfy\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@elias_motionfy<\/a>&nbsp;&nbsp;Hey Elias, gr\u00fc\u00df dich! Always good to hear from someone in the Austrian AI scene. And yeah \u2014 forcing everything through one<\/p>\n<p>&nbsp; pipeline is the expensive version of learning that lesson.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/p>\n<p>&nbsp; &nbsp;<\/p>\n<p>&nbsp; On your question: honestly, too early to say with certainty. What we do see is that the transparency itself changes the &nbsp; &nbsp;<\/p>\n<p>&nbsp; conversation. Once people realize their one-liner just cost 50x what it needed to, most don&#8217;t need a second nudge \u2014 they<\/p>\n<p>&nbsp; let the router do its job. Whether that&#8217;s behavior change or just trusting the system to be frugal for them, the outcome is<\/p>\n<p>&nbsp;&nbsp; the same: less waste, better fit. But we&#8217;ll know more once we have real usage data at scale.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Really interesting approach to multi-model access. One thing I&#8217;ve noticed working across different AI models is how differently each one &#8220;knows&#8221; about specific brands or industries \u2014 the variance between ChatGPT vs Gemini vs Claude on the same query can be surprisingly large. Congrats on the launch, curious how you&#8217;re handling response inconsistency across models!<\/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\/@magichsin\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@magichsin<\/a>&nbsp;thank you so much for the comment, and the encouraging words. Always happy to chat more.<\/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\">Very curious how you determine the auto routing. Are you just using publicly available benchmark data? What is your criteria for which of the 100+ is selected? And how will you keep it up to date as new models are released?<\/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\/@ariaxhan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ariaxhan<\/a>&nbsp;hey Aria, great question. It&#8217;s one of the biggest challenges for us to make discode a success. It&#8217;s also something that I cannot publicly share. Happy to talk more in a one on one chat if you&#8217;d like though. thanks so much for supporting our 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=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@ariaxhan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ariaxhan<\/a>&nbsp;&nbsp; dear aria, The routing uses a combination of domain-specific benchmark data from public sources and our own evaluation layer. Each query gets classified by domain \u2014 coding, math, legal, creative, etc. \u2014 and models are scored against the benchmarks that actually matter for that domain, not just one generic leaderboard.<\/p>\n<\/p>\n<p>On top of that, users steer with sliders for quality, speed, eco; so the &#8220;best&#8221; model is always relative to what you actually need right now.<\/p>\n<\/p>\n<p>As for keeping up: our model radar continuously screens for new releases and benchmark updates, so the catalog stays current without manual intervention. When a new model drops, it gets scored and ranked automatically \u2014 no waiting for the next release cycle. any more questions? feel free to ask thx<\/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>Cool, it looks lime something I&#8217;ve done on Codex, to setup multi model for every sub agent. discode ai do this thing natively. I think it can save more token and get faster response with simple or complex chat. I&#8217;m cursious is discode has a main model to judge and distribute which model should do what?<\/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\/@sleekzheng\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sleekzheng<\/a>&nbsp;Love that you&#8217;ve been building in the space. We do have a main model, but are still optimizing, switching models and doing a lot of testing. What made you use Codex for the task?<\/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 eco footprint per request is a great touch. What data source are you using for the CO2 estimates per model? Numbers vary a lot by datacenter location and grid mix, curious how granular you can get.<\/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\/@christian_knaut\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@christian_knaut<\/a>&nbsp;<\/p>\n<p>Christian, you&#8217;re touching on exactly the hard part. The CO2 footprint of a model call is a product of several compounding factors:<\/p>\n<p>Hardware type and efficiency &#8211; different chip generations have noticeably different energy profiles per token<\/p>\n<p>Batch utilization &#8211; a GPU running well below capacity burns power roughly comparable to one running near full load, so how many requests share the same hardware matters a lot<\/p>\n<p>Datacenter location and grid mix &#8211; this is the biggest lever. <\/p>\n<p>A model running on a low-carbon grid sits at a fraction of the footprint of the same model on a coal-heavy grid; the gap between them can be substantial for identical compute<\/p>\n<p>PUE (Power Usage Effectiveness) &#8211; the overhead of cooling, lighting, and facility power on top of IT energy, which varies significantly by datacenter design<\/p>\n<p>Water use &#8211; often overlooked, but cooling systems consume a meaningful amount, and we track this as well<\/p>\n<p>Model architecture &#8211; for MoE models, only a portion of parameters are active per token, so using total parameter count would meaningfully overstate the energy cost<\/p>\n<p>Decode vs prefill split &#8211; generating output tokens costs noticeably more energy per token than processing input, so a short prompt with a long answer looks quite different from the reverse<\/p>\n<p>For all of these we rely on publicly available data &#8211; mainly grid intensity figures and published datacenter environmental reports &#8211; and we&#8217;ve formed a working group with ESG-Cockpit to sharpen the methodology.<\/p>\n<p>The honest limitation: closed-source model architectures have to be estimated, and Scope 3 emissions (hardware manufacturing and supply chain) are excluded, which is industry standard but still an undercount. We flag that in the product.<\/p>\n<p>It&#8217;s an evolving picture and we&#8217;re actively working to close the gaps.<\/p>\n<p>Let me know if you have any further questions<\/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! \ud83d\ude80<\/p>\n<p>The eco angle is refreshing, but I also really like the on-device privacy filtering. Most AI routers focus only on cost and speed, while privacy and model choice are just as important.<\/p>\n<p>Curious how transparent the routing explanation is for non-technical users can they easily understand why a specific model was selected?<\/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\/@prashant_patil14\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@prashant_patil14<\/a>&nbsp;Thanks for the kind words. Transparency is exactly the part we obsess over.<\/p>\n<p>The design goal: the best router is one you can ignore completely, but the moment you look, nothing&#8217;s hidden \u2014 and you never need a technical background.<\/p>\n<p>Instead of picking from 100+ models in a dropdown, you steer with three controls \u2014 Quality, Speed and Eco \u2014 like an equalizer. You set the vibe, the system picks the lane: simple questions go to fast, low-footprint models, harder ones move up to stronger ones automatically. Every answer shows the model that handled it right beneath it. And if you&#8217;d rather drive, a manual override is one tap away.<\/p>\n<p>Where it gets really visible is Trio mode: you watch multiple models work the same question side by side, in real time \u2014 no hidden orchestration. We&#8217;re also planning out a plain-language &#8220;why this model&#8221; explanation on every answer, so the reasoning is one tap away, not a black box.<\/p>\n<p>Let me know if you have any further questions<\/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>Thanks Moriz, splitting it into two loops is the right framing. The nightly catalog sweep keeps the model rankings honest, but that is recalibrating which model wins a tier, not whether the difficulty classifier put the prompt in the right tier in the first place. A re-ask is a free label there: an escalation event saying this domain was under-tiered. Even aggregated rather than per-user, feeding those escalations back into the per-domain thresholds is what would actually tighten the eco budget over time. Is that the second loop you mean, or is the nightly sweep doing double duty for now?<\/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>dear <a href=\"https:\/\/www.producthunt.com\/@dipankar_sarkar\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dipankar_sarkar<\/a>&nbsp;Spot on, and no, the nightly sweep isn&#8217;t doing double duty: it recalibrates which model wins within a tier, not the tier boundaries themselves. The second loop you&#8217;re describing doesn&#8217;t exist yet. A re-ask today is just another request, not yet a correction signal. Re-asks as free labels for &#8220;this domain was under-tiered&#8221; is exactly the right framing, and the version worth building first. Thanks for sharpening that. thx<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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 favourite part is the fact that I can start using it and it just WORKS, and over time I can dive deeper and start adjusting to my needs.<\/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\/@veronika_stabinger1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@veronika_stabinger1<\/a>&nbsp;exactly, you have all the models and you don&#8217;t have to think much about which one to choose. But if you want to go deep you can<\/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>Appreciate the detail Moriz. That four-tier domain routing bounded by the Turntables makes the upfront call legible, which is more than most routers offer. The piece I keep circling is the loop after the fact. When a tier under-serves and the user re-asks, does that signal feed back to recalibrate the domain benchmark, or is routing static per release? Closing that loop is what would turn this from a good router into one that actually gets sharper with use.<\/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\/@dipankar_sarkar\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dipankar_sarkar<\/a>&nbsp;Great question, Dipankar, and you&#8217;re pointing right at the gap between where we are and where we&#8217;re headed.<\/p>\n<p>It helps to split it into two loops, because they sit at different stages.<\/p>\n<p>The nightly loop is live: a sweep re-scores the whole model catalog on fresh public benchmarks (coding, math and reasoning indices), current pricing, and aggregate usage. So which model wins inside a tier does shift over time. To be precise about the feedback point: that movement happens at the catalog level, not yet from your individual behavior.<\/p>\n<p>The after-the-fact loop you&#8217;re describing, a re-ask read as &#8220;this tier under-served me&#8221; and fed back to recalibrate the domain benchmark, is not closed yet. And I&#8217;d rather be straight than impressive here. We built the telemetry layer first: every routing decision is fully traceable, each answer is stored with its tier, the model that ran, your slider settings and your rating. The data foundation is solid. But that data doesn&#8217;t drive selection scoring yet. The adaptive wiring on top is the next layer, not a shipped one.<\/p>\n<p>What closing the loop looks like for us:<\/p>\n<p>\u2022\u2060  \u2060Per-user affinity: if one model keeps earning top ratings on your coding prompts and another keeps missing, bias your future coding selections accordingly.<\/p>\n<p>\u2022\u2060  \u2060Domain recalibration: enough low ratings on eco-routed math prompts raises the minimum tier floor for the math domain.<\/p>\n<p>\u2022\u2060  \u2060Regen-cost awareness: when an eco route triggers a retry cycle that ends up costing more than a direct frontier call would have, surface it as a nudge (&#8220;your last few eco prompts needed retries, consider bumping Quality&#8221;). An eco route you have to redo isn&#8217;t actually green.<\/p>\n<p>So, honestly: today it&#8217;s mostly static between catalog refreshes, with the telemetry already capturing exactly what the adaptive layer will need. You&#8217;re describing precisely what comes next.<br \/>mo<\/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\/@dipankar_sarkar\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dipankar_sarkar<\/a>&nbsp;thank you for your support &amp; questions<\/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 model-choice reason is the part I\u2019d make very visible.<\/p>\n<\/p>\n<p>As a builder, I\u2019d love a tiny \u201cwhy this route\u201d card that turns each answer into a learning loop: task type detected, constraints it cared about (privacy \/ latency \/ quality \/ eco), and what signal would have pushed it to a stronger model.<\/p>\n<\/p>\n<p>That would help users trust the router without needing to understand 100+ model names, and it also gives you cleaner feedback when the route feels wrong.<\/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\">#2<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/YBS7GXRQPIEDZS\" class=\"app-title\">GetCompress<\/a><\/p>\n<div class=\"one-liner\">Lossless media compression without context switching<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">278<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>GetCompress\u662f\u4e00\u6b3e\u79bb\u7ebf\u684c\u9762\u7aef\u6279\u91cf\u538b\u7f29\u5de5\u5177\uff0c\u901a\u8fc7\u62d6\u62fd\u64cd\u4f5c\u65e0\u635f\u538b\u7f29\u89c6\u9891\u3001\u56fe\u7247\u3001GIF\u548cPDF\uff0c\u89e3\u51b3\u7528\u6237\u5728\u4e0a\u4f20\u6216\u5206\u4eab\u5a92\u4f53\u65f6\u56e0\u6587\u4ef6\u4f53\u79ef\u8fc7\u5927\u800c\u9700\u5207\u6362\u4e0a\u4e0b\u6587\u5bfb\u627e\u5de5\u5177\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                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/c423180b-db31-4dc8-8a23-b02df95828f7.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/kOhbOtJKqzI\"><source src=\"https:\/\/youtu.be\/kOhbOtJKqzI\" 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\/3d1219e8-da0b-40b3-9bb3-73d1cee9f5ad.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\/7ca57369-1500-4015-b703-a4ae12883e54.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\/acc7ffcd-b066-4f89-8802-b8adca3a6e29.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\/868eeca7-5308-45a7-8af2-e3e293b87671.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\/1bc44298-0db4-415d-a655-c080642c8610.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\/bbd3c458-3ebf-4061-a186-f3646334de09.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\/a41436a8-4670-4776-b4b2-6ea440fd1506.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\">Mac<\/span><br \/>\n            <span class=\"tag\">Productivity<\/span><br \/>\n            <span class=\"tag\">Photo &#038; Video<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u5a92\u4f53\u538b\u7f29<\/span><br \/>\n            <span class=\"tag\">\u684c\u9762\u5e94\u7528<\/span><br \/>\n            <span class=\"tag\">\u79bb\u7ebf\u538b\u7f29<\/span><br \/>\n            <span class=\"tag\">\u6279\u91cf\u5904\u7406<\/span><br \/>\n            <span class=\"tag\">\u65e0\u635f\u538b\u7f29<\/span><br \/>\n            <span class=\"tag\">PDF\u538b\u7f29<\/span><br \/>\n            <span class=\"tag\">\u89c6\u9891\u538b\u7f29<\/span><br \/>\n            <span class=\"tag\">GIF\u4f18\u5316<\/span><br \/>\n            <span class=\"tag\">MCP\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">\u672c\u5730\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\u8d5e\u8d4f\u79bb\u7ebf\u3001\u514d\u5207\u6362\u4e0a\u4e0b\u6587\u7684\u62d6\u62fd\u4f53\u9a8c\u3002\u6838\u5fc3\u95ee\u9898\u5305\u62ec\uff1a\u4e0eClaude\u7b49AI\u5de5\u5177\u5982\u4f55\u81ea\u52a8\u8054\u52a8\uff08MCP\u96c6\u6210\uff09\uff1b\u5bf9\u4e0d\u540c\u683c\u5f0f\uff08GIF\u3001PDF\u3001\u89c6\u9891\uff09\u538b\u7f29\u7b97\u6cd5\u7684\u5dee\u5f02\u4e0e\u8d28\u91cf\u63a7\u5236\uff1b\u5173\u6ce8\u79fb\u52a8\u7aef\u652f\u6301\u53ef\u80fd\u6027\uff1b\u5e0c\u671b\u83b7\u53d6\u9884\u8bbe\u8d28\u91cf\u63a7\u5236\u4e0e\u9ad8\u7ea7\u8bbe\u7f6e\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                GetCompress\u7684\u5356\u70b9\u5e76\u975e\u6280\u672f\u7a81\u7834\uff0c\u800c\u662f\u5bf9\u201c\u7528\u6237\u4f53\u9a8c\u7684\u6781\u81f4\u62a0\u7ec6\u8282\u201d\u3002\u5b83\u7684\u672c\u8d28\u662f\u5c06FFmpeg\u3001Gifsicle\u7b49\u5f00\u6e90\u5de5\u5177\u7684\u590d\u6742\u53c2\u6570\u94fe\u5c01\u88c5\u6210\u201c\u50bb\u74dc\u5f0f\u79bb\u7ebf\u670d\u52a1\u201d\uff0c\u5e76\u5f3a\u8c03\u201c\u4e0d\u8054\u7f51\u201d\u964d\u4f4e\u9690\u79c1\u7126\u8651\u2014\u2014\u8fd9\u7cbe\u51c6\u51fb\u4e2d\u4e86\u5185\u5bb9\u521b\u4f5c\u8005\u548c\u5f00\u53d1\u8005\u7684\u65e5\u5e38\u75db\u70b9\uff1a\u4e0a\u4f20\u6587\u4ef6\u88ab\u5927\u5c0f\u9650\u5236\u5361\u8116\u5b50\u65f6\uff0c\u90a3\u4e9b\u5728\u7ebf\u538b\u7f29\u5de5\u5177\u8981\u4e48\u6cc4\u9732\u9690\u79c1\u3001\u8981\u4e48\u901f\u5ea6\u611f\u4eba\u3001\u8981\u4e48\u8fd8\u5f97\u8fb9\u5207\u7a97\u53e3\u8fb9\u9a82\u5a18\u3002\u521b\u59cb\u4eba\u628a\u6838\u5fc3\u7b97\u6cd5\u5f00\u6e90\u3001\u4e3b\u63a8UX\u4e0eMCP\u96c6\u6210\uff0c\u662f\u806a\u660e\u7684\u5dee\u5f02\u5316\u7b56\u7565\uff1a\u65e2\u907f\u5f00\u81ea\u7814\u7b97\u6cd5\u7684\u9ad8\u6210\u672c\u9677\u9631\uff0c\u53c8\u901a\u8fc7AI\u5de5\u4f5c\u6d41\u7ed1\u5b9a\uff08\u5982Claude\u4ee3\u7406\u538b\u7f29\uff09\u5efa\u7acb\u62a4\u57ce\u6cb3\u3002\u4f46\u9700\u8b66\u60d5\uff0c\u7c7b\u4f3c\u529f\u80fd\uff08\u5982macOS\u81ea\u5e26\u538b\u7f29\u3001Shutter Encoder\u7b49\u514d\u8d39\u5de5\u5177\uff09\u4f1a\u7a00\u91ca\u4ed8\u8d39\u610f\u613f\u3002\u82e5\u540e\u7eed\u4ec5\u505c\u7559\u5728\u201c\u66f4\u597d\u7684\u53c2\u6570\u5c01\u88c5\u201d\u800c\u7f3a\u4e4f\u589e\u503c\u670d\u52a1\uff08\u5982\u4e91\u540c\u6b65\u3001\u6279\u91cf\u9884\u8bbe\u5206\u4eab\uff09\uff0c\u5929\u82b1\u677f\u6e05\u6670\u53ef\u89c1\u3002\u76ee\u524d278\u7968\u7684\u53cd\u9988\u4ee5\u80af\u5b9a\u4e3a\u4e3b\uff0c\u4f46\u6df1\u5ea6\u9a8c\u8bc1\u8fd8\u9700\u770b\u4ed8\u8d39\u8f6c\u5316\u7387\u2014\u2014\u7528\u6237\u662f\u5426\u613f\u610f\u4e3a\u201c\u7701\u53bb\u51e0\u79d2\u64cd\u4f5c\u201d\u6301\u7eed\u4e70\u5355\uff0c\u624d\u662f\u771f\u6b63\u8003\u9a8c\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\">GetCompress<\/span>\n                <\/div>\n<div class=\"comment-content\">GetCompress is a lightweight desktop app that quickly compresses videos, images, GIFs, PDFs in batches: get up to 90% smaller files with minimal quality loss. Save your time &#038; keep files safe with offline compression. Drag files in and out, no extra clicks. Available for Mac, Windows and Linux.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hey hunters and makers! \ud83d\udc4b<br \/>I&#8217;m <a href=\"https:\/\/x.com\/petersamokhin\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Petr<\/a>, the solo founder of <a href=\"https:\/\/www.producthunt.com\/products\/getcompress\" target=\"_blank\" rel=\"noopener\">@GetCompress<\/a>, a desktop app I made to improve media compression \ud83c\udfa5\ud83d\uddbc\ufe0f\ud83d\udcc4\u2198\ufe0f\ud83e\udd0f\u26a1\ud83d\udd10<\/p>\n<p>Who is it for?<br \/>You&#8217;re covered if you ever upload and share media:<br \/>Optimize assets for your blog or bug reports &amp; PRs. Finally fit file size limits &amp; upload that PDF.<br \/>Free up to 90% of disk space by shrinking media with minimal quality loss.<\/p>\n<p>Why making another compressor?<br \/>Because no other apps pass my quality bar and cover my needs:<br \/>You know, there are <em>native<\/em> macOS apps that struggle to scroll a list of just <em>ten<\/em> previews \ud83d\ude35\u200d\ud83d\udcab<br \/>I also wanted to just drop files, get them compressed, and drag back without alt-tabbing and context switching.<\/p>\n<p>Compress or convert 107+ supported formats, automate your workflows, and even connect to the MCP server!<\/p>\n<p>Your feedback would help a lot, even based just on the demos and the landing page:<\/p>\n<ul>\n<li>\n<p>can you remember last time you needed to upload a file with size limit?<\/p>\n<\/li>\n<li>\n<p>is anything missing in the intro or demo videos that is important for you to know?<\/p>\n<\/li>\n<li>\n<p>do you usually read testimonials and find them helpful?<\/p>\n<\/li>\n<\/ul>\n<p>I&#8217;m here to answer every question, and I&#8217;ll be the happiest if you share your thoughts!<\/p>\n<p>Thanks everyone \ud83e\udd73<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>33<\/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\/@petersamokhin\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@petersamokhin<\/a>&nbsp;How can I pair it with Claude to share compressed images automatically ?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@petersamokhin\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@petersamokhin<\/a> <\/p>\n<\/p>\n<p><em>Hi Petr, <\/em><\/p>\n<\/p>\n<p><em>I came across <\/em><a href=\"https:\/\/www.producthunt.com\/products\/getcompress\" data-node-type=\"mention\" data-mention-type=\"product\" data-mention-id=\"getcompress\" target=\"_blank\" rel=\"noopener\">@GetCompress<\/a> <em>on Product Hunt \u2014 really interesting positioning. I create Turkish-language AI content on Instagram (@yucel.kelci ) (458K followers, 20M &#8211; 50M monthly views). Turkey is one of the fastest-growing AI adoption markets right now and there\u2019s almost no quality Turkish content covering tools like yours. Would you be open to a sponsored content partnership? Happy to share my media kit.<\/em><\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@petersamokhin\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@petersamokhin<\/a>&nbsp;congrats on the launch !<\/p>\n<p>I definitely relate to the &#8220;just let me drop a file, compress it, and move on&#8221; workflow. It&#8217;s one of those tasks that should take seconds but somehow ends up breaking your flow.<\/p>\n<p>One thing I&#8217;m curious about: among your early users, what file type surprised you the most in terms of compression results? Was there a format where people consistently said, &#8220;I didn&#8217;t expect it to shrink that much without noticeable quality loss&#8221;?<\/p>\n<p>Also, the MCP integration is a nice touch. Feels like a natural fit as more AI workflows start handling media.<\/p>\n<p>Wishing you a fantastic 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<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Congrats on the launch!<\/p>\n<p>Love your design!<\/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\/@danshipit\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@danshipit<\/a>&nbsp;thanks a lot, I&#8217;ve been cooking hard on every pixel \ud83d\udc68\u200d\ud83c\udf73<\/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, man!<\/p>\n<\/p>\n<p>Could you tell me a little bit more about the compression algorithms you use for GIFs?<\/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\/@itruf\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@itruf<\/a>&nbsp;thanks a loooot!<\/p>\n<\/p>\n<p>The compression logic is open-source and is available here: <a href=\"https:\/\/github.com\/getcompress\/extensions\/tree\/master\/packages\/extension-gif-optimizer\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/github.com\/getcompress\/extensions\/tree\/master\/packages\/extension-gif-optimizer<\/a><\/p>\n<\/p>\n<p>If you create a GIF from video, it&#8217;s first converted using optimized approaches (with advanced colour palette for it to look fancier!)<\/p>\n<p>Then (or initially, if you already had a GIF), it&#8217;s compressed using an in-house developed tool that handles lossy compression in a way similar to lossy PNG compression: adaptive color quantization, weighted histogram, dithering, palette posterization and deduplication&#8230; many buzzwords but the point is that it&#8217;s a very optimized and stable algorithm that helps making the GIFs look great but have a small file size!<\/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;without context switching&#8221; part is the real selling point here imo, most compression tools make you leave your workflow to do it. is this running locally or hitting some cloud service under the hood.<\/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\/@martin_mo\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@martin_mo<\/a>&nbsp;thanks a lot! The app is fully local, no network access is required after installation \ud83d\udd10<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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 ! how is the compression technique is different from the existing ones? is it a different compression algorithm?<\/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\/@racine_g\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@racine_g<\/a>&nbsp;hey, thanks a lot for asking my favourite question!<\/p>\n<\/p>\n<p>There are many aspects that help reaching the best compression levels on the market, and I&#8217;m happy to share the secrets&#8230; just kidding: all compression logic is actually open-source, because GetCompress&#8217; main focus is your best UX! See it here: <a href=\"https:\/\/github.com\/getcompress\/extensions\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/github.com\/getcompress\/extensions<\/a><\/p>\n<\/p>\n<p>Just a few examples:<\/p>\n<ul>\n<li>\n<p>Videos: not just simple params like CRF are blindly used, but instead I carefully tested each format and made sure all advanced settings are applied, aiming at the fastest compression and smallest file sizes. For example, if you want a WebM video that will be fastest to load in your blog, the best codecs and compression params will be selected. Or, if you have a MacBook, you can benefit from Apple native VideoToolbox<\/p>\n<\/li>\n<li>\n<p>PDFs: any image-heavy files are analyzed in a smart way (e.g. detecting actual non-transparent images and any unnecessary info) and images are compressed separately (for example, lossy PNG compression is unbeatable!). I also did it myself (unlike competitors that use GhostScript and violate their open-source license that way!), so now even the edge cases like PDFs with form fields are handled carefully &amp; not broken<\/p>\n<\/li>\n<li>\n<p>Images: an in-house utility compresses even PNGs, in a lossy way, with veeery smart algorithms applied!<\/p>\n<\/li>\n<li>\n<p>GIFs: multi-step logic that utilizes FFmpeg, Gifsicle and an in-house tool for even better lossy compression<\/p>\n<\/li>\n<\/ul>\n<p>I can dive into more details if you&#8217;re interested! <\/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>Hey Petr! This is awesome cause compressing media files can be a headache sometimes and you&#8217;re helping a lot on it. Wish you all the best! <\/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\/@german_merlo1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@german_merlo1<\/a>&nbsp;thank you very much for your kind words! \ud83e\udef6<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Congrats with a launch!<br \/>\nI\u2019ve been using GetCompress mostly with an MCP server and honestly I glad I don\u2019t need to think about ffmpeg \/ other custom scripts I had before.<\/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\/@nonews\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@nonews<\/a>&nbsp;thanks a lot! I was trying to make my AI assistants work with media compression reliably but it just became weirder every chat, so I invested time and supported it in GetCompress. Glad it helps you too! \ud83e\udef6<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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\">Decided to test it.<br \/>\nAmazing. No more annoying uploads  of large media files to google drive just to attach them to internal docs (yes, we have size limits for media).<br \/>\nLove your design, ux, and whole drag&amp;drop flow from the Mac toolbar.<br \/>\nAmazing product!!!<br \/>\nThank you!<\/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\/@sergei_a_korban\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@sergei_a_korban<\/a>&nbsp;thank you very much for kind words! Upload limits are a huge pain and probably the number one, and solving it &amp; allowing to do it without context switching between apps was my highest priority \ud83e\uddf2<\/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>This is one of those utilities I\u2019d probably only think about when I urgently need it&#8230; and then be very happy it exists.<\/p>\n<p>File size limits are still weirdly annoying. I\u2019ve had this with PDFs, screenshots, product videos, bug reports, and even launch assets where something is just slightly too large and suddenly you\u2019re searching for a random online compressor.<\/p>\n<p>The offline desktop angle makes sense here. For files that may include product screenshots, internal docs, or customer-related stuff, I\u2019d rather not upload them somewhere just to make them smaller.<\/p>\n<p>The drag in, compress, drag out flow sounds exactly right too.<\/p>\n<\/p>\n<p>Curious how much control users have over quality vs. file size. can I set different compression presets for things like PH assets, bug report videos, PDFs, or web images?<\/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\/@andrasczeizel\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@andrasczeizel<\/a>&nbsp;hi Andras, thanks a lot for your comment!<\/p>\n<p>You can control the quality by choosing the predefined presets, or set up e.g. target file size, or if you prefer you can even select some advanced settings (such as media codec, frame rate and almost anything else!)<\/p>\n<p>After you apply your desired settings, you can save that preset and reuse it later:<\/p>\n<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/0cca4aca-f2be-464e-92b7-bef56b0c6c60.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>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>One of the interesting ones today! The MCP angle is the smart bet and the &#8220;Claude won&#8217;t hallucinate an outdated CLI&#8221; is a great pitch. Question on the compression side &#8211; when you lean on VideoToolbox for speed, do you ever fall back to a software encoder like x265 when someone wants quality over size? Anyways, 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\/@artstavenka1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@artstavenka1<\/a>&nbsp;I see a pro here, thanks for asking!<\/p>\n<\/p>\n<p>You can control Apple native handling in settings, and switching to x265 is just one click (see screenshot), but also I added a lot of smart logic, that depends on the file format, and might try different fallback settings in order to get the smallest file possible \u2728<\/p>\n<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/7032fe3a-abfb-4022-a7b6-75475d3bc841.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>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>Finally! <\/p>\n<p>Any chances to have it on Android platform in the future? <\/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\/@dmitry_manko\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dmitry_manko<\/a>&nbsp;wow, I didn&#8217;t expect any interest on mobile side \ud83d\udc40<\/p>\n<p>No plans for the nearest future, but probably I&#8217;d have to reconsider it!<\/p>\n<\/p>\n<p>My main idea was that you can&#8217;t do this on mobile:<\/p>\n<p><a href=\"https:\/\/youtu.be\/68AuSlchZto\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/youtu.be\/68AuSlchZto<\/a><\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The MCP integration caught my eye! What kind of automations does it unlock, you got a favorite workflow you&#8217;d recommend trying first?<\/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\/@timur_masalimov\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@timur_masalimov<\/a>&nbsp;hey, thanks a lot for sharing your feedback \ud83d\udc4b<\/p>\n<\/p>\n<p>The main benefits of connecting to GetCompress MCP (vs just telling your agent to &#8220;compress it somehow&#8221;):<\/p>\n<ul>\n<li>\n<p>reliability: Claude won&#8217;t hallucinate and install some outdated CLI every time you ask for media compression, and you don&#8217;t even need to write a detailed prompt that covers any possible edge cases<\/p>\n<\/li>\n<li>\n<p>better compression: the curated advanced logic already knows how&#8217;s best to reduce the file size while keeping visual quality as best as possible, because just with some default params you could receive a pixelated result that is not really small in size<\/p>\n<\/li>\n<li>\n<p>speed: magic optimizations such as Apple native frameworks (VideoToolbox) sometimes can do magic!<\/p>\n<\/li>\n<\/ul>\n<p>So, you after connecting the MCP, could ask your AI assistant to prepare you a demo and ensure it&#8217;s compressed nicely (just with natural words), fit some upload limits to Notion, and anything else!<\/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>Any chance for an iOS App?<\/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\/@stanislau_zamana\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@stanislau_zamana<\/a>&nbsp;this one was unexpected \ud83e\udee2<\/p>\n<p>To be honest, I didn&#8217;t plan on the mobile apps, as I mainly aimed to improve and speed-up frequent compression flows (which is easier &amp; best done from your laptop, Mac or Windows), but I&#8217;ll definitely consider it for the 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\">Congrats on the launch! Love the focus on reducing context switching. I&#8217;m curious what&#8217;s been the hardest media format to support? I imagine PDFs, animated GIFs, and videos all come with very different tradeoffs between compression ratio and visual quality.<\/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\/@luki_notlowkey\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@luki_notlowkey<\/a>&nbsp;hey, thanks a lot!<\/p>\n<\/p>\n<p>Surprisingly, images were much more tricky to ensure the &#8220;perfect production-grade compression&#8221; across all images, due to the number of extensions, edge cases, and some additional advanced algorithms to be introduced (e.g. a proper lossy PNG compression).<\/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\">@petersamokhin I did not expect that at all! Thanks for the reply!<\/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 to see it! Quick, lossless compression FTW<\/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\/@jackrmcdermott\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@jackrmcdermott<\/a>&nbsp;thank you very 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>serious Pied Piper vibes (Sillicon valley TV show) here \ud83d\ude02<\/p>\n<\/p>\n<p>please tell me getcompress uses middle-out compression&#8230; and if not, how long until richard hendricks joins the team?\ud83d\ude02\ud83d\ude02\ud83d\ude02<\/p>\n<\/p>\n<p>On a serious note, how do you balance maximum file-size reduction with preserving visual quality across so many different formats?<\/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\/@byalexai\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@byalexai<\/a>&nbsp;bro idk what compression does it use, all code was removed in order to get rid of bugs!<\/p>\n<\/p>\n<p>Re: serious note, it&#8217;s balanced by doing a lot of hard work on testing it &amp; optimizing &amp; using hundreds of test files, to ensure all input and output formats perform great! There are many tricks, and if you dig deeper, there are always additional params &amp; optimizations which people often miss (and which Claude won&#8217;t tell you even with an advanced prompt!)<\/p>\n<\/p>\n<p>The compression logic is open-source btw: <a href=\"https:\/\/github.com\/getcompress\/extensions\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/github.com\/getcompress\/extensions<\/a><\/p>\n<\/p>\n<p>The 3rd party tools like FFmpeg are also built publicly, which is how I endured to support more advanced params &amp; codecs, and e.g. make it possible to use Apple native VideoToolbox to improve it even further: <a href=\"https:\/\/github.com\/getcompress\/media-tools-binaries\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/github.com\/getcompress\/media-tools-binaries<\/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\">Once I almost missed deadline  for hackathon just because my video submission was slightly bigger than allowed in form, lost so much time with ffmpeg, seems like must-have so such stuff wont happen lol, congrats on the launch dude!<\/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\/@igor_martinyuk\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@igor_martinyuk<\/a>&nbsp;yooo the GOAT is here! Thank you very much!<\/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>Can you create a team license? where you can purchase multiple seats under one key?<\/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\">@danny_donovan sure! I can quickly create a separate checkout link for as many seats as you wish, and you will be able to reuse the license key and deactivate\/transfer license key between devices very quickly, I\u2019m sending you an email right now \ud83d\ude42<br \/>\nI can make it more flexible for the future if you wish!<\/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>Looks super polished! Love the offline mode and drag and drop feature. <\/p>\n<p>A small question on the interface &#8211; is there a way to preview or compare before and after compression? Or is it trial and error?<\/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<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">@ainur_kairlapova thank you! \ud83e\udef6 You can preview &amp; trim input files but you can\u2019t yet compare files before\/after, thanks for a great idea!<\/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>Solid product. I bought it.. This will come in handy!<\/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\">@danny_donovan thank you very much, feel free to share feedback and I\u2019ll act on it as quickly as possible!<\/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\">Nice app! Any plans for cli?<\/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\">@kzolotov thanks for kind words! For automation purposes you can use deeplinks or HTTP API (local embedded server), it\u2019s much more powerful and can easily be wrapped to a CLI via curl if needed \ud83d\ude42<\/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;no extra clicks + offline&#8221; combo is the part that would actually get me to switch. Most compression tools either require cloud upload (privacy concern for client files) or have friction-heavy UIs. The 90% reduction claim is bold though &#8211; curious how it holds on video specifically, since most desktop compressors struggle past ~70% without visible artifacts at anything beyond 1080p. What codec are you using under the hood for video?<\/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;thanks for a detailed question!<\/p>\n<\/p>\n<p>The less optimized video is initially, the more it gets compressed, and 70% are passed regularly \ud83d\udddc\ufe0f<\/p>\n<p>Not only codecs matter, but the additional compression params too (they might affect both speed and result file size), and you can choose codecs in 1 click, if you wish: it&#8217;s H.264 by default (or Apple native VideoToolbox is used if you turn it on)<\/p>\n<\/p>\n<p>You can also quickly switch to WebM and OFTEN go past 90% compression without visible artifacts: WebM + AV1 is now widely supported and is a GOAT free format \u26a1<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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>Looks awesome! Congrats!<\/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\/@alexey_getman\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@alexey_getman<\/a>&nbsp;thank you very much, it&#8217;s very high effort \ud83d\ude4f<\/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>So, it doesn&#8217;t turn into a ZIP file or anything like that\u2014the file extension stays the same, but the file size gets compressed?<\/p>\n<p>That&#8217;s amazing!<\/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\/@nanimono_masa\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@nanimono_masa<\/a>&nbsp;thanks a lot for asking this! It&#8217;s actually much better than ZIP, as you can&#8217;t reduce video\/image\/PDF file size by just zipping it. This is where GetCompress helps the best!<\/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 context-switching pain is real &#8211; I&#8217;m always mid-workflow when I need to compress something and end up in some janky browser tool or hunting for a half-remembered app. Having this as a lightweight desktop app that stays offline makes a lot of sense to me. Quick question: does it handle RAW photo files? That&#8217;s usually where most compression tools fall apart for me.<\/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, thank you for your question! Yes, GetCompress supports RAW format, and also some Apple native optimizations to handle it faster &amp; with better quality \u26a1<\/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>Wow, looks very cool! Curious, how do you handle already compressed formats like H.264\/H.265 videos or modern image codecs (WebP\/AVIF)? Is the gain mostly from re-encoding presets or do you use some additional optimization layer?<\/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_gorodnitskiy\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@alex_gorodnitskiy<\/a>&nbsp;thanks for an advanced question! To be honest, in many cases already optimized formats much less benefit from additional compression, but re-encoding with advanced params or Apple native codecs sometimes helps even further \ud83d\udc40<\/p>\n<p>However, the main use-case for GetCompress is compressing any kind of media that is produced by any tool in your work, before uploading it or using elsewhere, so you can get WebP and AVIF or compressed MP4 safely &amp; quickly in batches! <\/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>Wow, great product! Any chance GetCompress will be available on Linux?<\/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\/@aleksei_martoias\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@aleksei_martoias<\/a>&nbsp;you are not gonna believe me but it&#8217;s already available there, both ARM and x64 \ud83d\udc40<\/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 MCP server is what sells this for me. I&#8217;m constantly compressing screen recordings and screenshots for App Store assets and PR\/bug reports, and offloading that to my agent instead of remembering FFmpeg flags is a real workflow win. Offline + native VideoToolbox is the right call too. Congrats on the launch, Petr! \ud83d\udc4f<\/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\/@bugorbn\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@bugorbn<\/a>&nbsp;thanks a lot for your kind words! Fun fact: my main flow was especially uploading demos to Jira tickets &amp; PRs &amp; bug reports up to a few times per day too, so this idea came from real pain due to be solved \ud83d\udc40<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>1<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Looks great! Love the focus on the drag &amp; drop flow. As a designer, I need to make lightweight GIFs all the time for decks, Figma files etc \ud83d\ude3f Really appreciate having a GIF\/video converter and optimizer in one tool!<\/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\/@foxecila\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@foxecila<\/a>&nbsp;thanks a lot for your kind words! Drag and drop is my favourite part, I can even say that&#8217;s the reason why I&#8217;m here today \ud83d\ude3a<\/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\">This really looks promising. MCP &#8211; This is the way!<br \/>\nI admire idea to have a \u201cboard\u201d I can just drop whatever to compress I want in and go back to work.<br \/>\nDoes it keep original file? In case I am not happy with minor loss of quality?<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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\">#3<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/4BWHM7CAXUKOUV\" class=\"app-title\">Persona.js<\/a><\/p>\n<div class=\"one-liner\">Add WebMCP-native AI chat to any Frontend<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">248<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Persona.js \u662f\u4e00\u4e2a\u8f7b\u91cf\u7ea7\u3001\u5f00\u6e90\u3001\u65e0\u6846\u67b6\u4f9d\u8d56\u7684 AI \u804a\u5929 UI \u5e93\uff0c\u4e13\u4e3a\u73b0\u6709\u524d\u7aef\uff08\u4ece\u73b0\u4ee3\u5e94\u7528\u5230\u9759\u6001HTML\uff09\u5feb\u901f\u5d4c\u5165\u667a\u80fd\u52a9\u624b\u800c\u751f\uff0c\u65e0\u9700\u91cd\u6784\u5373\u53ef\u83b7\u5f97\u7c7bCopilot\u7684\u4ea4\u4e92\u4f53\u9a8c\uff0c\u6838\u5fc3\u4eae\u70b9\u662f\u539f\u751f\u652f\u6301 WebMCP \u534f\u8bae\uff0c\u8ba9AI\u80fd\u76f4\u63a5\u201c\u64cd\u4f5c\u201d\u9875\u9762\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\/e5191e47-9168-45c4-b7ad-20dc6f9c865a.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\/e605be7b-69d5-460c-9958-218f2bfce404.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\/aeab0062-4e93-4a03-96f9-9f1b052103da.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\/f3b633b9-c3a6-401d-b717-5a5b81bcd934.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\/a4036384-3003-426b-b1fe-0f430f180b94.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\/60ed88ff-df1c-4123-a3c2-60ee7bed3c50.jpeg?auto=format\" data-video-url=\"https:\/\/youtube.com\/watch?v=JhcZSRC_wP8\"><source src=\"https:\/\/youtube.com\/watch?v=JhcZSRC_wP8\" type=\"video\/mp4\"><\/video><\/p>\n<div class=\"video-overlay\">\n<div class=\"play-icon\">\u25b6<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Open Source<\/span><br \/>\n            <span class=\"tag\">Developer Tools<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u804a\u5929UI<\/span><br \/>\n            <span class=\"tag\">\u65e0\u6846\u67b6<\/span><br \/>\n            <span class=\"tag\">\u5f00\u6e90<\/span><br \/>\n            <span class=\"tag\">WebMCP<\/span><br \/>\n            <span class=\"tag\">\u524d\u7aef\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u5d4c\u5165\u5f0f\u52a9\u624b<\/span><br \/>\n            <span class=\"tag\">\u6d41\u5f0f\u5bf9\u8bdd<\/span><br \/>\n            <span class=\"tag\">\u8bed\u97f3\u4ea4\u4e92<\/span><br \/>\n            <span class=\"tag\">\u4e3b\u9898\u5b9a\u5236<\/span><br \/>\n            <span class=\"tag\">\u4f4e\u4ee3\u7801<\/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\u6700\u5173\u6ce8WebMCP\u7684\u5b89\u5168\u6027\uff0c\u62c5\u5fc3AI\u8bef\u89e6\u6216\u94fe\u5f0f\u8c03\u7528\u5bfc\u81f4\u7834\u574f\u6027\u64cd\u4f5c\uff08\u5982\u8bef\u4e0b\u5355\uff09\u3002\u793e\u533a\u671f\u671b\u63d0\u4f9b\u6e05\u6670\u7684\u64cd\u4f5c\u9884\u89c8\u3001\u64a4\u9500\u673a\u5236\u4ee5\u53ca\u8de8\u73af\u5883\uff08\u975eChrome\uff09\u7684\u6d4f\u89c8\u5668\u517c\u5bb9\u6027\u3002\u540c\u65f6\uff0c\u5bf9WebMCP\u662f\u5426\u4e3a\u771f\u6b63\u7684\u884c\u4e1a\u6807\u51c6\u5b58\u5728\u7591\u8651\uff0c\u62c5\u5fe7\u5176\u6210\u4e3a\u5c01\u95ed\u751f\u6001\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                Persona.js \u7684\u806a\u660e\u4e4b\u5904\u5728\u4e8e\u6ca1\u6709\u5728\u201c\u53c8\u4e00\u4e2a\u804a\u5929\u7ec4\u4ef6\u201d\u4e0a\u5377\uff0c\u800c\u662f\u7cbe\u51c6\u62bc\u6ce8\u4e86 WebMCP \u8fd9\u4e2a\u8fc7\u6e21\u6027\u534f\u8bae\u3002\u8fd9\u662f\u4e00\u4e2a\u5178\u578b\u7684\u201c\u501f\u52bf\u201d\u6253\u6cd5\uff1a\u5f53\u4e1a\u754c\u8fd8\u5728\u7ea0\u7ed3 Agent \u5982\u4f55\u5b89\u5168\u5730\u64cd\u4f5c\u7f51\u9875\u65f6\uff0c\u5b83\u76f4\u63a5\u63d0\u4f9b\u4e86\u6700\u8f7b\u91cf\u7684\u5ba2\u6237\u7aef\u5b9e\u73b0\uff0c\u8ba9\u5f00\u53d1\u8005\u80fd\u4ee5\u6781\u4f4e\u6210\u672c\u8ba9 AI \u201c\u770b\u89c1\u201d\u5e76\u201c\u70b9\u51fb\u201d\u9875\u9762\u5143\u7d20\uff0c\u800c\u975e\u53cd\u4eba\u7c7b\u5730\u8ba9 AI \u53bb\u95ee\u7528\u6237\u201c\u4f60\u7684\u90ae\u7bb1\u662f\u4ec0\u4e48\u201d\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u4ece\u8bc4\u8bba\u533a\u7684\u70ed\u70c8\u8ba8\u8bba\u53ef\u4ee5\u770b\u51fa\uff0c\u6700\u5927\u7684\u9690\u60a3\u6070\u6070\u662f\u5b83\u7684\u6838\u5fc3\u4ef7\u503c\u2014\u2014\u5b89\u5168\u6027\u3002WebMCP \u6240\u4ee3\u7406\u7684\u201c\u4efb\u610fJS\u51fd\u6570\u201d\u662f\u798f\u4e5f\u662f\u7978\u3002\u867d\u7136\u56e2\u961f\u63d0\u4f9b\u4e86\u53ea\u8bfb\/\u53ef\u53d8\u6807\u7b7e\u548c\u4eba\u5de5\u5ba1\u6279\uff08HITL\uff09\u6d41\u7a0b\uff0c\u4f46\u8fd9\u672c\u8d28\u4e0a\u5c06\u5b89\u5168\u8d23\u4efb\u4ece\u5e93\u672c\u8eab\u63a8\u7ed9\u4e86\u5f00\u53d1\u8005\u3002\u5728\u4e00\u4e2a\u590d\u6742\u7684\u73b0\u4ee3\u5e94\u7528\u4e2d\uff0c\u4e00\u4e2a\u201c\u53ea\u8bfb\u201d\u7684 getter \u7ed3\u679c\u53ef\u80fd\u88ab LLM \u5582\u7ed9\u4e00\u4e2a\u201c\u53ef\u53d8\u201d\u7684 mutation \u8c03\u7528\uff0c\u8fd9\u79cd\u201c\u8de8\u8fb9\u754c\u6c61\u67d3\u201d\u662f\u5f53\u524d\u6240\u6709 Agent \u6846\u67b6\u7684\u963f\u514b\u7409\u65af\u4e4b\u8e35\u3002Persona \u80fd\u505a\u7684\u53ea\u662f\u63d0\u4f9b\u201c\u9ed1\u76d2\u5b50\u201d\u548c\u201c\u5ba1\u6279\u6309\u94ae\u201d\uff0c\u4f46\u65e0\u6cd5\u4fdd\u8bc1\u5f00\u53d1\u8005\u8bbe\u8ba1\u51fa\u7684\u5de5\u5177\u94fe\u662f\u5b89\u5168\u7684\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u6b64\u5916\uff0cPersona \u6253\u5305\u4e86 Runtype \u7684\u670d\u52a1\u7aef SDk\uff0c\u8fd9\u66b4\u9732\u4e86\u5176\u201c\u5f00\u6e90\u201d\u80cc\u540e\u7684\u91ce\u5fc3\u2014\u2014\u5ba2\u6237\u7aef\u662f\u5f00\u6e90\u7684\u8bf1\u9975\uff0c\u4f46\u5b8c\u6574\u7684\u9632\u5b88\u548c\u5b89\u5168\u5ba1\u8ba1\u77e9\u9635\u9700\u8981\u4f9d\u8d56\u5176\u95ed\u6e90\u670d\u52a1\u3002\u5bf9\u4e8e\u4e25\u8083\u7684\u751f\u4ea7\u73af\u5883\uff0c\u5982\u679c\u4e0d\u80fd\u63d0\u4f9b\u5b8c\u6574\u7684\u5168\u94fe\u8def\u8ffd\u8e2a\u548c\u56de\u6eda\u673a\u5236\uff0c\u5b83\u66f4\u50cf\u662f\u4e00\u4e2a\u7cbe\u7f8e\u7684\u201c\u6f14\u793a\u5de5\u5177\u201d\u800c\u975e\u53ef\u9760\u7684\u751f\u4ea7\u7ea7\u57fa\u7840\u8bbe\u65bd\u3002WebMCP \u867d\u597d\uff0c\u4f46\u53ea\u6709\u6210\u4e3a\u771f\u6b63\u7684\u201c\u6865\u6881\u201d\u800c\u975e\u201c\u5b64\u5c9b\u201d\u65f6\uff0c\u5b83\u7684\u4ef7\u503c\u624d\u80fd\u88ab\u5f7b\u5e95\u91ca\u653e\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\">Persona.js<\/span>\n                <\/div>\n<div class=\"comment-content\">Persona is a lightweight, open-source AI chat UI library that embeds into any website, from modern apps to static HTML. Unlike React-based chat frameworks, Persona is framework-free, backend-agnostic, and WebMCP-native, so your assistant can discover and execute tools exposed by the parent page. Add streaming chat, voice, theming, and interactive copilot experiences without rebuilding your frontend or writing bespoke APIs.<\/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 I&#8217;m Nathan, cofounder at Runtype and one of the people who built Persona.<\/p>\n<\/p>\n<p>Persona is the world&#8217;s first AI chat library to natively support WebMCP. It&#8217;s a framework-agnostic chat UI you can drop into any existing website or app to easily add AI to your product.&nbsp;<\/p>\n<\/p>\n<h3><strong>Why we built it<\/strong><\/h3>\n<\/p>\n<p>Most AI chat libraries assume you&#8217;re starting from scratch on React. Persona is built for the rest of the internet: existing sites, mixed frontend stacks, proprietary CMSes, and teams that want a modern AI experience without rebuilding in React. Drop it in with no build step, theme the whole experience through config and the built-in editor, then ship it as a chat widget, a full-screen ChatGPT\/Claude-style surface with artifacts, or something in between.&nbsp;<\/p>\n<\/p>\n<p>It looks polished out of the box &amp; you can make it <a href=\"https:\/\/www.persona-chat.dev\/theme.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">pretty far down the path of customization with no code<\/a>, but still gives developers hooks and plugins when they want to go deeper.<\/p>\n<\/p>\n<p>It\u2019s built in Vanilla JS so it can work anywhere &#8211; WordPress, Shopify Liquid, Static HTML sites, and more.<\/p>\n<\/p>\n<h3><strong>The part we&#8217;re most excited about: WebMCP \ud83e\udde9<\/strong><\/h3>\n<\/p>\n<p>Persona is the first Agent UI framework to natively support <a href=\"https:\/\/developer.chrome.com\/docs\/ai\/webmcp\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">WebMCP<\/a>, which <a href=\"https:\/\/developer.chrome.com\/blog\/new-in-devtools-149#webmcp\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">just shipped in Chrome<\/a> and has polyfills available for all other browsers. With WebMCP, you can register agent-facing tools directly in your frontend, which allows Persona-based agents to directly use your frontend app with much more dexterity &amp; token efficiency than other approaches (headless browsers, DIY frontend tools, etc).<\/p>\n<\/p>\n<p>If you already have a sophisticated web app, this can be a much faster path to enabling AI capabilities in your app vs building an entirely new backend. And since WebMCP tools can be hooked <strong>directly<\/strong> into frontend code, the experience feels much more like a \u201ccopilot\u201d and less like a bolt-on, all the usual side-effects and UX are preserved while your app gets more capable.<\/p>\n<\/p>\n<p>Some cool demos:<\/p>\n<ul>\n<li>\n<p>Fullscreen Assistant \u2192<a href=\"http:\/\/persona-chat.dev\/fullscreen-assistant-demo.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"> persona-chat.dev\/fullscreen-assistant-demo.html<\/a><\/p>\n<\/li>\n<li>\n<p>Slides \u2192<a href=\"http:\/\/persona-chat.dev\/webmcp-slides.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"> persona-chat.dev\/webmcp-slides.html<\/a><\/p>\n<\/li>\n<li>\n<p>Calendar \u2192<a href=\"http:\/\/persona-chat.dev\/webmcp-calendar.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"> persona-chat.dev\/webmcp-calendar.html<\/a><\/p>\n<\/li>\n<li>\n<p>MSPaint \u2192<a href=\"http:\/\/persona-chat.dev\/webmcp-paint.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"> persona-chat.dev\/webmcp-paint.html<\/a><\/p>\n<\/li>\n<\/ul>\n<p>WebMCP is maturing to the point where it makes sense to start building against it, and Persona makes that easy with a <a href=\"https:\/\/docs.mcp-b.ai\/packages\/webmcp-polyfill\/overview\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">built-in polyfill.<\/a><\/p>\n<\/p>\n<h3><strong>Open source, no lock-in<\/strong><\/h3>\n<\/p>\n<p>Persona is <a href=\"https:\/\/github.com\/runtypelabs\/persona\/blob\/main\/LICENSE\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">MIT-licensed<\/a> and open source. It&#8217;s made by an AI platform company, but it&#8217;s deliberately not coupled to Runtype. You deploy it on any framework and wire it to any SSE-based AI endpoint with a little glue code. Examples for popular frameworks like Flue, Eve, OpenAI Agents SDK, and more are in the repo along with docs your existing coding tools can use to implement it quickly.<\/p>\n<\/p>\n<p>If you\u2019re like to deploy a chat agent as quickly as possible, the CLI command:<\/p>\n<\/p>\n<pre><code>npx @runtypelabs\/cli@latest persona init<\/code><\/pre>\n<\/p>\n<p>\u2026will set you up with a WebMCP-capable chat agent on the Runtype platform in minutes.<\/p>\n<\/p>\n<h3><strong>Who it&#8217;s for<\/strong><\/h3>\n<\/p>\n<p>Builders adding an AI experience to something that already exists, without a rewrite and who want to benefit from us obsessing over the details of frontier AI experiences so they can just deploy them.<\/p>\n<\/p>\n<p>Repo, docs, and examples:<a href=\"http:\/\/github.com\/runtypelabs\/persona\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"> github.com\/runtypelabs\/persona<\/a><\/p>\n<\/p>\n<p>We&#8217;d love your feedback! If you&#8217;ve tried adding AI into an existing app, I&#8217;m curious what was hardest: picking the right framework, standing up a new backend, wiring up the tools, building out the right evals, or trusting what the AI actually does. Happy to go deep on WebMCP in the comments.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>44<\/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\/@runtypelabs\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@runtypelabs<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@runtypical\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@runtypical<\/a>&nbsp;&nbsp;how do you think about auditing WebMCP tool usage once a product is live? The integration story is strong, but approval traces and debugging seem like the part teams will care about most after the first demo.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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\/@runtypelabs\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@runtypelabs<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@runtypical\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@runtypical<\/a>&nbsp; The WebMCP bet is the interesting part beyond the chat UI. Honest question: is WebMCP an actual emerging standard that browsers and agents will converge on, or your own convention for now? The payoff (any agent reading the page&#8217;s exposed tools) only lands if it isn&#8217;t Persona-only. If a future Claude or ChatGPT browser extension can read those same tool registrations, that&#8217;s huge; if it&#8217;s a closed loop it&#8217;s a really nice chat widget. Where does it sit today?<\/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\/@runtypelabs\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@runtypelabs<\/a>&nbsp; <a href=\"https:\/\/www.producthunt.com\/@runtypical\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@runtypical<\/a>&nbsp;If the underlying app or input shape changes, how does Persona.js fail before it quietly gives me a bad result?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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 WebMCP-native angle is the part I keep thinking about, since you said a tool registration can invoke basically any JS function on the page. That cuts both ways. Once the agent can drive real UI, what stops it from firing a destructive or paid action it misread the user&#8217;s intent on? Is there a scoping or confirmation layer for high-stakes tools, or is safety entirely on the developer to only register the safe ones? Curious how you draw that boundary.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>19<\/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\/@dipankar_sarkar\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dipankar_sarkar<\/a>&nbsp;yes! Similar to the protections that MCP tools typically have in chatbots and harnesses today, WebMCP tools can be tagged based on whether or not they are &#8216;read-only&#8217; or mutative\/potentially destructive, and Persona (in collaboration with the agent backend) can support HITL (Human-in-the-loop) approval flows for those actions.<\/p>\n<\/p>\n<p>This can be seen on demos like these:<\/p>\n<\/p>\n<p><a href=\"https:\/\/www.persona-chat.dev\/approval-demo.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/www.persona-chat.dev\/approval-demo.html<\/a> (also has a great example of a Persona plugin)<\/p>\n<p><a href=\"https:\/\/www.persona-chat.dev\/webmcp-demo.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/www.persona-chat.dev\/webmcp-demo.html<\/a> (&#8220;Add to cart&#8221; requires approval)<\/p>\n<\/p>\n<p>On the general topic of WebMCP security, both Persona and Runtype have adapted Google&#8217;s best practices around WebMCP security, which you can read here:<\/p>\n<\/p>\n<p><a href=\"https:\/\/developer.chrome.com\/docs\/agents\/security\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/developer.chrome.com\/docs\/agents\/security<\/a><\/p>\n<p><a href=\"https:\/\/developer.chrome.com\/docs\/ai\/webmcp\/secure-tools\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/developer.chrome.com\/docs\/ai\/webmcp\/secure-tools<\/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<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>WebMCP support out of the box is a massive selling point, the biggest headache right now is avoiding massive token usage for simple frontend states. congrats for shipping <a href=\"https:\/\/www.producthunt.com\/@runtypical\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"runtypical\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@runtypical<\/a>\ud83d\udc4f qq. does the built-in polyfill handle older browser fallbacks gracefully, or is there a performance hit we should watch out for?<\/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\/@vikramp7470\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@vikramp7470<\/a>&nbsp;great question &#8211; the polyfill is both lazy-loaded and defensive; it won&#8217;t waste any resources at all if WebMCP is already discovered on the page, even if it&#8217;s from another polyfill. In fact, the entire initial page weight of Persona is only about ~15kb, to minimize the performance hit when embedding.<\/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<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The WebMCP-native angle is the part that got me, registering frontend tools so the agent drives your real UI instead of a headless browser feels way cleaner. For an existing React\/Next app, how granular can you get about which actions you expose as tools? Congrats on shipping.<\/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\/@i_sanjay_gautam\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@i_sanjay_gautam<\/a>&nbsp;Thanks! WebMCP tool registrations can theoretically <a href=\"https:\/\/developer.chrome.com\/docs\/ai\/webmcp\/imperative-api\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">invoke <strong>any<\/strong> javascript function<\/a> living on a page, as well as be added <a href=\"https:\/\/developer.chrome.com\/docs\/ai\/webmcp\/declarative-api\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">as a decorator to existing HTML forms. <\/a><\/p>\n<\/p>\n<p>For frameworks like Next.js or React you can use <a href=\"https:\/\/www.npmjs.com\/package\/@mcp-b\/react-webmcp\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">plugins<\/a> to easily hook into your existing actions and expose them as WebMCP, although I&#8217;d always encourage folks to intentionally <em>design<\/em> your tools around the needs of the agents &#8211; I personally love <a href=\"https:\/\/www.arcade.dev\/blog\/mcp-tool-patterns\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Arcade.dev&#8217;s guide on MCP tool design<\/a>, and I think the same principles apply to WebMCP!<\/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<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The framework-agnostic approach is what caught my attention &#8211; most chat UIs are React-first, which quietly locks your architecture. The WebMCP-native integration is the right bet as MCP becomes the standard interface layer for AI tools. Quick question: how does Persona handle auth context when the MCP server needs user-specific permissions? Does the host page manage that entirely, or is there a mechanism built into the library for passing tokens through?<\/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\/@galdayan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@galdayan<\/a>&nbsp;Great question! There are essentially two paths, which you can blend together based on where the auth checks already are.<\/p>\n<p>1) Handling auth context on the API side. Usually you are already streaming LLM \/ AI framework calls through the backend so the state of the user is already available. Persona has examples of using a proxy to do this in the repo as well.<\/p>\n<p>2) Using WebMCP to respect the auth context automatically. Since the tools are being called on the frontend when you use WebMCP, you can pass the signed in user&#8217;s identity as part of the existing function calls. If your app&#8217;s frontend works with signed in context today, you might not need additional backend work.<\/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<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The WebMCP angle is what makes this feel more than another chat widget to me.<\/p>\n<\/p>\n<p>The safety\/usability detail I\u2019d want as a builder is a clear tool-call preview: what page tool the assistant is about to use, what state it will change, and what the user can undo.<\/p>\n<\/p>\n<p>For existing apps, the scary part isn\u2019t adding chat; it\u2019s letting an agent touch real UI flows without turning every action into a mystery. If Persona can make those side effects visible and reversible by default, it would lower the trust barrier a lot.<\/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\/@grace_lee26\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@grace_lee26<\/a>&nbsp;Persona has a lot of knobs here &#8211; we support tool call approval by default (and map it to how the WebMCP tools are configured), and you can make the display of the tool call details more or less verbose based on your preference as a builder.<\/p>\n<\/p>\n<p>There&#8217;s a demo here that shows more about how this works:<\/p>\n<\/p>\n<p><a href=\"https:\/\/www.persona-chat.dev\/approval-demo.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/www.persona-chat.dev\/approval-demo.html<\/a><\/p>\n<\/p>\n<p>There&#8217;s also a fun example of a Persona plugin on this page!<\/p>\n<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/33fdaf11-df0f-47b6-8480-d106b3480a75.png?auto=compress,format&amp;codec=mozjpeg&amp;cs=strip\" style=\"max-width: 100%\"><\/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<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>That split is fair, and the server framework is genuinely where I&#8217;d want the real teeth. The part I keep snagging on is that the dangerous chain spans both halves. The client sees a getter fire, the server sees a mutation fire, but the step where one fed the other lives in the gap between them. We hit exactly this building agent tool-loops: every call looked safe on its own, the damage was in the ordering. Do you end up passing any call provenance across the seam, so the server side can see what the client already ran?<\/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\/@dipankar_sarkar\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dipankar_sarkar<\/a>&nbsp;yes, in this model all the tool calls are ultimately emitted by the server and executed on the client, so there is nothing the server is not aware of; it is the initiator.<\/p>\n<\/p>\n<p>Naturally the browser is an insecure environment and the output itself needs to not be fully trusted, which is where server-side frameworks like Runtype implement (or should implement) <a href=\"https:\/\/developer.chrome.com\/docs\/agents\/security\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">appropriate guardrails<\/a> and similarly site owners should <a href=\"https:\/\/developer.chrome.com\/docs\/ai\/webmcp\/secure-tools\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">follow best practices<\/a>. The Chrome team has been appropriately conservative in their initial release and I would expect to see browsers adopt incremental improvements to CSP for example to limit the ability for arbitrary 3rd-party scripts to inject malicious tools.<\/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\/@dipankar_sarkar\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dipankar_sarkar<\/a>&nbsp;to back up what <a href=\"https:\/\/www.producthunt.com\/@runtypical\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"runtypical\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@runtypical<\/a> is saying on the server side, in practice we&#8217;ve done a few things there alongside the client tool calling in Persona to make it easier to execute safely.<\/p>\n<p>1) Define tool params as &#8216;protected&#8217; which will be filled in outside of the LLM. The model doesn&#8217;t see the param ever, as we inject them server side before the tool call event is streamed back.<\/p>\n<p>2) Run tool calls through an explicit &#8220;local&#8221; tool call path, which escape hatches out of the main loop like a approval step, but for tool calls you want to process specifically through another server \/ harness \/ etc. WebMCP support in Persona uses a form of this, made more generic on the client side so any platform can implement it too.<\/p>\n<p>We optionally store the full input and output for every call when Runtype is involved, which can be included on the streamed events as well so your server proxying the request can use all of that data to decide on the fly. We provide a server side SDK to hook into what is streamed for those advanced cases.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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 read-only vs mutative tagging plus HITL is exactly the right shape, thanks for the concrete demo. The bit I am chewing on is where the tag comes from. If the developer declares it, safety still rests on them classifying correctly, and a tool that looks read-only (a getter) can feed its result straight into a mutative call. Does the HITL gate reason about a chain that ends in a mutation, or approve per individual call? That chaining case is where I would expect intent to slip.<\/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\/@dipankar_sarkar\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dipankar_sarkar<\/a>&nbsp;thank you for the nuanced question! The HITL gate is per-call from Persona&#8217;s perspective, but keep in mind that Persona is only the client-side of the equation when making a chat agent w\/ WebMCP capabilities &#8211; and indeed the second half of the equation is the server-side agent framework, which is where most of the defense-in-depth should be from a security perspective. When connected to Runtype, you can apply further policies on top of the registered WebMCP tools.<\/p>\n<\/p>\n<p>Ultimately site owners &amp; platforms do have a responsibility to design tools well (or use trusted frameworks\/extensions to expose tools), just as they&#8217;ve had responsibilities for all other matters of site security around XSRF and so forth.<\/p>\n<\/p>\n<p>I would argue that feeding the result of a read-only tool into a mutation is, most of the time, a feature! An agent that can read state and use it to inform the next call is what makes copilot experiences feel very intelligent, so they shouldn&#8217;t be rejected out of hand, just designed defensively.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>2<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The boundary I\u2019d want to inspect in every WebMCP app is the receipt after a mutative step, not just the approval before it.<\/p>\n<\/p>\n<p>Tool name, page\/app context, inputs used, approval, result, and whether it can be undone. That\u2019s what makes the action feel debuggable instead of magical.<\/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\/@blah_mad\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@blah_mad<\/a>&nbsp;sounds like you&#8217;ve built something real before \ud83d\ude42 <\/p>\n<p>So while Persona does have built-in event debugging in the UI you can optionally turn on (screenshots attached), there is also a deeper set of JS events you can listen to for messages, results, approvals etc in a lot more detail: <a href=\"https:\/\/github.com\/runtypelabs\/persona\/blob\/main\/packages\/widget\/docs\/PROGRAMMATIC-CONTROL.md?plain=1#L562\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/github.com\/runtypelabs\/persona\/blob\/main\/packages\/widget\/docs\/PROGRAMMATIC-CONTROL.md?plain=1#L562<\/a><\/p>\n<p>The messages in particular seem to be right up your alley for the deep debugging use case:<\/p>\n<pre><code>type AgentWidgetMessage = {\n  id: string;                    \/\/ Unique message identifier\n  role: \"user\" | \"assistant\" | \"system\";\n  content: string;               \/\/ Message text content\n  createdAt: string;             \/\/ ISO timestamp\n  streaming?: boolean;           \/\/ Whether message is still streaming\n  variant?: \"assistant\" | \"reasoning\" | \"tool\";\n  sequence?: number;             \/\/ Message ordering\n  reasoning?: AgentWidgetReasoning;\n  toolCall?: AgentWidgetToolCall;\n  tools?: AgentWidgetToolCall[];\n  viaVoice?: boolean;            \/\/ Indicates if user message was sent via voice input\n};<\/code><\/pre>\n<\/p>\n<p>You&#8217;d get that info by hooking into Persona init and watching for the assistant messages:<\/p>\n<pre><code>window.addEventListener('persona:chat-ready', (e) =&gt; {\n  const handle = e.detail;\n  handle.on('assistant:message', (msg) =&gt; console.log(msg));\n  handle.open();\n});\n\n\/\/ or\n\nconst chat = initAgentWidget({\n  target: 'body',\n  config: { apiUrl: '\/api\/chat\/dispatch' }\n});\n\nchat.on('assistant:message', (message) =&gt; {\n  console.log('Assistant message sent:', message.content);\n  if (message.viaVoice) {\n    console.log('Message was sent via voice recognition');\n  }\n});<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/87f20478-c618-48b3-81a3-f33092797d94.png?auto=compress,format&amp;codec=mozjpeg&amp;cs=strip\" style=\"max-width: 100%\"><\/p>\n<p><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/abb93e53-9c81-48c1-bcb9-41a72e19b84b.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>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 had been toying around with the idea of writing an internal tool for our implementation team to quickly spin up, configure and iterate on accounts with a promptable interface. Our platform is highly customizable and composable so this is typically a pretty heavy lift to even get to a demoable state for a customer, much less to a go-live state. Persona arrived at the perfect time and I was able to get it working within a day, and I expect it to start accelerating our implementation work immediately. WebMCP makes this <em>extremely<\/em> powerful. Haven&#8217;t had to lean on the polyfill as we use Chrome, so I can&#8217;t speak to that part, but I imagine there are plenty of people and companies out there with use cases similar to ours that this would work perfectly for even <em>without<\/em> that.<\/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\/@erik_christensen\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@erik_christensen<\/a>&nbsp;really appreciate your real-world validation, it was great to see how cleanly Persona&#8217;s capabilities mapped to the needs of your team. I think you&#8217;ll be a great real-world success story very soon as you get to production with it &#8211; can&#8217;t wait to see what you build.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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\/@erik_christensen\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@erik_christensen<\/a>&nbsp;exactly. I love the emergent benefit you get from thinking about the frontend as a source of tools. Many times the logic you already built there is 1:1 with what you\u2019d want an agent to perform. <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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\">Persona looks polished yet flexible, especially with the no\u2011code theming and deeper dev hooks. Curious, when you tested it on sites like WordPress or Shopify, what was the biggest challenge in making the experience seamless?<\/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\/@odeth_negapatan1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@odeth_negapatan1<\/a>&nbsp;thanks! And yeah, we have tested on WordPress and Shopify. Persona drops in great there because you can use the script tag (CDN) deployment which doesn\u2019t need a build step. All the init and theme configuration can be set in script tag data params.<\/p>\n<\/p>\n<p>We spent a lot of time determining the right loading methods for each type of site. Getting the different methods working in the same library while keeping the bundle size tiny, without regressions in functionality, was not easy.<\/p>\n<\/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>WebMCP-native is the part that grabs me. Most &#8220;AI chat widgets&#8221; just bolt a chatbox onto a page, but having the chat actually talk to your frontend through MCP feels like a much cleaner way to let the AI do real things instead of just answering FAQs.<\/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\/@yibo_wang3\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@yibo_wang3<\/a>&nbsp;we agree! A lot of our motivation for Persona was from having used one too many AI assistants who had no idea who I was, asked for me email when I was already logged in, asked me for a piece of information that was already on my page in front of me, etc.<\/p>\n<\/p>\n<p>WebMCP integration is the most elegant solution to that problem we&#8217;ve come across, and alignment with the standard has yielded benefits. We&#8217;re stoked that investment in WebMCP means site owners can add great assistant tech to their site today while also future-proofing for more sophisticated browsing agents of tomorrow.<\/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\">#4<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/RWRX52GMAZRU3H\" class=\"app-title\">Dotient<\/a><\/p>\n<div class=\"one-liner\">Your local semantic search app<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">231<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Dotient \u662f\u4e00\u6b3e\u672c\u5730\u4f18\u5148\u7684\u684c\u9762\u6587\u4ef6\u8bed\u4e49\u641c\u7d22\u5de5\u5177\uff0c\u901a\u8fc7ML\u89c6\u89c9\u641c\u7d22\u8ba9\u7528\u6237\u51ed\u201c\u6587\u4ef6\u957f\u4ec0\u4e48\u6837\u201d\u800c\u975e\u201c\u6587\u4ef6\u540d\u201d\u6765\u67e5\u627e\u5185\u5bb9\uff0c\u89e3\u51b3\u5728\u6df7\u4e71\u7684\u4e2a\u4eba\u6587\u4ef6\u4e2d\u201c\u8bb0\u5f97\u6709\u4f46\u627e\u4e0d\u5230\u201d\u7684\u75db\u70b9\uff0c\u5168\u7a0b\u79bb\u7ebf\u3001\u9690\u79c1\u4e0d\u4e0a\u4e91\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\/e592297e-11b2-42e8-bf3e-d48e1083a02e.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\/056d0bea-70f7-4193-be70-cf2b1ee85eb6.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\/9f5c37b2-a27c-46d0-a854-d6f3bafd9637.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\/078d2284-9a8c-4ceb-b1ca-ba133b1f4870.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\/3cd02b03-f8f2-4490-af41-e2d943376dbe.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\/7cea2223-5e07-453c-b4ea-96b88be1f47c.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/tPa7R-mMzg8?si=Fp6LEeCdxzvhfVoW\"><source src=\"https:\/\/youtu.be\/tPa7R-mMzg8?si=Fp6LEeCdxzvhfVoW\" 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\">Privacy<\/span><br \/>\n            <span class=\"tag\">Search<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u672c\u5730\u4f18\u5148<\/span><br \/>\n            <span class=\"tag\">\u8bed\u4e49\u641c\u7d22<\/span><br \/>\n            <span class=\"tag\">\u89c6\u89c9\u641c\u7d22<\/span><br \/>\n            <span class=\"tag\">\u6587\u4ef6\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">\u79bb\u7ebf\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u9690\u79c1\u4fdd\u62a4<\/span><br \/>\n            <span class=\"tag\">\u684c\u9762\u5e94\u7528<\/span><br \/>\n            <span class=\"tag\">ML\u5d4c\u5165<\/span><br \/>\n            <span class=\"tag\">\u6587\u4ef6\u7d22\u5f15<\/span><br \/>\n            <span class=\"tag\">\u4e2a\u4eba\u77e5\u8bc6\u7ba1\u7406<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u6838\u5fc3\u53cd\u9988\uff1a\u81ea\u52a8\u7d22\u5f15\u529f\u80fd\u7f3a\u5931\uff0c\u624b\u52a8\u62d6\u62fd\u540e\u641c\u7d22\u65e0\u54cd\u5e94\uff08Mac\u7248\u5b58\u5728UI Bug\uff09\uff1b\u201c\u4fe1\u53f7\u7cfb\u7edf\u201d\u9700\u4e3a\u6bcf\u4eba\u624b\u52a8\u6807\u5b9a\u56fe\u7247\uff0c\u64cd\u4f5c\u95e8\u69db\u9ad8\uff1b\u5355\u6b21\u641c\u7d22\u4f9d\u8d56\u7cbe\u51c6\u67e5\u8be2\u8bcd\uff0c\u6a21\u7cca\u67e5\u8be2\u6548\u679c\u5f31\uff1b\u5efa\u8bae\u589e\u52a0\u6587\u4ef6\u76d1\u63a7\u589e\u91cf\u66f4\u65b0\u548cOCR\u529f\u80fd\uff1b\u6280\u672f\u7528\u6237\u63d0\u51fa\u6a21\u578b\u5347\u7ea7\u540e\u5411\u91cf\u517c\u5bb9\u6027\u4e0e\u60f0\u6027\u8fc1\u79fb\u65b9\u6848\u7684\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                Dotient \u5207\u4e2d\u4e86\u4e00\u4e2a\u771f\u5b9e\u4f46\u5c0f\u4f17\u7684\u75db\u70b9\uff1a\u5f53\u4f20\u7edf\u6587\u4ef6\u7ba1\u7406\u5668\u9760\u6587\u4ef6\u540d\u548c\u4fee\u6539\u65e5\u671f\u68c0\u7d22\u5931\u7075\u65f6\uff0c\u89c6\u89c9\u8bed\u4e49\u641c\u7d22\u63d0\u4f9b\u4e86\u53e6\u4e00\u79cd\u8def\u5f84\u3002\u5b83\u7684\u771f\u6b63\u4ef7\u503c\u4e0d\u5728\u4e8e\u201c\u641c\u7d22\u201d\uff0c\u800c\u5728\u4e8e\u201c\u91cd\u5efa\u4e2a\u4eba\u6587\u4ef6\u7684\u5173\u7cfb\u7f51\u7edc\u201d\u2014\u2014\u901a\u8fc7\u672c\u5730\u5d4c\u5165\u548c\u4fe1\u53f7\u7cfb\u7edf\uff0c\u7528\u6237\u4e0d\u4ec5\u627e\u56de\u6587\u4ef6\uff0c\u66f4\u80fd\u6301\u7eed\u201c\u8bad\u7ec3\u201d\u81ea\u5df1\u7684\u6587\u4ef6\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u8fd9\u6b3e\u4ea7\u54c1\u76ee\u524d\u66f4\u50cf\u4e00\u4e2a\u7cbe\u81f4\u7684\u73a9\u5177\uff0c\u800c\u975e\u751f\u4ea7\u529b\u5de5\u5177\u3002\u8bc4\u8bba\u533a\u7684Bug\u53cd\u9988\uff08Mac\u65e0\u54cd\u5e94\u3001\u7d22\u5f15\u7a7a\u767d\uff09\u66b4\u9732\u4e86\u5b83\u5728\u5de5\u7a0b\u7a33\u5b9a\u6027\u4e0a\u7684\u77ed\u677f\uff0c\u8fd9\u5728\u672c\u5730\u5e94\u7528\u4e2d\u662f\u81f4\u547d\u4f24\uff1a\u7528\u6237\u613f\u610f\u4e3a\u9690\u79c1\u727a\u7272\u4fbf\u5229\uff0c\u4f46\u4e0d\u4f1a\u4e3aBug\u727a\u7272\u53ef\u9760\u6027\u3002\u66f4\u5173\u952e\u7684\u662f\uff0c\u5b83\u7684\u6838\u5fc3\u4ea4\u4e92\u2014\u2014\u201c\u4fe1\u53f7\u7cfb\u7edf\u201d\u9700\u8981\u7528\u6237\u624b\u52a8\u6807\u8bb0\u6b63\u8d1f\u6837\u672c\uff0c\u8fd9\u76f8\u5f53\u4e8e\u628a\u673a\u5668\u5b66\u4e60\u7684\u6570\u636e\u6807\u6ce8\u5de5\u4f5c\u63a8\u7ed9\u4e86\u7ec8\u7aef\u7528\u6237\u3002\u5bf9\u975e\u6280\u672f\u7528\u6237\u800c\u8a00\uff0c\u5b66\u4e60\u6210\u672c\u8fdc\u9ad8\u4e8e\u201c\u6539\u4e2a\u6587\u4ef6\u540d\u201d\u3002\u5373\u4fbf\u529f\u80fd\u5f3a\u5927\uff0c90%\u7684\u4eba\u4f1a\u5728\u7b2c\u4e00\u6b65\u653e\u5f03\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u957f\u8fdc\u770b\uff0c\u5982\u679cDotient\u4e0d\u80fd\u5728\u81ea\u52a8\u7d22\u5f15\u548c\u6587\u4ef6\u76d1\u63a7\u4e0a\u505a\u5230\u201c\u5f00\u7bb1\u5373\u7528\u201d\uff0c\u5b83\u6c38\u8fdc\u65e0\u6cd5\u66ff\u4ee3Windows\u8d44\u6e90\u7ba1\u7406\u5668\u6216Finder\u2014\u2014\u6bd5\u7adf\u7528\u6237\u5bf9\u540e\u8005\u518d\u4e0d\u60c5\u613f\uff0c\u4e5f\u80fd\u79d2\u5f00\u4e00\u4e2a\u6587\u4ef6\u3002\u6a21\u578b\u5347\u7ea7\u7684\u517c\u5bb9\u6027\u4e0e\u60f0\u6027\u8fc1\u79fb\u903b\u8f91\u867d\u7136\u88ab\u6280\u672f\u7528\u6237\u63d0\u51fa\uff0c\u4f46\u5f53\u524d\u7248\u672c1\u7684\u4f53\u91cf\u8fd8\u8fdc\u672a\u5230\u9700\u8981\u62c5\u5fe7\u90a3\u4e00\u523b\u7684\u65f6\u5019\u3002\u66f4\u73b0\u5b9e\u7684\u95ee\u9898\u662f\uff1a\u5982\u4f55\u8ba9\u4e00\u4e2a\u666e\u901a\u4eba\u613f\u610f\u5728\u672c\u5730\u8dd1\u4e00\u4e2a\u7528\u6765\u641c\u6587\u4ef6\u7684AI\u6a21\u578b\uff0c\u800c\u4e0d\u662f\u76f4\u63a5\u6253\u5f00Spotlight\u6216Everything\u3002\n            <\/p>\n<p class=\"ai-content\">\n                Dotient \u76ee\u524d\u7684\u4ef7\u503c\u4e3b\u8981\u5728\u6781\u5ba2\u548c\u9690\u79c1\u654f\u611f\u578b\u7528\u6237\u5708\u5c42\uff0c\u4f5c\u4e3a\u201c\u66ff\u4ee3\u65b9\u6848\u201d\u800c\u975e\u201c\u4e3b\u6d41\u65b9\u6848\u201d\u3002\u5982\u679c\u60f3\u7834\u5708\uff0c\u5b83\u9700\u8981\u66f4\u9690\u853d\u7684\u8fd0\u884c\u65b9\u5f0f\u3001\u66f4\u806a\u660e\u81ea\u52a8\u5316\u7d22\u5f15\uff0c\u4ee5\u53ca\u5f7b\u5e95\u9690\u85cf\u201c\u4fe1\u53f7\u7cfb\u7edf\u201d\u7684\u590d\u6742\u5ea6\u3002\u5426\u5219\uff0c\u5b83\u5c06\u4e00\u76f4\u505c\u7559\u5728\u201c\u770b\u5f97\u89c1\u4f46\u4e0d\u4f1a\u7528\u201d\u7684\u5c34\u5c2c\u4f4d\u7f6e\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\">Dotient<\/span>\n                <\/div>\n<div class=\"comment-content\">Dotient is a local-first desktop application that helps you organize and search through your personal files using ML-powered visual search. Your files stay private, work offline.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">I built this because I was genuinely sick of Windows File Explorer. Finding a file you half-remember is a nightmare, and don&#8217;t even get me started on hunting through PDFs. Dotient lets you find files based on what they look like, not what you happened to name them two years ago, runs completely offline, and gives you a real bird&#8217;s eye view of everything on your machine. Hope you find it as useful as I do.<\/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\/@localdeclan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@localdeclan<\/a>&nbsp;<em>\u201cHi Declan,<\/em><\/p>\n<\/p>\n<p><em>I came across Dotient on Product Hunt \u2014 really interesting positioning. I create Turkish-language AI content on Instagram (@yucel.kelci ) (458K followers, 21M &#8211; 50M monthly views). Turkey is one of the fastest-growing AI adoption markets right now and there\u2019s almost no quality Turkish content covering tools like yours. Would you be open to a sponsored content partnership? Happy to share my media kit.\u201d<\/em><\/p>\n<\/p>\n<p>Happy to share my media kit \u2014 or you can view it here: <a href=\"https:\/\/drive.google.com\/file\/d\/1J72dHqC6BXdEfKHs320vBtKz2XoJ0KI-\/view?usp=sharing\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/drive.google.com\/file\/d\/1J72dHqC6BXdEfKHs320vBtKz2XoJ0KI-\/view?usp=sharing<\/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\/@localdeclan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@localdeclan<\/a>&nbsp;This is a powerful tool<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@localdeclan\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"localdeclan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@localdeclan<\/a> &nbsp;The offline part is what sold me \u2014 most search tools quietly send your files to the cloud. Really smart to keep everything local. Does it work well with large file collections, say 100k+ files?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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>local + semantic search is a nice combo, feels like most semantic search tools assume you&#8217;re fine sending everything to the cloud. how&#8217;s the search quality holding up running fully local vs what you&#8217;d get from a cloud-based embedding model.<\/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\/@martin_mo\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@martin_mo<\/a>&nbsp;Search quality is good when you are specific with your queries. One word queries usually aren&#8217;t too strong but that&#8217;s what my Signal system is for. Users can shift the embedding space to fit their queries, almost like a super advanced tagging system. The difference really isn&#8217;t that far if you properly know how to use the software, and in some cases, the local model excels. Especially with super specific queries such as &#8220;Bird with yellow beak outside on bird feeder.&#8221; <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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>As someone who&#8217;s spent way too much time searching for <em>&#8220;that one PDF with the blue chart&#8221;<\/em> or <em>&#8220;that screenshot I know I took last month,&#8221;<\/em> this feels incredibly relatable. <\/p>\n<p>Love the local-first approach as well, privacy shouldn&#8217;t have to be a trade-off for smarter search.<\/p>\n<p>Definitely giving Dotient a spin. Congrats on the launch, and excited to see where you take it next! \ud83d\udc4f<\/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\/@jayant_siktia\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@jayant_siktia<\/a>&nbsp;Thank you very 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\">Sounds great for local files! Any way to integrate with cloud search as well for a unified experience?<\/div>\n<div class=\"comment-actions\">\n<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\/@tkeith\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@tkeith<\/a>&nbsp;In the future there will be ways to sync devices over a wifi connection, but nothing over some external server. That would go completely against Dotient&#8217;s morals. <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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>Good concept. I just bought and tried the app on my Mac.<\/p>\n<p>At first run, I was expecting an auto indexing of my Images\/Documents\/Download folders but nothing happened. So I drag and dropped the whole content of my downloads folders to the &#8220;drop or paste a file&#8221; place. Eventually I saw &#8220;100%&#8221; on the top left corner. Then, nothing?<\/p>\n<p>All researches lead to &#8220;no images match your query&#8221;.<br \/>Am I doing something wrong?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@tacitefood\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@tacitefood<\/a>&nbsp;Yeah the indexing is manual but it is definitely a high priority now to add some sort of auto indexing after your concern. Regarding the issue with dropping content into the app and nothing happening, theres been a lot of reactivity issues with macos, so maybe do a cmd shift r to refresh the app, switch between pages to see if anything loads in. If nothing happens, try a small batch, maybe 50 files. The processing indicator in the top left is a bit buggy so I definitely have to fix that. Keep in touch with me, I will definitely work to resolve these 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>I love your website! Is the expected usage to train a signal before every unique search? If i had a bunch of group photos and I&#8217;m looking to search by name, I&#8217;d have to create a signal for each person by clicking a bunch of pictures they&#8217;re in and not in?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<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\/@noice30sugar\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@noice30sugar<\/a>&nbsp;Correct, if you were to label a specific person with a name then it would probably be best to select a few images they are in, maybe lower the threshold a bit just to see all the options. Then if there are certain images that just won&#8217;t go away and have nothing to do with the person, create a negative signal to eliminate those images. Once the signal is just right, you really shouldn&#8217;t have to do any more adjusting. Any new image you import of that person, the signal will include 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>Hey, how are we handling privacy in this? Like, what data actually leaves my device or workspace when I run Dotient on something sensitive?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<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\/@romejerome\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@romejerome<\/a>&nbsp;Great Question Jerome! The answer is absolutely nothing. Nothing leaves your device. Everything is stored in the SQLite DB that is on your device. There is no server besides the small API that simply checks if your license key is valid or not, that is the only time something ever communicates outside of your device.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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>Pinning one well-tuned model is a totally fair call for v1. The one cheap thing I&#8217;d still bake in now: stamp every vector row in SQLite with a model id or hash. It costs almost nothing today, and it&#8217;s what lets you re-embed lazily if you ever do swap models, where a file gets re-embedded the first time it&#8217;s queried after the upgrade so the cost spreads across normal use instead of one multi-hour background rescan. Retrofitting that stamp after the fact is the part that hurts.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<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\/@dipankar_sarkar\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dipankar_sarkar<\/a>&nbsp;Noted!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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>Local embeddings are the right call, but the part that bit me building this kind of thing is model versioning. The day you ship a better embedding model, every vector on disk is from the old one, so you either re-embed the whole drive, which is hours of background CPU, or run mixed old and new vectors where the query model and stored model disagree and recall quietly drops. How are you handling an embedding-model upgrade across an already-indexed machine, re-embed in place or version the index and migrate lazily?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<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\/@dipankar_sarkar\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dipankar_sarkar<\/a>&nbsp;This does keep me up at night. Models are only getting better, and yes between different model versions or entirely different model makers, the dimensions that each embedding has to be is almost never consistent. So I&#8217;m not too concerned with upgrading the model at the moment since I have spent so long optimizing this one to it&#8217;s absolute core. However, if it were to happen I would do some sort of lazy migration. Keep old index queryable, slowly re-embed all the files with the new model, run a dual-query between both models and merge the results layer until the old index fully drains. Thanks for the comment!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Local-first semantic search is the right call, the data leaving your machine is what kills these for real work. The thing I&#8217;d want as a user though: how do I trust it found everything? Keyword search fails loudly (zero results), but semantic search fails quietly, it returns something plausible and you never know what it missed. Do you surface a confidence or a &#8220;why this matched&#8221; so I can tell a real hit from a near-miss? That&#8217;s what decides whether I rely on it or still fall back to ctrl-F.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<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\/@david_marko\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@david_marko<\/a>&nbsp;You are indeed right to question that. Dotient runs a hybrid search system, BM25 + semantic in parallel, so anything keyword-findable won&#8217;t silently fail. But you&#8217;re right that the deeper &#8220;why this matched&#8221; question isn&#8217;t fully solved yet. That&#8217;s why we introduced this &#8216;Signals System&#8217; within the lab page of the app. You can basically shift the entire embedding to what you believe is correct. Relevance is at least grounded in something you define. Proper confidence surfacing and match explanations are definitely on the roadmap, partly due to your concern. Appreciate this comment!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>How did this wonderful idea come about?<\/p>\n<p>Did it stem from someone&#8217;s 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<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Local-first + offline visual search is the part I actually care about &#8211; most semantic file search tools quietly ship your content to an API, so doing the embeddings on-device is the real differentiator here. Two implementation things: is the index updated incrementally via a file watcher as files change, or is it a manual re-scan, and where does the embedding DB actually live on disk? And for the deep PDF search, are you running OCR on scanned\/image-only PDFs, or only indexing PDFs that already have a text layer?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@hi_i_am_mimo\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@hi_i_am_mimo<\/a>&nbsp;Hey Valeria, thank&#8217;s for the comment! To answer a few of your questions, there is a file watcher put in place for a certain set of basic directories like Downloads, Documents, Pictures and all folders within those directories. However if it is in other hard to find places, the file will be moved to a missing column in the SQLite DB. Users can easily just click on the file (which still does show the image, just a missing path), and update the path of where the file was moved to if it is one of these rare cases. The SQLite DB which holds almost all your data lives in &#8216;C:\\Users\\[username]\\AppData\\Roaming\\<a href=\"http:\/\/com.dotient.app\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">com.dotient.app<\/a>&#8216; and whatever the macOS equivalent of that path is. The webp thumbnails and embedding models also live in that path. Regarding PDF search, we are indexing the text layer and also scanning for images. There is no OCR indexing at the moment, but that may be planned for the future. Obviously you could just highlight a region of the PDF that has text with the rectangle selection tool and probably get a similar search result if you tried searching for that text. The model does understand text to some extent so you are able to search for big words that are in images. Hope this was 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<\/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\/53QUDXZGRRT6SK\" class=\"app-title\">Lyto<\/a><\/p>\n<div class=\"one-liner\">&#8220;One AI agent across your browser, tools, and messages &#8220;<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">165<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Lyto\u662f\u4e00\u6b3e\u96c6\u6210\u5728\u6d4f\u89c8\u5668\u4e2d\u7684AI\u4ee3\u7406\u63d2\u4ef6\uff0c\u901a\u8fc7\u8de8\u6807\u7b7e\u9875\u3001\u5de5\u5177\u548c\u6d88\u606f\u5e73\u53f0\uff08\u5982WhatsApp\/Telegram\uff09\u7684\u4e0a\u4e0b\u6587\u8bb0\u5fc6\u4e0e\u81ea\u4e3b\u64cd\u4f5c\uff0c\u89e3\u51b3\u7528\u6237\u5728\u591a\u4efb\u52a1\u5207\u6362\u65f6\u53cd\u590d\u5411AI\u91cd\u65b0\u89e3\u91ca\u4e0a\u4e0b\u6587\u3001\u65e0\u6cd5\u8fde\u8d2f\u6267\u884c\u5de5\u4f5c\u6d41\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\/d8ffea2c-2963-4621-9cb4-47907c087846.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/nciGjppyqTI\"><source src=\"https:\/\/youtu.be\/nciGjppyqTI\" 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\/34faa5eb-d362-4229-b8f9-cd6f2524675c.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\/00b62ffe-0ae7-411c-bcc5-48bee60db17f.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\/5e29aa8b-b2b1-48b8-96d6-cdb51fe96f9e.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\/ed5b2962-1ce9-4038-a0da-408d04e598d9.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\">Chrome Extensions<\/span><br \/>\n            <span class=\"tag\">Task Management<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u4ee3\u7406<\/span><br \/>\n            <span class=\"tag\">\u6d4f\u89c8\u5668\u6269\u5c55<\/span><br \/>\n            <span class=\"tag\">\u5de5\u4f5c\u6d41\u81ea\u52a8\u5316<\/span><br \/>\n            <span class=\"tag\">\u751f\u4ea7\u529b\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u4e0a\u4e0b\u6587\u8bb0\u5fc6<\/span><br \/>\n            <span class=\"tag\">Chrome\u63d2\u4ef6<\/span><br \/>\n            <span class=\"tag\">Google\u529e\u516c\u5957\u4ef6\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">\u8fdc\u7a0b\u63a7\u5236<\/span><br \/>\n            <span class=\"tag\">\u667a\u80fd\u586b\u8868<\/span><br \/>\n            <span class=\"tag\">\u591a\u5e73\u53f0\u534f\u540c<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u9ad8\u5ea6\u5173\u6ce8\uff1a1\uff09\u6570\u636e\u9690\u79c1\u4e0e\u8bb0\u5fc6\u5b58\u50a8\u4f4d\u7f6e\uff08\u672c\u5730vs\u4e91\u7aef\uff09\uff1b2\uff09\u5bf9\u6709\u98ce\u9669\u64cd\u4f5c\uff08\u5982\u53d1\u9001\u90ae\u4ef6\u3001\u7f16\u8f91\u6587\u6863\uff09\u7684\u786e\u8ba4\u673a\u5236\uff1b3\uff09\u8de8\u57dfiframe\u548cshadow DOM\u7684\u517c\u5bb9\u6027\uff1b4\uff09\u4e0a\u4e0b\u6587\u6301\u4e45\u6027\u662f\u5426\u8de8\u4f1a\u8bdd\uff1b5\uff09\u4e0eClaude\u63d2\u4ef6\u7b49\u7ade\u54c1\u7684\u5dee\u5f02\u5316\u3002\u56e2\u961f\u56de\u590d\u5f3a\u8c03\u672c\u5730\u5b58\u50a8\u3001\u64cd\u4f5c\u524d\u9884\u89c8\u786e\u8ba4\u3001\u5143\u7d20\u624b\u52a8\u9009\u62e9\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                Lyto\u5207\u4e2d\u4e86\u4e00\u4e2a\u771f\u5b9e\u4e14\u9ad8\u9891\u7684\u75db\u70b9\uff1aAI\u5de5\u5177\u7684\u201c\u788e\u7247\u5316\u4f7f\u7528\u201d\u3002\u5f53\u7528\u6237\u4eceChatGPT\u5207\u5230Gmail\uff0c\u518d\u5207\u56de\u6d4f\u89c8\u5668\u65f6\uff0c\u4e0a\u4e0b\u6587\u5f52\u96f6\u2014\u2014\u8fd9\u79cd\u201c\u8111\u529b\u7a0e\u201d\u65e9\u5df2\u88ab\u6807\u51c6\u5316\u529e\u516c\u8f6f\u4ef6\u5ffd\u89c6\u3002Lyto\u7684\u4ef7\u503c\u4e0d\u5728\u4e8e\u6280\u672f\u7a81\u7834\uff0c\u800c\u5728\u4e8e\u4ea7\u54c1\u903b\u8f91\u7684\u98a0\u8986\uff1a\u628a\u201c\u7528\u6237\u53bb\u627eAI\u201d\u53d8\u6210\u201cAI\u8ddf\u5728\u7528\u6237\u8eab\u540e\u201d\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ece\u6280\u672f\u67b6\u6784\u770b\uff0c\u5b83\u9009\u62e9\u4e86\u4e00\u6761\u201c\u7b28\u4f46\u7a33\u201d\u7684\u8def\uff1aDOM\u81ea\u52a8\u5316\u90e8\u5206\u4f9d\u8d56\u670d\u52a1\u5668\u63a8\u7406\uff08\u9875\u9762\u5185\u5bb9\u5916\u4f20\uff09\uff0c\u884c\u52a8\u5c42\u5219\u9501\u5b9a\u672c\u5730\u5b58\u50a8\u548c\u64cd\u4f5c\u524d\u786e\u8ba4\u3002\u8fd9\u79cd\u5206\u6743\u8bbe\u8ba1\u867d\u727a\u7272\u4e86\u90e8\u5206\u5b9e\u65f6\u6027\uff0c\u4f46\u5728\u5b89\u5168\u548c\u53ef\u63a7\u6027\u4e0a\u907f\u514d\u4e86\u707e\u96be\u6027\u5931\u8bef\u3002\u5b83\u806a\u660e\u5730\u907f\u5f00\u4e86\u5199\u64cd\u4f5c\u201c\u65e0\u6572\u5b9a\u52a8\u4f5c\u201d\u7684\u9677\u9631\uff08\u5982Sheets\u7684blur\u63d0\u4ea4\uff09\uff0c\u8fd9\u6b63\u662f\u5927\u591a\u6570\u6d4f\u89c8\u5668\u4ee3\u7406\u4ea7\u54c1\u7ffb\u8f66\u7684\u5730\u65b9\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46Lyto\u7684\u91ce\u5fc3\u4e5f\u9690\u85cf\u7740\u98ce\u9669\u3002\u4e00\u65e6\u8de8\u5de5\u5177\u64cd\u4f5c\u6d41\u7a0b\u53d8\u957f\uff0c\u6a21\u578b\u5bf9\u610f\u56fe\u7684\u7406\u89e3\u53ef\u80fd\u5931\u51c6\uff08\u5982\u7528\u6237\u5bf9\u8bc4\u8bba\u4e2d\u201c\u65e0\u75d5\u5fae\u8c03\u201d\u7684\u62c5\u5fe7\uff09\uff1b\u540c\u65f6\u5728\u590d\u6742\u9875\u9762\uff08shadow DOM\u3001\u590d\u6742JS SPA\uff09\u4e0a\u7684\u201c\u624b\u52a8\u9009\u62e9\u5143\u7d20\u201d\u6a21\u5f0f\u672c\u8d28\u4e0a\u662f\u5bf9\u80fd\u529b\u4e0a\u9650\u7684\u59a5\u534f\u3002\u6b64\u5916\uff0c\u4f5c\u4e3aChrome\u6269\u5c55\uff0c\u5b83\u7684\u751f\u547d\u7ebf\u5b8c\u5168\u7ed1\u5728\u6d4f\u89c8\u5668\u5f15\u64ce\u548cG Suite\u63a5\u53e3\u66f4\u65b0\u4e0a\u2014\u2014\u8fd9\u6761\u8d5b\u9053\u4e0a\u4e0d\u7f3a\u5927\u5382\uff08\u5982Microsoft Copilot\uff09\uff0c\u4ea7\u54c1\u62a4\u57ce\u6cb3\u53ea\u80fd\u9760\u7cbe\u7ec6\u5316\u7684\u5de5\u4f5c\u6d41\u6a21\u677f\u548c\u7528\u6237\u4e60\u60ef\u9501\u5b9a\u6765\u6784\u5efa\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u6700\u4eae\u773c\u7684\u662fWhatsApp\/Telegram\u9065\u63a7\u65b9\u6848\uff0c\u5b83\u628aAI\u4ee3\u7406\u4ece\u684c\u9762\u7aef\u89e3\u653e\u51fa\u6765\uff0c\u573a\u666f\u4e0a\u76f4\u63a5\u5207\u5165\u79fb\u52a8\u529e\u516c\u7684\u771f\u7a7a\u5730\u5e26\u3002\u8fd9\u4e0d\u4ec5\u662f\u529f\u80fd\uff0c\u66f4\u662f\u5dee\u5f02\u5316\u58c1\u5792\u3002\u4f46\u957f\u8fdc\u6765\u770b\uff0cLyto\u9700\u8981\u56de\u7b54\u4e00\u4e2a\u6838\u5fc3\u95ee\u9898\uff1a\u662f\u505a\u4e00\u4e2a\u66f4\u806a\u660e\u7684\u201c\u6d4f\u89c8\u5668\u5b8f\u811a\u672c\u201d\uff0c\u8fd8\u662f\u771f\u6b63\u7406\u89e3\u610f\u56fe\u7684\u201c\u6570\u5b57\u526f\u9a7e\u9a76\u201d\uff1f\u76ee\u524d\u5b83\u5c5e\u4e8e\u524d\u8005\uff0c\u800c\u5e02\u573a\u5bf9\u540e\u8005\u7684\u8010\u5fc3\u53ef\u80fd\u4e0d\u4f1a\u592a\u4e45\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\">Lyto<\/span>\n                <\/div>\n<div class=\"comment-content\">Lyto AI is a Chrome extension that gives you full control over your browser. Open and close tabs, scroll, click, fill forms, and interact with every DOM element. Integrates with Google Docs, Gmail, and Google Sheets. Research, automate tasks, and organize your workflow \u2014 all inside Chrome.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hey Product Hunt \ud83d\udc4b<\/p>\n<p>We\u2019re the team behind Lyto.<\/p>\n<p>This started from a problem that drove us crazy. Every time you work, you\u2019re jumping between ChatGPT, your tabs, your docs, your email, and the second you switch, your AI forgets everything you were doing. You\u2019re constantly re-explaining context just to get one thing done.<\/p>\n<p>So we built Lyto. It\u2019s an AI agent that lives in your browser, remembers your entire workflow, and actually does the work instead of just talking about it. It reads your pages, fills your forms, builds your spreadsheets and reports, and connects to the tools you already use like Gmail, Slack, Sheets, and GitHub.<\/p>\n<p>The feature people seem to love most: you can text Lyto from WhatsApp or Telegram, ask it to build a report with graphs, and it sends the finished file straight to any contact. No laptop needed.<\/p>\n<p>It started as a browser extension and honestly looked nothing like it does now. We pivoted hard based on what real users and teams actually needed, and somewhere along the way real companies started using it to run their workflows.<\/p>\n<p>We\u2019d genuinely love your honest feedback. The good, the broken, all of it. That\u2019s the only thing that makes this better.<\/p>\n<p>Try it and tell us what you think \ud83d\ude4f<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>7<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">@arystan_tanekov  Too good software.<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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\/@arystan_tanekov\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@arystan_tanekov<\/a> <\/p>\n<\/p>\n<p><em>Hi Arystan, <\/em><\/p>\n<\/p>\n<p><em>I came across Lyto on Product Hunt \u2014 really interesting positioning. I create Turkish-language AI content on Instagram (@yucel.kelci ) (458K followers, 20M &#8211; 50M monthly views). Turkey is one of the fastest-growing AI adoption markets right now and there\u2019s almost no quality Turkish content covering tools like yours. Would you be open to a sponsored content partnership? Happy to share my media kit.<\/em><\/p>\n<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<div class=\"reply-item\">\n<div class=\"reply-content\">@arystan_tanekov Any day this launch would still stand out. \ud83d\udc4c\ud83c\udffc<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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\u2019s a fantastic idea!<\/p>\n<p>Did the inspiration come from a tedious task you personally had to deal with?<\/p>\n<p>Or was it based on requests from users?<\/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\/@nanimono_masa\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@nanimono_masa<\/a>&nbsp;Both honestly! I kept losing context every time I switched between tabs and had to re-explain everything to ChatGPT from scratch. That was the personal frustration. Then when we talked to other people we realised it was not just me, it was everyone bouncing between tools all day. That combo is what pushed us to build it.<\/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 is it different from Claude in Chrome plugin?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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 context-loss problem between tools is the thing that broke me too. I&#8217;d start something in Claude, jump to my own product to test it, then back to Claude and it had no memory of why we started. Ended up writing my own context notes by hand like an old engineer keeping a logbook.<\/p>\n<\/p>\n<p>The WhatsApp\/Telegram angle is smart. Most &#8220;AI assistants&#8221; still assume you&#8217;re sitting at a desktop. Curious where it breaks down is the bottleneck the model losing track on longer threads, or is it the user not knowing what to ask for once the agent has full context?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">The WhatsApp and Telegram integration is a clever touch!! <\/p>\n<p>How do you decide what information is worth remembering versus what should be forgotten? That balance seems like one of the hardest problems for long-running AI agent in my humble opinion.. \u263a\ufe0f<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The context-loss problem you describe in the intro is the exact thing I keep hitting building voice AI agents. The moment you move across surfaces, the assistant forgets what it was mid-way through. Curious how Lyto holds that state when it acts inside Gmail or Sheets versus a normal tab. And for the harder-to-undo actions like sending an email or editing a doc, does it confirm with the user first or act and let you roll back?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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>one agent across browser, tools, and messages is ambitious, that&#8217;s a lot of surface area to keep consistent. what&#8217;s been the trickiest part so far, getting it to actually act vs just summarizing\/suggesting stuff.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<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\/@martin_mo\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@martin_mo<\/a>&nbsp;Honestly the hardest part is exactly what you said, getting it to actually act rather than just suggest. Anyone can build something that tells you what to do. The gap is closing the loop so it does it. That&#8217;s where most of our engineering time has gone and still goes.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hey, how does Lyto handle the case where the source data or target workflow is inconsistent instead of clean?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<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\/@romejerome\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@romejerome<\/a>&nbsp;Great question. When the data or workflow is messy, Lyto flags the inconsistency and asks for clarification before proceeding rather than guessing and getting it wrong. The goal is to never silently do the wrong thing. Happy to go deeper on a specific case if you have one in mind!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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>Good to hear the gate is on mutative actions. The case that bit me building browser automation: a Gmail send is easy to intercept because there is a discrete click to gate, but Sheets and Docs commit on blur, there is no submit event. So a cell edit is already live by the time you would show a preview. Do you stage those edits before writing back, or is the confirm only on actions with an explicit send 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<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>One agent that follows me across the browser, my tools, and my messages is a smart angle, most assistants make me come to them in one tab.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<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\/@yibo_wang3\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@yibo_wang3<\/a>&nbsp;Exactly, most AI makes you go to it. Lyto comes with you. That shift is the whole thing.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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 browser-as-agent-surface bet is the right one. I have spent a lot of time driving real pages with DOM clicks, so the part I keep landing on is the write side. Reading tabs is low stakes, but once it fills and submits forms in Gmail or Sheets, one misread intent sends the email or overwrites a cell. Is there a confirmation gate on mutative actions, or a preview before it commits? That boundary is what decides whether I would let it touch my inbox.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<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\/@dipankar_sarkar\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dipankar_sarkar<\/a>&nbsp;This is exactly the right question and honestly the boundary we think about the most. Yes, mutative actions like sending an email or editing a sheet go through a confirmation step before Lyto commits. You see a preview of what it&#8217;s about to do and approve it. We are not going to let it touch your inbox without you seeing it first.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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 Google Docs + Gmail + Sheets integrations are what make this practical &#8211; those are the three apps most people actually live in, so hitting them first was the right call. Full DOM interaction is powerful but also where browser agents usually hit walls. Two things I&#8217;m curious about: how does it handle sites heavy on shadow DOM or cross-origin iframes? That&#8217;s typically where this approach breaks down. And is agent context session-persistent, or does it lose memory of what it just did when you close and reopen Chrome?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<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;Really good edge cases to raise. On shadow DOM and cross-origin iframes, if the page is blocking the DOM reader you can always manually select any element yourself and Lyto works from there. Not fully invisible but it doesn&#8217;t just break.<\/p>\n<p>On memory, context is session-persistent and stays in your history even after you close and reopen Chrome. It doesn&#8217;t reset on you.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The persistent workflow memory across tabs and tools is the part that stands out &#8211; that context loss is exactly what breaks when you bounce between ChatGPT and your actual tabs. Where does that memory actually live: locally in the extension, or synced to your backend (matters a lot once it is reading Gmail and Sheets)? And when it acts on a page, is the DOM automation running locally in my browser while only the reasoning is hosted, or does the page content get shipped server-side on each 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\/@noctis06\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@noctis06<\/a>&nbsp;Great questions, happy to be transparent on this.<\/p>\n<p>Memory lives locally in the extension storage on your account, it never leaves your device.<\/p>\n<p>For DOM automation, page content does get processed through our server so the reasoning can act on it. We know that raises valid questions especially as we add Gmail and Sheets, and handling that responsibly is something we are actively building around. Happy to go deeper on the specifics if you want.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#6<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/MML7K5NFBG2HVE\" class=\"app-title\">Wirable<\/a><\/p>\n<div class=\"one-liner\">Can AI agents use your product?<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">54<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Wirable \u662f\u4e00\u6b3e\u7528\u4e8e\u6d4b\u8bd5 AI \u667a\u80fd\u4f53\u80fd\u5426\u771f\u5b9e\u201c\u4f7f\u7528\u201d\u4f60\u4ea7\u54c1\u7684\u5de5\u5177\uff0c\u901a\u8fc7\u81ea\u52a8\u8fd0\u884c\u5de5\u4f5c\u6d41\u5e76\u7ed9\u51fa\u8bc4\u5206\uff0c\u52a9\u4f60\u5728\u4e0d\u91cd\u6784\u4ee3\u7801\u524d\u53d1\u73b0\u5e76\u4fee\u590d\u667a\u80fd\u4f53\u4e0e\u4ea7\u54c1\u4ea4\u4e92\u65f6\u7684\u969c\u788d\uff0c\u5982\u767b\u5f55\u3001\u9a8c\u8bc1\u7801\u3001OAuth \u5faa\u73af\u7b49\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\/f1769ef6-3bc6-4616-a282-5db635d46769.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\/0f993650-7787-4056-9737-4cb04fc39f91.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\/d7ddf2d2-48d3-4cd5-b66a-4372cf6cca8a.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\/d9bab172-94e3-4793-89f7-8b516f525846.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\/a62c1550-8822-4704-88d5-81c5aff6df5e.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/5f5edfb5-6eeb-4e13-ac36-d3e903e13b59.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/p5d8lZ-moTA\"><source src=\"https:\/\/youtu.be\/p5d8lZ-moTA\" 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\">API<\/span><br \/>\n            <span class=\"tag\">SaaS<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u667a\u80fd\u4f53\u6d4b\u8bd5<\/span><br \/>\n            <span class=\"tag\">\u4ea7\u54c1\u517c\u5bb9\u6027<\/span><br \/>\n            <span class=\"tag\">MCP\u4ee3\u7406<\/span><br \/>\n            <span class=\"tag\">\u5de5\u4f5c\u6d41\u81ea\u52a8\u5316<\/span><br \/>\n            <span class=\"tag\">\u7528\u6237\u4f53\u9a8c\u5ba1\u8ba1<\/span><br \/>\n            <span class=\"tag\">SaaS\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">DevOps<\/span><br \/>\n            <span class=\"tag\">AI\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">\u8bc4\u5206\u7cfb\u7edf<\/span><br \/>\n            <span class=\"tag\">\u524d\u7aef\u6d4b\u8bd5<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u63d0\u51fa\u5b89\u5168\u987e\u8651\uff08MCP\u4ee3\u7406\u53ef\u88ab\u7528\u4e8e\u975e\u81ea\u6709\u4ea7\u54c1\uff0c\u9700\u9a8c\u8bc1\u673a\u5236\uff09\u548c\u8bc4\u5206\u7ec6\u7c92\u5ea6\u95ee\u9898\uff08\u662f\u5426\u533a\u5206\u201c\u672a\u53d1\u73b0\u529f\u80fd\u201d\u4e0e\u201c\u53d1\u73b0\u540e\u64cd\u4f5c\u5931\u8d25\u201d\uff09\u3002\u6709\u4eba\u5b9e\u6d4b\u540e\u8ba4\u4e3a\u4f53\u9a8c\u201c\u4ee4\u4eba\u8c26\u5351\u201d\uff0c\u80fd\u5b9e\u65f6\u770b\u5230\u667a\u80fd\u4f53\u5931\u8d25\u70b9\u3002\u56e0\u514d\u8d39\u8bd5\u7528\u548c29\u7f8e\u5143\/\u6708\u5b9a\u4ef7\uff0c\u5b58\u5728\u5b9a\u4ef7\u4e0e\u8bbf\u95ee\u9700\u6c42\u53cd\u9988\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                Wirable \u5207\u5165\u4e86\u4e00\u4e2a\u770b\u4f3c\u5c0f\u4f17\u4f46\u6b63\u53d8\u5f97\u81f4\u547d\u7684\u95ee\u9898\uff1aAI \u667a\u80fd\u4f53\u6b63\u5728\u6210\u4e3a\u65b0\u4e00\u4ee3\u201c\u7528\u6237\u201d\uff0c\u800c\u5927\u90e8\u5206\u4ea7\u54c1\u4ece\u672a\u4e3a\u6b64\u8bbe\u8ba1\u3002\u5b83\u4e0d\u505a\u9526\u4e0a\u6dfb\u82b1\u7684\u81ea\u52a8\u5316\u6d4b\u8bd5\uff0c\u800c\u662f\u505a\u201c\u95e8\u536b\u201d\uff0c\u76f4\u51fb\u4ea7\u54c1\u4e0e\u667a\u80fd\u4f53\u4ea4\u4e92\u4e2d\u7684\u786c\u4f24\u3002\u5176\u6838\u5fc3\u4ef7\u503c\u4e0d\u5728\u4e8e\u8bc4\u5206\u672c\u8eab\uff0c\u800c\u5728\u4e8e\u63d0\u4f9b\u4e86\u4e00\u4e2a\u6e05\u6670\u7684\u201c\u5931\u8d25\u5f52\u56e0\u201d\uff1a\u662f\u6839\u672c\u4e0d\u53ef\u8fbe\uff08\u767b\u5f55\u5c4f\u853d\u3001\u9a8c\u8bc1\u7801\uff09\uff0c\u8fd8\u662f\u53ef\u8fbe\u4f46\u64cd\u4f5c\u5931\u8d25\uff1f\u8fd9\u79cd\u533a\u5206\u76f4\u63a5\u6307\u5bfc\u4ea7\u54c1\u56e2\u961f\u7684\u4f18\u5316\u4f18\u5148\u7ea7\uff0c\u6bd4\u5355\u7eaf\u62a5\u9519\u6709\u610f\u4e49\u5f97\u591a\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u7136\u800c\uff0c\u5f53\u524d\u4ea7\u54c1\u5f62\u6001\u5b58\u5728\u9690\u5fe7\u3002\u7b2c\u4e00\u662f\u5b89\u5168\u95ee\u9898\uff1a\u7528\u6237\u8bc4\u8bba\u4e2d\u63d0\u5230\u7684\u201cMCP\u4ee3\u7406\u53ef\u88ab\u7528\u4e8e\u7b2c\u4e09\u65b9\u975e\u6388\u6743\u4ea7\u54c1\u201d\u5e76\u975e\u675e\u4eba\u5fe7\u5929\uff0c\u8fd9\u672c\u8d28\u4e0a\u662f\u5c06\u4ea7\u54c1\u66b4\u9732\u5c42\u8ba9\u6e21\u7ed9\u7b2c\u4e09\u65b9\u6258\u7ba1\uff0c\u82e5\u7f3a\u4e4f\u4e25\u683c\u7684\u57df\u540d\u6216\u6240\u6709\u6743\u9a8c\u8bc1\uff0c\u53ef\u80fd\u6f14\u53d8\u4e3a\u65b0\u578b\u653b\u51fb\u9762\u3002\u7b2c\u4e8c\u662f\u6df1\u5ea6\u7684\u5c40\u9650\uff1a\u6d4b\u8bd5\u573a\u666f\u4ecd\u57fa\u4e8e\u201c\u5355\u6b21\u5de5\u4f5c\u6d41\u201d\uff0c\u4f46\u5728\u771f\u5b9e\u7684\u591a\u667a\u80fd\u4f53\u3001\u591a\u6a21\u6001\u3001\u957f\u4e0a\u4e0b\u6587\u4ea4\u4e92\u4e2d\uff0c\u5931\u8d25\u5f80\u5f80\u6e90\u4e8e\u72b6\u6001\u7ba1\u7406\u3001\u4e0a\u4e0b\u6587\u6f02\u79fb\u6216\u975e\u786e\u5b9a\u6027\u884c\u4e3a\uff0c\u5f53\u524d\u65b9\u6848\u53ef\u80fd\u8fc7\u4e8e\u7ebf\u6027\u548c\u7406\u60f3\u5316\u3002\u7b2c\u4e09\u662f\u5546\u4e1a\u5316\u8def\u5f84\uff1a29\u7f8e\u5143\/\u6708\u5bf9\u4e8e\u9700\u8981\u201c\u6301\u7eed\u7ef4\u62a4\u4ee3\u7406\u517c\u5bb9\u6027\u201d\u7684\u56e2\u961f\u6216\u8bb8\u592a\u4fbf\u5b9c\uff0c\u4f46\u5bf9\u53ea\u505a\u4e00\u6b21\u6027\u201c\u4f53\u68c0\u201d\u7684\u56e2\u961f\u53c8\u53ef\u80fd\u592a\u8d35\uff0c\u5bb9\u6613\u9677\u5165\u201c\u4e70\u65ad\u5f0f\u8bc4\u4f30\u201d\u800c\u975e\u201c\u6301\u7eed\u670d\u52a1\u201d\u7684\u56f0\u5883\u3002\n            <\/p>\n<p class=\"ai-content\">\n                Wirable \u5f53\u524d\u6700\u7cbe\u51c6\u7684\u6253\u6cd5\uff0c\u662f\u4f5c\u4e3a\u4ea7\u54c1\u56e2\u961f\u7684\u201c\u538b\u529b\u6d4b\u8bd5\u4eea\u201d\uff0c\u800c\u975e\u751f\u4ea7\u73af\u5883\u91cc\u7684\u201c\u54e8\u5175\u201d\u3002\u5b83\u63d0\u9192\u884c\u4e1a\u4e00\u4e2a\u6b8b\u9177\u73b0\u5b9e\uff1a\u5f53\u4f60\u7684\u4ea7\u54c1UI\u5bf9\u667a\u80fd\u4f53\u4e0d\u53ef\u89c1\u65f6\uff0c\u4f60\u57fa\u672c\u5df2\u7ecf\u62d2\u7edd\u4e86\u4e0b\u4e00\u6ce270%\u7684\u81ea\u52a8\u5316\u6d41\u91cf\u3002\u4f46\u82e5\u60f3\u4ece\u201c\u6d4b\u8bd5\u5de5\u5177\u201d\u8dc3\u8fc1\u4e3a\u201c\u667a\u80fd\u4f53\u57fa\u7840\u8bbe\u65bd\u201d\uff0c\u5b83\u9700\u8981\u5c3d\u5feb\u8865\u9f50\u5b89\u5168\u6821\u9a8c\u3001\u52a8\u6001\u573a\u666f\u6a21\u62df\u548c\u79c1\u6709\u5316\u90e8\u7f72\u80fd\u529b\u3002\u5426\u5219\uff0c\u6700\u7ec8\u53ef\u80fd\u53ea\u6210\u4e3a\u521b\u59cb\u4eba\u5728\u9ed1\u5ba2\u677e\u540e\u7684\u53c8\u4e00\u4e2a\u201c\u6709\u8da3\u4f46\u7a84\u201d\u7684\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\">Wirable<\/span>\n                <\/div>\n<div class=\"comment-content\">Wirable tests whether AI agents can actually use your product. Paste a URL, run real agent workflows, and get a score out of 100 with clear evidence behind every pass or fail. If agents get stuck, Wirable hosts an MCP proxy in front of your product so they can complete the job without you shipping code.<\/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>Really excited to share Wirable with you today :)))<\/p>\n<p>This started at a hackathon. We were building with AI agents and kept running into the same problem: the agent couldn&#8217;t actually use the product we were trying to integrate with. Signup blocked it. Auth was human-only. There was no clean machine surface to call. We spent more time fighting the product than building the thing we came to build.<br \/>\nThat frustration stuck with us and turned into a question we couldn&#8217;t shake: can an agent actually use your product end to end? <\/p>\n<p>Most teams assume the answer is yes. Then an agent hits a CAPTCHA, gets stuck in an OAuth loop, or finds no machine-readable way to drive the product at all. The gap between &#8220;we have an API&#8221; and &#8220;an agent can complete a workflow&#8221; is bigger than most people think.<\/p>\n<p>That&#8217;s what Wirable is for. Paste a URL and we run real agent workflows against your product: auth, a core action, error handling, retries. You get a score out of 100, and every pass or fail is tied to something we actually observed.<\/p>\n<p>If the score shows agents can&#8217;t get through, Wirable can generate and host an MCP proxy in front of your product. Think of it as a stable machine layer agents can talk to, without you having to rewrite your app first.<\/p>\n<p>We&#8217;d genuinely love your feedback. Try it on your own product, or throw us a URL you think will be painful. What broke? What surprised you? What should we score next?<br \/>\nThanks for checking us out. Happy to answer anything in the comments!!!<\/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\/@rania_rimali\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@rania_rimali<\/a>&nbsp;hey, &nbsp;what happens when the default automated choice is wrong. Does Wirable surface that clearly or only after I hit a bad outcome?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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 launch! I\u2019m thinking of security concern in this. You already mentioned it can generate and host MCP proxy for certain low score.. but that also means one can do this for website or products which they don\u2019t own. I am not sure about the severity but I believe there should be kind of verification step as well. What do you think?<\/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\"><img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/5a23ea55-453c-4a0b-9cf7-d4ec91e8dda4.png?auto=compress,format&amp;codec=mozjpeg&amp;cs=strip\" style=\"max-width: 100%\"><\/p>\n<p>I&#8217;m happy to share that <a href=\"https:\/\/Themailx.com\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Themailx.com<\/a> is Agent-ready<\/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>This is the test I didn&#8217;t know I needed. We&#8217;re building at the intersection of AI agents and real products, and &#8220;can this thing actually be used by an agent&#8221; is a question that comes up constantly. The MCP proxy fallback is the smart part &#8211; gives teams a migration path without forcing a refactor first. Quick question: does the scoring distinguish between &#8220;agent couldn&#8217;t find the feature&#8221; vs &#8220;found it but couldn&#8217;t complete the action&#8221;? That breakdown would tell you exactly where in the product flow to focus first.<\/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\/@galdayan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@galdayan<\/a>&nbsp;Great question and yes, and that distinction is actually key to how we think about scoring.<\/p>\n<p>we separate \u201cdiscoverability\u201d (can the agent find the feature surface at all) from \u201cexecution\u201d (can it complete the action once it\u2019s reached it).<br \/>In practice, a lot of failures happen in execution even when the feature is technically exposed, which is why MCP + auth + error semantics matter as much as API surface.<br \/>We\u2019re actively refining the model to make those breakdowns more explicit in the next version of the report.<\/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 your 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\/@daniel_nwankwo\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@daniel_nwankwo<\/a>&nbsp;Thank you so much, please feel free to ask any question, your curiosity will always be satisfied here!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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 was a humbling experience in the best way possible. Pasted my SaaS URL, ran the workflows, and got a front-row seat to every place an AI agent would fall flat trying to use my product. Watching the agents interact with my site live was genuinely eye-opening, you see the gaps in real time. Clear evidence, clear score, no guessing. Already back in the codebase fixing what matters. If you&#8217;re building anything you want agents to work with, run this before you assume it just works. Congrats on the launch! \ud83d\ude80<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>2<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>This a cool product<\/p>\n<\/p>\n<p>When can i get access, and also what is the price ?<\/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\/@mohamed_zaidi\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@mohamed_zaidi<\/a>&nbsp;it&#8217;s available at wirable.dev, the app offers a generous free tier, plus a 29$\/month plan for when you need to deploy mcps, and keep up with your codebase changes \ud83d\ude42<\/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>Congratulations on the launch \ud83d\udc4d\ud83c\udffb\ud83d\udc4d\ud83c\udffb Some improvement to be implemented to amine <a href=\"https:\/\/www.producthunt.com\/products\/mailwarm\" data-node-type=\"mention\" data-mention-type=\"product\" data-mention-id=\"mailwarm\" target=\"_blank\" rel=\"noopener\">@Mailwarm<\/a> agent ready \ud83e\udd29<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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\/IUW642OQKI6O6A\" class=\"app-title\">Schema Source by Tabstack<\/a><\/p>\n<div class=\"one-liner\">Turn any URL into a JSON Schema, Zod, or Pydantic model<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">38<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Schema Source \u80fd\u8ba9\u4f60\u7c98\u8d34\u4efb\u610f\u7f51\u9875\u94fe\u63a5\uff0c\u77ac\u95f4\u83b7\u5f97\u8be5\u9875\u9762\u7684 JSON Schema\u3001Zod \u6216 Pydantic \u6a21\u578b\uff0c\u7701\u53bb\u624b\u52a8\u7f16\u5199\u63d0\u53d6\u89c4\u5219\u548c\u9a8c\u8bc1\u7ed3\u6784\u7684\u7e41\u7410\u5de5\u4f5c\uff0c\u4e3b\u6253\u5feb\u901f\u751f\u6210\u4e0e\u590d\u7528\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\/793268c6-a5e3-4dac-9d89-8ae576c6a9c2.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\/d588f812-fc4c-4ea1-bca2-a3b78faedda8.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\/62016af1-ca93-41d3-8517-2b121ad13aae.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\/4d01e8c4-56c9-4319-abb1-78cf4e5a6297.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\/282d81ab-5d48-47d9-bb38-4a779c989978.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\/36085fb7-d1e7-49d9-b089-e0f5983497dc.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/FJ7R3xU9v4E\"><source src=\"https:\/\/youtu.be\/FJ7R3xU9v4E\" 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\">API<\/span><br \/>\n            <span class=\"tag\">Developer Tools<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">JSON Schema \u751f\u6210<\/span><br \/>\n            <span class=\"tag\">\u7f51\u9875\u7ed3\u6784\u5316<\/span><br \/>\n            <span class=\"tag\">\u6570\u636e\u63d0\u53d6<\/span><br \/>\n            <span class=\"tag\">Zod<\/span><br \/>\n            <span class=\"tag\">Pydantic<\/span><br \/>\n            <span class=\"tag\">AI Agent \u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u722c\u866b\u8f85\u52a9<\/span><br \/>\n            <span class=\"tag\">\u5f00\u6e90\u6a21\u677f<\/span><br \/>\n            <span class=\"tag\">\u5185\u5bb9\u89e3\u6790<\/span><br \/>\n            <span class=\"tag\">\u5f00\u53d1\u8005\u5de5\u5177<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u8ba4\u53ef\u201cSchema Source + Tabstack\u201d\u7684\u7ec4\u5408\u4ef7\u503c\uff0c\u8ba4\u4e3a\u514d\u8d39\u5de5\u5177\u964d\u4f4e\u4e86 schema \u7f16\u5199\u95e8\u69db\u3002\u793e\u533a\u5bf9 schema \u4f18\u5148\u7684\u63d0\u53d6\u601d\u8def\u66fe\u5b58\u7591\u95ee\uff0c\u6b64\u6b21\u63a8\u51fa\u751f\u6210\u5de5\u5177\u548c 46 \u4e2a\u5f00\u6e90\u9884\u5b9a\u4e49\u6a21\u677f\u56de\u5e94\u4e86\u5173\u5207\uff0c\u7528\u6237\u5bf9\u5f00\u6e90\u548c\u514d\u8d39 API \u8868\u73b0\u51fa\u79ef\u6781\u53cd\u9988\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                Schema Source \u672c\u8d28\u4e0a\u662f\u4e00\u4e2a\u201c\u7ed3\u6784\u5316\u811a\u624b\u67b6\u751f\u6210\u5668\u201d\uff0c\u800c\u975e\u76f4\u63a5\u7684\u6570\u636e\u722c\u866b\u3002\u5b83\u7684\u4ef7\u503c\u4e0d\u5728\u4e8e\u6bd4\u73b0\u6709 scraping \u5de5\u5177\u6316\u5f97\u66f4\u6df1\uff0c\u800c\u5728\u4e8e\u628a\u201c\u5b9a\u4e49\u63d0\u53d6\u6a21\u677f\u201d\u8fd9\u4e2a\u524d\u7f6e\u6b65\u9aa4\u4ece\u624b\u5de5\u786c\u7f16\u7801\u53d8\u6210\u4e86\u534a\u81ea\u52a8\u5316\u751f\u6210\u2014\u2014\u8fd9\u662f\u5f00\u53d1\u4f53\u9a8c\u4e0a\u7684\u4e00\u5927\u8fdb\u6b65\uff0c\u5c24\u5176\u5bf9 AI Agent \u5f00\u53d1\u8005\u800c\u8a00\uff0c\u9891\u7e41\u9762\u5bf9\u7ed3\u6784\u5404\u5f02\u7684\u7f51\u9875\u65f6\uff0c\u80fd\u8282\u7701\u5927\u91cf\u8bd5\u9519\u65f6\u95f4\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4e0d\u8fc7\uff0c\u8fd9\u4e2a\u4ea7\u54c1\u5b58\u5728\u4e00\u4e2a\u9690\u6027\u5929\u82b1\u677f\uff1a\n            <\/p>\n<p class=\"ai-content\">\n                1. **\u4f9d\u8d56\u9875\u9762\u7ed3\u6784\u7684\u7a33\u5b9a\u6027**\u3002\u591a\u6570\u9ad8\u4ef7\u503c\u7f51\u7ad9\uff08\u5982\u7535\u5546\u8be6\u60c5\u9875\u3001\u62db\u8058\u5217\u8868\uff09\u7684 DOM \u7ed3\u6784\u4f1a\u9891\u7e41\u53d8\u66f4\uff0c\u751f\u6210\u7684 Schema \u53ef\u80fd\u5feb\u901f\u8fc7\u671f\uff0c\u4e14 Schema Source \u5e76\u672a\u627f\u8bfa\u81ea\u52a8\u8ffd\u8e2a\u9875\u9762\u66f4\u65b0\u3002\n            <\/p>\n<p class=\"ai-content\">\n                2. **\u201c\u4efb\u4f55 URL\u201d\u7684\u751f\u6210\u8d28\u91cf\u5b58\u7591**\u3002\u5bf9\u4e8e\u91c7\u7528 SPA \u6216\u5927\u91cf\u52a8\u6001\u6e32\u67d3\u7684\u9875\u9762\uff08\u5982 Vue\/React \u9a71\u52a8\u7684\u7ad9\u70b9\uff09\uff0c\u524d\u7aef\u53d1\u51fa\u7684\u7b2c\u4e00\u4e2a\u8bf7\u6c42\u5f80\u5f80\u53ea\u662f\u7a7a\u58f3\uff0cSchema Source \u662f\u5426\u80fd\u6b63\u786e\u89e6\u53d1 JavaScript \u5e76\u6355\u83b7\u771f\u5b9e\u5185\u5bb9\uff1f\u4ea7\u54c1\u4ecb\u7ecd\u4e2d\u5e76\u672a\u660e\u786e\u3002\n            <\/p>\n<p class=\"ai-content\">\n                3. **\u76c8\u5229\u5f15\u64ce\u4ecd\u5728 Tabstack**\u3002Schema Source \u662f\u514d\u8d39\u83b7\u5ba2\u7684\u8bf1\u9975\uff0c\u6838\u5fc3\u5546\u4e1a\u4ef7\u503c\u5728\u4e8e\u5c06\u7528\u6237\u5438\u5f15\u5230 Tabstack \u7684\u4ed8\u8d39 API \u548c\u5bf9 Schema \u7684\u6301\u4e45\u5316\u7ba1\u7406\u80fd\u529b\u4e0a\u3002\u76ee\u524d 38 \u7968\u7684\u51b7\u542f\u52a8\u6570\u636e\u8bf4\u660e\u5b83\u8fd8\u6ca1\u6709\u5f15\u7206\u793e\u533a\u2014\u2014\u4f46 Mozilla \u80cc\u4e66\u548c 46 \u4e2a\u5f00\u6e90\u9884\u5b9a\u4e49\u6a21\u677f\u662f\u4e24\u6761\u4e0d\u9519\u7684\u58c1\u5792\uff0c\u82e5\u80fd\u6301\u7eed\u7ef4\u62a4\u6a21\u677f\u5e93\u5e76\u652f\u6301\u7528\u6237\u8d21\u732e\uff0c\u5b83\u5b8c\u5168\u6709\u673a\u4f1a\u6210\u4e3a\u4e00\u4e2a\u6807\u51c6\u5316\u201c\u7f51\u9875\u7ed3\u6784\u8bcd\u5178\u201d\uff0c\u8fdb\u800c\u6210\u4e3a AI Agent \u751f\u6001\u7684\u57fa\u7840\u8bbe\u65bd\u4e4b\u4e00\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u7280\u5229\u5730\u8bf4\uff0c\u8fd9\u662f\u4e00\u8bb0\u201c\u64d2\u8d3c\u5148\u64d2\u738b\u201d\u7684\u68cb\uff1a\u5b83\u89e3\u51b3\u7684\u4e0d\u662f\u201c\u600e\u4e48\u63d0\u53d6\u201d\uff0c\u800c\u662f\u201c\u600e\u4e48\u544a\u8bc9 AI \u8981\u63d0\u53d6\u4ec0\u4e48\u201d\u3002\u5982\u679c\u540e\u7eed\u80fd\u7ed3\u5408\u7248\u672c\u5386\u53f2\u548c\u7ed3\u6784\u53d8\u5316\u9884\u8b66\uff0c\u5b83\u5c31\u4e0d\u662f\u5de5\u5177\uff0c\u800c\u662f\u6807\u51c6\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\">Schema Source by Tabstack<\/span>\n                <\/div>\n<div class=\"comment-content\">Get the JSON Schema for any URL. Paste a link and get a ready-to-use schema as JSON Schema, a Zod object, or a Pydantic model. Copy it straight into your extraction or validation code. Schema Source learns each site&#8217;s URL patterns, so results come back fast and stay consistent across pages of the same shape. Every result is also an API: request the same URL with JSON content negotiation and get the cached schema back, no key required. Free, by the team behind Tabstack\u2014backed by Mozilla.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>This team delivers.<\/p>\n<\/p>\n<p><a href=\"https:\/\/www.producthunt.com\/products\/tabstack\" target=\"_blank\" rel=\"noopener\">@Tabstack by Mozilla<\/a> is a powerful web content extraction and transformation toolkit designed specifically for AI agent builders. It&#8217;s schema-based. You define a JSON schema for the fields you want, and every call reads the page and maps it to that schema. So you maintain the schema, not the scraping logic.<\/p>\n<\/p>\n<p>When they <a href=\"https:\/\/www.producthunt.com\/products\/tabstack\" target=\"_blank\" rel=\"noopener\">previously launched<\/a>, the community had many questions on this schema-first approach. Introducing Schema Source &#8211; a free utility to help you quickly build your first schema and get started. Enter any URL, get a structured JSON schema. That&#8217;s it!<\/p>\n<\/p>\n<p>You have the API. You have the tools. You have the schema. What will you scrape today?<\/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\/@fmerian\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@fmerian<\/a>&nbsp;Nice! This makes sense now. Stumbled upon Schema Source yesterday. So, Schema Source + Tabstack is the combo. Congrats on 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<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>\ud83d\udc4b Product Hunt!<\/p>\n<p>We&#8217;re launching our free tool, Schema Source. Paste any URL and it generates a ready-to-use JSON Schema for that page&#8217;s data, as JSON Schema, Zod, or Pydantic.<\/p>\n<\/p>\n<p><a href=\"https:\/\/schema.tabstack.ai\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><strong>https:\/\/schema.tabstack.ai\/<\/strong><\/a><\/p>\n<\/p>\n<p>Generating your own is great when the page is unusual or specific. But a lot of extraction work is the same handful of shapes over and over: a job posting, a product listing, a company profile, a real estate listing. So here&#8217;s another way to do it.<\/p>\n<\/p>\n<p>We also open-sourced 46 pre-defined schemas on GitHub, across 10 industry categories: real estate, jobs, e-commerce, finance, healthcare, dev tooling, gov records, travel, b2b intel, and social. Grab the file, point Tabstack at a URL, get data back. <a href=\"https:\/\/github.com\/Mozilla-Ocho\/tabstack-schemas\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/github.com\/Mozilla-Ocho\/tabstack-schemas<\/a><\/p>\n<\/p>\n<p>Grab one or generate your own, whichever fits.<\/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\/@tessak22\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@tessak22<\/a>&nbsp;OSS ftw!!<\/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\">#8<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/SBWH2HP45E2D6Q\" class=\"app-title\">kodwai<\/a><\/p>\n<div class=\"one-liner\">The first platform that scores how you Vibe Code<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">22<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Kodwai\u662f\u9996\u4e2a\u901a\u8fc7\u771f\u5b9e\u7ec8\u7aef\u7f16\u7a0b\u6311\u6218\uff0c\u4ece\u65b9\u5411\u3001\u6210\u679c\u548c\u63d0\u5347\u4e09\u4e2a\u7ef4\u5ea6\u91cf\u5316\u8bc4\u4f30\u5f00\u53d1\u8005\u4e0eAI\u7f16\u7a0b\u4ee3\u7406\u534f\u4f5c\u80fd\u529b\u7684\u5e73\u53f0\uff0c\u5e2e\u52a9\u7528\u6237\u8bc1\u660e\u201c\u5982\u4f55\u5de5\u7a0b\u5316\u601d\u8003\u201d\u800c\u975e\u201c\u8bb0\u4f4f\u4e86\u591a\u5c11\u4ee3\u7801\u201d\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\/ab3c5492-5e84-4d1e-8764-3d83e5e0aff4.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\/1bb8f9d8-160c-4961-8f9d-a0ac25fbb710.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\/76369ed9-3974-423f-a9d1-7ab707902278.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\/f310df55-a59e-4eea-b64c-049c89600b6f.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\/42675672-e805-48a9-bddd-563c7d3cb896.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/2o-VXXmWDsk\"><source src=\"https:\/\/youtu.be\/2o-VXXmWDsk\" 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\">Education<\/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\u7f16\u7a0b\u534f\u4f5c\u8bc4\u4f30<\/span><br \/>\n            <span class=\"tag\">\u7f16\u7a0b\u6280\u80fd\u6d4b\u8bc4<\/span><br \/>\n            <span class=\"tag\">\u5f00\u53d1\u8005\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">LeetCode\u66ff\u4ee3<\/span><br \/>\n            <span class=\"tag\">AI\u9762\u8bd5\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u7ec8\u7aef\u6311\u6218<\/span><br \/>\n            <span class=\"tag\">\u7f16\u7a0b\u7ade\u6280<\/span><br \/>\n            <span class=\"tag\">\u4eba\u673a\u534f\u4f5c<\/span><br \/>\n            <span class=\"tag\">\u699c\u5355<\/span><br \/>\n            <span class=\"tag\">Git\u5206\u6790<\/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\u5982\u4f55\u786e\u8ba4\u81ea\u52a8\u5316\u7ed3\u679c\u7684\u53ef\u9760\u6027\uff1b\u5f3a\u8c03\u4f18\u79c0AI\u534f\u4f5c\u59cb\u4e8e\u4ee3\u740630\u79d2\u5185\u4e3b\u52a8\u63d0\u95ee\u6f84\u6e05\u7ea6\u675f\uff0c\u800c\u975e\u76f4\u63a5\u7f16\u7801\uff1b\u671f\u5f85\u9a8c\u8bc1\u81ea\u5df1\u662f\u4f18\u79c0AI\u5de5\u7a0b\u5e08\u8fd8\u662f\u53ea\u4f1a\u76f2\u76ee\u63a5\u53d7\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                Kodwai\u5207\u4e2d\u4e86\u4e00\u4e2a\u88abLeetCode\u548c\u4f20\u7edf\u6280\u672f\u9762\u8bd5\u957f\u671f\u5ffd\u89c6\u7684\u76f2\u533a\u2014\u2014\u201c\u4e0eAI\u4ee3\u7406\u534f\u4f5c\u201d\u5df2\u6210\u4e3a\u73b0\u4ee3\u5f00\u53d1\u7684\u6838\u5fc3\u80fd\u529b\uff0c\u4f46\u5e02\u9762\u4e0a\u6ca1\u6709\u4efb\u4f55\u5de5\u5177\u5b9a\u4e49\u6216\u91cf\u5316\u5b83\u3002Hakan\u7684\u6d1e\u5bdf\u5f88\u654f\u9510\uff1a\u5f53\u5927\u591a\u6570\u4eba\u4e0d\u518d\u9010\u884c\u7f16\u7801\uff0c\u800c\u662f\u201c\u6307\u6325\u3001\u5f15\u5bfc\u3001\u68c0\u67e5\u3001\u7ea0\u9519\u201d\u4ee3\u7406\u65f6\uff0c\u8861\u91cf\u8fd9\u4e9b\u884c\u4e3a\u6bd4\u8861\u91cf\u4ee3\u7801\u4ea7\u51fa\u66f4\u6709\u610f\u4e49\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ea7\u54c1\u8bbe\u8ba1\u7684\u4eae\u70b9\u5728\u4e8e\u5c06\u201cDirection\uff08\u65b9\u5411\uff09\u201d\u8d4b\u6743\u4e94\u6210\uff0c\u8fd9\u5b9e\u8d28\u4e0a\u662f\u5c06\u201c\u5143\u6280\u80fd\u201d\uff08\u660e\u786e\u7ea6\u675f\u3001\u9884\u5224\u8fb9\u754c\u3001\u7ea0\u6b63\u9519\u8bef\u3001\u4fdd\u6301\u63a7\u5236\uff09\u7f6e\u4e8e\u6267\u884c\u4e4b\u4e0a\u3002\u5982\u679c\u4ee3\u7406\u53ea\u7ba1\u8f93\u51fa\u4ee3\u7801\uff0c\u4eba\u662f\u88ab\u52a8\u7684\u5ba1\u6838\u8005\uff0c\u5f97\u5206\u5fc5\u7136\u4f4e\uff1b\u800c\u4e3b\u52a8\u5b9a\u4e49Spec Precision\u3001\u5c55\u73b0Verification Rigor\uff08\u9a8c\u8bc1\u4e25\u8c28\u6027\uff09\u548cRecovery\uff08\u7ea0\u9519\u80fd\u529b\uff09\u7684\u64cd\u4f5c\uff0c\u624d\u662f\u9ad8\u5206\u7684\u5173\u952e\u2014\u2014\u8fd9\u51e0\u4e4e\u5b8c\u7f8e\u6620\u5c04\u4e86\u8d44\u6df1\u5de5\u7a0b\u5e08\u4e0eAI\u534f\u4f5c\u7684\u672c\u8d28\uff1a\u826f\u597d\u7684\u5224\u65ad\u529b\u8fdc\u80dc\u4e8e\u6253\u5b57\u901f\u5ea6\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u95ee\u9898\u540c\u6837\u660e\u663e\u300222\u7968\u548c\u5be5\u5be5\u51e0\u6761\u8bc4\u8bba\u8bf4\u660e\u5b83\u8fdc\u672a\u5f62\u6210\u793e\u533a\u5f71\u54cd\u529b\u3002\u6311\u6218\u8d5b\u9053\u7684\u201c\u771f\u5b9e\u6027\u201d\u4e0e\u6d4b\u8bc4\u7684\u201c\u6807\u51c6\u5316\u201d\u4e4b\u95f4\u5b58\u5728\u5929\u7136\u77db\u76fe\uff1a\u5982\u679c\u6311\u6218\u592a\u5f00\u653e\uff0c\u8bc4\u5206\u96be\u4ee5\u5ba2\u89c2\uff1b\u5982\u679c\u592a\u5c01\u95ed\uff0c\u53c8\u5bb9\u6613\u6d41\u4e8eLeetCode\u5f0f\u7684\u201c\u5df2\u77e5\u7b54\u6848\u7684\u8868\u6f14\u201d\u3002\u6b64\u5916\uff0c\u4f9d\u8d56\u7ec8\u7aef\u6355\u83b7Git\u5386\u53f2\u3001\u6d4b\u8bd5\u3001\u8f6c\u5f55\u548c\u65f6\u95f4\u7b49\u4fe1\u53f7\uff0c\u5b58\u5728\u4e00\u5b9a\u4f5c\u5f0a\u548c\u8bef\u5224\u7a7a\u95f4\u2014\u2014\u4e00\u4e2a\u5584\u4e8e\u201c\u5237\u6a21\u677f\u201d\u7684\u9a7e\u9a76\u8005\u4ecd\u53ef\u80fd\u88ab\u9ad8\u4f30\uff0c\u800c\u771f\u6b63\u64c5\u957f\u4e0d\u786e\u5b9a\u60c5\u51b5\u4e0b\u7684\u5feb\u901f\u8fed\u4ee3\u53cd\u800c\u53ef\u80fd\u56e0\u6d41\u7a0b\u201c\u770b\u8d77\u6765\u4e71\u201d\u800c\u4f4e\u5206\u3002\n            <\/p>\n<p class=\"ai-content\">\n                Kodwai\u7684\u771f\u6b63\u4ef7\u503c\u76ee\u524d\u66f4\u591a\u5728\u201c\u91cd\u65b0\u5b9a\u4e49\u9762\u8bd5\u201d\u7684\u53d9\u4e8b\u4e0a\uff1a\u5f53\u9762\u8bd5\u5b98\u53ef\u4ee5\u65c1\u89c2\u771f\u5b9e\u4f1a\u8bdd\u56de\u653e\u65f6\uff0c\u4efb\u4f55\u80cc\u9898\u578b\u7684\u9762\u8bd5\u7b54\u6848\u90fd\u5c06\u5931\u6548\u3002\u4f46\u5982\u679c\u60f3\u505a\u5927\u89c4\u6a21\uff0c\u5b83\u9700\u8981\u89e3\u51b3\u4e24\u4e2a\u6210\u672c\u9ad8\u6602\u7684\u95ee\u9898\uff1a1\uff09\u5982\u4f55\u8bbe\u8ba1\u8db3\u591f\u6709\u533a\u5206\u5ea6\u3001\u53c8\u907f\u514d\u4e3b\u89c2\u8bef\u5224\u7684\u6311\u6218\u9898\u5e93\uff1b2\uff09\u5982\u4f55\u8bf4\u670d\u4f01\u4e1a\u653e\u5f03\u4f20\u7edf\u5de5\u5177\uff0c\u4fe1\u4efb\u4e00\u4e2a\u5c1a\u672a\u7ecf\u5927\u89c4\u6a21\u9762\u8bd5\u9a8c\u8bc1\u7684\u8bc4\u4f30\u5f15\u64ce\u3002\u76ee\u524d\u5b83\u66f4\u50cf\u4e00\u4e2a\u9ad8\u7ea7\u201c\u5f00\u53d1\u8005\u81ea\u55e8\u793e\u533a\u201d\u800c\u975e\u4eba\u624d\u5e73\u53f0\uff0c\u4f46\u65b9\u5411\u662f\u5bf9\u7684\u2014\u2014\u5728\u8fd9\u4e2aAI\u51e0\u4e4e\u80fd\u5e2e\u4efb\u4f55\u4eba\u201c\u5199\u4ee3\u7801\u201d\u7684\u65f6\u4ee3\uff0c\u8861\u91cf\u4eba\u5982\u4f55\u201c\u9a7e\u9a6d\u4ee3\u7801\u201d\u624d\u662f\u7ec8\u6781\u7a00\u7f3a\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\">kodwai<\/span>\n                <\/div>\n<div class=\"comment-content\">Kodwai is the first platform that scores how well you collaborate with AI coding agents (Claude Code, Cursor, Codex). Solve real challenges in your own terminal; the CLI captures your code, tests, git history, agent transcript, and time, then scores you across three axes: Direction, Outcome, and Lift, each citing its own evidence. Climb a public leaderboard, earn badges, and build a profile that shows how you engineer, not what you memorized. Free, bring your own agent.<\/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, I&#8217;m Hakan, founder of Kodwai.<\/p>\n<p>Three years ago we typed every line. Now most of us code by directing an agent, steering it, checking it, catching it when it&#8217;s confidently wrong. That&#8217;s the real skill, and nothing measures it. LeetCode tests memorized algorithms. Take-homes test free time. Neither reflects how we actually work.<\/p>\n<p>So I built Kodwai. Pick a real challenge, solve it on your own machine with your own agent (Claude Code, Cursor, or Codex), and submit. We score the session across three axes: Direction (how you steer and verify), Outcome (what shipped and whether it passes), and Lift (the edge cases a one-shot prompt misses). Every score points to the evidence behind it.<\/p>\n<p>Direction is half the weight on purpose. A careless prompt that passes the tests still scores low, because steering the agent well was always the hard part.<\/p>\n<p>Free for developers, with a public leaderboard and a profile you can send instead of doing a take-home. Teams can run interviews on the same engine and watch the real session.<\/p>\n<p>When you pair with an agent, what tells you it&#8217;s going well or badly? That&#8217;s what I&#8217;m trying to measure, and I&#8217;ll be here all day. kodwai.com<\/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\/@ege_hakan_karaagac\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@ege_hakan_karaagac<\/a>&nbsp;when kodwai takes an automated path, what can I inspect or approve before I trust the result?<\/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>For me it&#8217;s whether the agent asks clarifying questions in the first 30 seconds. If it just starts coding, I know I&#8217;ll be cleaning up assumptions for the next hour. If it asks &#8220;do you want me to handle X case?&#8221; before writing anything, the session almost always goes well. Bad sessions are confidently wrong. Good sessions are loudly uncertain.<\/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\/@elias_motionfy\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@elias_motionfy<\/a>&nbsp;<br \/>&#8220;Confidently wrong vs loudly uncertain&#8221; might be the best one-line description of agent sessions I&#8217;ve heard. Stealing that.<\/p>\n<p>And it&#8217;s funny, that reflex is exactly the human side of what we score. The strongest operators front-load it themselves: they state the constraints and the &#8220;what about X case&#8221; up front (we call it Spec Precision) so the agent doesn&#8217;t have to guess. Then when it does start confidently wrong, they catch it fast and redirect (Verification Rigor and Recovery).<\/p>\n<p>That&#8217;s the whole reason we score Direction instead of just the final diff. Those moves, not the typing speed, are what separate a clean session from an hour of cleanup. Would genuinely love to see what your sessions score. The loudly-uncertain ones should do well \ud83d\ude04<\/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 this, we&#8217;ve gone from &#8220;How good are you at coding?&#8221; to &#8220;How good are you at collaborating with AI?&#8221; and honestly&#8230; that&#8217;s a much more relevant question today.<\/p>\n<p>The idea of scoring <em>Direction<\/em> instead of just the final output is what caught my attention. Looking forward to throwing Claude Code at a few challenges this weekend and seeing whether I&#8217;m actually a good AI engineer or just really good at accepting suggestions.<\/p>\n<p>Congrats on the launch! \ud83d\ude80<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@jayant_siktia\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@jayant_siktia<\/a>&nbsp;<br \/>Thank you, this genuinely made my day \ud83d\ude4f You nailed why we built it.<\/p>\n<p>And ha, that last line is basically the actual test. &#8220;Good AI engineer vs just good at accepting suggestions&#8221; is something we literally score: Verification Rigor (did you catch its mistakes and push back) and Engagement (did you stay in the loop vs paste-the-spec-and-walk-away) are two of the Direction signals. So you&#8217;ll find out \ud83d\ude04<\/p>\n<p>Throw Claude Code at a few this weekend and tell me how it goes. I&#8217;d love to hear your score, and anything that felt off. Have fun with it.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#9<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/Z5BN5MF6CTNQGK\" class=\"app-title\">Salestrics Resolve Beta<\/a><\/p>\n<div class=\"one-liner\">The AI-Native Service Desk for Startups<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">17<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Salestrics Resolve Beta \u662f\u4e00\u6b3e\u9762\u5411\u521d\u521b\u516c\u53f8\u7684AI\u539f\u751f\u670d\u52a1\u53f0\uff0c\u5b83\u5c06CRM\u4e0e\u5ba2\u670d\u3001IT\u53ca\u5f00\u53d1\u56e2\u961f\u7684\u5de5\u4f5c\u6d41\u6253\u901a\uff0c\u65e8\u5728\u89e3\u51b3\u4f01\u4e1a\u4f7f\u7528\u591a\u4e2a\u5272\u88c2\u5de5\u5177\u5bfc\u81f4\u7684\u6548\u7387\u4f4e\u4e0b\u548c\u6570\u636e\u5b64\u5c9b\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                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/1959bd9b-7607-4a70-92fd-460b1944ce68.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=eYaVkdQnlAU\"><source src=\"https:\/\/www.youtube.com\/watch?v=eYaVkdQnlAU\" 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\/8dea280b-0591-4e64-abc2-95542805e5c8.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\/37adbe45-39e0-4033-890c-a464fb81feb8.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\">Task Management<\/span><br \/>\n            <span class=\"tag\">Customer Success<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u670d\u52a1\u53f0<\/span><br \/>\n            <span class=\"tag\">ITSM<\/span><br \/>\n            <span class=\"tag\">\u5ba2\u670d\u7cfb\u7edf<\/span><br \/>\n            <span class=\"tag\">\u5de5\u5355\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">\u9879\u76ee\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">\u77e5\u8bc6\u5e93<\/span><br \/>\n            <span class=\"tag\">CRM\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">\u521d\u521b\u4f01\u4e1a<\/span><br \/>\n            <span class=\"tag\">Kanban\u770b\u677f<\/span><br \/>\n            <span class=\"tag\">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\u5173\u6ce8\u7684\u6838\u5fc3\u5305\u62ec\uff1a\u56e2\u961f\u95f4\u4efb\u52a1\u4ea4\u63a5\u4e0e\u5ba1\u6279\u6d41\u7a0b\u5982\u4f55\u987a\u7545\u6267\u884c\uff08@austin_buhl \u63d0\u95ee\uff09\uff1b\u4e0eHubSpot+Gmail\u7b49\u73b0\u6709\u5de5\u5177\u76f8\u6bd4\u6709\u4f55\u72ec\u7279\u4f18\u52bf\uff08\u83b7\u8d5e\u6700\u9ad8\u95ee\u9898\uff09\u3002\u521b\u59cb\u4eba\u56de\u5e94\u5f3a\u8c03\u5176\u63d0\u4f9b\u4e86\u7ed3\u6784\u5316\u5de5\u5355\u3001SLA\u3001\u5ba2\u6237\u5386\u53f2\u548cAI\u8f85\u52a9\u56de\u590d\u7b49\u4e13\u4e1a\u529f\u80fd\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                Salestrics Resolve\u7684\u91ce\u5fc3\u5f88\u660e\u786e\uff1a\u5728CRM\u5e95\u5ea7\u4e0a\u957f\u51fa\u7b2c\u4e8c\u4e2a\u589e\u957f\u5f15\u64ce\u300217\u7968\u7684Beta\u53d1\u5e03\u6570\u636e\u867d\u4e0d\u4eae\u773c\uff0c\u4f46\u4ea7\u54c1\u903b\u8f91\u672c\u8eab\u662f\u6210\u7acb\u7684\u2014\u2014\u5bf9\u4e8e\u521d\u521b\u516c\u53f8\uff0c\u7528\u4e00\u5957\u7cfb\u7edf\u7ba1\u7406\u4ece\u9500\u552e\u5230\u552e\u540e\u7684\u5168\u751f\u547d\u5468\u671f\uff0c\u786e\u5b9e\u80fd\u7701\u53bb\u96c6\u6210\u591a\u5957SaaS\u7684\u91d1\u94b1\u548c\u5fc3\u667a\u6210\u672c\u3002\u5176\u6838\u5fc3\u4ef7\u503c\u4e0d\u5728\u4e8e\u67d0\u4e2a\u201c\u6740\u624b\u7ea7\u529f\u80fd\u201d\uff0c\u800c\u5728\u4e8e\u201c\u5171\u4eab\u6570\u636e\u201d\u8fd9\u4e00\u57fa\u7840\u67b6\u6784\uff1a\u5f53\u5ba2\u670d\u5728\u5904\u7406Case\u65f6\u80fd\u76f4\u63a5\u770b\u5230\u9500\u552e\u9636\u6bb5\u7684\u6c9f\u901a\u8bb0\u5f55\uff0c\u5f53IT\u5728\u505a\u53d8\u66f4\u8bf7\u6c42\u65f6\u80fd\u5173\u8054\u5ba2\u6237\u5408\u540c\u4e0e\u8d44\u4ea7\uff0c\u8fd9\u79cd\u6570\u636e\u6253\u901a\u624d\u662f\u4ece\u6839\u672c\u6d88\u9664\u4fe1\u606f\u5b64\u5c9b\u7684\u5173\u952e\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u7136\u800c\uff0c\u8fd9\u6b3e\u4ea7\u54c1\u76ee\u524d\u9762\u4e34\u4e24\u4e2a\u4e25\u5cfb\u6311\u6218\u3002\u7b2c\u4e00\u662f\u5b9a\u4f4d\u7684\u6a21\u7cca\u6027\uff1a\u65e2\u8981\u670d\u52a1\u5ba2\u670d\uff0c\u53c8\u8981\u670d\u52a1IT\u548c\u5f00\u53d1\uff0c\u8fd8\u5185\u7f6e\u4e86\u9879\u76ee\u7ba1\u7406\u770b\u677f\uff0c\u8fd9\u79cd\u201c\u5927\u800c\u5168\u201d\u7684\u8def\u5f84\u5728\u65e9\u671f\u5f88\u5bb9\u6613\u6ca6\u4e3a\u201c\u6837\u6837\u901a\u3001\u6837\u6837\u677e\u201d\u7684\u5e73\u5eb8\u54c1\u3002\u7b2c\u4e8c\u662f\u7ade\u4e89\u7684\u6b8b\u9177\u6027\uff1a\u5728\u4f4e\u7aef\u5e02\u573a\uff0cZendesk\u548cFreshdesk\u7684\u514d\u8d39\u7248\u5df2\u8db3\u591f\u7528\uff1b\u5728\u9ad8\u7aef\u5e02\u573a\uff0cSalesforce Service Cloud\u548cJira Service Management\u5f62\u6210\u4e86\u6781\u6df1\u7684\u4ea7\u54c1\u58c1\u5792\u3002Resolve\u8981\u60f3\u7a81\u56f4\uff0c\u5fc5\u987b\u5728\u201cAI\u539f\u751f\u201d\u8fd9\u4e2a\u6807\u7b7e\u4e0a\u505a\u51fa\u771f\u6b63\u7684\u5dee\u5f02\u5316\uff0c\u800c\u4e0d\u662f\u4ec5\u4ec5\u628aGPT\u5c01\u88c5\u5728\u5de5\u5355\u56de\u590d\u91cc\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u6b64\u5916\uff0c\u8bc4\u8bba\u4e2d\u7528\u6237\u5bf9\u201c\u4ea4\u63a5\u201d\u548c\u201c\u4e0e\u6210\u719f\u7ade\u54c1\u5bf9\u6bd4\u201d\u7684\u8ffd\u95ee\uff0c\u6697\u793a\u4e86\u4ea7\u54c1\u5728\u534f\u4f5c\u7ec6\u8282\u548c\u4ef7\u503c\u4e3b\u5f20\u4f20\u8fbe\u4e0a\u53ef\u80fd\u8fd8\u5b58\u5728\u77ed\u677f\u3002\u5982\u679c\u80fd\u4e13\u6ce8\u670d\u52a1\u597d\u201cSalesforce\u592a\u8d35\u3001Zendesk\u592a\u5f31\u3001Jira\u592a\u6c89\u91cd\u201d\u768450-200\u4eba\u89c4\u6a21\u521d\u521b\u516c\u53f8\uff0c\u5e76\u5728\u6b64\u533a\u95f4\u5185\u628aAI\u8f85\u52a9\u7684\u5de5\u5355\u5206\u914d\u3001\u77e5\u8bc6\u5e93\u81ea\u52a8\u751f\u6210\u505a\u5230\u6781\u81f4\uff0cResolve\u6709\u6f5c\u529b\u6210\u4e3a\u4e00\u6761\u6f02\u4eae\u7684\u201c\u4e2d\u95f4\u9053\u8def\u201d\u3002\u5426\u5219\uff0c\u5b83\u5f88\u53ef\u80fd\u53ea\u662f\u53c8\u4e00\u6b3e\u8bd5\u56fe\u5305\u63fd\u4e00\u5207\u4f46\u6700\u7ec8\u65e0\u75be\u800c\u7ec8\u7684SaaS\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\">Salestrics Resolve Beta<\/span>\n                <\/div>\n<div class=\"comment-content\">Salestrics Resolve expands Salestrics beyond CRM with an AI-native platform for customer support, IT, and development teams. Manage cases, knowledge, assets, entitlements, service requests, change requests, known errors, service contracts, and projects with Sprint\u2014all connected through shared accounts, contacts, activities, and files. Resolve is available in Beta on Scale and Enterprise plans, with full launch on July 27.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\ud83d\udc4b Hey Product Hunt!<\/p>\n<p>I&#8217;m Austin, founder of Salestrics. Thanks for checking out our launch!<\/p>\n<p>Over the past few weeks, we&#8217;ve been building Salestrics into an AI-native platform for growing businesses. Today we&#8217;re excited to introduce Resolve, our service management solution for customer support, IT, and development teams.<\/p>\n<p>Resolve adds powerful capabilities like Cases, Knowledge, Assets, Service Requests, Change Requests, Sprint (our Kanban project management tool), and more\u2014all built on the same shared customer data used by our CRM. The goal is simple: eliminate silos so every team works from one platform instead of juggling multiple disconnected tools.<\/p>\n<p>Resolve is currently in Beta for Scale and Enterprise customers, with a full launch on July 27th.<\/p>\n<p>I&#8217;d love to hear your thoughts:<\/p>\n<p>* Which Resolve feature stands out most to you?<br \/>\n* What&#8217;s your biggest frustration with today&#8217;s support or ITSM tools?<br \/>\n* What integrations would you like to see next?<\/p>\n<p>I&#8217;ll be here throughout the day to answer questions, gather feedback, and chat. Thanks for your support! \ud83d\ude80<\/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\/@austin_buhl\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@austin_buhl<\/a>&nbsp;Hey, If someone else needs to review, approve, or pick up where I left off, how does Salestrics Resolve Beta handle that handoff?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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>Salestrics is currently in the TOP 10 for the day!!! Thank you, everyone, for your support. <\/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\/@austin_buhl\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@austin_buhl<\/a>&nbsp;Incredible work! Congratulations. <\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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 so much for all the support so far! \ud83d\ude80<\/p>\n<\/p>\n<p>I&#8217;d love to hear your thoughts\u2014what&#8217;s the biggest challenge your support or IT team faces today?<\/p>\n<\/p>\n<p>I&#8217;ll be here throughout the day answering questions and collecting feedback. Thanks for checking out Salestrics Resolve! \ud83d\ude4c<\/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>What\u2019s the main thing it does better than just using HubSpot + Gmail today?<\/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\/@thamibenjelloun\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@thamibenjelloun<\/a>&nbsp;Resolve is optimized for customer support, not just email. HubSpot + Gmail can work for basic support, but Resolve adds structured ticket management, SLAs, customer history, internal collaboration, and AI-assisted responses in a dedicated service platform. The goal is to help teams resolve issues faster and manage support operations with the visibility you&#8217;d expect from a Service Cloud-style system.<\/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>Love the support. Thank you, everyone. <\/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\/@austinbuhl\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@austinbuhl<\/a>&nbsp;Keep up the great 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<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Still staying strong in the Top 10. Thank you, everyone, 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<\/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\/KUYLVH57WBK7QR\" class=\"app-title\">Weavz.io<\/a><\/p>\n<div class=\"one-liner\">Let AI agents safely act in 1,000+ customer apps<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">17<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Weavz.io\u4e3aAI\u4ee3\u7406\u63d0\u4f9b\u5b89\u5168\u7684\u4e2d\u95f4\u5c42\uff0c\u4f7f\u5176\u80fd\u5728\u4e0a\u5343\u4e2a\u5ba2\u6237\u5e94\u7528\uff08\u5982Slack\u3001Gmail\u3001CRM\uff09\u4e2d\u6267\u884c\u64cd\u4f5c\uff0c\u901a\u8fc7\u7ec6\u7c92\u5ea6\u6743\u9650\u3001\u4eba\u5de5\u5ba1\u6838\u548c\u5ba1\u8ba1\u65e5\u5fd7\u89e3\u51b3\u4ee3\u7406\u201c\u80fd\u770b\u4e0d\u80fd\u7528\u201d\u6216\u201c\u6ee5\u7528\u51ed\u8bc1\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\/c7094b8d-f72f-4255-ae3d-bf8740c329f7.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\/0784f3b1-95cd-4253-9a62-110a1ba0a67c.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\/17ca2f74-3174-4675-b5b5-cb97aac8a7aa.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\/c0377a7e-5917-48f7-9795-a4ef2e9fb92e.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\/2d958753-8e13-4fd7-8697-f8d18c3dd77b.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\/f4ed363e-df9b-4bd2-aa47-6bfd79221465.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\/2cb7a78f-4f7e-4b20-a3c6-fc62fd22ee82.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/50JdLpfiIIE\"><source src=\"https:\/\/youtu.be\/50JdLpfiIIE\" 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\u4ee3\u7406\u5b89\u5168\u8fde\u63a5<\/span><br \/>\n            <span class=\"tag\">MCP\u534f\u8bae<\/span><br \/>\n            <span class=\"tag\">OAuth\u51ed\u8bc1\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">\u4eba\u5de5\u5ba1\u6279\u95e8\u63a7<\/span><br \/>\n            <span class=\"tag\">\u5ba1\u8ba1\u8ffd\u8e2a<\/span><br \/>\n            <span class=\"tag\">\u5de5\u4f5c\u533a\u6743\u9650<\/span><br \/>\n            <span class=\"tag\">\u7b2c\u4e09\u65b9\u5e94\u7528\u96c6\u6210<\/span><br \/>\n            <span class=\"tag\">\u4f01\u4e1a\u7ea7\u4ee3\u7406\u6cbb\u7406<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u6700\u5173\u5fc3\u51ed\u8bc1\u5b89\u5168\u4e0e\u5ba1\u8ba1\uff0c\u521b\u59cb\u4eba\u56de\u5e94\u4ee3\u7406\u4e0d\u6301\u6709\u4ee4\u724c\u3001\u7531\u670d\u52a1\u7aef\u6309\u884c\u52a8\u5237\u65b0\u3002\u7528\u6237\u8be2\u95ee\u662f\u5426\u6709\u5168\u5c40\u7d27\u6025\u505c\u6b62\u6309\u94ae\uff0c\u56de\u590d\u79f0\u5f53\u524d\u901a\u8fc7\u52a8\u4f5c\u5c42\u63a7\u5236\u7206\u70b8\u534a\u5f84\uff0c\u65e0\u5de5\u4f5c\u533a\u7ea7\u4e00\u952e\u505c\u6b62\u3002\u7528\u6237\u79f0\u8d5e\u5ba1\u8ba1\u65e5\u5fd7\u548c\u4eba\u5de5\u95e8\u63a7\u662f\u533a\u522b\u5173\u952e\uff0c\u662f\u4e8b\u540e\u8c03\u8bd5\u548c\u907f\u514d\u4e8b\u6545\u7684\u4fdd\u969c\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                Weavz.io\u7784\u51c6\u7684\u662fAI\u4ee3\u7406\u4ece\u201c\u73a9\u5177\u201d\u8d70\u5411\u201c\u5de5\u5177\u201d\u7684\u6700\u540e\u4e00\u516c\u91cc\u2014\u2014\u5b89\u5168\u63a5\u5165\u5ba2\u6237\u771f\u5b9e\u7cfb\u7edf\u3002\u5176\u6838\u5fc3\u4ef7\u503c\u5e76\u975e\u90a31000+\u4e2a\u96c6\u6210\uff0c\u800c\u662f\u56f4\u7ed5\u201c\u8c01\u6765\u6388\u6743\u3001\u80fd\u6539\u4ec0\u4e48\u3001\u662f\u5426\u9700\u8981\u4eba\u70b9\u5934\u3001\u51fa\u4e8b\u4e86\u600e\u4e48\u67e5\u201d\u8fd9\u4e00\u6574\u5957\u6cbb\u7406\u6846\u67b6\u3002\u8fd9\u6070\u6070\u662f\u6240\u6709\u627f\u8bfa\u201c\u4e00\u4e2a\u4ee3\u7406\u641e\u5b9a\u4e00\u5207\u201d\u7684\u56e2\u961f\u6700\u540e\u649e\u4e0a\u7684\u5357\u5899\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ea7\u54c1\u8bbe\u8ba1\u4e0a\u6709\u51e0\u4e2a\u806a\u660e\u4e4b\u5904\u3002\u4e00\u662f\u91c7\u7528MCP\u534f\u8bae\u548cCLI\u53cc\u901a\u9053\uff0c\u65e2\u80fd\u62b1\u4e0aClaude\u3001ChatGPT\u7684\u5927\u817f\u83b7\u53d6\u6d41\u91cf\uff0c\u53c8\u4e0d\u653e\u5f03\u81ea\u5bb6Runtime\u7684\u63a7\u5236\u6743\uff1b\u4e8c\u662fCode Mode\u901a\u8fc7\u201c\u641c\u7d22-\u8bfb\u53d6-\u6267\u884c\u201d\u4e09\u6bb5\u5f0f\u907f\u514d\u4e00\u6b21\u6027\u52a0\u8f7d\u4e0a\u4e07\u5de5\u5177\u5bfc\u81f4\u4e0a\u4e0b\u6587\u7206\u70b8\uff0c\u8fd9\u89e3\u51b3\u4e86MCP\u5728\u5b9e\u9645\u4f7f\u7528\u4e2d\u7684\u5de5\u7a0b\u9e21\u808b\uff1b\u4e09\u662f\u201c\u4eba\u5de5\u95e8\u63a7+\u5ba1\u8ba1\u65e5\u5fd7\u201d\u7684\u7ec4\u5408\u62f3\uff0c\u76f4\u63a5\u56de\u5e94\u4e86\u884c\u4e1a\u91cc\u6700\u6015\u7684\u201c\u4ee3\u7406\u5931\u63a7\u201d\u573a\u666f\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u95ee\u9898\u4e5f\u540c\u6837\u660e\u663e\u300217\u7968\u548c\u5be5\u5be5\u51e0\u6761\u8bc4\u8bba\u8868\u660e\u8fd9\u4ecd\u662f\u4e2a\u6781\u5176\u65e9\u671f\u7684\u4ea7\u54c1\u3002\u521b\u59cb\u4eba\u5766\u8bda\u201c\u65e0\u5de5\u4f5c\u533a\u7ea7\u4e00\u952e\u505c\u6b62\u201d\uff0c\u610f\u5473\u7740\u5728\u5e94\u5bf9\u5927\u89c4\u6a21\u6216\u6076\u610f\u4ee3\u7406\u65f6\uff0c\u54cd\u5e94\u901f\u5ea6\u4f9d\u8d56\u52a8\u4f5c\u9897\u7c92\u5ea6\u800c\u975e\u7ba1\u7406\u76f4\u89c9\uff0c\u8fd9\u5728\u9ad8\u9891\u4ea4\u6613\u6216\u5ba2\u670d\u573a\u666f\u53ef\u80fd\u662f\u81f4\u547d\u4f24\u3002\u6b64\u5916\uff0c\u4f9d\u8d56OAuth\u91cd\u5b9a\u5411\u8fdb\u884c\u51ed\u8bc1\u5237\u65b0\u867d\u89e3\u51b3\u4e86\u957f\u4efb\u52a1\u6682\u505c\u95ee\u9898\uff0c\u4f46\u82e5\u67d0\u4e00\u65b9\u670d\u52a1\u5230\u671f\u6216\u64a4\u9500\u6743\u9650\uff0c\u6062\u590d\u6d41\u7a0b\u7684\u590d\u6742\u5ea6\u5e76\u672a\u5728\u56de\u590d\u4e2d\u8bf4\u660e\u6e05\u6670\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u603b\u4f53\u800c\u8a00\uff0cWeavz.io\u89e3\u51b3\u7684\u4e0d\u662f\u201c\u8fde\u63a5\u201d\u95ee\u9898\uff0c\u800c\u662f\u201c\u4fe1\u4efb\u201d\u95ee\u9898\u3002\u5b83\u66f4\u9002\u5408\u90a3\u4e9b\u5df2\u7ecf\u5728\u7528MCP\u534f\u8bae\u3001\u4f46\u82e6\u4e8e\u65e0\u6cd5\u5bf9\u771f\u5b9e\u7528\u6237\u7cfb\u7edf\u8fdb\u884c\u7ec6\u7c92\u5ea6\u7ba1\u63a7\u7684\u56e2\u961f\u3002\u7136\u800c\uff0c\u4e3a\u4e86\u7528\u5b83\uff0c\u4f60\u9996\u5148\u5f97\u8ba9\u5ba2\u6237\u63a5\u53d7\u201c\u628a\u6211\u7684CRM\u548cSlack\u4ea4\u7ed9\u4f60\u7684\u4ee3\u7406\u201d\uff0c\u8fd9\u672c\u8eab\u5c31\u662f\u9700\u8981Weavz\u6765\u7a81\u7834\u7684\u95e8\u69db\u3002\u6bd5\u7adf\uff0c\u4fe1\u4efb\u5c42\u672c\u8eab\u4e5f\u9700\u8981\u4fe1\u4efb\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\">Weavz.io<\/span>\n                <\/div>\n<div class=\"comment-content\">Let your AI agents safely act in the apps your customers already use, like Slack, Gmail, CRMs, and billing. Give an agent a Weavz MCP in Claude, ChatGPT, or Cursor, or a CLI workspace in your own runtime. It reaches 1,000+ integrations and 12,000+ agent tools through Code Mode&#8217;s 3 calls, with Human Gates, scoped credentials, state, files, and audit. Embedding it yourself? Provision workspaces, connect users, and mint scoped tokens via the API and TypeScript\/Python SDKs.<\/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. I am Ahmad, founder of Weavz.<\/p>\n<p>The demo version of an AI agent is easy. The version that touches a customer&#8217;s real tools is where it gets hard.<\/p>\n<p>The moment an agent has to use Slack, Gmail, a CRM, billing, or an internal API, you inherit the messy part. Who owns the credential. What the agent is allowed to change. Which action needs a human first. What receipt survives after it acts. That is product work, not a prompt.<\/p>\n<p>Weavz is that layer. Let your agents safely act in the apps your customers already use, inside Claude, ChatGPT, or Cursor, or wired into your own agent.<\/p>\n<p>&#8211; 1,000+ integrations and 12,000+ agent tools, scoped per workspace and end user<br \/>&#8211; Code Mode: the agent searches, reads only the API it needs, then executes. No 12,000-tool context dump.<br \/>&#8211; Human Gates pause sensitive actions until someone approves<br \/>&#8211; State, files, sandbox, and an audit trail per run<br \/>&#8211; Agents reach it over MCP or the CLI. Builders embed with the REST API and TypeScript\/Python SDKs<\/p>\n<p>Fastest way to see it:<br \/>1. Add the connector at platform.weavz.io\/mcp\/weavz to Claude or ChatGPT<br \/>2. Sign in and get a starter workspace<br \/>3. Ask the agent what is available, then have it do real work across an app<\/p>\n<p>I would genuinely like your feedback more than your upvote:<br \/>&#8211; Where do your agents hit app-access pain today<br \/>&#8211; Which actions should never run without a human approval<br \/>&#8211; MCP, your own API, or both in your stack<\/p>\n<p>I am here all day. Ask me anything technical.<\/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=\"comment-item\">\n<div class=\"comment-content\">\n<p>Huge congrats for launching <a href=\"https:\/\/www.producthunt.com\/@blah_mad\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"blah_mad\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@blah_mad<\/a>\ud83d\udc4f addressing the absolute mess of managing client OAuth states for multi-app agents, qq Is there a hard stop button in the UI to instantly kill a running agent workspace?<\/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\/@priya_kushwaha1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@priya_kushwaha1<\/a>&nbsp;Great question. There isn\u2019t a single workspace-wide kill switch, yet.<\/p>\n<p>Today Weavz controls the blast radius at the action layer: workspace-scoped access, enabled actions per app, Human Gates that can be rejected\/canceled, and cutting off connections\/API access so future tool calls stop.<\/p>\n<p>If the agent runs in your own runtime, killing that process stays there. Weavz governs what it can do inside customer apps.<\/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;who owns the credential&#8221; question is one of those things that sounds boring until you actually try to ship. I spent way too long on auth flows for MotionFy because every external API had a different opinion on what &#8220;scoped access&#8221; means.<\/p>\n<\/p>\n<p>Human Gates is the part most teams skip and then learn the hard way. The audit trail per run is the real differentiator though without that, you can&#8217;t debug what the agent actually did, you can only debug what you think it did.<\/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\/@elias_motionfy\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@elias_motionfy<\/a>&nbsp;This is the right read, and the MotionFy auth pain is painfully familiar. Every provider has its own idea of scopes, refresh, and what a connection even is, and you only feel how bad it is once you&#8217;re doing it per customer.<\/p>\n<p>Strong agree on the audit trail. Your line nails it, without it you&#8217;re debugging what you think the agent did, not what it actually did. We log every action with the workspace, the end user it acted as, the inputs, the result, and the approval if it passed a gate, so a run is reconstructable instead of a black box.<\/p>\n<p>And Human Gates is the one everyone skips until an agent does something irreversible in prod exactly once. Cheaper to learn it from a comment than an incident.<\/p>\n<p>Appreciate the thoughtful take. Curious what you ended up doing for auth on MotionFy.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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>As someone building AI agents that need to touch user data across multiple SaaS tools, the OAuth scope management is always the scariest part. How does Weavz handle token refresh when an agent runs long-running workflows? And is there a way to audit exactly which actions an agent took across all connected apps?<\/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\/@jimmy_benhsu\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@jimmy_benhsu<\/a>&nbsp;the agent never holds the OAuth token. It calls a scoped action and Weavz resolves + refreshes the credential server-side at execution time, so tokens refresh per action, not at run start. That is why a run can pause at a Human Gate and resume hours later without breaking. On audit: every action is logged with the workspace, the end user it acted as, the action, result, approval, and timestamp, so you get a full per-run trail across every connected app. Happy to dig into revoked-token \/ re-consent edge cases.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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\/@blah_mad\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"blah_mad\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@blah_mad<\/a> This is really smart approach to AI integrations.  Love how you\u2019re focusing on secure access instead of just adding more connectors. <\/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\/@dipanshu_kushwaha5\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dipanshu_kushwaha5<\/a>&nbsp;that\u2019s exactly the bet. Agents don\u2019t need bigger connector lists as much as they need scoped credentials, approvals, state, files, and audit around the action. That\u2019s what we\u2019re trying to make boring and reliable with Weavz, so teams building agents, copilots, and internal tools can safely connect them to real customer\/business apps.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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\">#11<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/BFPO65T2SBX3N4\" class=\"app-title\">DevGlobe<\/a><\/p>\n<div class=\"one-liner\">Where developers build in public, live on a globe<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">16<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>DevGlobe \u662f\u4e00\u6b3e\u5c06\u672c\u5730IDE\u7f16\u7801\u6d3b\u52a8\u5b9e\u65f6\u6620\u5c04\u52303D\u5730\u7403\u4e0a\u7684\u793e\u4ea4\u5316\u7f16\u7a0b\u8ffd\u8e2a\u5668\uff0c\u89e3\u51b3\u4e86\u5f00\u53d1\u8005\u7f16\u7801\u6570\u636e\u5b64\u7acb\u3001\u7f3a\u4e4f\u5916\u90e8\u6fc0\u52b1\u548c\u66dd\u5149\u7684\u95ee\u9898\uff0c\u628a\u79c1\u4eba\u4eea\u8868\u76d8\u53d8\u6210\u4e86\u6d3b\u7684\u3001\u53ef\u4e92\u52a8\u7684\u5168\u7403\u7f16\u7a0b\u793e\u533a\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\/c11fafff-683f-44f9-a75e-b45800fbd208.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=9ydaEewzBjI\"><source src=\"https:\/\/www.youtube.com\/watch?v=9ydaEewzBjI\" 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\/6faf2643-ed38-4dc8-988e-b49dd798df4d.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\/c989c955-d4fe-4061-bb92-755b93065981.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\/0c008e66-4c0f-4734-93e9-b6a8c98de3dc.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\/2eb3b118-89f4-431d-9d8f-0a84edd8b466.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\/ce87f9ad-f7a9-4288-8594-07fccd42d07a.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Productivity<\/span><br \/>\n            <span class=\"tag\">Analytics<\/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\">\u7f16\u7a0b\u8ffd\u8e2a<\/span><br \/>\n            <span class=\"tag\">\u793e\u4ea4\u7f16\u7801<\/span><br \/>\n            <span class=\"tag\">\u5b9e\u65f6\u6570\u636e\u53ef\u89c6\u5316<\/span><br \/>\n            <span class=\"tag\">\u5f00\u53d1\u8005\u793e\u533a<\/span><br \/>\n            <span class=\"tag\">3D\u5730\u7403<\/span><br \/>\n            <span class=\"tag\">\u7f16\u7a0b\u6210\u5c31\u5c55\u793a<\/span><br \/>\n            <span class=\"tag\">\u5f00\u6e90\u6269\u5c55<\/span><br \/>\n            <span class=\"tag\">\u9690\u79c1\u4fdd\u62a4<\/span><br \/>\n            <span class=\"tag\">\u9879\u76ee\u63a8\u5e7f<\/span><br \/>\n            <span class=\"tag\">\u5f00\u53d1\u8005\u6fc0\u52b1<\/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\u201c\u793e\u4ea4\u5c42\u201d\u5e26\u6765\u7684\u8d23\u4efb\u611f\uff0c\u582a\u6bd4Strava\u3002\u4e3b\u8981\u7591\u95ee\u96c6\u4e2d\u5728\u9690\u79c1\uff1a\u80fd\u5426\u7cbe\u7ec6\u63a7\u5236\u516c\u5f00\u5185\u5bb9\u3001\u662f\u5426\u81ea\u52a8\u5c4f\u853d\u654f\u611f\u4fe1\u606f\uff1f\u5b98\u65b9\u6f84\u6e05\u6269\u5c55\u4ec5\u8ffd\u8e2a\u8bed\u8a00\u3001IDE\u548c\u53ef\u9009\u7684\u6587\u4ef6\/\u4ed3\u5e93\u540d\uff0c\u5730\u7406\u4f4d\u7f6e\u4ec5\u4e3a\u57ce\u5e02\u7ea7\u522b\uff0c\u5e76\u63d0\u4f9b\u516c\u5f00\/\u533f\u540d\/\u79c1\u5bc6\u4e09\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                DevGlobe \u663e\u7136\u6293\u4f4f\u4e86\u201cWakaTime\u5f88\u597d\u4f46\u5f88\u5b64\u72ec\u201d\u8fd9\u4e2a\u7ec6\u5fae\u75db\u70b9\uff0c\u8bd5\u56fe\u7528\u201c\u76f4\u64ad+\u793e\u533a\u76ee\u5f55\u201d\u7684\u914d\u65b9\u5c06\u7f16\u7801\u4ece\u5e55\u540e\u63a8\u5411\u53f0\u524d\u3002\u5176\u8bbe\u8ba1\u903b\u8f91\u9887\u4e3a\u806a\u660e\uff1a\u7528\u6bcf\u5468\u6295\u7968\u7ef4\u6301\u76ee\u5f55\u6d3b\u8dc3\u5ea6\uff0c\u518d\u4ee5\u514d\u8d39\u8ffd\u8e2a\u4e3a\u57fa\u7840\u5438\u5f15\u7528\u6237\uff0c\u5f62\u6210\u201c\u6d41\u91cf-\u4ef7\u503c\u201d\u5faa\u73af\u3002\u7136\u800c\uff0c\u73b0\u5b9e\u6bd4\u70b9\u5b50\u66f4\u9aa8\u611f\u3002\u628a\u5f00\u53d1\u8005\u7684\u79c1\u6709\u7f16\u7801\u884c\u4e3a\u53d8\u6210\u516c\u5171\u8868\u6f14\uff0c\u9700\u8981\u8de8\u8d8a\u6781\u9ad8\u7684\u5fc3\u7406\u95e8\u69db\u2014\u2014\u5927\u591a\u6570\u7a0b\u5e8f\u5458\u5e76\u4e0d\u60f3\u8ba9\u522b\u4eba\u77e5\u9053\u81ea\u5df1\u4e03\u5c0f\u65f6\u8fd8\u6ca1\u641e\u5b9a\u4e00\u4e2abug\u3002\u9690\u79c1\u7b56\u7565\u867d\u8bbe\u8ba1\u5408\u7406\uff08\u5143\u6570\u636e\u800c\u975e\u6e90\u7801\uff0c\u57ce\u5e02\u7ea7\u5b9a\u4f4d\uff09\uff0c\u4f46\u201c\u6bcf\u5468\u6295\u7968\u624d\u80fd\u770b\u5386\u53f2\u8bb0\u5f55\u201d\u8fd9\u4e00\u89c4\u5219\u672c\u8d28\u4e0a\u662f\u201c\u88f9\u631f\u5f0f\u7559\u5b58\u201d\uff1a\u5b83\u5229\u7528\u4e86\u4f60\u6295\u5165\u7684\u65f6\u95f4\u6570\u636e\u4f5c\u4e3a\u8981\u631f\u6760\u6746\uff0c\u800c\u975e\u5355\u7eaf\u7684\u793e\u533a\u6fc0\u52b1\u3002\u82e5\u6211\u4e0d\u80fd\u63a5\u53d7\u516c\u5f00\uff0c\u6211\u7684\u5386\u53f2\u6570\u636e\uff08\u8d85\u8fc77\u5929\uff09\u5c31\u88ab\u9501\u5b9a\uff1f\u8fd9\u79cd\u8bbe\u8ba1\u5bb9\u6613\u5f15\u53d1\u53cd\u611f\uff0c\u5c24\u5176\u5728WakaTime\u7b49\u5b8c\u5168\u514d\u8d39\u4e14\u65e0\u9644\u52a0\u6761\u4ef6\u7684\u7ade\u54c1\u9762\u524d\u3002\u6b64\u5916\uff0c\u5176\u4ef7\u503c\u6838\u5fc3\u201c\u793e\u4ea4\u76d1\u7763\u201d\u66f4\u9002\u5408\u516c\u5f00\u4f5c\u54c1\u5df2\u6210\u578b\u7684\u5916\u5305\u5f00\u53d1\u8005\u6216\u5f00\u6e90\u9886\u8896\uff0c\u5bf9\u4e8e\u591a\u6570\u5728\u5c1d\u8bd5\u671f\u7684\u4e2a\u4eba\u9879\u76ee\uff0c\u516c\u5f00\u8fdb\u5ea6\u5e26\u6765\u7684\u538b\u529b\u8fdc\u5927\u4e8e\u6fc0\u52b1\u3002\u5982\u679c\u7528\u6237\u672a\u80fd\u6301\u7eed\u4e3b\u52a8\u8d21\u732e\u8bc4\u8bba\uff0c\u5e73\u53f0\u4f1a\u8fc5\u901f\u7a7a\u5fc3\u5316\u2014\u2014\u8fd9\u4e5f\u662f\u4e0a\u4e00\u7248170k\u6d4f\u89c8\u5374\u65e0\u6cd5\u7559\u5b58\u7684\u539f\u56e0\uff0c\u672c\u7248\u53ea\u662f\u7528\u201c\u8fd0\u8425\u95e8\u69db\u201d\u66ff\u4ee3\u4e86\u201c\u65e0\u5185\u5bb9\u201d\u3002\u6700\u7ec8\uff0cDevGlobe\u7684\u62a4\u57ce\u6cb3\u4e0d\u5728\u4e8e\u6280\u672f\uff0c\u800c\u5728\u4e8e\u80fd\u5426\u6784\u5efa\u4e00\u4e2a\u5177\u8db3\u591f\u5b89\u5168\u611f\u548c\u4eea\u5f0f\u611f\u7684\u201c\u5728\u7ebf\u7f16\u821e\u793e\u533a\u201d\uff0c\u5426\u5219\u5b83\u53ef\u80fd\u4ecd\u662f\u90a3\u4e2a\u6ca1\u4eba\u56de\u8bbf\u7684\u70ab\u9177\u4eea\u8868\u76d8\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\">DevGlobe<\/span>\n                <\/div>\n<div class=\"comment-content\">Connect your IDE and appear live on a 3D globe as you code. Track your stats per repo, file, and language, launch your projects to a community of builders, and get noticed.<\/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>Coding trackers have always been solo dashboards. WakaTime even calls itself the &#8220;Fitbit for programmers&#8221;, and that&#8217;s exactly it: great data, but it lives alone in a private tab. We wanted the Strava version: the same stats, but live, social, and public if you want it to be.<\/p>\n<p>So the fastest way to get it is to just open the globe: <a href=\"https:\/\/devglobe.app\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/devglobe.app<\/a>, hit play, let the music and auto-rotate kick in, and watch developers light up city by city as they code in real time. Here&#8217;s my own live profile and stats so you can see what yours would look like: <a href=\"https:\/\/devglobe.app\/developers\/CaadriFR\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/devglobe.app\/developers\/&#8230;<\/a><\/p>\n<p>We learned why the social part matters the hard way. Our first version got around 170k views and 400 signups, then almost nobody came back. People installed the extension and forgot the site existed, because there was nothing to return to. So we spent two months rebuilding around one idea: make the stats social.<\/p>\n<p>What it does: you connect your IDE and show up live on that 3D globe as you code, with full stats per file, language, project, and branch. Then you can launch your projects in a weekly directory and get upvotes from real builders. Goals, badges, and private leaderboards are there too if you like a nudge to keep going.<\/p>\n<p>Who it&#8217;s for: developers and builders who want their coding to be more than a private number. Indie hackers shipping in public, freelancers tracking time per project, open-source folks who want a public profile, and the WakaTime\/Wakapi crowd looking for a social layer.<\/p>\n<p>The directory is the part I&#8217;d point you to. Up to 15 projects launch each week, and the people voting are devs already on DevGlobe for their own stats, not an imported crowd and not bots. So a launch gets real eyes even with zero followers.<\/p>\n<p>On privacy, since an extension that shows where you code deserves real scrutiny, here&#8217;s exactly how it works:<\/p>\n<p>We track your coding, not your code. Source code, file contents, keystrokes, commits, env vars, and SSH keys never leave your machine. Only metadata is sent: language, editor, coding time, and repo\/branch\/file names.<br \/>\nLocation is city-level only, snapped to the nearest city center, never your exact coordinates.<br \/>\nThree profile modes you can switch anytime: Public (your city), Anonymous (a random city in your country, so you&#8217;re on the globe but your real location is hidden), or Private (off the globe entirely, stats tracked solo with full history, no 7-day cap).<br \/>\nEvery field is individually toggleable locally before anything is sent: hide file names, branch names, or whole project names from your config.toml.<br \/>\nThe extensions are open source (MIT) so you can audit every line yourself.<br \/>\nPricing: tracking, stats, the globe, and the directory are all free. The one ask, and it&#8217;s by design: once a week you upvote or comment on a project in the directory to keep your stats access active. That small weekly action is what keeps the directory full of real, active voters instead of a ghost-town feed, so every launch actually gets seen. We only charge makers who want extra reach (a featured launch slot or a written article about their product), never for the tracking itself.<\/p>\n<p>I&#8217;d love your feedback: if you ship things, would you launch in a weekly directory like this one?<\/p>\n<p>Thanks for checking it out, I&#8217;d genuinely love to hear what you think.<\/p>\n<p>\u2014 CaadriFR<\/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\/@caadrifr\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@caadrifr<\/a>&nbsp;If the underlying app or input shape changes, how does DevGlobe fail before it quietly gives me a bad result?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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;ve been building in public for 18 months and the hardest part isn&#8217;t showing progress\u2014it&#8217;s deciding <em>what<\/em> to show without leaking API keys, half-baked features, or database schemas. Does DevGlobe have any guardrails for masking sensitive env vars or WIP routes? That&#8217;s the feature that would make me switch from my current stack.<\/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\/@jimmy_benhsu\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@jimmy_benhsu<\/a>&nbsp;<\/p>\n<p>Your comment is spot on!<\/p>\n<\/p>\n<p>To answer you: feel free to download the extensions without any worry: they never access your code or personal data.<\/p>\n<\/p>\n<p>The only things that get tracked are: the programming language you\u2019re using, your IDE, your OS and optionally the name of your repo or the file you\u2019re working on.<\/p>\n<\/p>\n<p>You appear on the globe simply because the extension detects when you (or your coding agent) are actively writing code. That\u2019s 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<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The Strava analogy really nails it. WakaTime is great data but it&#8217;s fundamentally solo &#8211; there&#8217;s no reason to check it beyond your own curiosity. The social layer is what turns tracking into accountability and motivation. I&#8217;m curious how the live globe handles privacy &#8211; can you choose what to make public vs keep private? Some devs will love full transparency, others will want to share stats without exposing which specific files they&#8217;re working 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;<br \/>Thanks for your feedback!<\/p>\n<p>On DevGlobe, users can choose how they appear on the globe. In <strong>Classic mode<\/strong>, you show up in the center of your city (never your exact location). In <strong>Anonymous mode<\/strong>, you appear in a random city within your country. And in <strong>Private mode<\/strong>, you don&#8217;t appear on the globe at all though you still track all your own stats.<\/p>\n<p>As for tracking, the extensions only send the server the programming language you&#8217;re using, the time you spent coding between syncs, your IDE or agent, and <em>optionally<\/em> the name of your repo or the file you&#8217;re working on.<br \/>Plus, everything is fully transparent: the extensions are open source and deployed via GitHub Actions, so anyone can audit the code and see exactly what\u2019s being sent.<\/p>\n<p>If you like the project, we\u2019d love to see you on the globe \ud83c\udf0d<\/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\">#12<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/G7ON543RZOT5HR\" class=\"app-title\">TeenCycle<\/a><\/p>\n<div class=\"one-liner\">Private, offline period tracker. Pay once, no account.<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">13<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>\u4e00\u6b3e\u5b8c\u5168\u79bb\u7ebf\u3001\u65e0\u9700\u8d26\u6237\u3001\u65e0\u8ba2\u9605\u7684\u751f\u7406\u671f\u9884\u6d4b\u5de5\u5177\uff0c\u4e13\u4e3a\u6ce8\u91cd\u9690\u79c1\u7684\u9752\u5c11\u5e74\u53ca\u7528\u6237\u6253\u9020\uff0c\u89e3\u51b3\u6570\u636e\u88ab\u8ffd\u8e2a\u6216\u6cc4\u9732\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\/bd3d780f-0f80-4280-8e1e-b8786ca64e21.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\/5092b039-f963-4268-b00a-c522e8ec2b25.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\/2e7a9879-afab-4a9d-b8d1-79d95142fcf7.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\/66359808-fee7-4116-94ff-8e9cca9d01f5.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\/5c050c03-84dd-4daf-8a42-0631d1936847.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\/6024b609-da19-4019-a190-1b6613c2ee81.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/SEgtPe4D3PA\"><source src=\"https:\/\/youtu.be\/SEgtPe4D3PA\" 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\">Android<\/span><br \/>\n            <span class=\"tag\">iOS<\/span><br \/>\n            <span class=\"tag\">Health &#038; Fitness<\/span><br \/>\n            <span class=\"tag\">Privacy<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u751f\u7406\u671f\u8ffd\u8e2a<\/span><br \/>\n            <span class=\"tag\">\u9690\u79c1\u4fdd\u62a4<\/span><br \/>\n            <span class=\"tag\">\u79bb\u7ebf\u5e94\u7528<\/span><br \/>\n            <span class=\"tag\">\u9752\u5c11\u5e74\u5065\u5eb7<\/span><br \/>\n            <span class=\"tag\">\u4e00\u6b21\u6027\u4ed8\u8d39<\/span><br \/>\n            <span class=\"tag\">\u65e0\u8d26\u6237<\/span><br \/>\n            <span class=\"tag\">\u65e0\u6570\u636e\u6536\u96c6<\/span><br \/>\n            <span class=\"tag\">\u5bb6\u5ead\u5f00\u53d1<\/span><br \/>\n            <span class=\"tag\">\u5065\u5eb7\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u7eaf\u672c\u5730\u5b58\u50a8<\/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>\u521b\u59cb\u4eba\u4e3a\u5973\u513f\u5f00\u53d1\u7684\u6545\u4e8b\u83b7\u8ba4\u53ef\u3002\u6838\u5fc3\u5efa\u8bae\u7f3a\u4e4f\u672c\u5730\u52a0\u5bc6\u5907\u4efd\/\u5bfc\u51fa\u529f\u80fd\uff0c\u624b\u673a\u4e22\u5931\u5c06\u81f4\u6570\u636e\u5168\u5931\uff0c\u5c24\u5176\u5bf9\u9752\u5c11\u5e74\u8fde\u7eed\u6027\u91cd\u8981\uff0c\u671f\u5f85\u589e\u52a0\u6587\u4ef6\u6216\u9694\u7a7a\u6295\u9001\u5bfc\u51fa\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                TeenCycle\u7cbe\u51c6\u5207\u4e2d\u4e86\u751f\u7406\u671f\u8ffd\u8e2a\u9886\u57df\u7684\u4fe1\u4efb\u771f\u7a7a\u2014\u2014\u5f53\u4e3b\u6d41\u5e94\u7528\u5982Flo\u3001Clue\u56e0\u6570\u636e\u5171\u4eab\u6216\u6cc4\u9732\u4e11\u95fb\u5f15\u53d1\u6050\u614c\u65f6\uff0c\u4e00\u4e2a\u201c\u4ec0\u4e48\u90fd\u4e0d\u8981\u3001\u4ec0\u4e48\u4e5f\u4e0d\u7559\u201d\u7684\u79bb\u7ebf\u5de5\u5177\u672c\u8eab\u5c31\u662f\u6700\u950b\u5229\u7684\u9053\u5fb7\u4f18\u52bf\u3002\u521b\u59cb\u4eba\u4ee5\u201c\u5988\u5988+\u5973\u513f\u201d\u7684\u771f\u5b9e\u9700\u6c42\u9a71\u52a8\uff0c\u800c\u975e\u98ce\u6295\u4f18\u5148\u7684\u6570\u636e\u6a21\u578b\uff0c\u8fd9\u8d4b\u4e88\u4e86\u4ea7\u54c1\u521d\u671f\u6781\u5f3a\u7684\u53d9\u4e8b\u8bf4\u670d\u529b\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u51b7\u9759\u6765\u770b\uff0c\u5b83\u7684\u4ef7\u503c\u91ca\u653e\u5b58\u5728\u660e\u663e\u5929\u82b1\u677f\u3002\u7b2c\u4e00\uff0c\u529f\u80fd\u6781\u5ea6\u7cbe\u7b80\uff1a\u4ec5\u6709\u4e09\u5c4f\u548c\u5355\u6b21\u70b9\u51fb\u8bb0\u5f55\uff0c\u65e0\u63d0\u9192\u3001\u8d8b\u52bf\u5206\u6790\u6216\u5065\u5eb7\u6d1e\u5bdf\uff0c\u5bf9\u4e8e\u9700\u8981\u5b8c\u6574\u5468\u671f\u5065\u5eb7\u7ba1\u7406\u7684\u7528\u6237\u800c\u8a00\uff0c\u8fd9\u66f4\u50cf\u662f\u4e00\u4e2a\u201c\u9690\u79c1\u4fdd\u62a4\u201d\u7684\u6837\u677f\u95f4\uff0c\u800c\u975e\u6210\u719f\u7684\u66ff\u4ee3\u54c1\u3002\u7b2c\u4e8c\uff0c\u5b9a\u4ef7\u7b56\u7565\u201c\u4e00\u6b21\u4ed8\u8d399.99\u7f8e\u5143\u201d\u963b\u65ad\u8ba2\u9605\u7528\u6237\u6d41\u5931\u7684\u540c\u65f6\uff0c\u4e5f\u538b\u4f4e\u4e86\u957f\u5c3e\u53d8\u73b0\u6f5c\u529b\uff0c\u4e14\u7f3a\u4e4f\u540e\u7eed\u7684\u6570\u636e\u8de8\u8bbe\u5907\u540c\u6b65\u3001\u533b\u7597\u7ea7\u9644\u52a0\u529f\u80fd\u7b49\u4ed8\u8d39\u5347\u7ea7\u8def\u5f84\u3002\u7b2c\u4e09\uff0c\u4e5f\u662f\u6700\u81f4\u547d\u7684\uff1a\u5b8c\u5168\u79bb\u7ebf\u610f\u5473\u7740\u6570\u636e\u5f7b\u5e95\u9501\u6b7b\u5728\u5355\u673a\uff0c\u65e0\u52a0\u5bc6\u5907\u4efd\u3001\u65e0\u5bfc\u51fa\u9009\u9879\u2014\u2014\u8bda\u5982\u8bc4\u8bba\u6240\u6307\u51fa\uff0c\u624b\u673a\u4e22\u5931\u7b49\u4e8e\u6e05\u96f6\u5386\u53f2\uff0c\u8fd9\u5bf9\u9752\u6625\u671f\u7528\u6237\u53cd\u800c\u589e\u52a0\u4e86\u5fc3\u7406\u8d1f\u62c5\uff0c\u6253\u7834\u4e86\u201c\u4f7f\u7528\u8d8a\u4e45\u8d8a\u6709\u7528\u201d\u7684\u79ef\u7d2f\u6548\u5e94\u3002\n            <\/p>\n<p class=\"ai-content\">\n                TeenCycle\u7684\u6210\u529f\u4e0e\u5426\u4e0d\u5728\u4e8e\u5b83\u662f\u5426\u80fd\u62a2\u5230\u5e02\u573a\uff0c\u800c\u5728\u4e8e\u5b83\u80fd\u5426\u5728\u4e0d\u7834\u574f\u9690\u79c1\u627f\u8bfa\u7684\u524d\u63d0\u4e0b\uff0c\u6e10\u8fdb\u5f0f\u89e3\u51b3\u201c\u6570\u636e\u6613\u4e22\u5931\u201d\u4e0e\u201c\u529f\u80fd\u592a\u5355\u8584\u201d\u7684\u6096\u8bba\u3002\u5b83\u662f\u4e00\u573a\u6709\u4ef7\u503c\u7684\u5ba3\u8a00\uff0c\u4f46\u79bb\u6210\u4e3a\u4e00\u4e2a\u771f\u6b63\u53ef\u6301\u7eed\u7684\u4ea7\u54c1\u2014\u2014\u5c24\u5176\u662f\u9762\u5411\u6570\u5b57\u539f\u4f4f\u6c11\u9752\u5c11\u5e74\u7684\u4ea7\u54c1\u2014\u2014\u8fd8\u5dee\u4e00\u4e2a\u201c\u53ef\u4fe1\u8d56\u7684\u672c\u5730\u5907\u4efd\u65b9\u6848\u201d\u548c\u4e00\u5957\u201c\u4e0d\u8054\u7f51\u4e5f\u80fd\u505a\u7684\u9884\u6d4b\u8fdb\u5316\u7b97\u6cd5\u201d\u3002\u5426\u5219\uff0c\u5b83\u7ec8\u7a76\u53ea\u662f\u9ed1\u6697\u68ee\u6797\u91cc\u7684\u4e00\u76cf\u70db\u5149\uff0c\u6e29\u6696\uff0c\u4f46\u6ce8\u5b9a\u6613\u7184\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\">TeenCycle<\/span>\n                <\/div>\n<div class=\"comment-content\">TeenCycle is a period tracker that runs entirely on your phone. No account, no cloud, no analytics, no ads \u2014 nothing ever leaves the device, so there is nothing for anyone to sell, leak, or hand over. Three screens, one tap to log, and a calendar that estimates when your next period is likely. A mom and her teenage daughter built it for teens, but it works for anyone who would rather not be tracked. Free for 7 days, then $9.99 once. Never a subscription. On iOS and Android.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hi Product Hunt. I&#8217;m Laura \u2014 one half of the family that made TeenCycle. The other half is my teenage daughter, Mia.<\/p>\n<p>It started at our kitchen table. Mia was about to start tracking her period, and we went looking for an app we could both trust. What we found wanted her email and a login before she&#8217;d logged a single day. Some asked a young teen about her sex life. Most had feeds to scroll and streaks to keep, quietly sending her most personal information to a server somewhere. For a period tracker.<\/p>\n<p>So we stopped looking and built the one we wanted:<\/p>\n<p>\u2014 100% offline. Everything stays on the phone. No account, no cloud, no analytics, no trackers. There&#8217;s nothing on our end to sell, leak, or hand over, because we never have it.<br \/>\n\u2014 Three screens, one tap to log. No feed, no notifications, no streaks. Open it when you need it, close it when you don&#8217;t.<br \/>\n\u2014 One honest price. Free for 7 days, then $9.99 once. Never a subscription.<\/p>\n<p>My husband built exactly what we asked for, and nothing we didn&#8217;t. We&#8217;re not a startup with investors or data to sell \u2014 just a family that built the tracker we couldn&#8217;t find for our own daughter.<\/p>\n<p>It&#8217;s made for teens, but it works just as well for anyone who&#8217;d rather not be tracked. The predictions are estimates that get better the more you log; it isn&#8217;t a medical tool, so please talk to a doctor if something feels off.<\/p>\n<p>We&#8217;d love your honest feedback \u2014 on the design, the privacy model, and what you&#8217;d want from a tracker that holds nothing. I&#8217;ll be here all day to answer.<\/p>\n<p>\u2014 Laura<\/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 origin story is genuinely touching &#8211; building this for your own daughter is the best possible reason to start. But one real concern: purely offline with no export means a lost or broken phone wipes months of cycle history. For teens especially, continuity matters.<\/p>\n<\/p>\n<p>Is there any local encrypted backup on the roadmap &#8211; export to Files app, AirDrop, etc.? That one feature would significantly lower the stakes of going fully phone-only.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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>We&#8217;re #17 wow. Thanks for the support! <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/38839fa6-ffdf-4d6f-88d4-6e6fedb08afb.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<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Thanks for the votes! From #94 to #27. Thank you!<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/6c662e48-5181-4fcb-8732-64313a26e4cf.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<\/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\/KZ35ZKDVBOE2FX\" class=\"app-title\">ByteAsk Embedded MCP &#8211; Open Source<\/a><\/p>\n<div class=\"one-liner\">Stop your coding agent from guessing at datasheets<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">13<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>ByteAsk Embedded MCP \u662f\u4e00\u4e2a\u5f00\u6e90\u5de5\u5177\uff0c\u901a\u8fc7\u4e3aClaude Code\u7b49AI\u7f16\u7801\u4ee3\u7406\u63d0\u4f9b\u5e26\u9875\u7801\u5f15\u7528\u7684\u5d4c\u5165\u5f0f\u6587\u6863\uff08\u5982\u5bc4\u5b58\u5668\u6620\u5c04\u3001\u534f\u8bae\u4ee3\u7801\uff09\uff0c\u5f7b\u5e95\u6d88\u9664\u5176\u51ed\u7a7a\u634f\u9020\u6570\u636e\u624b\u518c\u5185\u5bb9\u7684\u201c\u5e7b\u89c9\u201d\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\/88306af3-4ced-4c24-9732-fc0fd2a758ca.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\/73054840-40fe-464c-9d8c-6b36c41c1022.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\/a25a1f7f-a9d9-420b-97a4-7cb3582532e8.gif?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Open Source<\/span><br \/>\n            <span class=\"tag\">Developer Tools<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u5d4c\u5165\u5f0f\u5f00\u53d1 MCP\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">AI\u7f16\u7801\u4ee3\u7406\u7ea0\u9519<\/span><br \/>\n            <span class=\"tag\">\u6570\u636e\u624b\u518c\u68c0\u7d22<\/span><br \/>\n            <span class=\"tag\">\u5bc4\u5b58\u5668\u6620\u5c04\u67e5\u8be2<\/span><br \/>\n            <span class=\"tag\">\u5f00\u6e90\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u534f\u8bae\u6587\u6863<\/span><br \/>\n            <span class=\"tag\">\u82af\u7247\u6587\u6863<\/span><br \/>\n            <span class=\"tag\">\u77e5\u8bc6\u5e93\u5373\u670d\u52a1<\/span><br \/>\n            <span class=\"tag\">Coding Agent<\/span><br \/>\n            <span class=\"tag\">\u5d4c\u5165\u5f0fAI<\/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\u89e3\u51b3\u5d4c\u5165\u5f0fAI\u5e7b\u89c9\uff08\u9519\u8bef\u503c\u7f16\u8bd1\u901a\u8fc7\u4f46\u786c\u4ef6\u5f02\u5e38\uff09\u7684\u4ef7\u503c\u3002\u5173\u952e\u95ee\u9898\uff1a\u5982\u4f55\u7ba1\u7406\u591a\u7248\u672c\u6570\u636e\u624b\u518c\u5dee\u5f02\uff1f\u6587\u6863\u8986\u76d6\u662f\u9884\u8bbe\u7cbe\u9009\u5e93\u8fd8\u662f\u652f\u6301\u4efb\u610fPDF\uff1f\u5b98\u65b9\u56de\u5e94\u4e3a\u6301\u7eed\u6309\u9700\u6269\u7d22\u5f15\u7528\u6237\u7279\u5b9a\u6280\u672f\u6808\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                ByteAsk\u5207\u5165\u4e86\u4e00\u4e2a\u6781\u5176\u7cbe\u51c6\u4e14\u9ad8\u7ea7\u7684\u75db\u70b9\uff1a\u5927\u6a21\u578b\u5728\u5d4c\u5165\u5f0f\u9886\u57df\u7684\u201c\u81ea\u4fe1\u80e1\u8bcc\u201d\u3002\u5176\u6838\u5fc3\u4ef7\u503c\u4e0d\u5728\u4e8e\u201c\u66f4\u806a\u660e\u7684AI\u201d\uff0c\u800c\u5728\u4e8e\u7528MCP\u534f\u8bae\u5c06AI\u7684\u63a8\u7406\u80fd\u529b\u4e0e\u53d7\u63a7\u3001\u53ef\u5f15\u7528\u7684\u77e5\u8bc6\u5e93\u89e3\u8026\u3002\u8fd9\u672c\u8d28\u4e0a\u662f\u5bf9\u201cAGI\u5e7b\u89c9\u201d\u7684\u52a1\u5b9e\u6295\u964d\u548c\u5de5\u7a0b\u5316\u8865\u6551\u2014\u2014\u627f\u8ba4\u6a21\u578b\u65e0\u6cd5\u8bb0\u4f4f\u6240\u6709\u6280\u672f\u7ec6\u8282\uff0c\u8f6c\u800c\u7528\u5de5\u5177\u94fe\u7684\u786e\u5b9a\u6027\u6765\u5bf9\u51b2\u5176\u4e0d\u786e\u5b9a\u6027\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4ece\u6280\u672f\u89d2\u5ea6\u770b\uff0c\u8be5\u4ea7\u54c1\u505a\u4e86\u4e24\u4ef6\u806a\u660e\u7684\u4e8b\uff1a\u4e00\u662f\u6784\u5efa\u4e86\u5e26\u9875\u53f7\u5f15\u7528\u7684\u7eb5\u6df1\u6587\u6863\u8bed\u6599\u5e93\uff0c\u8fd9\u5728\u9700\u8981\u7cbe\u786e\u5230\u4f4d\u7684\u5d4c\u5165\u5f0f\u9886\u57df\u662f\u9ec4\u91d1\u6807\u51c6\uff1b\u4e8c\u662f\u5f00\u653e\u4e86\u201c\u8bf7\u6c42\u6587\u6863\u201d\u63a5\u53e3\uff0c\u8ba9\u7528\u6237\u81ea\u5df1\u5582\u6570\u636e\u5f62\u6210\u95ed\u73af\u3002\u4f46\u95ee\u9898\u4e5f\u5728\u4e8e\u6b64\uff1a\u201c\u6ca1\u6709\u5339\u914d\u65f6\u8bda\u5b9e\u56de\u7b54\u201d\u7684\u524d\u63d0\u662f\u4f60\u7684\u8bed\u6599\u5e93\u8db3\u591f\u6df1\u3001\u8db3\u591f\u5168\u3002\u76ee\u524d\u4ea7\u54c1\u8986\u76d6\u4e86\u4e3b\u6d41\u534f\u8bae\u548c\u6570\u636e\u624b\u518c\uff0c\u4f46\u9762\u5bf9\u56fd\u4ea7\u82af\u7247\u3001\u5c0f\u4f17\u5de5\u4e1a\u534f\u8bae\u6216\u5382\u5546\u6bcf\u5e74\u66f4\u65b0\u7684\u79c1\u6709\u4e0d\u900f\u660e\u6587\u6863\u65f6\uff0c\u8986\u76d6\u7387\u5f88\u5feb\u4f1a\u53d8\u6210\u74f6\u9888\uff0c\u6700\u7ec8\u4ecd\u9700\u7528\u6237\u81ea\u5efa\u79c1\u6709\u5316\u7684\u4e0a\u4e0b\u6587\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u5546\u4e1a\u4e0a\uff0c\u8fd9\u662f\u5178\u578b\u7684\u201c\u811a\u624b\u67b6\u201d\u6a21\u5f0f\u2014\u2014\u6838\u5fc3\u529f\u80fd\u5f00\u6e90\u5438\u5f15\u7528\u6237\uff0c\u4f46\u9ad8\u8d28\u91cf\u3001\u4f4e\u5ef6\u8fdf\u7684\u79c1\u6709\u6587\u6863\u7d22\u5f15\u548c\u5b9a\u5236\u5316\u670d\u52a1\u624d\u662f\u6f5c\u5728\u4ed8\u8d39\u70b9\u3002\u5bf9\u4e8e\u52a8\u8f84\u6570\u4ebf\u7ea7\u5e02\u573a\u7684\u56fa\u4ef6\u5f00\u53d1\u548c\u81ea\u52a8\u5316\u6d4b\u8bd5\u573a\u666f\uff0c\u80fd\u51cf\u5c11\u4e00\u6b21\u56e0\u5bc4\u5b58\u5668\u503c\u9519\u8bef\u5bfc\u81f4\u7684\u786c\u4ef6\u9a8c\u8bc1\u8fd4\u5de5\uff0cROI\u5c31\u8fdc\u8d85\u7528\u6237\u7684\u5fc3\u7406\u9884\u671f\u3002\u4e0d\u8fc7\uff0c\u5b83\u76ee\u524d\u53ea\u662f\u201c\u6700\u597d\u7684\u7ea0\u9519\u5458\u201d\uff0c\u800c\u4e0d\u662f\u201c\u6700\u597d\u7684\u5de5\u7a0b\u5e08\u201d\u2014\u2014\u8981\u771f\u6b63\u8d62\u5f97\u4e25\u8083\u5f00\u53d1\u8005\u4fe1\u4efb\uff0c\u8fd8\u9700\u8981\u4e0eCICD\u6d41\u7a0b\u3001\u7248\u672c\u7ba1\u7406\u7cfb\u7edf\u7684\u66f4\u6df1\u5ea6\u7ed1\u5b9a\u3002\u4e00\u53e5\u8bdd\uff1a\u9879\u76ee\u521b\u610f\u6ee1\u5206\uff0c\u4f46\u5de5\u7a0b\u5316\u843d\u5730\u624d\u662f\u4fee\u7f57\u573a\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\">ByteAsk Embedded MCP &#8211; Open Source<\/span>\n                <\/div>\n<div class=\"comment-content\">Your coding agent guesses at the datasheet &#8211; confidently, and wrong. ByteAsk Embedded MCP hands Claude Code, Codex, Cursor and any MCP client the exact, page-cited fact instead: register maps, protocol function codes, SCPI commands, standard thresholds, datasheet specs. Verbatim from the source, or an honest &#8220;no confident match&#8221; &#8211; never a guessed register value. Built from a research effort to measure and close the gap on C\/C++ coding agents. Open source.<\/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>Anirudha here, co-founder of ByteAsk.<\/p>\n<\/p>\n<p>We kept hitting the same failure: ask Claude Code or Cursor for a register reset value, a Modbus function code, or an SCPI command, and it answers confidently &#8211; and wrong. The model doesn&#8217;t know the contents of a paywalled standard or a specific datasheet but nothing in its training data tells it to admit that.<\/p>\n<\/p>\n<p>So we built a benchmark to measure it. On real embedded questions from production tickets, frontier models scored 47\u201361%. Then we gave an older, smaller, cheaper model one tool &#8211; an MCP that retrieves the exact, page-cited spec &#8211; and it hit 89%. The variable was context, not model size.<\/p>\n<\/p>\n<p>ByteAsk Embedded MCP is that tool, open-sourced. It hands any MCP client page-cited text from embedded\/firmware reference docs &#8211; or an honest &#8220;no match.&#8221; Never a guessed register value.<\/p>\n<\/p>\n<p>One line to try it in Claude Code (no key, no signup):<\/p>\n<p>claude mcp add &#8211;transport http byteask-embedded-docs <a href=\"https:\/\/mcp.byteask.ai\/mcp\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/mcp.byteask.ai\/mcp<\/a><\/p>\n<\/p>\n<ul>\n<li>\n<p>\ud83d\udcca <strong>Benchmark suite<\/strong> (full reproduction + difficulty ranking):<\/p>\n<p><a href=\"http:\/\/github.com\/ByteAsk\/C-CppBench\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">github.com\/ByteAsk\/C-CppBench<\/a><\/p>\n<\/li>\n<li>\n<p>\ud83d\udd0c <strong>Embedded MCP server<\/strong>:<\/p>\n<p><a href=\"http:\/\/github.com\/ByteAsk\/ByteAsk-Embedded-MCP\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">github.com\/ByteAsk\/ByteAsk-Embedded-MCP<\/a><\/p>\n<\/li>\n<li>\n<p>\ud83d\ude80 <strong>Try it live<\/strong>:<\/p>\n<p><a href=\"http:\/\/docs.byteask.ai\/embedded\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">docs.byteask.ai\/embedded<\/a><\/p>\n<\/li>\n<\/ul>\n<p>If it&#8217;s missing a doc you need, there&#8217;s a request_document tool &#8211; tell us and we&#8217;ll index it. Genuine ask for the firmware folks here: what spec does your agent hallucinate most?<\/p>\n<p>That&#8217;s literally our next ingestion target.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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! \ud83d\ude80<\/p>\n<p>This is a very real problem. In embedded work, a hallucinated value can look perfectly valid until hardware starts behaving strangely.<\/p>\n<p>I like the \u201cpage-cited fact or no confident match\u201d approach. Curious how you handle version differences between datasheets, especially when vendors update register maps or SDK docs over 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<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>The hallucination problem in embedded is nastier than in most other domains &#8211; a wrong register value or SCPI command compiles fine and fails silently, and you spend hours wondering why the peripheral isn&#8217;t responding. Page-cited facts + honest &#8220;no match&#8221; response is exactly the right design philosophy. Curious how coverage works &#8211; is it a curated catalog of specific chips\/instruments, or can you point it at any datasheet PDF and get coverage for whatever you&#8217;re working with?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Pratyush here from ByteAsk \ud83d\udc4b<\/p>\n<p>One of the most common questions we get is: <strong>&#8220;Does it support my stack?&#8221;<\/strong><\/p>\n<p>Today, ByteAsk indexes a broad set of engineering documentation across embedded systems, industrial protocols, power systems, FPGA, x86, networking, market data, and hardware datasheets including standards, vendor manuals, SDKs, and reference guides.<\/p>\n<\/p>\n<p>If your docs aren&#8217;t covered yet, let us know. We&#8217;re constantly expanding the corpus based on user requests. We&#8217;d love to hear what technologies you&#8217;re building with.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/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\/5DFCM4J25VVZJA\" class=\"app-title\">AI-native &#8211; Continuous Planning Platform<\/a><\/p>\n<div class=\"one-liner\">Product Market Fitment, to PRDs, work breakdown &#038; assignment<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">13<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>NexuSync\u662f\u4e00\u4e2aAI\u539f\u751f\u6301\u7eed\u89c4\u5212\u5e73\u53f0\uff0c\u901a\u8fc7\u7edf\u4e00\u4e0a\u4e0b\u6587\u6570\u636e\u6e56\uff0c\u89e3\u51b3\u56e2\u961f\u5728\u8f6f\u4ef6\u4ea4\u4ed8\u4e2d\u56e0\u4fe1\u606f\u5b64\u5c9b\u3001\u624b\u52a8\u540c\u6b65\u5bfc\u81f4\u7684\u89c4\u5212\u6df7\u4e71\u4e0e\u6548\u7387\u4f4e\u4e0b\u95ee\u9898\uff0c\u5c06\u51b3\u7b56\u5230\u884c\u52a8\u7684\u8fc7\u7a0b\u81ea\u52a8\u5316\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\/2a1e83ce-1aca-45e6-a38f-1382d9063453.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=6t4fZuobdwk\"><source src=\"https:\/\/www.youtube.com\/watch?v=6t4fZuobdwk\" 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\/6ad83091-eccb-400d-9990-38140b608758.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\/2f07433a-e3c0-4605-a4b1-22f8c5380633.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\/8d4f4c0e-8ca5-440c-a798-50e03a370b3c.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\/3558a528-ad42-4e71-bcd1-84fcbbc58bce.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\/bad0b2ff-4160-49f0-a9a5-2f8031b21f22.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\/dcc3f9a6-5ea7-4776-891a-5b2a6345f58c.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\/2eb13073-6127-427a-a124-2a0b4ab6a66e.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\/ba88b700-a602-49aa-af3c-c21ee8ba1342.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\/68a206be-d7ae-4889-93f7-1906e8fec037.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\/90315da5-5c6b-4a4a-b037-02304118fb4b.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\">Task Management<\/span><br \/>\n            <span class=\"tag\">Meetings<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">AI\u539f\u751f\u89c4\u5212\u5e73\u53f0<\/span><br \/>\n            <span class=\"tag\">\u6301\u7eed\u89c4\u5212<\/span><br \/>\n            <span class=\"tag\">\u4ea7\u54c1-\u5e02\u573a\u5339\u914d<\/span><br \/>\n            <span class=\"tag\">\u5de5\u4f5c\u5206\u89e3<\/span><br \/>\n            <span class=\"tag\">\u4efb\u52a1\u5206\u914d<\/span><br \/>\n            <span class=\"tag\">\u654f\u6377\u5f00\u53d1<\/span><br \/>\n            <span class=\"tag\">\u4f1a\u8bae\u667a\u80fd<\/span><br \/>\n            <span class=\"tag\">\u8de8\u56e2\u961f\u534f\u4f5c<\/span><br \/>\n            <span class=\"tag\">\u9879\u76ee\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">\u7cfb\u7edf\u667a\u80fd<\/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>\u5f53\u524d\u8bc4\u8bba\u4ec5\u6709\u521b\u59cb\u4eba\u81ea\u8ff0\uff0c\u65e0\u7528\u6237\u63d0\u95ee\u6216\u5efa\u8bae\u3002\u6709\u6548\u8bc4\u8bba\u7f3a\u5931\uff0c\u540e\u7eed\u9700\u5173\u6ce8\u7528\u6237\u5bf9\u201c\u4ece\u4f1a\u8bae\u5230\u5de5\u5355\u81ea\u52a8\u8f6c\u5316\u201d\u662f\u5426\u5b9e\u7528\uff0c\u4ee5\u53caAI\u89c4\u5212\u80fd\u5426\u771f\u6b63\u66ff\u4ee3\u4eba\u5de5\u540c\u6b65\u7684\u53cd\u9988\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                NexuSync \u7684\u7acb\u610f\u4ee4\u4eba\u773c\u524d\u4e00\u4eae\u2014\u2014\u5b83\u5207\u4e2d\u7684\u662f\u5f53\u524dAI\u70ed\u6f6e\u4e0b\u7684\u4e00\u4e2a\u771f\u5b9e\u75db\u70b9\uff1aAI\u5199\u4ee3\u7801\u98de\u8d77\uff0c\u4f46\u4eba\u62c9\u9f50\u9700\u6c42\u3001\u62c6\u4efb\u52a1\u3001\u540c\u6b65\u72b6\u6001\u8fd8\u662f\u9760\u65e0\u6570\u4e2a\u4f4e\u6548\u7684\u4f1a\u8bae\u548c\u8868\u683c\u3002\u5176\u6838\u5fc3\u5356\u70b9\u201cSystem of Intelligence\u201d\u5c06\u788e\u7247\u5316\u51b3\u7b56\u4e0a\u4e0b\u6587\uff08PRD\u3001\u4f1a\u8bae\u7eaa\u8981\u3001\u4efb\u52a1\uff09\u6574\u5408\u4e3a\u7edf\u4e00\u6570\u636e\u6e56\uff0c\u5e76\u7531AI\u81ea\u52a8\u63a8\u5bfc\u4e0b\u4e00\u6b65\u884c\u52a8\uff0c\u672c\u8d28\u4e0a\u662f\u5728\u5c1d\u8bd5\u91cd\u6784\u201c\u89c4\u5212\u2014\u6267\u884c\u201d\u7684\u53cd\u9988\u95ed\u73af\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u9700\u8b66\u60d5\uff0c\u4ea7\u54c1\u76ee\u524d\u4ec5\u653e\u51fa\u201cPrism\u201d\u6a21\u5757\u5e76\u83b713\u7968\uff0c\u7528\u6237\u53cd\u9988\u51e0\u4e4e\u7a7a\u767d\u3002\u5b83\u5ba3\u79f0\u201c\u96f6\u5f00\u53d1\u62db\u8058\u201d\u6784\u5efa\u81ea\u8eab\u5e73\u53f0\u66f4\u50cf\u8425\u9500\u5671\u5934\uff0c\u5b9e\u9645\u4e0a\u6df7\u6dc6\u4e86\u201c\u7528AI\u81ea\u52a8\u5316\u5df2\u77e5\u6d41\u7a0b\u201d\u4e0e\u201cAI\u81ea\u4e3b\u51b3\u7b56\u590d\u6742\u672a\u77e5\u9700\u6c42\u201d\u7684\u5dee\u8ddd\u3002\u771f\u6b63\u7684\u4ef7\u503c\u9a8c\u8bc1\u70b9\u5728\u4e8e\uff1a\u5f53\u8de8\u56e2\u961f\u4f9d\u8d56\u3001\u4e1a\u52a1\u76ee\u6807\u51b2\u7a81\u3001\u8d44\u6e90\u74f6\u9888\u51fa\u73b0\u65f6\uff0cAI\u7684\u201c\u89c4\u5212\u5efa\u8bae\u201d\u662f\u964d\u4f4e\u4e86\u8ba4\u77e5\u8d1f\u8377\uff0c\u8fd8\u662f\u53d8\u6210\u4e86\u9700\u8981\u4eba\u5de5\u6838\u9a8c\u7684\u989d\u5916\u566a\u97f3\uff1f\u53e6\u5916\uff0c\u5de5\u5177\u58f0\u79f0\u201c\u7cfb\u7edf\u667a\u80fd\u201d\u5374\u5c1a\u672a\u5c55\u793a\u6df1\u5165\u7684\u6570\u636e\u5b89\u5168\u4e0e\u6743\u9650\u9694\u79bb\u65b9\u6848\uff0c\u5bf9\u4e8e\u4f01\u4e1a\u7ea7\u7528\u6237\u800c\u8a00\uff0c\u6570\u636e\u6e56\u7684\u7edf\u4e00\u5e26\u6765\u7684\u5408\u89c4\u98ce\u9669\u53ef\u80fd\u6bd4\u6548\u7387\u6536\u76ca\u66f4\u68d8\u624b\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4e00\u53e5\u8bdd\u8bf4\u900f\uff1aNexuSync\u7684\u613f\u666f\u5f88\u6027\u611f\uff0c\u4f46\u76ee\u524d\u66f4\u50cf\u4e00\u4e2a\u91cd\u65b0\u5305\u88c5\u7684\u201cAI\u7248Jira+Notion\u201d\u3002\u5b83\u662f\u5426\u771f\u7684\u80fd\u98a0\u8986\u8f6f\u4ef6\u4ea4\u4ed8\u7ba1\u7406\uff0c\u53d6\u51b3\u4e8e\u5176AI\u5728\u590d\u6742\u771f\u5b9e\u4e1a\u52a1\u573a\u666f\u4e2d\u7684\u201c\u63a8\u7406\u8d28\u91cf\u201d\u80fd\u5426\u8d85\u8d8a\u4eba\u5de5\u4f1a\u8bae\u8fd9\u4e2a\u7b28\u529e\u6cd5\uff0c\u800c\u8fd9\u6070\u6070\u662f\u6700\u96be\u5543\u7684\u9aa8\u5934\u3002\u5efa\u8bae\u56e2\u961f\u5148\u62ff\u5177\u4f53\u6848\u4f8b\u8bc1\u660eAI\u62c6\u89e3\u7684\u4efb\u52a1\u6bd4\u4f18\u79c0\u7684\u9879\u76ee\u7ecf\u7406\u66f4\u7cbe\u51c6\uff0c\u5426\u5219\u5bb9\u6613\u6ca6\u4e3a\u53c8\u4e00\u4e2a\u6f02\u4eae\u4f46\u6ca1\u4eba\u6562\u7528\u7684\u6f14\u793a\u5de5\u5177\u3002\n            <\/p>\n<\/p><\/div>\n<div class=\"comments-section\">\n<div class=\"comments-toggle\">\n            <span>\u67e5\u770b\u539f\u59cb\u4fe1\u606f<\/span><br \/>\n            <span class=\"toggle-arrow\">\u25bc<\/span>\n        <\/div>\n<div class=\"comments-container\">\n<div class=\"comment-item\">\n<div class=\"comment-header\">\n                    <span class=\"comment-author\">AI-native &#8211; Continuous Planning Platform<\/span>\n                <\/div>\n<div class=\"comment-content\">During my HBS program, We set out to bridge a major organizational productivity gap, realizing that even with AI building at light speed, teams still sync at human speed trapped in siloed planning, scattered sources of truth, and endless meetings. That&#8217;s why we built nexusync.io. We shifted from messy, manual workflows to an AI-native &#8220;System of Intelligence&#8221;. By consolidating all context into a central lake, we went from vision to action with 0 hires moving lightning fast.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hey hunters! \ud83d\udc4b Faizan, Nabil and Ubaid here, we are founder of NexuSync.(Pronounced as Nexus Sync)<\/p>\n<p>The story behind nexusync.io started during my time at Harvard Business School. I was working on an organizational challenge to bridge a massive productivity gap in software delivery. We threw everything at it including the latest AI coding assistants, but we hit a frustrating wall: AI builds at light speed, but teams still sync at human speed.  We realized that giving developers AI tools didn\u2019t fix the real issue. <\/p>\n<p>Teams were still buried under<br \/>\n1. Planning in Silos &#8211; Product managers, engineers, and AI agents lacking full, unified context.<br \/>\n2. Scattered Sources of Truth &#8211; Critical alignment decisions, PRDs, and meeting action items scattered across disconnected tools.<br \/>\n3. Manual Overhead &#8211; High manual effort spent creating work items, updating tasks, and chasing status updates.  <\/p>\n<p>Everyone was busy building, but nobody had true clarity on why or what was actually being decided. That\u2019s why we built NexuSync- The first AI-Native Continuous Planning Platform that acts as the &#8220;System of Intelligence&#8221; for your entire SDLC. We built our own platform with zero developer hires, operating purely as architects and reviewers because we let our context lake do the heavy lifting.  <\/p>\n<p>We are launching today on product hunt with Prism (our live module) and giving you a look at what&#8217;s next:<\/p>\n<p>\ud83d\udd2e Prism (Live): Continuous planning, hyper-agile sprint automation, and deep meeting intelligence with live multi-lingual transcripts that turn conversations into structured work items instantly.  <\/p>\n<p>\ud83c\udf05 Horizon (Next 3\u20136 Months): Cross-team coordination, AI-driven dependency management, and automated resource balancing.  <\/p>\n<p>\ud83c\udf0c Vision (Next 6\u20139 Months): Portfolio-level mastery, C-suite OKR tracking, and executive visibility across all strategic initiatives. <\/p>\n<p>Whether you are a startup scaling fast or an enterprise navigating complex agile workflows, NexuSync is designed to eliminate the management chaos so you can execute at the speed of thought.<\/p>\n<p>Product Market Fitment aka Product Discovery Demo &#8211; <a href=\"https:\/\/youtu.be\/4j8YxxU990U\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/youtu.be\/4j8YxxU990U<\/a><\/p>\n<p>Continuous Planning Demo &#8211; <a href=\"https:\/\/youtu.be\/AFL59P-dSFE\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/youtu.be\/AFL59P-dSFE<\/a><\/p>\n<p>We&#8217;d love to get your feedback, answer any questions, and hear how your teams are tackling the AI-era productivity crisis! What does your planning stack look like today?<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>4<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/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\/HBIHOG4KZSA2TL\" class=\"app-title\">FocusStack<\/a><\/p>\n<div class=\"one-liner\">Easiest way to understand, improve and protect your focus<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">13<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>FocusStack\u662f\u4e00\u6b3e\u4e3b\u6253\u201c\u5148\u805a\u7126\u3001\u540e\u8ffd\u8e2a\u201d\u7684\u672c\u5730\u5316\u65f6\u95f4\u7ba1\u7406\u5de5\u5177\uff0c\u9488\u5bf9\u72ec\u7acb\u5f00\u53d1\u8005\u3001\u81ea\u7531\u804c\u4e1a\u8005\u7b49\u521b\u4f5c\u8005\u7684\u65e5\u5e38\u75db\u70b9\uff0c\u901a\u8fc7\u4e00\u952e\u542f\u52a8\u5de5\u4f5c\u73af\u5883\u3001\u81ea\u52a8\u8ffd\u8e2a\u5e94\u7528\u548c\u7f51\u7ad9\u3001\u4e3b\u52a8\u63a8\u9001\u5e72\u6270\u63d0\u9192\uff0c\u5e2e\u52a9\u7528\u6237\u5728\u6267\u884c\u4efb\u52a1\u65f6\u4fdd\u6301\u4e13\u6ce8\uff0c\u800c\u975e\u4e8b\u540e\u770b\u62a5\u8868\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\/978b7944-d089-42eb-a8e0-fb253f273326.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\/e4327386-b3ce-40a2-ad40-f67b6351f6fe.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\/c28c4508-0e09-49ab-ac80-de7005cfe743.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\/1e685fa4-2094-4ffb-89e7-883d4cac60da.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\/c30dcf2f-b18e-410d-8c3e-116e93ec8c35.jpeg?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<div class=\"media-item-wrapper\">\n                <video class=\"media-content\" poster=\"https:\/\/ph-files.imgix.net\/3a014b68-2286-44e1-a5ae-ac9b2cf40038.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/zI5r9ePfC88?si=z3Fqs_LA1VzFiTik\"><source src=\"https:\/\/youtu.be\/zI5r9ePfC88?si=z3Fqs_LA1VzFiTik\" 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\">Time Tracking<\/span><br \/>\n            <span class=\"tag\">SaaS<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u4e13\u6ce8\u529b\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">\u65f6\u95f4\u8ffd\u8e2a<\/span><br \/>\n            <span class=\"tag\">\u672c\u5730\u4f18\u5148<\/span><br \/>\n            <span class=\"tag\">\u4e70\u65ad\u5236<\/span><br \/>\n            <span class=\"tag\">\u9632\u5e72\u6270<\/span><br \/>\n            <span class=\"tag\">Mac\u6548\u7387\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u5f00\u53d1\u8005\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u4efb\u52a1\u7ba1\u7406<\/span><br \/>\n            <span class=\"tag\">\u65e0\u8ba2\u9605<\/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\u8ffd\u8e2a\u529f\u80fd\uff0c\u4f46\u8d28\u7591\u5176\u4e0eRescueTime\u3001Rize\u7b49\u540c\u8d28\u5316\u3002\u6838\u5fc3\u8ffd\u95ee\u96c6\u4e2d\u5728\u201c\u9632\u5e72\u6270\u201d\u5982\u4f55\u843d\u5730\uff1a\u662f\u89c4\u5219\u89e6\u53d1\u8fd8\u662f\u6a21\u5f0f\u5b66\u4e60\uff1f\u80fd\u5426\u8bc6\u522b\u7ec8\u7aef\u5185\u591a\u9879\u76ee\u5207\u6362\uff1f\u521b\u59cb\u56de\u5e94\u8be5\u529f\u80fd\u5c1a\u5904\u89c4\u5219\u9a71\u52a8\u9636\u6bb5\uff0c\u4e14\u65e0\u4e91\u6570\u636e\u65e0\u6cd5\u5b66\u4e60\uff1b\u5df2\u5b8c\u6210\u201c\u65e0\u53d6\u6d88\u6309\u94ae\u7684\u9a9a\u6270\u63d0\u9192\u201d\u8bbe\u8ba1\uff0c\u4ee5\u6469\u64e6\u4fc3\u53cd\u601d\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                FocusStack\u7684\u5b9a\u4f4d\u5de7\u5999\u907f\u5f00\u4e86\u201c\u65f6\u95f4\u8ffd\u8e2a\u201d\u8fd9\u4e00\u7ea2\u6d77\u7684\u6b63\u9762\u4ea4\u950b\uff0c\u8f6c\u800c\u5f3a\u8c03\u201c\u4fdd\u62a4\u4e13\u6ce8\u201d\u7684\u884c\u4e3a\u8bbe\u8ba1\u3002\u5176\u6838\u5fc3\u4ef7\u503c\u5e76\u975e\u6570\u636e\u53ef\u89c6\u5316\u2014\u2014\u8fd9\u662fRescueTime\u65e9\u5df2\u505a\u597d\u7684\u4e8b\u2014\u2014\u800c\u662f\u7528\u201c\u4e00\u5f00\u5373\u6218\u201d\u7684\u5de5\u4f5c\u6d41\u542f\u52a8\u548c\u201c\u4e0d\u70b9\u51fb\u5c31\u4e0d\u6d88\u5931\u201d\u7684\u5e72\u6270\u63d0\u9192\u6765\u964d\u4f4e\u542f\u52a8\u963b\u529b\u4e0e\u5207\u6362\u60ef\u6027\u3002\u8fd9\u6070\u6070\u662f\u7edd\u5927\u591a\u6570\u6548\u7387\u5de5\u5177\u7684\u8f6f\u808b\uff1a\u5b83\u4eec\u53ea\u8d1f\u8d23\u8bb0\u5f55\u95ee\u9898\uff0c\u5374\u4e0d\u6562\u771f\u6b63\u4ecb\u5165\u7528\u6237\u7684\u9009\u62e9\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u4ece\u8bc4\u8bba\u4e2d\u53ef\u4ee5\u770b\u51fa\uff0c\u8fd9\u6b3e\u4ea7\u54c1\u76ee\u524d\u8fd8\u505c\u7559\u5728\u201c\u76f4\u89c9\u9a71\u52a8\u201d\u9636\u6bb5\u3002\u201c\u9632\u5e72\u6270\u201d\u673a\u5236\u7684\u786c\u4f24\u5728\u4e8e\u7f3a\u5c11\u4e0a\u4e0b\u6587\u611f\u77e5\u80fd\u529b\u3002\u521b\u59cb\u4eba\u5728\u56de\u590d\u4e2d\u5766\u8bda\u201c\u6ca1\u6709\u7528\u6237\u6570\u636e\u6765\u8bad\u7ec3\u667a\u80fd\u7cfb\u7edf\u201d\uff0c\u800c\u624b\u52a8\u8bbe\u5b9a\u201c\u4e13\u6ce8\u9879\u76ee\u201d\u5bf9\u591a\u7ebf\u7a0b\u5de5\u4f5c\u8005\uff08\u5982\u540c\u65f6\u5f00\u542f\u591a\u4e2a\u7ec8\u7aef\u7a97\u53e3\u7684\u5f00\u53d1\u8005\uff09\u57fa\u672c\u65e0\u6548\u3002\u8fd9\u610f\u5473\u7740FocusStack\u76ee\u524d\u7684\u7ade\u4e89\u529b\u66f4\u591a\u4f9d\u8d56\u201c\u672c\u5730\u5316+\u7ec8\u8eab\u4e70\u65ad\u201d\u7684\u5546\u4e1a\u6a21\u578b\uff0c\u800c\u4e0d\u662f\u4e0d\u53ef\u66ff\u4ee3\u7684\u6280\u672f\u58c1\u5792\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u503c\u5f97\u5173\u6ce8\u7684\u662f\u201c\u6545\u610f\u8ba9\u63d0\u793a\u65e0\u6cd5\u5173\u95ed\u201d\u7684\u8bbe\u8ba1\u7406\u5ff5\u2014\u2014\u5b83\u628a\u201c\u5173\u6ce8\u5f53\u4e0b\u201d\u4ece\u4e00\u4e2a\u613f\u671b\u53d8\u6210\u4e86\u4e00\u4e2a\u5fae\u75db\u82e6\u7684\u9009\u62e9\u3002\u8fd9\u79cd\u8ba4\u77e5\u6469\u64e6\u6bd4\u4efb\u4f55AI\u9884\u6d4b\u90fd\u66f4\u76f4\u63a5\uff0c\u4f46\u4e5f\u66f4\u5bb9\u6613\u8ba9\u7528\u6237\u53cd\u611f\u3002\u603b\u4f53\u6765\u770b\uff0cFocusStack\u662f\u4e00\u6b3e\u9488\u5bf9\u201c\u5355\u7ebf\u7a0b\u521b\u4f5c\u8005\u201d\u7684\u7cbe\u81f4\u5de5\u5177\uff0c\u5bf9\u90a3\u4e9b\u540c\u65f6\u51b2\u950b\u5728\u4e94\u4e2a\u6218\u573a\u7684\u4eba\u6765\u8bf4\uff0c\u5b83\u8fd8\u9700\u8981\u8bc1\u660e\u81ea\u5df1\u4e0d\u662f\u53e6\u4e00\u4efd\u6f02\u4eae\u62a5\u544a\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\">FocusStack<\/span>\n                <\/div>\n<div class=\"comment-content\">FocusStack is for people who make things. Start a focus session, name it after your task, pick the project. FocusStack tracks every app and site automatically, blocks what derails you, and nudges you back when you drift. One click launches your whole work setup at once. At the end of the day, you see exactly where your focus went and what each project actually cost you. No cloud. No subscription. It runs on your machine. Pay once, keep it for life.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>I\u2019ve tried RescueTime and Rize before and that\u2019s very close to what you\u2019ve build. What made you decide to build another productivity tracker, and what\u2019s the biggest thing users seem to prefer about FocusStack?<\/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\/@dhruv_garg2\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@dhruv_garg2<\/a>&nbsp;<br \/>Honestly, RescueTime and Rize are both great products.<\/p>\n<p>The reason we started building FocusStack wasn\u2019t because we thought tracking was broken. It was because even after seeing where our time went, we still struggled to stay focused.<\/p>\n<p>Most people already know they\u2019re getting distracted. The hard part is catching it while it\u2019s happening.<\/p>\n<p>That\u2019s why we\u2019re spending a lot of time on focus sessions, distraction blocking, nudges, and helping people protect their attention, not just measure 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\">Hey Product Hunt \ud83d\udc4b<\/p>\n<p>I&#8217;m the founder of FocusStack.<\/p>\n<p>I built it for myself.<\/p>\n<p>Every morning I sit down with one thing in my head. Ship a feature. Write a proposal. Fix a bug. One task. One intention. I wanted a tool that respected that.<\/p>\n<p>Not a score. Not a report. The work itself.<\/p>\n<p>So this is how my day works now.<\/p>\n<p>I open FocusStack. I start a focus session. I name it after what I&#8217;m doing. I pick the project. And I begin.<\/p>\n<p>From that moment, everything is handled. Every app. Every site. Every minute. Tracked quietly, without me lifting a finger.<\/p>\n<p>If I drift, I get nudged back. If I open my tools but forgot to start, I get reminded. If I need to code, one click launches everything. Cursor. GitHub. Terminal. Browser. All of it. Together.<\/p>\n<p>At the end of the day, I don&#8217;t wonder where the hours went. I know. Per task. Per project. With clarity.<\/p>\n<p>I didn&#8217;t set out to build another productivity app. I was using separate tools for tracking, blocking, and starting my work. Three tools for one day. That felt wrong. So I built one thing that matched how I actually work.<\/p>\n<p>Two principles guided everything.<\/p>\n<p>Your data stays on your machine. Local first. No cloud. No account. Your day belongs to you.<\/p>\n<p>You pay once. No subscription. Buy it once. Own it for life.<\/p>\n<p>FocusStack is for people who make things. Indie hackers. Freelancers. Founders working alone. People who sit down each day with something real to build.<\/p>\n<p>If that&#8217;s you, I&#8217;d love your honest take.<\/p>\n<p>I&#8217;m here all day. Ask me anything. \ud83d\ude4f<\/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 auto app\/site tracking + task-naming flow is clean, but this is one of the most crowded segments in productivity software &#8211; RescueTime, Toggl Track, Serene, Cold Turkey all compete here. The &#8220;nudge back when you drift&#8221; feature is the interesting bit &#8211; is that pattern detection or rule-based? That&#8217;s the one thing that could actually carve out real differentiation from the existing tools. What does that look like in practice?<\/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;<br \/>Fair point. Tracking is a commodity feature now.<\/p>\n<p>Our focus is less on tracking and more on helping users start and stay in a workflow through Focus Stacks. The nudges are currently simple and rule-based, we\u2019re still learning what works before adding more complexity.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Love that this is built from personal frustration rather than a feature checklist. The &#8220;I built it for myself&#8221; origin story usually leads to something that actually works. The piece I find most interesting is the automatic tracking &#8211; most time tools fail because you have to manually start\/stop things and that overhead itself breaks focus. Does the nudge system have any learning to it, or does it work off fixed rules? Curious how it handles the false positives where you legitimately need to switch context.<\/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;I myself had that problem of forgetting to start and stop the timers. I introduced focus apps and distraction app system. When user opens focus apps like Cursor, Figma User gets nudge to start the timer. When user gets distracted or is finished with the work and goes to watch let&#8217;s say YouTube which is in distraction list user will get that nudge. <br \/>Right now, we did not that feedback to make nudging system smarter. We will try something. There is one problem we don&#8217;t have any user data as all things stay local. If you can suggest any system for it, we would be happy.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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>Tracking is easy. How does FocusStack actually help me stay focused?<\/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\/@pixelite2030\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@pixelite2030<\/a>&nbsp;Honestly, tracking was the easy part.<\/p>\n<p>The harder problem was figuring out how to stop myself from getting distracted in the first place \ud83d\ude05<\/p>\n<p>That\u2019s why we added things like focus sessions, distraction blocking, and nudges when you start drifting away from what you\u2019re supposed to be doing.<\/p>\n<p>The tracking helps you see the problem. The rest helps you do something about it.<\/p>\n<p>At least that\u2019s what we found while building and using it ourselves.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hey FocusStack folks, great work. I have a few questions and requests.<\/p>\n<\/p>\n<p>Here&#8217;s kind of how my days look. I&#8217;m usually working on multiple projects at once. And for each project I might have like 3 to 5 Claude Code sessions open at the same time. So for, say, Project A, one session is me doing research, another one I&#8217;m running experiments, and a third one I&#8217;m actually building something. They&#8217;re all terminals; they all look identical from the outside, but in my head they&#8217;re very different threads of the same thing.<\/p>\n<\/p>\n<p>And then somewhere in the middle of all that I&#8217;ll start getting pulled toward Project B because something there needs attention too. And suddenly I&#8217;ve lost the thread on Project A without even realising I drifted.<\/p>\n<\/p>\n<p>So I&#8217;m genuinely curious: when I have those 5 Claude Code instances all open for Project A, is there a way to tell FocusStack that all of these belong to the same project even though they&#8217;re technically the same app? Like can I assign individual terminal windows to a project?<\/p>\n<\/p>\n<p>And the second thing, when I do start sliding into Project B territory, how does FocusStack actually catch that, given I will be doing that in the terminal itself? And honestly a nudge is a good start, but I know myself well enough to know I&#8217;ll dismiss it and keep going lol. Is there anything more forceful it can do? Even something like making me click through a &#8220;Are you sure you&#8217;re switching projects?&#8221; kind of moment would help. Just enough friction to make it a conscious decision rather than an accidental one.<\/p>\n<\/p>\n<p>Would love to know how deep it can actually go here.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@suraj_prasad9\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@suraj_prasad9<\/a>&nbsp;<br \/>Thanks for the thoughtful question. This is actually a workflow we\u2019ve heard from quite a few developers.<\/p>\n<\/p>\n<p>Right now, FocusStack tracks apps and websites, but it doesn\u2019t distinguish between individual terminal windows or Claude Code sessions. So if you have five Claude Code instances open for Project A, FocusStack will currently see them all as the same application. For project tracking, you manually select the active project, which works well as long as you\u2019re not actively switching between multiple projects at the same time. In your workflow, where different terminal sessions represent different threads of work, we definitely understand that the current model falls short.<\/p>\n<\/p>\n<p>As for catching when you drift from Project A into Project B, FocusStack doesn\u2019t yet have visibility into that level of context inside terminal sessions, so it won\u2019t automatically know you\u2019ve switched projects. That\u2019s something we\u2019re very interested in exploring because it\u2019s a real problem for developers.<\/p>\n<\/p>\n<p>On the nudges side, we had the exact same concern you mentioned: most people just dismiss notifications without thinking. That\u2019s actually why our distraction nudges don\u2019t have a dismiss button. If you\u2019re in a focus session and open something distracting, the notification is intentionally a little annoying \ud83d\ude05. The only way to get rid of it is to end the focus session, which feels like a much bigger decision and creates a small moment of friction. We don\u2019t have a dedicated \u201cAre you sure you\u2019re switching projects?\u201d flow today, but I really like that idea. It fits closely with how we think about focus: not preventing people from switching, but making sure the switch is intentional rather than something that happens on autopilot.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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\/KBLOF425I3IM7B\" class=\"app-title\">Auto-Immo PRO 2.0<\/a><\/p>\n<div class=\"one-liner\">Turn property scans into plans, 3D, reports &#038; estimates<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">13<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Auto-Immo PRO 2.0 \u8ba9\u623f\u4ea7\u4e13\u4e1a\u4eba\u58eb\u7528 iPhone\/iPad \u626b\u63cf\u5373\u53ef\u4e00\u952e\u751f\u6210\u5e73\u9762\u56fe\u30013D \u6a21\u578b\u3001\u70ed\u6210\u50cf\u62a5\u544a\u548c\u88c5\u4fee\u4f30\u4ef7\uff0c\u7ec8\u7ed3\u4e86\u624b\u5de5\u6d4b\u91cf\u3001\u624b\u7ed8\u8349\u56fe\u3001\u91cd\u590d\u5f55\u5165\u6587\u6863\u7684\u7e41\u7410\u6d41\u7a0b\u3002<\/div>\n<p>    <!-- \u5a92\u4f53\u753b\u5eca\uff1a\u5305\u542b\u89c6\u9891\u548c\u591a\u5f20\u56fe\u7247 --><\/p>\n<div class=\"media-gallery\">\n<div class=\"media-item-wrapper\">\n                <img decoding=\"async\" src=\"https:\/\/ph-files.imgix.net\/04e3a792-c31a-4fae-aee1-c48b1502bc40.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\/e01b0b2d-30a1-4c6a-8d67-525830a4f449.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\/c7d7bd02-f938-4b58-acb3-be6a8f8a3c3f.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\/ac36a4d6-e778-4229-926e-d21611128a91.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\/dfadeaf8-6a9c-43e2-82fe-89e4aeb5373e.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\/4e1bb94e-ff7d-49aa-8b6e-77b36d4268b3.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\/e4121b8d-f39c-4b75-8b02-f4dc3692bd2a.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\/9de12ce1-4598-441d-bd59-5b002144ea6e.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\/19a2f3ce-b1ef-4b55-a03b-489e51fc7f2d.jpeg?auto=format\" data-video-url=\"https:\/\/www.youtube.com\/watch?v=vYc2TyCXLDU\"><source src=\"https:\/\/www.youtube.com\/watch?v=vYc2TyCXLDU\" 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\">Construction<\/span><br \/>\n            <span class=\"tag\">3D Modeling<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u623f\u4ea7\u79d1\u6280<\/span><br \/>\n            <span class=\"tag\">LiDAR \u626b\u63cf<\/span><br \/>\n            <span class=\"tag\">3D \u5efa\u6a21<\/span><br \/>\n            <span class=\"tag\">\u5e73\u9762\u56fe\u751f\u6210<\/span><br \/>\n            <span class=\"tag\">\u88c5\u4fee\u4f30\u4ef7<\/span><br \/>\n            <span class=\"tag\">\u70ed\u6210\u50cf\u68c0\u6d4b<\/span><br \/>\n            <span class=\"tag\">\u84dd\u7259\u6d4b\u8ddd<\/span><br \/>\n            <span class=\"tag\">BIM<\/span><br \/>\n            <span class=\"tag\">\u623f\u4ea7\u6587\u6863\u81ea\u52a8\u5316<\/span><br \/>\n            <span class=\"tag\">\u4e13\u4e1a\u6d4b\u91cf\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>\u521b\u59cb\u4eba Nicolas \u8868\u793a\u65e7\u7248\u6d4b\u91cf\u3001\u62cd\u7167\u3001\u753b\u56fe\u3001\u505a\u8868\u5168\u9760\u624b\u5de5\u3002V2 \u7684\u6838\u5fc3\u7406\u5ff5\u662f\u8ba9\u626b\u63cf\u8f93\u51fa\u201c\u53ef\u7528\u6570\u636e\u201d\uff0c\u800c\u975e\u4ec5\u662f\u89c6\u89c9\u6a21\u578b\u3002\u4ed6\u671f\u671b\u7528\u6237\u53cd\u9988\u54ea\u9879\u529f\u80fd\u66f4\u80fd\u5d4c\u5165\u73b0\u6709\u5de5\u4f5c\u6d41\uff0c\u4ee5\u8fdb\u4e00\u6b65\u51cf\u5c11\u624b\u52a8\u64cd\u4f5c\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                Auto-Immo PRO 2.0 \u7684\u7280\u5229\u4e4b\u5904\u5728\u4e8e\uff0c\u5b83\u6ca1\u628a\u81ea\u5df1\u505a\u6210\u53c8\u4e00\u4e2a\u201c\u9177\u70ab\u4f46\u9e21\u808b\u201d\u7684 AR \u770b\u623f\u5e94\u7528\uff0c\u800c\u662f\u76f4\u6233\u4e86\u5f53\u8981\u66ff\u4ee3\u201c\u5377\u5c3a+\u7eb8\u7b14+CAD\u8f6f\u4ef6\u201d\u8fd9\u4e2a\u957f\u8fbe\u51e0\u5341\u5e74\u7684\u7ebf\u4e0b\u4f5c\u4e1a\u94fe\u6761\u3002\u5b83\u5c06 LiDAR\u3001\u84dd\u7259\u6fc0\u5149\u6d4b\u8ddd\u3001FLIR \u70ed\u6210\u50cf\u8fd9\u4e9b\u6210\u719f\u7684\u786c\u4ef6\u80fd\u529b\uff0c\u6253\u5305\u6210\u4e00\u4e2a\u201c\u6570\u636e\u81ea\u52a8\u5316\u524d\u7aef\u201d\uff0c\u6838\u5fc3\u4ef7\u503c\u4e0d\u5728\u6e32\u67d3\u6548\u679c\uff0c\u800c\u5728\u201c\u4e00\u6b21\u626b\u63cf\uff0c\u591a\u7aef\u4ea7\u51fa\u201d\u3002\n            <\/p>\n<p class=\"ai-content\">\n                13 \u7968\u7684\u4e0a\u7ebf\u6210\u7ee9\u6bd4\u8f83\u5e73\u6de1\uff0c\u4fa7\u9762\u53cd\u6620\u5b83\u6ca1\u6709\u5f88\u5f3a\u7684\u75c5\u6bd2\u5f0f\u4f20\u64ad\u5c5e\u6027\u2014\u2014\u6bd5\u7adf\u5de5\u5177\u5c5e\u6027\u8d8a\u5f3a\uff0c\u76ee\u6807\u7528\u6237\u8d8a\u7a84\u3002\u4f46\u4ea7\u54c1\u903b\u8f91\u672c\u8eab\u975e\u5e38\u95ed\u73af\uff1a\u4ece\u626b\u63cf \u2192 \u540e\u671f\u4fee\u6b63\uff08\u53ef\u7f16\u8f91\u6d4b\u91cf\u503c\uff09\u2192 \u9a8c\u8bc1\uff08\u84dd\u7259\u6fc0\u5149\u56de\u67e5\uff09\u2192 \u589e\u503c\u8f93\u51fa\uff08\u5e73\u9762\u56fe\u30013D\u3001\u70ed\u6210\u50cf\u62a5\u544a\u3001\u4f30\u4ef7\u5355\uff09\u3002\u8fd9\u79cd \u201c\u91c7\u96c6-\u9a8c\u8bc1-\u8f93\u51fa\u201d \u7684\u95ed\u73af\uff0c\u5bf9\u88c5\u4fee\u7a3d\u67e5\u3001\u4fdd\u9669\u5b9a\u635f\u3001\u5c0f\u578b\u5de5\u7a0b\u76d1\u7406\u8fd9\u7c7b\u9ad8\u9891\u9700\u8981\u201c\u73b0\u573a\u53d6\u8bc1+\u6587\u6863\u51fa\u5dee\u201d\u7684\u82e6\u6d3b\uff0c\u662f\u521a\u9700\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u6f5c\u5728\u7684\u63a3\u8098\u5728\u4e8e\uff1a1\uff09\u4e25\u91cd\u4f9d\u8d56 iOS \u7684 LiDAR \u786c\u4ef6\uff0c\u9650\u5236\u4e86\u7528\u6237\u57fa\u6570\uff1b2\uff09\u8de8\u5e73\u53f0\u534f\u540c\uff08Windows \u7aef\u67e5\u770b\u3001\u4e91\u7aef\u534f\u4f5c\uff09\u82e5\u7f3a\u5931\uff0c\u53ea\u80fd\u7b97\u534a\u4e2a\u201c\u5de5\u4f5c\u6d41\u201d\uff1b3\uff09FLIR \u70ed\u6210\u50cf\u6570\u636e\u7684\u6df1\u5ea6\u5904\u7406\uff08\u5982\u81ea\u52a8\u6807\u6ce8\u95ee\u9898\u533a\u57df\u3001\u667a\u80fd\u98ce\u9669\u8bc4\u4f30\uff09\u82e5\u53ea\u662f\u201c\u53e0\u52a0\u663e\u793a\u201d\uff0c\u4ef7\u503c\u4f1a\u6253\u6298\u3002\u5982\u679c\u5b83\u540e\u7eed\u80fd\u5728\u5bfc\u51fa\u683c\u5f0f\u7684\u5f00\u653e\u6027\uff08\u76f4\u63a5\u5bf9\u63a5\u4e3b\u6d41 BIM \u6216\u7b97\u91cf\u8f6f\u4ef6\uff09\u3001\u4ee5\u53ca\u591a\u4eba\u534f\u4f5c\u7684\u6570\u636e\u7248\u672c\u7ba1\u7406\u4e0a\u53d1\u529b\uff0c\u6709\u53ef\u80fd\u4ece\u201c\u597d\u7528\u7684\u4e2a\u4eba\u5de5\u5177\u201d\u8fdb\u5316\u6210\u201c\u8f7b\u91cf\u7ea7\u7684\u9879\u76ee\u7ea7\u6570\u636e\u4e2d\u53f0\u201d\u3002\u76ee\u524d\u770b\uff0c\u5b83\u66f4\u50cf\u4e2a\u7cbe\u81f4\u7684\u201c\u72ec\u7acb\u7248\u795e\u5668\u201d\uff0c\u8ddd\u79bb\u98a0\u8986\u884c\u4e1a\u7684\u5e73\u53f0\u91ce\u5fc3\u8fd8\u6709\u4e00\u6bb5\u8def\u8981\u8d70\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\">Auto-Immo PRO 2.0<\/span>\n                <\/div>\n<div class=\"comment-content\">Auto-Immo PRO V2 goes beyond floor plans. It combines LiDAR property scanning, editable measurements, Bluetooth laser verification and FLIR thermal documentation in one professional workflow. Users can turn a scan into floor plans, wall elevations, 3D models, reports and renovation estimates, then export everything for real estate, renovation, inspection and construction use.<\/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>I\u2019m Nicolas, founder of Auto-Immo.<\/p>\n<p>I built Auto-Immo because property documentation is still far too manual. Professionals often still measure rooms, take photos, write notes, make sketches, and then recreate everything later for reports, estimates or client files.<\/p>\n<p>Auto-Immo PRO V2 turns an iPhone\/iPad scan into usable property data, not just a visual model.<\/p>\n<p>With V2, users can scan a property with LiDAR, edit measurements afterwards, verify dimensions with Bluetooth laser meters, add FLIR thermal documentation, generate floor plans, wall elevations, 3D models, reports and renovation estimates, then export everything for professional use.<\/p>\n<p>The goal is simple: less manual measuring, less admin work, and better property data.<\/p>\n<p>I\u2019d love your feedback on one thing:<\/p>\n<p>What feature would make Auto-Immo even better in your workflow? <\/p>\n<p>Thanks for checking it out!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/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\/FWKG3IGTN7GUT6\" class=\"app-title\">AnimateCaptions<\/a><\/p>\n<div class=\"one-liner\">Add Animated Captions To Videos for TikTok, Reels &#038; Shorts<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">11<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>AnimateCaptions \u662f\u4e00\u6b3e\u4e13\u6ce8\u4e3a\u77ed\u89c6\u9891\uff08TikTok\u3001Reels\u3001Shorts\uff09\u63d0\u4f9b\u9010\u5b57\u52a8\u753b\u5b57\u5e55\u7684\u5de5\u5177\uff0c\u65e0\u9700\u590d\u6742\u7f16\u8f91\u8f6f\u4ef6\u6216\u989d\u5916AI\u79ef\u5206\uff0c\u65e8\u5728\u89e3\u51b3\u521b\u4f5c\u8005\u5728\u5b57\u5e55\u5236\u4f5c\u4e2d\u201c\u529f\u80fd\u81c3\u80bf\u3001\u6536\u8d39\u4e0d\u900f\u660e\u201d\u7684\u75db\u70b9\uff0c\u5b9e\u73b0\u9ad8\u6548\u3001\u4f4e\u6210\u672c\u7684\u5b57\u5e55\u52a8\u6001\u5316\u6e32\u67d3\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\/5a12f1b5-6b0c-4ce9-825d-0e7366634826.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\/aebd3d8e-90cb-4462-b745-78bf7bb5bfb3.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\">Social media marketing<\/span><br \/>\n            <span class=\"tag\">Video<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u52a8\u753b\u5b57\u5e55<\/span><br \/>\n            <span class=\"tag\">\u77ed\u89c6\u9891\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u9010\u5b57\u5b57\u5e55<\/span><br \/>\n            <span class=\"tag\">TikTok\u5b57\u5e55<\/span><br \/>\n            <span class=\"tag\">\u89c6\u9891\u7f16\u8f91<\/span><br \/>\n            <span class=\"tag\">\u5185\u5bb9\u521b\u4f5c<\/span><br \/>\n            <span class=\"tag\">\u9884\u8bbe\u6837\u5f0f<\/span><br \/>\n            <span class=\"tag\">\u5728\u7ebf\u6e32\u67d3<\/span><br \/>\n            <span class=\"tag\">\u4ed8\u8d39\u8ba2\u9605<\/span><br \/>\n            <span class=\"tag\">\u81ea\u5a92\u4f53\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\u80af\u5b9a\u9010\u5b57\u65f6\u95f4\u8f74\u540c\u6b65\u662f\u6838\u5fc3\u6280\u672f\u96be\u70b9\uff0cMr Beast\u7b49\u9884\u8bbe\u98ce\u683c\u662f\u6709\u6548\u6377\u5f84\u3002\u5efa\u8bae\u589e\u52a0\u57fa\u4e8e\u8bed\u4e49\u6216\u91cd\u70b9\u7684\u81ea\u5b9a\u4e49\u989c\u8272\u89c4\u5219\uff0c\u4ee5\u5b9e\u73b0\u521b\u4f5c\u8005\u4e2a\u4eba\u89c6\u89c9\u8bed\u8a00\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                AnimateCaptions \u7684\u5b9a\u4f4d\u975e\u5e38\u7cbe\u51c6\uff1a\u5728\u201c\u5bcc\u7f16\u8f91\u5668\u201d\u548c\u201cAI\u79ef\u5206\u9677\u9631\u201d\u4e4b\u95f4\u5207\u51fa\u4e86\u4e00\u4e2a\u8f7b\u91cf\u7ea7\u3001\u56fa\u5b9a\u8d39\u7387\u7684\u201c\u5b57\u5e55\u5f15\u64ce\u201d\u8d5b\u9053\u3002\u5b83\u7684\u771f\u6b63\u4ef7\u503c\u4e0d\u5728\u4e8e\u201c32\u79cd\u6837\u5f0f\u201d\u7684\u6570\u91cf\u5806\u780c\uff0c\u800c\u5728\u4e8e\u201c\u9010\u5b57\u65f6\u95f4\u8f74\u201d\u8fd9\u4e00\u6838\u5fc3\u4f53\u9a8c\u7684\u673a\u68b0\u5316\u7cbe\u5ea6\u2014\u2014Deepgram Nova-3\u7684\u8f6c\u5f55+Remotion\u7684\u670d\u52a1\u7aef\u6e32\u67d3\uff0c\u76f4\u63a5\u89e3\u51b3\u4e86\u5176\u4ed6\u5de5\u5177\u56e0\u672c\u5730\u6027\u80fd\u6216AI\u5f02\u6b65\u5904\u7406\u5bfc\u81f4\u7684\u5b57\u5e55\u6f02\u79fb\u3001\u5361\u987f\u95ee\u9898\uff0c\u8fd9\u5bf9\u4e8e\u4f9d\u8d56\u5feb\u8bed\u901f\u3001\u5f3a\u8282\u594f\uff08\u5982Mr Beast\u98ce\u683c\uff09\u7684\u77ed\u5185\u5bb9\u800c\u8a00\u662f\u81f4\u547d\u5356\u70b9\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u4ece\u8bc4\u8bba\u53cd\u9988\u770b\uff0c\u5176\u529f\u80fd\u8fb9\u754c\u4e5f\u6697\u793a\u4e86\u5929\u82b1\u677f\uff1a\u5982\u679c\u53ea\u6ee1\u8db3\u4e8e\u201c\u5957\u6a21\u677f\u201d\uff0c\u5b83\u5f88\u5feb\u4f1a\u88ab\u7ade\u54c1\u8ddf\u8fdb\u7684AI\u81ea\u52a8\u5316\uff08\u5982\u81ea\u52a8\u6839\u636e\u8bed\u901f\u8c03\u6574\u52a8\u753b\u8282\u594f\uff09\u6240\u66ff\u4ee3\u3002\u76ee\u524d\u7f3a\u4e4f\u5bf9\u201c\u4f5c\u8005\u6027\u201d\u7684\u6df1\u5ea6\u652f\u6301\u2014\u2014\u4f8b\u5982\u57fa\u4e8e\u8bed\u4e49\u6216\u60c5\u611f\u7684\u81ea\u5b9a\u4e49\u989c\u8272\u89c4\u5219\uff0c\u8fd9\u6070\u6070\u662f\u5934\u90e8\u521b\u4f5c\u8005\u8131\u79bb\u201c\u540c\u8d28\u5316\u201d\u58c1\u5792\u7684\u5173\u952e\u3002$7.99\/mo\u7684\u5b9a\u4ef7\u867d\u6bd4\u7ade\u54c1\u4f4e\uff0c\u5374\u7565\u663e\u5c34\u5c2c\uff1a\u4e2a\u4eba\u521b\u4f5c\u8005\u53ef\u80fd\u76f4\u63a5\u7528\u514d\u8d39\u7248\u591f\u7528\uff0c\u800c\u673a\u6784\u7528\u6237\u9700\u8981\u56e2\u961f\u534f\u4f5c\u3001\u6279\u91cf\u5904\u7406\u7b49\u201c\u91cd\u529f\u80fd\u201d\u65f6\uff0c\u8be5\u4ef7\u683c\u53c8\u663e\u5f97\u592a\u4fbf\u5b9c\uff08\u6697\u793a\u529f\u80fd\u6df1\u5ea6\u4e0d\u8db3\uff09\u3002\u6700\u7ec8\uff0cAnimateCaptions \u7684\u4ef7\u503c\u53d6\u51b3\u4e8e\u5b83\u80fd\u5426\u4ece\u201c\u6362\u58f3\u7684\u9010\u5b57\u5b57\u5e55\u673a\u201d\u8fdb\u5316\u6210\u201c\u57fa\u4e8e\u5185\u5bb9\u8bed\u4e49\u7684\u52a8\u753b\u5f15\u64ce\u201d\uff0c\u5426\u5219\u5728AI\u5feb\u901f\u8fdb\u5316\u7684\u6d6a\u6f6e\u4e2d\uff0c\u5b83\u7684\u6280\u672f\u62a4\u57ce\u6cb3\u5e76\u4e0d\u6bd4\u7ade\u4e89\u5bf9\u624b\u7684\u8ba2\u9605\u8d39\u66f4\u539a\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\">AnimateCaptions<\/span>\n                <\/div>\n<div class=\"comment-content\">Upload a clip, pick from 32+ animated word-by-word caption styles (Mr Beast, Hormozi, and more), and export a full-res burned-in MP4. No editing software, no AI-credit upcharges. Free to start, plans from $7.99\/mo \u2014 cheaper than Submagic or Captions.ai.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hey hunters \ud83d\udc4b<br \/>\nI built AnimateCaptions because every caption tool I tried either buried the actual captioning feature under a bloated editor, or nickel-and-dimed me with AI credits on top of a subscription.<br \/>\nSo this does one thing: animated, word-by-word captions for short-form video.<\/p>\n<p>Upload an .mp4\/.mov, transcribed via Deepgram Nova-3 (36+ languages, auto-detect)<br \/>\nPick from 32+ animated styles \u2014 Beast, Hormozi, Pulse, Crafty, Lyric, karaoke-style, and more<br \/>\nFine-tune font, color, stroke, shadow, and per-line position in the in-browser editor<br \/>\nExport full-resolution, rendered server-side with Remotion \u2014 no quality loss, no local install<\/p>\n<p>Free to start, no credit card. Paid plans from $7.99\/mo if you need longer clips or team features \u2014 still cheaper than Submagic ($19\/mo) or Captions.ai ($24.99\/mo).<br \/>\nWould love feedback from anyone who clips podcasts, edits Shorts, or runs a content agency \u2014 especially on the preset styles and editor flow. \ud83d\ude4f<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Animated captions are basically table stakes for short-form now &#8211; if your video doesn&#8217;t have them, watch time tanks. What I like about this approach is the word-by-word timing &#8211; that&#8217;s actually the hard part to get right, and most tools that claim to do it either drift out of sync or butcher the pacing on fast speech.<\/p>\n<\/p>\n<p>The Mr Beast \/ Hormozi style presets are a smart shortcut &#8211; those are the formats people actually want to replicate. One thing I&#8217;d love to see: custom color rules based on sentiment or emphasis, not just preset styles. That&#8217;s the next level for creators who want their own visual language.<\/p>\n<\/p>\n<p>$7.99\/mo vs Submagic is a strong position. Congrats on the launch!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<article class=\"app-card\">\n<div class=\"app-header\">\n<div class=\"rank\">#18<\/div>\n<div class=\"title-group\">\n            <a href=\"https:\/\/www.producthunt.com\/r\/4YAZV77UQEAEOU\" class=\"app-title\">Free YouTube Thumbnail Maker<\/a><\/p>\n<div class=\"one-liner\">Make a custom YouTube thumbnail for free.<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">11<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Free YouTube Thumbnail Maker \u662f\u4e00\u6b3e\u514d\u767b\u5f55\u3001\u514d\u4ed8\u8d39\u7684\u5728\u7ebf\u5de5\u5177\uff0c\u5e2e\u52a9\u521b\u4f5c\u8005\u5feb\u901f\u901a\u8fc7\u6a21\u677f\u751f\u621016\uff1a9\u7684YouTube\u7f29\u7565\u56fe\uff0c\u89e3\u51b3\u5236\u4f5c\u4f18\u8d28\u7f29\u7565\u56fe\u8017\u65f6\u6216\u9700\u4e13\u4e1a\u8bbe\u8ba1\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\/6aeca4d4-768d-4cdd-a605-8bb8638f207c.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\/abb39194-f79e-4d95-8ca2-37539b4b97f7.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\/5e854239-d08a-4578-8ef3-39978bbb77b3.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\/c3977ca4-c882-41d4-a165-36c5321e6d61.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\/4c449dc0-7070-4adb-ad8e-3666266a2b1c.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\">Productivity<\/span><br \/>\n            <span class=\"tag\">YouTube<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">YouTube\u7f29\u7565\u56fe\u5236\u4f5c<\/span><br \/>\n            <span class=\"tag\">\u514d\u8d39\u6a21\u677f<\/span><br \/>\n            <span class=\"tag\">\u5728\u7ebf\u8bbe\u8ba1\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u56fe\u7247\u7f16\u8f91<\/span><br \/>\n            <span class=\"tag\">16\uff1a9\u6bd4\u4f8b<\/span><br \/>\n            <span class=\"tag\">\u89c6\u9891\u521b\u4f5c\u8005<\/span><br \/>\n            <span class=\"tag\">\u65e0\u6ce8\u518c<\/span><br \/>\n            <span class=\"tag\">\u6a21\u677f\u9884\u89c8<\/span><br \/>\n            <span class=\"tag\">\u5feb\u8282\u594f\u5236\u4f5c<\/span><br \/>\n            <span class=\"tag\">JPG\u4e0b\u8f7d<\/span>\n        <\/div>\n<div class=\"reviews-section\">\n<div class=\"review-item\">\n<div class=\"review-bubble\">\n                <strong>\u7528\u6237\u8bc4\u8bba\u6458\u8981\uff1a<\/strong>\u7528\u6237\u8ba4\u53ef\u5176\u65e0\u9700\u6ce8\u518c\u3001\u65e0\u5197\u4f59\u529f\u80fd\u3001\u6a21\u677f\u5236\u4f5c\u5feb\u901f\u7684\u7279\u70b9\u3002\u4f46\u76ee\u524d\u53cd\u9988\u4ec5\u4e00\u6761\uff0c\u65e0\u5177\u4f53\u95ee\u9898\u6216\u6539\u8fdb\u5efa\u8bae\uff0c\u5e0c\u671b\u4f5c\u8005\u80fd\u9488\u5bf9\u6a21\u677f\u6837\u5f0f\u548c\u8d28\u91cf\u591a\u6536\u96c6\u610f\u89c1\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                \u4ece\u4ea7\u54c1\u672c\u8d28\u770b\uff0cFree YouTube Thumbnail Maker\u5207\u4e2d\u4e86\u4e00\u4e2a\u9ad8\u9891\u521a\u9700\u2014\u2014YouTube\u521b\u4f5c\u8005\u5bf9\u7f29\u7565\u56fe\u7684\u4f9d\u8d56\u4e0e\u4e13\u4e1a\u8bbe\u8ba1\u95e8\u69db\u4e4b\u95f4\u7684\u843d\u5dee\u300211\u7968\u7684\u5fae\u5f31\u58f0\u91cf\u8bf4\u660e\u5b83\u5c1a\u672a\u51fa\u5708\uff0c\u4f46\u201dNo signup\u201c\u548c\u201dsuper FAST\u201c\u662f\u5176\u6838\u5fc3\u7ade\u4e89\u529b\uff0c\u76f4\u51fb\u7528\u6237\u5bf9\u6548\u7387\u4e0e\u9690\u79c1\u7684\u654f\u611f\u70b9\u3002\u7136\u800c\uff0c\u4ea7\u54c1\u76ee\u524d\u8fc7\u4e8e\u201c\u6734\u7d20\u201d\uff1a\u4ec5\u63d0\u4f9b\u6a21\u677f\u66ff\u6362\u3001\u6587\u5b57\u548c\u989c\u8272\u8c03\u6574\uff0c\u7f3a\u4e4fAI\u8f85\u52a9\u751f\u6210\u3001\u667a\u80fd\u62a0\u56fe\u3001\u6570\u636e\u9a71\u52a8\u7684A\/B\u6d4b\u8bd5\u9884\u89c8\u7b49\u529f\u80fd\uff0c\u5728\u7ade\u4e89\u6fc0\u70c8\u7684\u7f29\u7565\u56fe\u5de5\u5177\u7ea2\u6d77\u4e2d\uff0c\u8fd9\u66f4\u50cf\u4e00\u4e2a\u201cMVP\u201d\uff08\u6700\u5c0f\u53ef\u884c\u4ea7\u54c1\uff09\u800c\u975e\u6210\u719f\u4ea7\u54c1\u3002\u771f\u6b63\u4ef7\u503c\u4e0d\u5728\u4e8e\u53d6\u4ee3Canva\u6216Photoshop\uff0c\u800c\u5728\u4e8e\u4e3a\u8f7b\u5ea6\u7528\u6237\u63d0\u4f9b\u4e00\u4e2a\u96f6\u8d1f\u62c5\u7684\u201c\u6700\u540e\u4e00\u5206\u949f\u6551\u6025\u5de5\u5177\u201d\u3002\u6a21\u677f\u7684\u8d28\u91cf\u548c\u591a\u6837\u6027\u662f\u751f\u547d\u7ebf\uff0c\u82e5\u4ec5\u9760\u9759\u6001\u6846\u67b6\u586b\u5145\uff0c\u7528\u6237\u7559\u5b58\u5c06\u662f\u5de8\u5927\u6311\u6218\u3002\u5efa\u8bae\u5bf9\u6807VistaCreate\u7b49\u8f7b\u91cf\u5de5\u5177\uff0c\u5f3a\u5316\u201c\u4e0e\u6807\u9898\u8054\u52a8\u9884\u89c8\u201d\u8fd9\u4e00\u72ec\u7279\u5356\u70b9\uff0c\u5e76\u5f15\u5165\u793e\u533a\u6a21\u7248\u8d21\u732e\u673a\u5236\uff0c\u5426\u5219\u5f88\u5bb9\u6613\u88ab\u5927\u5382\u540c\u8d28\u5316\u529f\u80fd\u6df9\u6ca1\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\">Free YouTube Thumbnail Maker<\/span>\n                <\/div>\n<div class=\"comment-content\">Create a custom YouTube thumbnail for free. Choose editable templates, replace images, edit text, adjust colors, download a 16:9 JPG, and preview it with your title.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Pick a template, edit the text, replace the images, download the thumbnail, and preview it with your title before uploading.<\/p>\n<p>No signup, no bloat, just super FAST viral thumbnail creation.<\/p>\n<p>Would love honest feedback, especially on the templates!<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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\/EKGMBIOZMG6DHH\" class=\"app-title\">PDFTools<\/a><\/p>\n<div class=\"one-liner\">Free, private PDF editor \u2014 no server uploads, no signup<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">10<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>PDFTools\u662f\u4e00\u6b3e\u5b8c\u5168\u5728\u6d4f\u89c8\u5668\u7aef\u8fd0\u884c\u7684\u514d\u8d39PDF\u7f16\u8f91\u5de5\u5177\u96c6\uff0c\u65e0\u9700\u4e0a\u4f20\u6587\u4ef6\u5230\u670d\u52a1\u5668\uff0c\u89e3\u51b3\u4e86\u7528\u6237\u5904\u7406\u654f\u611f\u6587\u6863\uff08\u5982\u5408\u540c\u3001\u7a0e\u52a1\u8868\uff09\u65f6\u7684\u9690\u79c1\u6cc4\u9732\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\/f1d58612-ceb0-4cab-8690-dce1a01e6a5b.jpeg?auto=format\" data-video-url=\"https:\/\/youtu.be\/NvfUGFLHn2w\"><source src=\"https:\/\/youtu.be\/NvfUGFLHn2w\" 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\/f8421009-70c5-4a25-b743-19b84f8ca1b2.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\/e234df35-22ba-43d2-918f-184cb7664bc0.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\/1b318492-49e2-4e2d-89ec-23ff36bb9060.png?auto=format\" class=\"media-content\" alt=\"\u4ea7\u54c1\u56fe\u7247\">\n            <\/div>\n<\/p><\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">Productivity<\/span><br \/>\n            <span class=\"tag\">SaaS<\/span><br \/>\n            <span class=\"tag\">Artificial Intelligence<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">PDF\u7f16\u8f91\u5668<\/span><br \/>\n            <span class=\"tag\">\u5728\u7ebf\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u9690\u79c1\u4fdd\u62a4<\/span><br \/>\n            <span class=\"tag\">\u5ba2\u6237\u7aef\u5904\u7406<\/span><br \/>\n            <span class=\"tag\">\u6587\u4ef6\u8f6c\u6362<\/span><br \/>\n            <span class=\"tag\">\u6587\u6863\u5b89\u5168<\/span><br \/>\n            <span class=\"tag\">\u514d\u8d39\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u6d4f\u89c8\u5668\u7aef<\/span><br \/>\n            <span class=\"tag\">\u6570\u636e\u5b89\u5168<\/span><br \/>\n            <span class=\"tag\">\u65e0\u670d\u52a1\u5668\u4e0a\u4f20<\/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\u6d4f\u89c8\u5668\u7aef\u5904\u7406\u5bf9\u9690\u79c1\u654f\u611f\u6587\u6863\u7684\u4ef7\u503c\uff0c\u4f46\u6307\u51fa\u5e02\u573a\u7ade\u54c1\uff08\u5982Stirling-PDF\u3001ILovePDF\uff09\u5df2\u6709\u591a\u5e74\u4f18\u52bf\uff1b\u90e8\u5206\u7528\u6237\u8be2\u95ee\u6570\u636e\u662f\u5426\u4f1a\u79bb\u5f00\u8bbe\u5907\uff0c\u4ee5\u53ca\u5de5\u5177\u80fd\u5426\u8f6c\u6362\u56fe\u7247\u4e3aPDF\uff1b\u53e6\u6709\u7528\u6237\u53cd\u9988HTML\u8f6cPDF\u529f\u80fd\u65e0\u6cd5\u4e0b\u8f7d\u6587\u4ef6\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                PDFTools\u5728\u201c\u9690\u79c1\u4f18\u5148\u201d\u8fd9\u4e00\u7ec6\u5206\u8d5b\u9053\u4e0a\u5207\u4e2d\u4e86\u771f\u5b9e\u75db\u70b9\u2014\u2014\u5bf9\u4e8e\u5f8b\u5e08\u3001\u8d22\u52a1\u4eba\u5458\u6216\u81ea\u7531\u804c\u4e1a\u8005\uff0c\u5c06\u5408\u540c\u3001\u7a0e\u5355\u4e0a\u4f20\u81f3\u7b2c\u4e09\u65b9\u670d\u52a1\u5668\u786e\u5b9e\u5b58\u5728\u5fc3\u7406\u4e0e\u6cd5\u5f8b\u9690\u60a3\u3002\u5176\u5b8c\u5168\u5ba2\u6237\u7aef\u5904\u7406\uff08\u4f9d\u8d56WASM\u8fd0\u884cpdf-lib\u3001Tesseract.js\u7b49\u6280\u672f\uff09\u7684\u6280\u672f\u8def\u7ebf\uff0c\u4e5f\u786e\u4fdd\u4e86\u6587\u4ef6\u5728\u7406\u8bba\u5c42\u9762\u4e0d\u4f1a\u5916\u6cc4\uff0c\u8fd9\u6bd4\u201c\u58f0\u79f0\u5220\u9664\u670d\u52a1\u5668\u6587\u4ef6\u201d\u7684\u7ade\u54c1\u66f4\u900f\u660e\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u7136\u800c\uff0c\u6b63\u5982\u8bc4\u8bba\u6240\u6307\u51fa\uff0c\u8fd9\u5e76\u975e\u84dd\u6d77\u3002PDF24\u3001ILovePDF\u3001Stirling-PDF\u7b49\u5df2\u51ed\u501f\u591a\u5e74\u79ef\u7d2f\u7684SEO\u548c\u7528\u6237\u4e60\u60ef\u6784\u7b51\u4e86\u58c1\u5792\uff0c\u201c40+\u5de5\u5177\u201d\u4ec5\u4ec5\u662f\u5165\u573a\u5238\u3002PDFTools\u76ee\u524d\u6700\u5927\u7684\u95ee\u9898\u5728\u4e8e\uff1a\u5b83\u89e3\u51b3\u4e86\u9690\u79c1\u7126\u8651\uff0c\u5374\u6ca1\u6709\u89e3\u51b3\u201c\u4e3a\u4ec0\u4e48\u8981\u5207\u6362\u201d\u7684\u6838\u5fc3\u4f53\u9a8c\u95ee\u9898\u3002\u7528\u6237\u4e0d\u4f1a\u56e0\u4e3a\u201c\u4e0d\u4f20\u670d\u52a1\u5668\u201d\u5c31\u629b\u5f03\u4e00\u4e2a\u7528\u4e86\u4e09\u5e74\u7684\u5de5\u5177\uff0c\u9664\u975e\u5b83\u5728\u5e38\u7528\u529f\u80fd\uff08\u5982\u538b\u7f29\u8d28\u91cf\u3001OCR\u7cbe\u5ea6\u3001\u5927\u6587\u4ef6\u5904\u7406\u901f\u5ea6\uff09\u4e0a\u660e\u663e\u4f18\u4e8e\u5bf9\u624b\u3002\u8bc4\u8bba\u4e2d\u201cHTML\u8f6cPDF\u5931\u8d25\u201d\u7684\u53cd\u9988\uff0c\u6070\u6070\u66b4\u9732\u4e86\u5176\u5de5\u5177\u8d28\u91cf\u5c1a\u672a\u8fbe\u5230\u4e13\u4e1a\u7ea7\u2014\u2014\u9690\u79c1\u505a\u5f97\u518d\u597d\uff0c\u5de5\u5177\u82e5\u4e0d\u7a33\u5b9a\uff0c\u7528\u6237\u53ea\u4f1a\u7528\u811a\u6295\u7968\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u6b64\u5916\uff0c\u201cAI\u201d\u6807\u7b7e\u5671\u5934\u5927\u4e8e\u5b9e\u8d28\uff1a\u76ee\u524d\u7684Chat with PDF\u3001PDF to Audio\u5728\u73b0\u6709\u751f\u6001\u4e2d\u5e76\u4e0d\u7a00\u7f3a\uff08ChatGPT\u3001Claude\u65e9\u5df2\u8986\u76d6\uff09\uff0c\u4e14\u672c\u5730\u8fd0\u884c\u7684AI\u6a21\u578b\uff08\u5982Tesseract.js\uff09\u5728\u590d\u6742\u6587\u6863\u4e0a\u7684\u51c6\u786e\u7387\u8f83\u4f4e\u3002\u771f\u6b63\u7684\u5dee\u5f02\u5316\u6216\u8bb8\u5e94\u8be5\u538b\u5728\u201c\u5de5\u4f5c\u6d41\u201d\u4e0a\uff1a\u5982\u6279\u91cf\u5143\u6570\u636e\u6e05\u7406\u3001Bates\u7f16\u53f7\u3001\u641c\u7d22\u5f0f\u7ea2action\u2014\u2014\u8fd9\u4e9b\u662f\u4f01\u4e1a\u3001\u5f8b\u6240\u771f\u6b63\u613f\u610f\u4ed8\u8d39\u7684\u529f\u80fd\uff0c\u800c\u975e\u7b80\u5355\u5806\u780c\u5de5\u5177\u6570\u91cf\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u603b\u7ed3\uff1aPDFTools\u8e29\u5bf9\u4e86\u65b9\u5411\uff08\u9690\u79c1\u3001\u96f6\u6ce8\u518c\u3001\u672c\u5730\u5904\u7406\uff09\uff0c\u4f46\u9700\u8981\u4ece\u201c\u51d1\u5408\u80fd\u7528\u201d\u8fdb\u5316\u5230\u201c\u67d0\u4e2a\u573a\u666f\u4e0b\u6700\u597d\u7528\u201d\u3002\u5efa\u8bae\u805a\u71261-2\u4e2a\u9ad8\u4ef7\u503c\u75db\u70b9\uff08\u5982\u6cd5\u5f8b\u5408\u540c\u667a\u80fd\u5bf9\u6bd4\u3001\u91d1\u878d\u8868\u5355\u6570\u636e\u81ea\u52a8\u63d0\u53d6\uff09\u505a\u5230\u6781\u81f4\uff0c\u800c\u975e\u56db\u9762\u51fa\u51fb\u3002\u5426\u5219\uff0c\u5b83\u5c06\u53ea\u80fd\u5438\u5f15\u9690\u79c1\u610f\u8bc6\u6781\u5f3a\u4f46\u4f7f\u7528\u9891\u6b21\u6781\u4f4e\u7684\u8fb9\u7f18\u7528\u6237\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\">PDFTools<\/span>\n                <\/div>\n<div class=\"comment-content\">40+ free online PDF tools including premium features: compress, merge, split, convert images, extract text, compare PDFs, generate certificates, convert PDF to audio, create booklets, and more. 100% free, no uploads, all processing happens in your browser.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>Hey PH! \ud83d\udc4b<\/p>\n<p>We built PDFTools because we got tired of uploading sensitive documents <br \/>to iLovePDF and Smallpdf&#8217;s servers. Every time you upload a contract <br \/>or tax return to those sites, your file is sitting on a stranger&#8217;s server.<\/p>\n<p>PDFTools is 100% client-side \u2014 your files never leave your browser. <br \/>We use pdf-lib, pdfjs-dist, and Tesseract.js running locally via WASM.<\/p>\n<p>24+ tools: compress, merge, split, OCR, edit, sign, AI chat&#8230; all free.<\/p>\n<p>What&#8217;s the #1 PDF pain point we should solve next?<\/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>Browser-only processing is genuinely useful for privacy-sensitive PDFs &#8211; that part lands. But this is a very crowded space: Stirling-PDF, PDF24, ILovePDF, Smallpdf all offer free tiers and have years of SEO momentum. &#8220;40+ tools&#8221; is table stakes at this point, not a differentiator. What specifically makes PDFTools worth switching to? Is there a particular tool quality angle, a workflow that others miss, or a target user who isn&#8217;t served well by the existing players? The AI tag is on the listing but it&#8217;s not clear from the description what the AI actually does here.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>1<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<div class=\"comment-replies\">\n<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@galdayan\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@galdayan<\/a>&nbsp;Thanks \u2014 fair point. \u201c40+ tools\u201d alone isn\u2019t the differentiator anymore; it\u2019s table stakes in this space.PDFTools is focused on being a privacy-first, low-friction PDF workspace for people handling sensitive documents like contracts, invoices, IDs, tax forms, client files, and legal PDFs.<\/p>\n<p>For supported tools, processing happens in the browser, so users don\u2019t need to upload files just to compress, merge, split, sign, rotate, protect, or extract text.The switching reason is mainly: no signup, no install, no upload-first workflow, and a cleaner everyday PDF experience. The audience I\u2019m targeting is students, freelancers, educators, small businesses, and admin\/legal users who don\u2019t need heavy Acrobat-style software but still care about privacy. Beyond basic tools, I\u2019m working on workflows like PDF diff, batch processing, metadata sanitization, form data extraction, certificate generation, Bates numbering, and search-based redaction. You\u2019re also right about the AI tag \u2014 I need to make that clearer. Current AI features are mainly Chat with PDF, PDF table extraction, and PDF to Audio, with summarization and smarter document understanding planned next.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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>What data actually leaves my device or workspace when I run PDFTools on something sensitive?<\/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\/@noah_ben\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@noah_ben<\/a>&nbsp;All the files you upload on tools using server upload, you upload your file for some editing and download your edited file but they still have access to your files.<\/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>This is a fantastic tool!<\/p>\n<p>Is this tool limited to manipulating PDF files?<\/p>\n<p>Can it also convert images or documents into PDFs?<\/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\/@nanimono_masa\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@nanimono_masa<\/a>&nbsp;Yes, this convert multipages pdf to images and vice versa, It has a lot of more features around 45+, generate QR code on each page of singal pdf, it means you can access a singal page from pdf. I would like if you visit the page, you can find a lot more there and I hope you will like it 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<div class=\"reply-item\">\n<div class=\"reply-content\">\n<p><a href=\"https:\/\/www.producthunt.com\/@nanimono_masa\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@nanimono_masa<\/a>&nbsp;For anyone curious, PDFTools currently includes 40+ PDF tools across a few categories:<\/p>\n<p><strong>Core PDF tools:<\/strong> Compress, merge, split, rotate, delete pages, organize pages, crop, resize, flatten, insert blank pages.<\/p>\n<p><strong>Editing &amp; signing:<\/strong> Edit PDF, annotate, fill PDF forms, e-sign PDF, watermark, add page numbers, metadata editor.<\/p>\n<p><strong>Conversion:<\/strong> Image to PDF, scan to PDF, PDF to images, PDF to Word, Word to PDF, PDF to Excel\/CSV, HTML to PDF, text to PDF, PDF to PDF\/A.<\/p>\n<p><strong>Security &amp; privacy:<\/strong> Password protect, unlock PDF, redact PDF, metadata sanitizer, encrypted browser vault.<\/p>\n<p><strong>Extraction &amp; AI:<\/strong> OCR PDF, extract text, word counter, Chat with PDF, PDF to Audio, form data extraction.<\/p>\n<p><strong>Advanced workflows:<\/strong> Batch processing, PDF diff, certificate generator, booklet creator, bulk rename, QR code stamp, split by bookmarks, Bates numbering, color inverter, search &amp; redact.<\/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><a href=\"https:\/\/www.producthunt.com\/@saqib_hayat\" data-node-type=\"mention\" data-mention-type=\"user\" data-mention-id=\"saqib_hayat\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@saqib_hayat<\/a> Appreciate the idea. I was just exploring your website and when I tried using HTML to pdf, I&#8217;m not able to get the converted file. Not sure why that was happening.<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-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\/FZIPXOXFYGW74U\" class=\"app-title\">Layover<\/a><\/p>\n<div class=\"one-liner\">Your r\u00e9sum\u00e9 makes claims. Layover proves them.<\/div>\n<\/p><\/div>\n<div class=\"vote-btn\">\n<div class=\"vote-arrow\">\u25b2<\/div>\n<div class=\"vote-count\">9<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"one-liner\"><strong>\u4e00\u53e5\u8bdd\u4ecb\u7ecd\uff1a<\/strong>Layover \u8ba9\u6c42\u804c\u8005\u901a\u8fc7\u524d\u7ecf\u7406\uff08\u8eab\u4efd\u9a8c\u8bc1\u540e\uff09\u5bf9\u5177\u4f53\u5de5\u4f5c\u6210\u679c\u8fdb\u884c\u80cc\u4e66\uff0c\u751f\u6210\u53ef\u81ea\u4e3b\u63a7\u5236\u3001\u53ef\u968f\u5904\u5206\u4eab\u7684\u53ef\u4fe1\u51ed\u8bc1\uff0c\u89e3\u51b3\u7b80\u5386\u9020\u5047\u6cdb\u6ee5\u4e0e\u80cc\u666f\u8c03\u67e5\u53ef\u4fe1\u5ea6\u4f4e\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\/b2f433b2-739e-4f3e-b1e6-c0d6e5443779.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\/e717c773-9f88-48ae-9c51-37e32e785bd2.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\/29a9220f-84f9-4daa-8363-5729fa918b52.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\/1860db5d-47e7-4119-bcbe-916a9e2386a7.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\">Hiring<\/span><br \/>\n            <span class=\"tag\">Tech<\/span><br \/>\n            <span class=\"tag\">Social Networking<\/span>\n        <\/div>\n<div class=\"tags-container\">\n<p>            <span class=\"tag\">\u6c42\u804c\u5de5\u5177<\/span><br \/>\n            <span class=\"tag\">\u5de5\u4f5c\u9a8c\u8bc1<\/span><br \/>\n            <span class=\"tag\">\u80cc\u666f\u8c03\u67e5\u66ff\u4ee3<\/span><br \/>\n            <span class=\"tag\">\u524d\u7ecf\u7406\u80cc\u4e66<\/span><br \/>\n            <span class=\"tag\">\u53ef\u4fe1\u51ed\u8bc1<\/span><br \/>\n            <span class=\"tag\">\u8eab\u4efd\u9a8c\u8bc1<\/span><br \/>\n            <span class=\"tag\">\u7b80\u5386\u4f18\u5316<\/span><br \/>\n            <span class=\"tag\">\u5019\u9009\u4eba\u4e3b\u63a7<\/span><br \/>\n            <span class=\"tag\">\u4eba\u624d\u62db\u8058<\/span><br \/>\n            <span class=\"tag\">\u7ee9\u6548\u8bc1\u5b9e<\/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\u5fc3\u82e5\u7ecf\u7406\u62d2\u7edd\u9a8c\u8bc1\u80fd\u5426\u6539\u7528\u4ed6\u4eba\u3002\u5b98\u65b9\u56de\u5e94\u5141\u8bb8\u8df3\u8fc7\u7ea7\u3001\u5e73\u7ea7\u7b49\u5b9e\u9645\u5171\u4e8b\u8005\uff0c\u4f46\u6392\u9664\u666e\u901a\u63a8\u8350\u4eba\uff1b\u4e14\u51ed\u8bc1\u4f1a\u6807\u660e\u9a8c\u8bc1\u8005\u89d2\u8272\uff0c\u900f\u660e\u5316\u80cc\u4e66\u5c42\u7ea7\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                Layover \u5207\u4e2d\u7684\u95ee\u9898\u5f88\u81f4\u547d\uff1aAI \u6279\u91cf\u751f\u6210\u201c\u5b8c\u7f8e\u7b80\u5386\u201d\u540e\uff0cHR \u7684\u7b5b\u4eba\u6210\u672c\u6025\u901f\u4e0a\u5347\uff0c\u800c\u4f20\u7edf\u7684\u80cc\u666f\u8c03\u67e5\u53c8\u6162\u3001\u6cdb\u3001\u4e0d\u53ef\u4fe1\u3002\u5b83\u628a\u4e00\u4e2a\u9690\u6027\u7684\u201c\u5173\u7cfb\u4fe1\u4efb\u201d\u663e\u6027\u5316\u4e86\u2014\u2014\u4e0d\u518d\u662f\u4e00\u4efd\u81ea\u8ff0\u6587\u6863 + \u4e00\u4e2a\u7f16\u9020\u7684\u7535\u8bdd\uff0c\u800c\u662f\u4e00\u4e2a\u6709\u8eab\u4efd\u3001\u6709\u89d2\u8272\u3001\u6709\u5b9e\u540d\u7684\u5177\u4f53\u4eba\uff0c\u4e3a\u5019\u9009\u4eba\u5728\u8be5\u5c97\u4f4d\u4e0a\u7684\u5b9e\u9645\u4ea7\u51fa\u505a\u4fdd\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u4f46\u5b83\u7684\u771f\u5b9e\u75db\u70b9\u4e0d\u662f\u6280\u672f\uff0c\u662f\u51b7\u542f\u52a8\u3002\u9996\u5148\uff0c\u201c\u524d\u7ecf\u7406\u613f\u610f\u7ad9\u51fa\u6765\u4e3a\u524d\u4e0b\u5c5e\u80cc\u4e66\u201d\u672c\u8eab\u5c31\u662f\u4e2a\u5c0f\u6982\u7387\u4e8b\u4ef6\u3002\u5927\u591a\u6570\u79bb\u804c\u53ef\u80fd\u5b58\u5728\u6469\u64e6\uff0c\u7ecf\u7406\u4e5f\u672a\u5fc5\u8bb0\u5f97\u7ec6\u8282\uff0c\u66f4\u4e0d\u613f\u610f\u627f\u62c5\u201c\u4e8b\u540e\u51fa\u95ee\u9898\u201d\u7684\u8d23\u4efb\u3002\u5373\u4fbf\u7528 peer\/skip-level \u66ff\u4ee3\uff0c\u4f9d\u7136\u8981\u4f9d\u8d56\u4ed6\u4eba\u65e0\u507f\u4e3a\u4f60\u82b1\u65f6\u95f4\u642d\u5efa\u4e00\u4e2a\u201c\u53ef\u9a8c\u8bc1\u7684\u53d9\u4e8b\u5c42\u6b21\u201d\u3002\u8fd9\u662f\u5728\u8ba9\u4eba\u7684\u5584\u610f\u6210\u4e3a\u4e00\u79cd\u5236\u5ea6\u6027\u4e49\u52a1\uff0c\u672c\u8d28\u4e0a\u5bf9\u6297\u4eba\u6027\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u5176\u6b21\uff0c\u5b83\u5728\u4ea7\u54c1\u8bbe\u8ba1\u4e0a\u523b\u610f\u56de\u907f\u4e86\u201c\u91cf\u5316\u201d\u3002\u521b\u59cb\u4eba\u4e5f\u627f\u8ba4\uff0c\u629b\u5f03\u4e86 HR \u6253\u5206\u6bb5\u4f4d\u5236\uff0c\u662f\u56e0\u4e3a\u201c\u6570\u5b57\u7531\u4eba\u9009\u7684\uff0c\u662f\u4f2a\u7cbe\u786e\u201d\u3002\u4f46\u95ee\u9898\u662f\u2014\u2014\u62db\u8058\u65b9\u771f\u6b63\u9700\u8981\u7684\u662f\u201c\u5feb\u901f\u5bf9\u9f50\u80fd\u529b\u8c61\u9650\u201d\u7684\u5de5\u5177\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u201c\u67d0\u4eba\u8bf4\u4ed6\u8fd8\u884c\u201d\u7684\u6587\u672c\u5757\u3002\u6ca1\u6709\u7ed3\u6784\u5316\u7684\u843d\u5730\u65b9\u5f0f\uff0c\u8fd9\u79cd\u80cc\u4e66\u4f9d\u7136\u5bb9\u6613\u88ab\u6254\u5728 Attachments \u6587\u4ef6\u5939\u91cc\u79ef\u7070\u3002\n            <\/p>\n<p class=\"ai-content\">\n                \u6700\u540e\uff0c\u5b83\u9762\u5bf9\u7684\u5bf9\u624b\u4e0d\u662f\u4f20\u7edf\u7b80\u5386\uff0c\u800c\u662f\u6574\u4e2a HR \u7cfb\u7edf\u7684\u60f0\u6027\u3002\u8981\u8ba9\u8fd9\u4e2a\u51ed\u8bc1\u771f\u6709\u6548\uff0c\u5fc5\u987b\u5728\u96c7\u4e3b\u4fa7\u5f62\u6210\u201c\u4fe1\u7528\u5206\u6e20\u9053\u201d\uff0c\u5373\u53d8\u6210 ATS \u7684\u53ef\u63a5\u5165\u5b57\u6bb5\u3002\u5426\u5219\u5c31\u53ea\u662f\u53e6\u4e00\u4e2a\u201c\u653e\u94fe\u63a5\u8fd8\u4e0d\u591f\u201d\u7684\u9644\u4ef6\u3002\u5bf9\u4e8e\u65e9\u671f\u7528\u6237\uff0c\u5b83\u66f4\u50cf\u662f\u4e00\u5f20\u201c\u8bda\u610f\u7684\u5165\u573a\u5238\u201d\uff0c\u4f46\u8981\u771f\u6b63\u66ff\u4ee3 Noreply\uff0c\u5f97\u9996\u5148\u8ba9 Noreply \u6709\u7406\u7531\u6253\u5f00\u5b83\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\">Layover<\/span>\n                <\/div>\n<div class=\"comment-content\">Unlike reference or background checks, Layover is candidate-owned and portable: you write up what you actually did, a former manager (identity-verified) confirms it, and you get a credential you control and can share anywhere. Verified employment, real exit status, and manager-attested achievements in one link. A real, accountable person stands behind your work instead of another unverifiable bullet point. Free for founding users.<\/div>\n<\/p><\/div>\n<p>            <!-- \u8bc4\u8bba\u5217\u8868 --><\/p>\n<div class=\"comment-item\">\n<div class=\"comment-content\">\n<p>How do you handle situations where a manager refuses to verify, like can a candidate use an alternate verifier?<\/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\/@naimz\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">@naimz<\/a>&nbsp;Great question, and it&#8217;s one of the most important design calls in the whole product. Short version: yes, but it&#8217;s deliberately not &#8220;anyone.&#8221;<\/p>\n<p>The value of the credential is that a real, identity-verified person who was <em>actually there<\/em> went on record. So if a direct manager won&#8217;t or can&#8217;t, the candidate can use someone else who genuinely worked with them on that role: a skip-level, a close peer, a cross-functional lead, even a direct report for leadership work. What we won&#8217;t do is allow a character reference or a friend who can&#8217;t speak to the actual work, because that&#8217;s the thing that makes most references worthless.<\/p>\n<p>The credential also shows <em>who<\/em> verified it (former manager vs. peer vs. report), so it&#8217;s transparent rather than flattening everyone into one &#8220;verified&#8221; badge.<\/p>\n<p>Honestly, this is exactly the kind of thing I&#8217;m trying to get right, so I&#8217;m curious: from where you sit, would a verified former <em>peer<\/em> or <em>direct report<\/em> carry real weight for you, or is it really only the manager&#8217;s word that moves the needle?<\/p>\n<\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                                <span>\u25b2<\/span><br \/>\n                                <span>0<\/span>\n                            <\/div>\n<p>                            <span>\u56de\u590d<\/span>\n                        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"comment-item\">\n<div class=\"comment-content\">Hi Product Hunt. I&#8217;m Alex, founder of Layover.<\/p>\n<p>Navigating a layoff used to mean walking your r\u00e9sum\u00e9 in and having a human look you in the eye. Now it&#8217;s a steel door marked &#8220;Careers,&#8221; and behind the plexiglass sits Noreply, an old boiler with a screen for a face. You slide your folder in. A laser scans it. &#8220;Ah, this looks familiar.&#8221; A hatch opens in its chest, crushes seven years of your work into a ball, and drops it in. &#8220;Thank you for applying. Have a wonderful afternoon.&#8221;<\/p>\n<p>Like hundreds of thousands of others, I got laid off this year. Three days&#8217; notice, family of four, not much runway. But I felt the layoff wasn&#8217;t the real problem. I had the skills and experience. The problem was Noreply: a system where landing an interview feels like a lottery, and AI prints tickets by the thousand. When anyone can prompt a flawless r\u00e9sum\u00e9, &#8220;flawless&#8221; becomes the floor and the actual human disappears.<\/p>\n<p>So while I sent applications into the void, I built the thing I wished I had. The idea: stop trying to write better r\u00e9sum\u00e9s, and start proving the real work. With Layover, you write up what you actually did, a former manager (identity-verified) confirms it, and you get a credential you own and share. A real, accountable person stands behind your work instead of another unverifiable bullet point.<\/p>\n<p>It started as a scoring system based on HR performance reviews and manager ratings, but I killed that early. A number a manager picks is just false precision, and an early user who happened to be a fraud analyst immediately picked up on that. What&#8217;s left is the part that&#8217;s actually un-fakeable: a real person, identity-verified, going on record about your actual work.<\/p>\n<p>It&#8217;s free for founding users while I build out the network. I&#8217;d genuinely love feedback, especially from anyone who hires, gets hired, or has met their own version of Noreply.<\/p>\n<p>What would make a credential like this actually useful to you?<\/p><\/div>\n<div class=\"comment-actions\">\n<div class=\"comment-vote\">\n                        <span>\u25b2<\/span><br \/>\n                        <span>0<\/span>\n                    <\/div>\n<p>                    <span>\u56de\u590d<\/span>\n                <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/article>\n<\/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-06-28 PH\u70ed\u699c | 2026-06-28 #1 disco [&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-266","post","type-post","status-publish","format-standard","hentry","category-producthunt"],"_links":{"self":[{"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/posts\/266","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=266"}],"version-history":[{"count":0,"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/posts\/266\/revisions"}],"wp:attachment":[{"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/media?parent=266"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/categories?post=266"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ph.listeningo.cn\/index.php\/wp-json\/wp\/v2\/tags?post=266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}