World Vibe Web
The distributed app store for vibe-coded projects. Browse, discover, and install open-source apps from across GitHub.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证valexer3/vibecoder
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
AJ Import — сайт с каталогом Encar + Che168 Полный каркас: backend (парсинг + API) и frontend (каталог с фильтрами, карточки авто, заявки).查看完整 README ↗
Полный каркас: backend (парсинг + API) и frontend (каталог с фильтрами, карточки авто, заявки).
backend/ Node.js/Express API + парсеры Encar/Che168 + PostgreSQL
frontend/ React + Vite каталог
createdb ajimport
psql ajimport -f backend/src/schema.sql
cd backend
cp .env.example .env # заполнить DATABASE_URL
npm install
npm run sync -- --once # разовая синхронизация (для проверки, что парсер работает)
npm run dev # API на :4000
Важно: npm run dev в backend поднимает только API-сервер (порт :4000) и
сам по себе НИЧЕГО не парсит и не обновляет в БД. sync.js (npm run sync,
без --once) — это отдельный постоянно работающий процесс/воркер: он
планирует задачи по CRON_SCHEDULE из .env (по умолчанию раз в 3 часа) и
обновляет каталог в фоне. В проде это два независимых процесса (например,
два отдельных сервиса/воркера на Railway) — не путай их и не рассчитывай,
что каталог обновится сам по себе, если запущен только npm run dev.
cd frontend
npm install
npm run dev # http://localhost:5173
Encar (Корея) — рабочий вариант "из коробки": используется полуоткрытый
JSON API, которым пользуется сам сайт encar.com. Требует аккуратного
троттлинга запросов и, при больших объёмах, IP из Кореи (см. PROXY_URL_KR).
Che168 (Китай) — работает, но только по СПИСКУ объявлений (без похода
на detail-страницу конкретной машины). Причина - detail-страницы Che168
эскалируют в интерактивную капчу (数美/ShuMei "安全验证") уже после ~4 быстрых
запросов подряд с одного IP (проверено вручную), тогда как список это делает
заметно реже и достаточно устойчив для регулярного sync. Из-за этого у
объявлений Che168 в каталоге НЕТ VIN, истории ДТП/техосмотра, полной
галереи фото и полной комплектации - только то, что реально отдаётся в
HTML списка (марка/модель через chineseDict.js, год, пробег, цена, город,
дилер, дата публикации, одно превью-фото). Список сам по себе за антибот-
защитой Tencent EdgeOne, поэтому парсинг идёт через headless Chromium
(Playwright), а не axios/cheerio - см. parsers/che168.js и chineseDict.js
(марка/модель по числовым brandid/seriesid резолвятся через общую базу
Autohome - car.autohome.com.cn, она НЕ защищена антиботом, в отличие от
самого che168.com).
PROXY_URL_CN (резидентский прокси из материкового Китая) в текущей
реализации не обязателен и не задан по умолчанию - защита Che168 привязана
к репутации/интенсивности запросов с IP, а не к гео-блокировке как таковой
(с одного и того же не-китайского IP доступ то давался, то нет). Если после
деплоя на Railway блокировка окажется стабильной - задай PROXY_URL_CN,
chromium.launch() в che168.js уже поддерживает эту переменную, менять
код не потребуется.
Деплой Che168-воркера на Railway требует отдельного шага - см. раздел "Деплой" ниже, обычный Nixpacks-билд Playwright/Chromium не поставит.
server.js) + PostgreSQL → Railway, обычный Nixpacks-билд
(npm install + npm start) - Chromium ему не нужен, менять ничего не надо.VITE-прокси/rewrite на backend API либо через
переменную окружения с полным URL backend, если понадобится вынести api.js
на абсолютный адрес.sync.js) - ОТДЕЛЬНЫЙ Railway-сервис (worker, не API), и
ему нужен другой билдер:
backend/Dockerfile.sync (не обычный Nixpacks -
он не поставит Chromium, нужный parsers/che168.js).Dockerfile.sync использует официальный образ
mcr.microsoft.com/playwright:v1.63.0-jammy - там уже есть Chromium
ровно нужной версии со всеми системными библиотеками, отдельно
playwright install вызывать не нужно. Версия тега образа должна
совпадать с версией пакета playwright в package.json - при
обновлении playwright не забудь поднять и тег в Dockerfile.sync.CMD уже задан в самом образе
(node src/sync.js), либо явно переопредели в настройках сервиса.docker build -f backend/Dockerfile.sync backend) и
свериться с лимитами текущего тарифа Railway (Settings → Usage в
дашборде Railway - я не имею доступа к твоему аккаунту, чтобы
проверить это самостоятельно).CRON_SCHEDULE в .env этого сервиса управляет частотой (по умолчанию
раз в 3 часа) - см. sync.js.CHE168_LIST_URLS в sync.js конкретными ссылкамиsync.js.che168.jschineseDict.js (~400 брендов из общей базы Autohome,
лениво догружаемые модельные ряды).price_rub — заглушка, считается только
курс валют; логику пошлины/акциза можно добавить отдельным модулем
backend/src/customs.js и дергать его при апсерте машины).