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.