new-term-radar
신규 AI 용어를 매일 추적, X·Hugging Face·GitHub 등에서 모델·제품·레포 이름을 빠르게 수집
LightLeads는 전화번호별 광고비 지출을 실제 매출과 연결해 각 캠페인·광고·크리에이티브별 수익을 보여줍니다
LightLeads связывает расход в рекламных кабинетах с реальными продажами по номеру телефона. Вы видите прибыль по каждой кампании, объявлению и креативу, а не только клики и лиды.
마케팅TypeScript · PLpgSQLGitHub @dauletkiyalbek7온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Платформа сквозной аналитики рекламы и продаж: показывает, какая кампания, группа, объявление и креатив в Meta и TikTok Ads приносят продажи и прибыль, а не только клики и лиды. Полное ТЗ и план по фазам — в PROMPT.md. Состояние: Фазы 4 и 5 — лиды из Meta и продажиREADME 전문 보기 ↗
Платформа сквозной аналитики рекламы и продаж: показывает, какая кампания, группа, объявление и креатив в Meta и TikTok Ads приносят продажи и прибыль, а не только клики и лиды.
Полное ТЗ и план по фазам — в PROMPT.md.
Готовы дизайн-система и все экраны (Фаза 0), вход, рабочие пространства и база данных с RLS (Фаза 1), подключение рекламных кабинетов Meta (Фаза 2) и TikTok Ads (Фаза 3), приём лидов с сайта и ручные лиды (Фаза 4), продажи в базе: ручной ввод, импорт CSV и Excel, товары с себестоимостью, привязка продажи к объявлению по телефону (Фаза 5). TikTok включится, когда в секретах сервера появятся ключи приложения TikTok: до этого кнопка подключения показана как «Скоро».
Лид-формы Meta и WhatsApp (Cloud API) написаны и выложены, но на настоящих страницах и номерах ещё не проверены: для этого владелец платформы добавляет права и вебхук в приложении Meta (раздел «Лиды из Meta» ниже). Из Фазы 4 не сделаны Instagram Direct и лид-формы TikTok. Лиды из Google-таблицы приходят скриптом таблицы, новые заявки бот присылает в Telegram (разделы «Лиды из Google-таблицы» и «Заявки в Telegram» ниже). Продажи из Google Sheets, amoCRM и Bitrix24 не сделаны: в интерфейсе они помечены «Скоро». Сейчас в работе только Meta: TikTok и CRM отложены по решению владельца.
/admin («Аккаунты и проекты»)
или владелец проекта в «Настройки → Команда». Логин и пароль показываются один раз, их передают
человеку вручную./admin показывает владельцу платформы всех людей и все проекты: кто в каком проекте,
через чей аккаунт Facebook подключена реклама, какие кабинеты выбраны, страницы и номера WhatsApp,
лиды и продажи за 30 дней. Данные берутся действием overview функции team. Открыть дашборд
чужого проекта нельзя: для этого владелец платформы добавляет себя в проект.demo_data), пока владелец
не подключит Meta или TikTok в «Настройки → Подключения».| Экран | Адрес |
|---|---|
| Лендинг | / |
| Вход | /login |
| Аккаунты и проекты (владелец платформы) | /admin |
| Онбординг-мастер | /onboarding |
| Дашборд | /dashboard |
| Кампании (дерево) | /campaigns |
| Креативы, страница креатива | /creatives, /creatives/[id] |
| Лиды | /leads |
| Продажи, импорт CSV и Excel | /sales |
| AI-советы и чат | /ai |
| Настройки | /settings |
| Политика конфиденциальности, удаление данных | /privacy, /data-deletion |
Второй workspace в переключателе (Bilim Academy) пустой — на нём видны пустые состояния.
Скопируйте .env.example в .env.local и впишите адрес проекта Supabase и публичный ключ
(Supabase → Project Settings → API Keys). Без них приложение работает только в демо-режиме.
npm install
npm run dev # http://localhost:3000
Чтобы открыть с телефона в той же сети Wi-Fi, возьмите адрес из строки Network в выводе
npm run dev, например http://192.168.1.106:3000.
npm run lint # ESLint
npx tsc --noEmit # проверка типов
npm run build # сборка для Vercel
Сайт: https://lightleads-indol.vercel.app (Vercel, проект lightleads).
Сборка по push из GitHub отключена в vercel.json (git.deploymentEnabled: false): в октябре
2026 она падала с ошибкой git_info_fail — GitHub отвечал Vercel отказом 403 «secondary rate
limit», и переподключение репозитория не помогло. Поэтому после git push сайт выкладывается
напрямую:
npx vercel deploy --prod
Чтобы вернуть автоматическую сборку, удалите блок git из vercel.json.
Supabase, проект lightleads. Схема лежит в supabase/migrations:
0001_tenancy.sql — profiles, workspaces, workspace_members, функции проверки доступа и RLS;0003_meta_sync.sql — поля и расписание для синхронизации Meta, бакет превью;0004_tiktok_sync.sql — расписание синхронизации TikTok и поле «конверсии» из отчёта кабинета;0005_leads.sql, 0006_leads_end_demo.sql — ключ приёма лидов, исходные данные заявки, проверка
формата телефона, выключение демо-данных первым лидом;0007_large_accounts.sql — место остановки обхода большого кабинета и очередь превью;0008_sales.sql — права на запись продаж и товаров, проверка формата телефона продажи;0009_meta_lead_channels.sql — страницы Facebook и номера WhatsApp, подключённые к workspace,
ID объявления у лида и ежечасная проверка лид-форм;0010_telegram_sheets.sql — источник лидов sheet, чаты Telegram проекта, одноразовые коды
подключения, очередь заявок для отправки и ежеминутная отправка;0011_whatsapp_telegram_chat.sql — связь сообщений бота с клиентами WhatsApp для ответов,
защита от повторных уведомлений Meta, заявки WhatsApp вне общей очереди Telegram;0012_lead_card.sql — комментарий менеджера к лиду (участник меняет только его) и мгновенная
привязка лида к объявлению, которое загрузилось из кабинета позже заявки;0013_telegram_sales.sql — продажи из Telegram: способ ввода telegram, имя продавца
(seller_name) и вопросы бота о сумме (telegram_sale_prompts, только для сервера);0002_data_model.sql — таблицы рекламы, лидов, продаж и интеграций. У каждой есть workspace_id,
участник читает только свой workspace. Права записи добавляются в фазах, где появляются экраны.Токены рекламных кабинетов и CRM хранятся в отдельных таблицах *_secrets без политик:
их читает только сервер.
Аккаунты создаёт Edge Function supabase/functions/team: сервисный ключ есть только у неё, в приложение и в браузер он не попадает. Новый пароль участнику выдаёт только владелец платформы.
Первого владельца платформы назначают вручную: profiles.is_platform_admin = true.
У каждой платформы своя Edge Function: meta-oauth и tiktok-oauth. Порядок работы у них общий и лежит в supabase/functions/_shared: вход на платформе, выбор кабинетов, шаги синхронизации, плановое обновление, шифрование токена. В папке платформы — только то, чем она отличается: адреса API, поля и разбор ответов. LightLeads только читает рекламу.
ad_connection_secrets зашифрованным (AES-256-GCM). Ключ выводится из секрета
TOKEN_ENCRYPTION_KEY, а если он не задан — из сервисного ключа проекта: смена этого ключа
потребует переподключить кабинеты.pg_cron каждые 2 часа перечитывает
последние 3 дня: Meta на 7-й минуте часа, TikTok на 37-й. Курс НБРК на нужные даты загружается тут же.ad_accounts.sync_cursor.
Первая загрузка идёт до конца; обновление и pg_cron продвигают обход на одну порцию за запуск,
статистика при этом обновляется каждый раз.creatives: ссылки платформ живут недолго.
Скачиваются только превью работающих объявлений и объявлений со статистикой.cron с параметрами account, days, skip._shared: пути файлов считаются от supabase/functions,
точка входа — meta-oauth/index.ts или tiktok-oauth/index.ts.META_APP_ID, META_APP_SECRET. Необязательные: META_LOGIN_CONFIG_ID
(конфигурация Facebook Login for Business), META_GRAPH_VERSION.https://<project>.supabase.co/functions/v1/meta-oauth. Право — ads_read.ads_read).
Для ревью готовы страница политики конфиденциальности /privacy и страница /data-deletion.
Data Deletion Callback принимает функция meta-leads (POST с полем signed_request, подпись
секретом приложения): удаляет ключ доступа, имя и ID профиля Facebook и отвечает ссылкой на
/data-deletion?code=…. Название оператора и почта для политики задаются в LEGAL
(src/lib/config.ts); пока они пустые, на проверку Meta не подавать.TIKTOK_APP_ID, TIKTOK_APP_SECRET.https://<project>.supabase.co/functions/v1/tiktok-oauth./campaign/get/, /adgroup/get/, /ad/get/, статистика из
/report/integrated/get/ (AUCTION_AD, по дням, с удалёнными объявлениями), обложки видео из
/file/video/ad/info/. Отдельной сущности «креатив» у TikTok нет: креативом считается видео или
картинка объявления.Edge Function supabase/functions/leads принимает заявки с сайтов и выполняет действия менеджера (ручной лид, удаление лида).
POST /api/ingest/lead на домене приложения (переадресация в next.config.ts
на функцию leads). Ключ workspace передаётся заголовком x-workspace-key, параметром ?key=
или полем key. Ключ лежит в таблице ingest_keys, участники видят его в «Настройки → Источники
лидов». По ключу можно только добавить лид.phone, tel, телефон и похожих, метки — в utm_*, fbclid, ttclid или в объекте utm.
Проверочный запрос Tilda (test=test) получает ответ 200. Если в Tilda включено «Передавать
Cookies», метки берутся из cookie TILDAUTM, когда их нет в полях формы.utm_content — ID объявления, utm_term — ID группы, utm_campaign —
ID кампании на платформе. Берётся самый точный из найденных в подключённых кабинетах.<script src="…/ll.js" data-key="…">.
Хранит метки в cookie 30 дней, подставляет их в скрытые поля форм и при отправке формы с телефоном
передаёт лид. data-send="off" отключает отправку, если лиды уже шлёт вебхук сайта.deno test supabase/functions/leads/extract_test.ts.leads.external_ad_id). Если объявление ещё не
загрузилось из кабинета, лид привяжется к нему при ближайшей ежечасной проверке (relink_leads).Edge Function supabase/functions/meta-leads принимает
лиды из лид-форм страниц Facebook и из WhatsApp (Cloud API). Подключённые страницы и номера лежат
в lead_channels; страница или номер принадлежит одному workspace.
pages_show_list, pages_read_engagement,
pages_manage_metadata, pages_manage_ads, leads_retrieval. WhatsApp: business_management,
whatsapp_business_management, whatsapp_business_messaging. Вход завершает meta-oauth
(её адрес возврата уже разрешён в приложении), новый токен заменяет прежний./admin
(«Вебхук приложения Meta») для объекта Page (поле leadgen) и объекта WhatsApp Business Account
(поле messages). Verify token выводится из секрета приложения и нигде не хранится.X-Hub-Signature-256 (секрет приложения). Запрос без
верной подписи отклоняется.referral типа ad (переход с рекламы, лид
привязан к объявлению) и первое сообщение клиента, который не был лидом проекта последние 30 дней.
Сохраняются номер, имя профиля, объявление и текст первого сообщения (raw_payload.message,
до 500 знаков). Все сообщения клиентов пересылаются в Telegram проекта (раздел «Заявки в Telegram»);
сама переписка в базе не хранится, только ID обработанных сообщений (whatsapp_seen, от повторов Meta).pg_cron, 22-я минута): дочитывает заявки форм, которые не пришли
уведомлением (при подключении страницы — за 30 дней), и привязывает лиды к новым объявлениям.deno test supabase/functions/meta-leads/webhook_test.ts._shared/core.ts, leads/extract.ts, meta-oauth/lib.ts,
точка входа — meta-leads/index.ts.В «Настройки → Источники лидов» лежит готовый скрипт Google Apps Script с ключом проекта
(src/lib/snippets.ts, sheetsScript). Его вставляют в таблицу
(«Расширения → Apps Script») и запускают функцию start.
x-lead-source: sheet и отмечает результат в колонке «LightLeads». Строки, которые были в таблице
до запуска, помечаются «было до подключения»; функция sendOldRows отправляет и их.ad_id и дата заявки
(«Дата», created_time, «Отметка времени») распознаются в leads/extract.ts.
Дата без часового пояса считается временем Казахстана. Дату не старше года принимает только
источник sheet; у сайта время заявки — время приёма.Edge Function supabase/functions/telegram — бот, который
присылает новые заявки проекта в Telegram: имя, телефон, источник, объявление, кампанию, первое
сообщение WhatsApp и кнопку «Написать в WhatsApp» (ссылка wa.me).
TELEGRAM_BOT_TOKEN. Адрес вебхука бот ставит себе сам при первом подключении чата;
строка проверки вебхука выводится из токена и нигде не хранится. Состояние бота видно в /admin.?start=) или в группу (?startgroup=). Бот
принимает «/start КОД», записывает чат в telegram_chats и отвечает «Готово». До 10 чатов на проект.leads ставит в telegram_queue новые заявки проекта с активным чатом,
кроме ручных и заявок старше суток (подгруженная история). pg_cron раз в минуту вызывает функцию,
только если очередь не пуста. Больше 5 заявок проекта сразу — одно сообщение со списком. Временная
ошибка Telegram оставляет заявки в очереди (не дольше суток); удалённый из чата или
заблокированный бот помечает чат ошибкой.meta-leads сразу (заявки WhatsApp в общую очередь не попадают). Для каждого такого
сообщения бота в telegram_threads записано, какой это клиент и с какого номера компании ему
отвечать. Ответ менеджера на это сообщение (reply) бот отправляет клиенту через Cloud API
(POST /{phone_number_id}/messages, токен подключения Meta проекта, право
whatsapp_business_messaging) и ставит реакцию 👍; при ошибке отвечает понятной причиной
(telegram/whatsapp.ts), например «прошло больше 24 часов».
Файлы ходят в обе стороны. Фото, видео, голосовое или документ клиента meta-leads скачивает
у Meta (GET /{media_id}, до 20 МБ) и присылает в чат самим файлом. Для нескольких чатов файл
загружается один раз, дальше отправляется по file_id. Если Telegram не принял файл как фото
или голосовое, он уходит документом. Геопозиция приходит ссылкой на карту, контакт — именем и номером.
Ответ менеджера файлом бот скачивает из Telegram (getFile, до 20 МБ), загружает в WhatsApp
(POST /{phone_number_id}/media) и отправляет с подписью. Тип сообщения WhatsApp выбирается
по формату и размеру: фото до 5 МБ, видео и аудио до 16 МБ, остальное уходит документом.
Стикеры не отправляются.Продажи и товары приложение пишет прямо в таблицы sales и products
(src/lib/sales-api.ts); права проверяет RLS.
created_by), браузер это поле передать не может.
Товар и объявление-источник должны быть из того же workspace.sale_attributions пока не используется..xlsx (первый лист). Мастер сопоставляет
колонки, показывает строки с ошибками и возможные дубли (телефон + сумма + дата ±1 день).Next.js 15 (App Router) · TypeScript strict · Tailwind CSS 4 · shadcn/ui · Framer Motion · Recharts · lucide-react · zod · date-fns · libphonenumber-js.
src/
app/ страницы (App Router)
(app)/ кабинет: дашборд, кампании, креативы, лиды, продажи, AI, настройки
(auth)/ вход
onboarding/ мастер подключения
components/
kit/ дизайн-система: кнопки, карточки, деньги в двух валютах, бейджи, анимации
shell/ каркас: сайдбар, верхняя панель, нижняя навигация, выбор периода
charts/ графики
features/ крупные блоки: добавление продажи, импорт, KPI, воронка, советы
ui/ компоненты shadcn/ui
i18n/ru.ts все тексты интерфейса (для kk/en добавить словарь того же типа)
lib/
mock/seed.ts детерминированный демо-сид
store.tsx состояние демо; в Фазе 1 заменяется чтением из Supabase
metrics.ts все производные метрики: прибыль, ROMI, ROAS, CPL, CAC, конверсия
analytics.ts сведение расхода, лидов и продаж за период
attribution.ts связка продажи с лидом по телефону, поиск дублей
currency.ts конвертация по курсу на дату операции
score.ts рейтинг креатива 0–100 со сглаживанием
rules.ts правила-сигналы для AI-советов
phone.ts нормализация телефона в E.164
csv.ts разбор и проверка CSV для импорта
Настоящая логика (перейдёт в следующие фазы без переписывания): нормализация телефона, атрибуция с выбором модели и окна, поиск дублей, двойная валюта с курсом на дату операции, расчёт метрик, рейтинг креативов, правила-сигналы, разбор CSV.
Имитация (в демо-режиме без аккаунта): подключение кабинетов, синхронизация, тексты AI-советов (шаблоны вместо Claude API), чат (ответы на вопросы-подсказки), превью креативов (сгенерированные обложки вместо файлов из Storage), курсы НБРК (сгенерированный ряд).
telegram_sale_prompts45000 английский45 000 тг45к$300 курсsalesinput = telegramseller_namecallback_query/admindeno test --allow-env supabase/functions/telegram/.telegram/bot.ts, telegram/message.ts, telegram/sale.ts,
telegram/whatsapp.ts, _shared/core.ts и meta-oauth/lib.ts, точка входа — telegram/index.ts. meta-leads теперь
тоже включает telegram/bot.ts и telegram/message.ts.