尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Соцсеть идей для студентов университетов Германии. Next.js 15 + Supabase.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Социальная сеть для студентов университетов Германии, построенная вокруг одной единицы — идеи.
Человек пишет, что хочет сделать: «Пиво у канала после занятий», «Учебная группа по анализу перед экзаменом», «Фотопрогулка на рассвете». У идеи есть время, место и число мест. Остальные заходят в групповой чат этой идеи и договариваются там.
Это не лента и не мэтчинг. Это инструмент, чтобы найти людей через конкретную активность: не «кто рядом похож на меня», а «кто идёт в шесть на скалодром». Поэтому лента — расписание, а не поток: обе вкладки строго по времени, ближайшее первым, и идея уходит из ленты, когда автор закрыл набор или прошёл час после начала. Чат при этом остаётся — всем, кто в нём был.
Интерфейс — русский, обращение на «ты». Термины — по глоссарию в
docs/ui-contract.md, отклоняться нельзя.
Продакшен: https://to-get-there-mu.vercel.app — выкатывается сам из
main после зелёного CI.
app/globals.css, контраст WCAG AAНужен Node 20 или новее (проверено на 24).
npm install
cp .env.local.example .env.local
npm run dev
http://localhost:3000. С NEXT_PUBLIC_USE_MOCKS=true всё работает из
lib/mock — без базы и без входа (демо-режим, запись не сохраняется).
С базой: NEXT_PUBLIC_USE_MOCKS=false и ключи проекта Supabase, либо
локальный стек supabase start (нужен Docker).
| Команда | Что |
|---|---|
npm run lint | ESLint без предупреждений |
npm run typecheck | TypeScript strict |
npm test | юнит-тесты (Vitest) |
npm run test:e2e | все экраны в браузере, axe (WCAG 2.2 AA), клавиатура, телефон (Playwright) |
npm run test:db | права и триггеры в базе (pgTAP), нужен supabase start |
npm run test:e2e:live | со входом на локальной Supabase: регистрация с письмом, вход, сброс пароля, права, realtime у двоих |
psql … -f supabase/perf/load.sql | нагрузочный прогон: десятки тысяч строк, планы запросов, бюджет времени (docs/PERFORMANCE.md) |
Локально E2E можно гонять установленным Chrome, без скачивания браузера:
PLAYWRIGHT_CHANNEL=chrome npm run test:e2e.
CI (.github/workflows) на каждый push и pull request: линт, юнит,
сборка, типы, аудит зависимостей, E2E на десктопе и телефоне, E2E со входом
на локальной Supabase, все миграции с нуля + pgTAP + нагрузочный прогон +
линт схемы, CodeQL. Как изменения схемы доходят до прода —
docs/STAGING.md.
Полный список с пояснениями — .env.local.example. Коротко:
| Переменная | Где | Зачем |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY | везде | клиент Supabase (защищён RLS) |
NEXT_PUBLIC_USE_MOCKS | везде | true — демо без базы |
NEXT_PUBLIC_SITE_URL | прод | адрес для ссылок в письмах (иначе — домен Vercel) |
SUPABASE_SECRET_KEY, STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET | только сервер | проверка личности |
LEGAL_OPERATOR_* | прод | Impressum (docs/LEGAL.md) |
app/
(app)/ экраны приложения (после входа)
(feed)/ лента: ?tab=following | ?tab=university
create/ post/[id]/ post/[id]/edit/
u/[nickname]/ messages/ search/ notifications/ settings/
auth/ вход, регистрация, подтверждение почты, сброс пароля
legal/ Impressum, конфиденциальность, условия, правила
actions/ server actions — вся запись
api/ health, выгрузка данных, вебхук Stripe
components/
ui/ примитивы: кнопки, поля, листы, иконки, аватары
chat/ dm/ feed/ profile/ search/ create/ settings/ safety/ legal/
lib/
data/ чтение из Supabase (с RLS); index.ts — переключатель моков
actions/actor.ts кто действует, ошибки словами
validate.ts проверка аргументов server actions
csp.ts Content-Security-Policy с nonce
live.ts use-presence.ts realtime: сигналы, «печатает», присутствие
types.ts format.ts … домен и чистые правила (с юнит-тестами)
mock/ демо-данные
supabase/
migrations/ 0001…0043 — схема, RLS, триггеры, cron
tests/database/ pgTAP: права и триггеры
perf/ нагрузочный прогон: данные, запросы, бюджеты
seed.sql config.toml
e2e/ Playwright + axe, демо-данные
e2e-live/ Playwright со входом на локальной Supabase
docs/ см. ниже
| Файл | О чём |
|---|---|
docs/ARCHITECTURE.md | как устроено, куда идут данные, решения |
docs/DATABASE.md | таблицы, политики, функции, миграции |
docs/AUTH.md | вход и аккаунт: архитектура, потоки, меры защиты, лимиты, будущая проверка вуза |
docs/PERFORMANCE.md | нагрузочный прогон: что было медленно, что изменено, цифры до и после |
docs/STAGING.md | стейджинг, правила миграций, порядок выкатки, что делать при сбое |
docs/SECURITY.md | модель угроз, что чем защищено, что сделать руками |
docs/MODERATION.md | как разбирать жалобы (DSA) |
docs/LEGAL.md | Impressum, DSGVO, DSA — что сделано и что за оператором |
docs/ui-contract.md, docs/DESIGN.md | правила экранов, глоссарий, дизайн |
docs/ROADMAP.md | этапы и что дальше |
CONTRIBUTING.md | как вносить изменения |
isInFeed() (lib/format.ts) и в
представлениях active_posts и post_cards — и они обязаны совпадать.follows.