# DEV-TASK: Портал приложений (apps.mva154.duckdns.org)

## Контекст

Нужен портал-лендинг с карточками веб-приложений. Светлая тема, автогенерация аватарок.

**Документация:**
- Бизнес-требования: `tasks/apps-portal/docs/BRD.md`
- Техническое задание: `tasks/apps-portal/docs/TZ.md`

---

## Задача

### Шаг 1: Инфраструктура
1. Создать `config/apps.json` с двумя приложениями (noisemap, snowbike-rag)
2. Создать `requirements.txt` (flask, pillow)

### Шаг 2: Автогенерация аватарок
3. Реализовать функцию `generate_avatars()`:
   - Читает `config/apps.json`
   - Для каждого приложения проверяет `static/avatars/{id}.png`
   - Если файла нет — генерирует: градиентный фон (по хэшу name) + emoji/icon по центру
   - PNG 200×200

### Шаг 3: Flask сервер
4. Создать `server.py`:
   - GET `/` — главная (рендерит index.html с apps)
   - GET `/api/apps` — JSON
   - GET `/static/avatars/` — файлы
   - При старте: `generate_avatars()`

### Шаг 4: Главная страница
5. Создать `templates/index.html`:
   - Светлая тема (#F8FAFC фон, белые карточки)
   - Tailwind CSS через CDN, шрифт Inter
   - Карточки: аватарка 80×80, название, описание
   - Клик → переход на url приложения
   - Адаптивно: 4 → 2 → 1 колонка
   - Hover: lift-эффект, синяя рамка

### Шаг 5: Тест
6. Запустить `python server.py`
7. Проверить http://localhost:5560/
8. Добавить третье приложение в apps.json — проверить автогенерацию аватарки

---

## Критерии приёмки

- [ ] http://localhost:5560/ — портал с карточками
- [ ] Клик — переход на приложение
- [ ] Аватарки в static/avatars/ сгенерированы
- [ ] Светлая тема, красиво
- [ ] Адаптивно на мобильном
- [ ] /api/apps — JSON

---

## Важно

• Всё в `tasks/apps-portal/`
• Порт 5560
• Pillow для аватарок (pip install pillow)
• Не трогать другие приложения
