Svelte Commerce
A standalone open-source storefront built with SvelteKit, headless across 26 commerce backends. MIT licensed.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Русский | English
Сервис по подбору уценённых товаров магазина DNS: сайт, мобильное приложение, API и парсер данных в одном монорепозитории.
Это неофициальный сайт, связанный с компанией DNS. Он помогает просматривать уценённые товары, представленные на сайте DNS.
Сейчас сервис показывает товары из Самары и Москвы (город переключается в шапке сайта). Вы можете добавлять товары в избранное, чтобы отслеживать обновления, такие как изменения цен или наличие товара в магазинах.
| Путь | Пакет | Описание | Документация |
|---|---|---|---|
apps/web | @dns-markdown/web | Сайт на Next.js (App Router), деплоится на Vercel | README, CLAUDE.md |
apps/api | @dns-markdown/api | Express API (MongoDB/Mongoose), деплоится на Vercel | README, CLAUDE.md |
apps/parser | @dns-markdown/parser | Скрапер/ETL уценки DNS, отправляет данные в API, запускается локально | README, CLAUDE.md |
apps/mobile | @dns-markdown/mobile | Мобильное приложение на Expo (React Native, expo-router) для iOS и Android, собирается через EAS | README, CLAUDE.md |
packages/env | @dns-markdown/env | Общая загрузка env-файлов и проверки NODE_ENV/платформы | CLAUDE.md |
packages/types | @dns-markdown/types | Общие типы payload и ответов API | CLAUDE.md |
packages/api-client | @dns-markdown/api-client | Типизированный axios-клиент ко всем эндпоинтам API | CLAUDE.md |
packages/tests | @dns-markdown/tests | Общие тестовые утилиты: фикстуры, HTTP/Express/Mongoose-дублёры, DOM, таймеры | CLAUDE.md |
Воркспейсы Bun (apps/*, packages/*) с единым bun.lock, оркестрация через Nx в package-based режиме: таргеты Nx — это скрипты package.json каждого воркспейса, правила кеширования лежат в nx.json.
packageManager корневого package.json. Исключение — apps/mobile: тесты на Jest (jest-expo), линт через expo lint.next, storybook, eslint, expo) — версия в .nvmrc.apps/mobile — Xcode (iOS) и/или Android Studio (Android): приложение работает через собственный dev client, а не через Expo Go.git clone --recurse-submodules [email protected]:ebulgakov/dns-markdown-next.git
# или в уже склонированном репозитории:
git submodule update --init # приватный сабмодуль со скриптами скрапера (нужен только парсеру)
bun install
cp .env.example .env # заполнить нужные переменные
bun run dev
Мобильное приложение (из apps/mobile/):
bun run ios # собрать и запустить dev client в симуляторе iOS (или bun run android)
bun run start # запустить Metro для уже установленного dev client
Запускаются из корня репозитория:
bun install # установить зависимости всех воркспейсов
bun run dev # dev-таргеты всех проектов (api в watch-режиме, web на :3000)
bun run test # тесты всех проектов (mobile — Jest, остальные — bun test)
bun run lint # линт всех проектов
bun run lint:fix # линт с --fix
bun run type-check # tsc --noEmit для всех проектов
bun run build # сборка всех проектов
bun run affected # lint/type-check/test/build только для проектов, изменённых относительно main
Отдельный проект / скрипт:
NX_LOAD_DOT_ENV_FILES=false bunx nx run <project>:<script> # например @dns-markdown/api:dev
bunx nx graph # граф проектов
NX_LOAD_DOT_ENV_FILES=false не даёт Nx подмешивать корневые .env* файлы в окружение каждой задачи (корневые скрипты уже его выставляют).
Все воркспейсы, включая apps/web, используют общие env-файлы в корне репозитория: сначала загружается .env.<NODE_ENV> (.env.development, .env.test, .env.production), затем .env; уже выставленные переменные не перезаписываются. Все ключи перечислены в .env.example. Next.js сам читает только apps/web/.env*, поэтому apps/web/next.config.ts загружает корневые файлы через loadEnv() из @dns-markdown/env — не кладите env-файлы в apps/web/. В продакшене переменные задаёт Vercel.
Исключение — apps/mobile: Expo читает переменные EXPO_PUBLIC_* (например, EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY) только из apps/mobile/.env* и встраивает их в бандл, поэтому секреты с этим префиксом не задавайте.
GitHub Actions (.github/workflows/) на push/PR в main: ESLint, tsc --noEmit, тесты всех воркспейсов, актуальность openapi.json API, Playwright и dependency-cruiser для web. Chromatic запускается только для PR с меткой chromatic.