100 lines
3.2 KiB
Markdown
100 lines
3.2 KiB
Markdown
---
|
||
pageType: source
|
||
id: source.dev-task
|
||
title: DEV TASK
|
||
sourceType: local-file
|
||
sourcePath: /home/node/.openclaw/workspace/tasks/apps-portal/DEV-TASK.md
|
||
ingestedAt: 2026-04-10T13:37:41.693Z
|
||
updatedAt: 2026-04-10T13:37:41.693Z
|
||
status: active
|
||
---
|
||
|
||
# DEV TASK
|
||
|
||
## Source
|
||
- Type: `local-file`
|
||
- Path: `/home/node/.openclaw/workspace/tasks/apps-portal/DEV-TASK.md`
|
||
- Bytes: 2574
|
||
- Updated: 2026-04-10T13:37:41.693Z
|
||
|
||
## Content
|
||
```text
|
||
# 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)
|
||
• Не трогать другие приложения
|
||
|
||
```
|
||
|
||
## Notes
|
||
<!-- openclaw:human:start -->
|
||
<!-- openclaw:human:end -->
|
||
|
||
## Related
|
||
<!-- openclaw:wiki:related:start -->
|
||
### Referenced By
|
||
|
||
- [Apps Portal](entities/project-apps-portal.md)
|
||
<!-- openclaw:wiki:related:end -->
|