Svelte Commerce
A standalone open-source storefront built with SvelteKit, headless across 26 commerce backends. MIT licensed.
Неофициальный сайт компании DNS. Просмотр уценённых товаров из города Самара с сайта DNS с возможностью добавления в избранное и анализа цены.
Translation pending
CommerceTypeScript · ShellGitHub @ebulgakovOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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.