seelect
Веб-приложение на Laravel/Livewire для подбора до трёх event-подрядчиков с объяснениями.
О проекте
Команда: nxt
Кейс HackAlem.ai: Креативные индустрии — Firebird
Стадия: Доведённый продукт
Задача кейса: «#79-lite»: подобрать до 3 подрядчиков для мероприятия и объяснить выбор
Суть
Веб-приложение на Laravel/Livewire для подбора до трёх event-подрядчиков с объяснениями. Параметры вводятся формой или в свободном NLP-чате на казахском или русском через Alem qwen3-8. Приложение задеплоено онлайн.
Как устроено
Форма или чат → ContractorCatalog (CSV) → ContractorMatcher с жёсткими фильтрами (город, категория, свободная дата, бюджет, формат, язык, часы) → три исхода: matched / no_category / no_matches. При matched строятся PHP-объяснения либо опциональное AI-ранжирование (AiContractorRanker) с проверкой цитат. Принцип: «сначала правила, потом речь модели», и занятость отсекается до любой LLM. Без ключа чат работает пошагово на чипах.
Ключевые решения
- жёсткие фильтры до LLM
- LLM-ранжирование с проверкой цитат
- LLM-парсинг свободного запроса
- детерминированный порядок выдачи
Особенности
LLM физически не может «дорисовать» свободную дату, потому что календарь режется в PHP до вызова модели. Интерфейс по умолчанию на казахском. Демо-видео с озвучкой, субтитрами и сценами собрано программно (hyperframes, build-video.mjs, GSAP).
Стек
PHP 8.4 · Laravel 13 · Livewire 4 · Vite · GitHub Actions
Модели
Alem qwen3-8 (OpenAI-compatible)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-6c43f963-nxt.
README
README.mdseelect
Онлайн-демо: https://seelect.reesang.dev
Умный подбор event-подрядчиков для Казахстана.
Хакатон-задача #79-lite.
Стек: Laravel 13 · Livewire 4 · PHP 8.4 · Alem qwen3-8 (опционально)
Данные: 66 профилей в storage/app/private/contractors.csv
Питч в двух минутах
Проблема
Организатор свадьбы, той или корпоратива в Алматы/Астане уже видит каталог. Боль не в том, чтобы «найти ещё ссылок», а в том, чтобы выбрать:
- кто свободен в нужную дату (календарь густой, особенно в декабре);
- кто влезает в бюджет;
- кто берёт этот формат и язык;
- и почему система предлагает именно этих троих.
Сейчас это ручной перебор: открыть профиль → сверить дату → сверить цену → надеяться, что формулировка «подходит» правда.
Инсайт
На агрегаторах ценность не в длине выдачи, а в доверии к shortlist. Если у каждой карточки есть проверяемая причина — заказчик быстрее идёт в контакт.
Решение
seelect принимает параметры мероприятия и возвращает до 3 карточек с объяснением: бюджет, формат, язык, длительность или смысл описания. Без общих фраз вроде «отличный выбор для вашего события».
Занятые на дату не попадают в выдачу. Если вариантов меньше трёх или их нет — система честно говорит почему: нет категории в городе / все заняты / бюджет / формат.
Заказчик может заполнить форму или написать своими словами в ИИ-чате (Alem). Дальше тот же строгий подбор.
Почему это не «ещё один фильтр»
| Обычный каталог | seelect |
|---|---|
| Длинный список | До 3 понятных вариантов |
| «Сортировка по цене» | Объяснение, почему именно этот профиль |
| Пустой экран | Три явных исхода словами |
| Только форма | Форма + живой NLP-чат |
| AI «угадывает» занятость | PHP режет календарь до любой модели |
Что показать на демо
- Плотная категория (Ведущий, 23.09) → 3 разные карточки, прочитать объяснения вслух.
- Сменить дату на 24.09 → выдача меняется (календарь).
- Редкая категория (Флорист) → меньше трёх + метка synthetic.
- Бюджет 1 ₸ → пустой исход с причиной.
- (Опционально) Чат одной фразой на казахском/русском.
Куда расти
Заявки подрядчику, кабинеты и живые календари, пакеты «ведущий + фото + зал», white-label для агрегаторов, другие города и MICE.
Как запустить локально
Требования: PHP 8.4+, Composer, Node.js + npm.
База данных не нужна.
git clone <repo-url>
cd hack-6c43f963-nxt
composer install
cp .env.example .env
php artisan key:generate
npm install
npm run build
php artisan config:clear
php artisan serve
Откройте http://127.0.0.1:8000.
Минимум в .env:
APP_NAME=seelect
SESSION_DRIVER=file
CACHE_STORE=file
QUEUE_CONNECTION=sync
CONTRACTOR_AI_ENABLED=false
Не запускайте composer run setup — скрипт шаблона тянет миграции, они здесь не нужны.
Опционально: ИИ (Alem)
CONTRACTOR_AI_ENABLED=true
CONTRACTOR_AI_PROVIDER=openai-compatible
CONTRACTOR_AI_MODEL=qwen3-8
OPENAI_COMPATIBLE_URL=https://llm.alem.ai/v1
OPENAI_COMPATIBLE_API_KEY=ваш_ключ
CONTRACTOR_CACHE_STORE=file
После изменений: php artisan config:clear.
Без ключа всё работает: фильтры и объяснения на PHP, чат — пошагово с чипами.
Что умеет продукт
- Форма или ИИ-чат: город, дата, формат, категория, бюджет (+ язык и часы).
- PHP-фильтр: город, категория, свободная дата, бюджет, формат, язык, часы.
- До 3 карточек: имя, фото, категория, город, цена «от», объяснение.
- Три исхода: подобрали / нет категории в городе / кандидаты есть, но условия не проходят.
- Профиль и заявка на запись (демо-контакт поверх рекомендации).
Интерфейс: kk / ru, шрифт IBM Plex Sans.
Соответствие заданию
| Требование | Статус |
|---|---|
| Вход: город, дата, тип, категория, бюджет; опц. часы и язык | да |
| Выход: ≤3 карточки с объяснением | да |
| Занятый на дату не в выдаче | да |
| Меньше трёх — показать сколько есть и почему | да |
| Детерминизм: тот же запрос → тот же порядок | да |
| Три исхода: matched / no_category / no_matches | да |
| Без общих маркетинговых фраз | да |
| Ответ за разумное время | да |
| Разные даты → разная выдача | да |
| Synthetic / imputed помечены | да |
Сценарии для проверки
CONTRACTOR_AI_ENABLED=false, язык и часы пустые.
| Сценарий | Параметры | Ожидание |
|---|---|---|
| Плотная категория | Алматы, Ведущий, свадьба, 23.09.2026, 1 500 000 ₸ | 3 карточки: Мицури Канроджи, Эмилия, Сон Гоку |
| Другая дата | то же, 24.09.2026 | Кики (1 карточка) |
| Редкая категория | Алматы, Флорист, свадьба, 23.09.2026, 500 000 ₸ | Тони Тони Чоппер + Тихиро Огино (синтетический) |
| Нет категории | Зарубежье, Флорист, … | «Пока нет в каталоге» |
| Не проходят условия | Алматы, Флорист, …, бюджет 1 ₸ | «Нужны другие условия» + цена выше бюджета |
Повтор того же запроса даёт тот же порядок.
Как устроено
Форма / NLP-чат
→ ContractorCatalog (CSV)
→ ContractorMatcher (жёсткие фильтры)
→ no_category | no_matches | matched
→ при matched: PHP-объяснения или AI-ранжирование + проверка цитат
→ карточки → подробнее / заявка
Идея пайплайна для жюри: сначала правила, потом речь модели. LLM не может «дорисовать» свободную дату.
| Файл | Назначение |
|---|---|
resources/views/pages/⚡contractor-finder.blade.php | экран: форма, витрина, чат, результаты |
app/Services/ContractorCatalog.php | чтение CSV |
app/Services/ContractorMatcher.php | фильтры, статусы, объяснения |
app/Services/AiContractorRanker.php | опциональный AI-порядок |
app/Services/AiContractorConversation.php | NLP-чат (Alem) |
app/Services/ContractorChatGuide.php | чат без AI (чипы) |
storage/app/private/contractors.csv | каталог |
public/images/contractors/ | фото профилей |
Тесты
php artisan test --compact tests/Feature/Services tests/Feature/Livewire
Весь набор: php artisan test --compact.
Ссылки
- Демо: https://seelect.reesang.dev
- Задание: Google Doc #79-lite
Авторы коммитов
История коммитов
- 2026-09-23 17:59Update check-result.json in seelect demo to reflect new binary contentrawitjan
- 2026-09-23 17:59Update seelect demo video generation to include scene IDs and transitionsrawitjan
- 2026-09-23 17:57Remove outdated snapshot images from seelect demorawitjan
- 2026-09-23 17:57Revise seelect demo HTML and storyboard for enhanced content and structurerawitjan
- 2026-09-23 17:55Update snapshot images in seelect demo for enhanced visual contentrawitjan
- 2026-09-23 17:50Enhance seelect demo with new audio source and UI adjustmentsrawitjan
- 2026-09-23 17:48Add registry items to hyperframes.json for new component integrationrawitjan
- 2026-09-23 17:40Enhance contractor finder with improved AI chat features and UI updatesrawitjan
Все коммиты (29)
- 2026-09-23 17:34Refactor CSS and update README for improved branding and functionalityrawitjan
- 2026-09-23 17:26Revise README.md to enhance project clarity and detailrawitjan
- 2026-09-23 17:23Update branding and enhance contractor finder functionalityrawitjan
- 2026-09-23 17:17Merge branch 'main' of https://github.com/BAITC-Hacks/hack-6c43f963-nxtrawitjan
- 2026-09-23 17:14Update contractor finder with AI chat enhancements and UI improvementsrawitjan
- 2026-09-23 16:50Enhance contractor finder with AI chat integration and showcase featurerawitjan
- 2026-09-23 16:17Load finder design as a dedicated Vite stylesheet entryrawitjan
- 2026-09-23 16:13Redesign contractor finder with editorial layout and responsive recommendationsrawitjan
- 2026-09-23 15:51Add Kazakh-first localization with persistent Russian language switchrawitjan
- 2026-09-23 15:40Build event contractor finder MVP with validated AI ranking and fallbackrawitjan
- 2026-09-23 15:37Add contractor finder Livewire page and integration READMEserikalisherbil
- 2026-09-23 15:30Add deterministic contractor recommendationsBeibarys
- 2026-09-23 15:21Add normalized contractor CSV catalogBeibarys
- 2026-09-23 15:15Add normalized CSV contractor catalog and testsrawitjan
- 2026-09-23 14:47gghghhghgserikalisherbil
- 2026-09-23 14:37Add additional text to README.mdBeibarys
- 2026-09-23 14:34Add placeholder text to README.mdBeibarys
- 2026-09-23 14:21Add README.md fileBeibarys
- 2026-09-23 14:13Add console and web routes, implement settings and authentication testsrawitjan
- 2026-09-23 14:05Обновить описание выбранного кейса в READMErawitjan
- 2026-09-23 13:57Add selected case details to READMEserikalisherbil
Структура репозитория (336 файлов)
.codex/config.toml .editorconfig .env.example .gitattributes .github/dependabot.yml .github/workflows/tests.yml .gitignore .htaccess .npmrc README.md app/Actions/Fortify/CreateNewUser.php app/Actions/Fortify/ResetUserPassword.php app/Concerns/PasswordValidationRules.php app/Concerns/ProfileValidationRules.php app/Http/Controllers/Controller.php app/Http/Middleware/SetLocale.php app/Livewire/Actions/Logout.php app/Models/User.php app/Providers/AppServiceProvider.php app/Providers/FortifyServiceProvider.php app/Services/AiContractorChatParser.php app/Services/AiContractorConversation.php app/Services/AiContractorRanker.php app/Services/ContractorCatalog.php app/Services/ContractorChatGuide.php app/Services/ContractorMatcher.php app/Support/ShowcaseCatalog.php artisan bootstrap/app.php bootstrap/cache/.gitignore bootstrap/providers.php composer.json composer.lock config/ai.php config/app.php config/auth.php config/cache.php config/contractors.php config/database.php config/filesystems.php config/fortify.php config/logging.php config/mail.php config/queue.php config/services.php config/session.php database/.gitignore database/factories/UserFactory.php database/migrations/0001_01_01_000000_create_users_table.php database/migrations/0001_01_01_000001_create_cache_table.php database/migrations/0001_01_01_000002_create_jobs_table.php database/migrations/2024_01_01_000000_create_passkeys_table.php database/migrations/2025_08_14_170933_add_two_factor_columns_to_users_table.php database/seeders/DatabaseSeeder.php package-lock.json package.json phpstan.neon phpunit.xml pint.json public/.htaccess public/apple-touch-icon.png public/favicon.ico public/favicon.svg public/fonts/inter-medium.ttf public/fonts/inter-regular.ttf public/fonts/space-grotesk-medium.ttf public/images/contractors/portrait-01.jpg public/images/contractors/portrait-02.jpg public/images/contractors/portrait-03.jpg public/images/contractors/portrait-04.jpg public/images/contractors/portrait-05.jpg public/images/contractors/portrait-06.jpg public/images/contractors/portrait-07.jpg public/images/contractors/portrait-08.jpg public/images/contractors/portrait-09.jpg public/images/contractors/portrait-10.jpg public/images/firebird-glyph.svg public/images/showcase/showcase-band.jpg public/images/showcase/showcase-florist.jpg public/images/showcase/showcase-hall.jpg public/images/showcase/showcase-host.jpg public/images/showcase/showcase-photo.jpg public/images/showcase/showcase-wedding.jpg public/index.php public/robots.txt resources/css/app.css resources/css/finder.css resources/js/app.js resources/js/passkeys.js resources/lang/kk.json resources/lang/ru.json resources/videos/seelect-demo/.hyperframes/caption-skin.html resources/videos/seelect-demo/AGENTS.md resources/videos/seelect-demo/BRIEF.md resources/videos/seelect-demo/CLAUDE.md resources/videos/seelect-demo/SCRIPT.md resources/videos/seelect-demo/STORYBOARD.md resources/videos/seelect-demo/assets/audio/concat.txt resources/videos/seelect-demo/assets/audio/music-source.wav resources/videos/seelect-demo/assets/audio/music.wav resources/videos/seelect-demo/assets/audio/narration.wav resources/videos/seelect-demo/assets/audio/raw-1.wav resources/videos/seelect-demo/assets/audio/raw-10.wav resources/videos/seelect-demo/assets/audio/raw-2.wav resources/videos/seelect-demo/assets/audio/raw-3.wav resources/videos/seelect-demo/assets/audio/raw-4.wav resources/videos/seelect-demo/assets/audio/raw-5.wav resources/videos/seelect-demo/assets/audio/raw-6.wav resources/videos/seelect-demo/assets/audio/raw-7.wav resources/videos/seelect-demo/assets/audio/raw-8.wav resources/videos/seelect-demo/assets/audio/raw-9.wav resources/videos/seelect-demo/assets/audio/voice-1.wav resources/videos/seelect-demo/assets/audio/voice-10.wav resources/videos/seelect-demo/assets/audio/voice-2.wav resources/videos/seelect-demo/assets/audio/voice-3.wav resources/videos/seelect-demo/assets/audio/voice-4.wav resources/videos/seelect-demo/assets/audio/voice-5.wav resources/videos/seelect-demo/assets/audio/voice-6.wav resources/videos/seelect-demo/assets/audio/voice-7.wav resources/videos/seelect-demo/assets/audio/voice-8.wav resources/videos/seelect-demo/assets/audio/voice-9.wav resources/videos/seelect-demo/assets/brand-mark.svg resources/videos/seelect-demo/assets/chat.png resources/videos/seelect-demo/assets/date.png resources/videos/seelect-demo/assets/empty.png resources/videos/seelect-demo/assets/fonts/IBMPlexSans-Regular.woff2 resources/videos/seelect-demo/assets/fonts/IBMPlexSans.ttf resources/videos/seelect-demo/assets/form.png resources/videos/seelect-demo/assets/gsap.min.js resources/videos/seelect-demo/assets/hero.png resources/videos/seelect-demo/assets/media-manifest.json resources/videos/seelect-demo/assets/profile.png resources/videos/seelect-demo/assets/results.png resources/videos/seelect-demo/assets/video.css resources/videos/seelect-demo/assets/wedding.jpg resources/videos/seelect-demo/audio-sources.json resources/videos/seelect-demo/build-audio.mjs resources/videos/seelect-demo/build-video.mjs resources/videos/seelect-demo/captions.json resources/videos/seelect-demo/captions.ru.srt resources/videos/seelect-demo/captions.ru.vtt resources/videos/seelect-demo/capture/.cursorrules resources/videos/seelect-demo/capture/AGENTS.md resources/videos/seelect-demo/capture/CLAUDE.md resources/videos/seelect-demo/capture/assets/fonts/zYXzKVElMYYaJe8bpLHnCwDKr932-G7dytD-Dmu1syxQKYbSB4ZhRNU.woff2 resources/videos/seelect-demo/capture/assets/fonts/zYXzKVElMYYaJe8bpLHnCwDKr932-G7dytD-Dmu1syxRKYbSB4ZhRNU.woff2 resources/videos/seelect-demo/capture/assets/fonts/zYXzKVElMYYaJe8bpLHnCwDKr932-G7dytD-Dmu1syxTKYbSB4ZhRNU.woff2 resources/videos/seelect-demo/capture/assets/fonts/zYXzKVElMYYaJe8bpLHnCwDKr932-G7dytD-Dmu1syxaKYbSB4ZhRNU.woff2 resources/videos/seelect-demo/capture/assets/fonts/zYXzKVElMYYaJe8bpLHnCwDKr932-G7dytD-Dmu1syxdKYbSB4ZhRNU.woff2 resources/videos/seelect-demo/capture/assets/fonts/zYXzKVElMYYaJe8bpLHnCwDKr932-G7dytD-Dmu1syxeKYbSB4Zh.woff2 resources/videos/seelect-demo/capture/assets/svgs/contact-sheet.jpg resources/videos/seelect-demo/capture/assets/svgs/logo-aa7a6bc3.svg resources/videos/seelect-demo/capture/assets/svgs/logo-db703159.svg resources/videos/seelect-demo/capture/assets/svgs/svg-cb8a76e6.svg resources/videos/seelect-demo/capture/assets/svgs/svg-df7721a6.svg resources/videos/seelect-demo/capture/extracted/animations.json resources/videos/seelect-demo/capture/extracted/asset-descriptions.md resources/videos/seelect-demo/capture/extracted/design-styles.json resources/videos/seelect-demo/capture/extracted/fonts-manifest.json resources/videos/seelect-demo/capture/extracted/icons-manifest.json resources/videos/seelect-demo/capture/extracted/page.html resources/videos/seelect-demo/capture/extracted/response.json resources/videos/seelect-demo/capture/extracted/tokens.json resources/videos/seelect-demo/capture/extracted/visible-text.txt resources/videos/seelect-demo/capture/meta.json resources/videos/seelect-demo/capture/screenshots/contact-sheet.jpg resources/videos/seelect-demo/capture/screenshots/full-page.png resources/videos/seelect-demo/capture/screenshots/scroll-000.png resources/videos/seelect-demo/capture/screenshots/scroll-023.png resources/videos/seelect-demo/capture/screenshots/scroll-047.png resources/videos/seelect-demo/capture/screenshots/scroll-070.png resources/videos/seelect-demo/capture/screenshots/scroll-093.png resources/videos/seelect-demo/capture/screenshots/scroll-100.png resources/videos/seelect-demo/capture/states/chat/gsap.min.js resources/videos/seelect-demo/capture/states/chat/index.html resources/videos/seelect-demo/capture/states/chat/snapshots/contact-sheet.jpg resources/videos/seelect-demo/capture/states/chat/snapshots/frame-00-at-1s.png resources/videos/seelect-demo/capture/states/date/gsap.min.js resources/videos/seelect-demo/capture/states/date/index.html resources/videos/seelect-demo/capture/states/date/snapshots/contact-sheet.jpg resources/videos/seelect-demo/capture/states/date/snapshots/frame-00-at-1s.png resources/videos/seelect-demo/capture/states/empty/gsap.min.js resources/videos/seelect-demo/capture/states/empty/index.html resources/videos/seelect-demo/capture/states/empty/snapshots/contact-sheet.jpg resources/videos/seelect-demo/capture/states/empty/snapshots/frame-00-at-1s.png resources/videos/seelect-demo/capture/states/form/gsap.min.js resources/videos/seelect-demo/capture/states/form/index.html resources/videos/seelect-demo/capture/states/form/snapshots/contact-sheet.jpg resources/videos/seelect-demo/capture/states/form/snapshots/frame-00-at-1s.png resources/videos/seelect-demo/capture/states/hero/gsap.min.js resources/videos/seelect-demo/capture/states/hero/index.html resources/videos/seelect-demo/capture/states/hero/snapshots/contact-sheet.jpg resources/videos/seelect-demo/capture/states/hero/snapshots/frame-00-at-1s.png resources/videos/seelect-demo/capture/states/profile/gsap.min.js resources/videos/seelect-demo/capture/states/profile/index.html resources/videos/seelect-demo/capture/states/profile/snapshots/contact-sheet.jpg resources/videos/seelect-demo/capture/states/profile/snapshots/frame-00-at-1s.png resources/videos/seelect-demo/capture/states/results/gsap.min.js resources/videos/seelect-demo/capture/states/results/index.html resources/videos/seelect-demo/capture/states/results/snapshots/contact-sheet.jpg resources/videos/seelect-demo/capture/states/results/snapshots/frame-00-at-1s.png resources/videos/seelect-demo/catalog-motion.json resources/videos/seelect-demo/check-result.json resources/videos/seelect-demo/compositions/components/line-by-line-slide.html resources/videos/seelect-demo/compositions/frames/01.html resources/videos/seelect-demo/compositions/frames/02.html resources/videos/seelect-demo/compositions/frames/03.html resources/videos/seelect-demo/compositions/frames/04.html resources/videos/seelect-demo/compositions/frames/05.html resources/videos/seelect-demo/compositions/frames/06.html resources/videos/seelect-demo/compositions/frames/07.html resources/videos/seelect-demo/compositions/frames/08.html resources/videos/seelect-demo/compositions/frames/09.html resources/videos/seelect-demo/compositions/frames/10.html resources/videos/seelect-demo/export-screens.php resources/videos/seelect-demo/frame.md resources/videos/seelect-demo/hyperframes.json resources/videos/seelect-demo/hyperframes.lock.json resources/videos/seelect-demo/index.html resources/videos/seelect-demo/lint-result.json resources/videos/seelect-demo/meta.json resources/videos/seelect-demo/package.json resources/videos/seelect-demo/scenes.json resources/videos/seelect-demo/snapshots/contact-sheet-1.jpg resources/videos/seelect-demo/snapshots/contact-sheet-2.jpg resources/videos/seelect-demo/snapshots/final/contact-sheet-1.jpg resources/videos/seelect-demo/snapshots/final/contact-sheet-2.jpg resources/videos/seelect-demo/snapshots/final/contact-sheet-3.jpg resources/videos/seelect-demo/snapshots/final/frame-00-at-7.9s.png resources/videos/seelect-demo/snapshots/final/frame-01-at-8.2s.png resources/videos/seelect-demo/snapshots/final/frame-02-at-13.9s.png resources/videos/seelect-demo/snapshots/final/frame-03-at-14.2s.png resources/videos/seelect-demo/snapshots/final/frame-04-at-23.9s.png resources/videos/seelect-demo/snapshots/final/frame-05-at-24.2s.png resources/videos/seelect-demo/snapshots/final/frame-06-at-33.9s.png resources/videos/seelect-demo/snapshots/final/frame-07-at-34.2s.png resources/videos/seelect-demo/snapshots/final/frame-08-at-41.9s.png resources/videos/seelect-demo/snapshots/final/frame-09-at-42.2s.png resources/videos/seelect-demo/snapshots/final/frame-10-at-48.9s.png resources/videos/seelect-demo/snapshots/final/frame-11-at-49.2s.png resources/videos/seelect-demo/snapshots/final/frame-12-at-59.9s.png resources/videos/seelect-demo/snapshots/final/frame-13-at-60.2s.png resources/videos/seelect-demo/snapshots/final/frame-14-at-68.9s.png resources/videos/seelect-demo/snapshots/final/frame-15-at-69.2s.png resources/videos/seelect-demo/snapshots/final/frame-16-at-76.9s.png resources/videos/seelect-demo/snapshots/final/frame-17-at-77.2s.png resources/videos/seelect-demo/snapshots/final/frame-18-at-12.5s.png resources/videos/seelect-demo/snapshots/final/frame-19-at-31.5s.png resources/videos/seelect-demo/snapshots/final/frame-20-at-67.5s.png resources/videos/seelect-demo/snapshots/final/frame-21-at-83s.png resources/videos/seelect-demo/snapshots/frame-00-at-4s.png resources/videos/seelect-demo/snapshots/frame-01-at-11s.png resources/videos/seelect-demo/snapshots/frame-02-at-19s.png resources/videos/seelect-demo/snapshots/frame-03-at-29s.png resources/videos/seelect-demo/snapshots/frame-04-at-38s.png resources/videos/seelect-demo/snapshots/frame-05-at-45.5s.png resources/videos/seelect-demo/snapshots/frame-06-at-54s.png resources/videos/seelect-demo/snapshots/frame-07-at-64.5s.png resources/videos/seelect-demo/snapshots/frame-08-at-73s.png resources/videos/seelect-demo/snapshots/frame-09-at-82s.png resources/views/components/app-logo-icon.blade.php resources/views/components/app-logo.blade.php resources/views/components/auth-header.blade.php resources/views/components/auth-session-status.blade.php resources/views/components/desktop-user-menu.blade.php resources/views/components/passkey-registration.blade.php resources/views/components/passkey-verify.blade.php resources/views/components/placeholder-pattern.blade.php resources/views/dashboard.blade.php resources/views/flux/icon/book-open-text.blade.php resources/views/flux/icon/chevrons-up-down.blade.php resources/views/flux/icon/folder-git-2.blade.php resources/views/flux/icon/layout-grid.blade.php resources/views/flux/navlist/group.blade.php resources/views/layouts/app.blade.php resources/views/layouts/app/header.blade.php resources/views/layouts/app/sidebar.blade.php resources/views/layouts/auth.blade.php resources/views/layouts/auth/card.blade.php resources/views/layouts/auth/simple.blade.php resources/views/layouts/auth/split.blade.php resources/views/layouts/finder.blade.php resources/views/pages/auth/confirm-password.blade.php resources/views/pages/auth/forgot-password.blade.php resources/views/pages/auth/login.blade.php resources/views/pages/auth/register.blade.php resources/views/pages/auth/reset-password.blade.php resources/views/pages/auth/two-factor-challenge.blade.php resources/views/pages/auth/verify-email.blade.php resources/views/pages/settings/layout.blade.php resources/views/pages/settings/two-factor/⚡recovery-codes.blade.php resources/views/pages/settings/⚡appearance.blade.php resources/views/pages/settings/⚡delete-user-form.blade.php resources/views/pages/settings/⚡delete-user-modal.blade.php resources/views/pages/settings/⚡profile.blade.php resources/views/pages/settings/⚡security.blade.php resources/views/pages/settings/⚡two-factor-setup-modal.blade.php resources/views/pages/⚡contractor-finder.blade.php resources/views/partials/head.blade.php resources/views/partials/settings-heading.blade.php resources/views/welcome.blade.php routes/console.php routes/settings.php routes/web.php skills-lock.json storage/app/.gitignore storage/app/private/.gitignore storage/app/private/contractors.csv storage/app/public/.gitignore storage/framework/.gitignore storage/framework/cache/.gitignore storage/framework/cache/data/.gitignore storage/framework/sessions/.gitignore storage/framework/testing/.gitignore storage/framework/views/.gitignore storage/logs/.gitignore tests/Feature/Auth/AuthenticationTest.php tests/Feature/Auth/EmailVerificationTest.php tests/Feature/Auth/PasswordConfirmationTest.php tests/Feature/Auth/PasswordResetTest.php tests/Feature/Auth/RegistrationTest.php tests/Feature/Auth/TwoFactorChallengeTest.php tests/Feature/DashboardTest.php tests/Feature/ExampleTest.php tests/Feature/Livewire/ContractorChatTest.php tests/Feature/Livewire/ContractorFinderLocaleTest.php tests/Feature/Livewire/ContractorFinderTest.php tests/Feature/Services/AiContractorRankerTest.php tests/Feature/Services/ContractorCatalogTest.php tests/Feature/Services/ContractorMatcherTest.php tests/Feature/Settings/ProfileUpdateTest.php tests/Feature/Settings/SecurityTest.php tests/Pest.php tests/TestCase.php tests/Unit/ExampleTest.php vite.config.js
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.