66 lines
2.5 KiB
Markdown
66 lines
2.5 KiB
Markdown
# 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)
|
||
• Не трогать другие приложения
|