feat(brand): иконка продукта — favicon в браузере, иконка окна лаунчера, ассет для ярлыка
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Quiet
- Tech stack
- html, python
- Domain
- build-system, desktop, frontend
Research direction
Start with the design guidance in docs/dev/design/web-design.md and inspect web/static/index.html, web/server.py, and launcher.py, plus the package configuration and scripts/check_wheel_contents.py. The issue leaves the icon design for the owner to decide and requires checking the browser and live launcher as well as packaging. Done means the shared-source assets work on both surfaces, are included in the installed wheel, and the listed checks pass.
Written by the indexing model from the issue text.
Description
Что предлагается
Своя иконка продукта — один SVG-источник и три производных ассета: favicon вкладки браузера, иконка окна лаунчера, файл для ярлыка в системе.
Зачем / проблема
Во вкладке браузера у веб-интерфейса стоит дефолтная иконка — глобус. Выглядит как случайная страница, а не как приложение (замечено на живом прогоне).
Проверил: иконки нет нигде.
web/static/index.html— ни одного<link rel="icon">;- в
web/static/нет ни одного.svg/.png/.ico; - логотип в шапке — эмодзи внутри текста:
<span class="topbar-logo">🐍 Stepik Python Grader</span>(index.html:15), то есть графического знака у проекта не существует; - лаунчер иконку окна не ставит —
iconphoto/iconbitmapвlauncher.pyне встречаются, окно получает стандартное перо Tk; - в
docs/assets/только скриншоты и gif.
Третий потребитель уже заявлен: ярлык на рабочем столе (#1185) без своего файла получит дефолтный значок Python — то есть проблема повторится ещё раз.
Scope
Дизайн (решение за владельцем, ниже заготовка).
- Фирменный цвет уже есть:
--color-primary: #01696f(app.css:63). - Требования к знаку жёсткие, потому что главный размер — 16×16: один силуэт, максимум два цвета, ни текста, ни мелких деталей.
- Предлагаемая идея: змейка, изгиб которой образует галочку — Python и «проверено» в одном силуэте. В 16 px читается как галочка, с 32 px видно змейку. Альтернативы слабее: чистая галочка безлика, монограмма «SG» ничего не говорит,
>_отсылает к CLI, хотя веб уже основная поверхность. - Знак должен читаться и на светлой, и на тёмной вкладке: без белой подложки, с контрастом, проверенным на обоих фонах. Вариант со
prefers-color-schemeвнутри SVG работает неровно по браузерам — надёжнее один нейтральный.
Реализация.
favicon.svgвweb/static/+<link rel="icon" type="image/svg+xml">вindex.html.- PNG 32×32 как fallback для старых браузеров и как источник для tkinter:
iconphotoпринимаетPhotoImage, то есть PNG/GIF, SVG не понимает. - Маршруты: сервер раздаёт статику по явным словарям — SVG в
_STATIC_ROUTES, PNG в_STATIC_BINARY_ROUTES(web/server.py:64и:92). Просто положить файл в каталог недостаточно, он не станет доступен. - Лаунчер:
iconphotoс путём черезimportlib.resources— иначе в установленном wheel файл не найдётся. - Ассеты должны попасть в wheel: в конфигурацию пакета их нужно внести явно, иначе
scripts/check_wheel_contents.pyпокажет расхождение либо (хуже) иконка молча не доедет до пользователя, поставившего через pipx. - ICO для ярлыка Windows — как задел под #1185; либо там же, либо отдельным шагом, но из того же источника.
Non-goals
- Не рисовать полноценный логотип с текстом и не менять шапку интерфейса — эмодзи в
topbar-logoостаётся, речь только об иконке. - Не тянуть иконку с внешнего CDN: CSP запрещает, и ассет обязан быть локальным.
- Не заводить PWA-манифест и набор иконок под все платформы — SVG + один PNG + ICO закрывают текущие поверхности.
- Не менять фирменный цвет.
Критерии приёмки
- Во вкладке браузера видна своя иконка вместо глобуса — проверено на светлой и тёмной теме браузера
- Знак различим в 16 × 16 (не «пятно») — проверено на реальной вкладке, а не в макете
- Окно лаунчера показывает ту же иконку вместо пера Tk
- Иконка приезжает в установленный пакет: после
pip install/pipx installона на месте,scripts/check_wheel_contents.pyчист - Все ассеты собраны из одного SVG-источника, лежащего в репозитории
- Внешних запросов за иконкой нет (CSP не нарушается)
- Проверено в браузере и в живом окне лаунчера — обе поверхности вне досягаемости CI
-
ruff/mypyчисто,python scripts/preflight.pyзелёный - Запись
changelog.d/<slug>.added.md
Ссылки
- Потребитель ассета: #1185 (ярлык в системе, файлы быстрого запуска)
- Поверхности: #661 (лаунчер), веб-интерфейс
--serve - Каноны: docs/dev/design/web-design.md, docs/use/web-interface.md
- Dominant language
- Python
- Stars
- 3
- Forks
- 6
- Avg merge
- 2h 41m
- Merged PRs (30d)
- 48
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from ArtVsMark/Stepik-Python-Grader
-
Difficulty 2/5 1-3 hours Newbie friendliness 48/100
ArtVsMark/Stepik-Python-Grader#1636 ·
Maintainers usually reply within 1 day
-
Difficulty 3/5 Half a day Newbie friendliness 35/100
ArtVsMark/Stepik-Python-Grader#1635 ·
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 18/100
ArtVsMark/Stepik-Python-Grader#1634 ·
Maintainers usually reply within 1 day
-
Difficulty 3/5 1-2 days Newbie friendliness 32/100
ArtVsMark/Stepik-Python-Grader#1633 ·
Maintainers usually reply within 1 day
-
Каталог v1.12.0: Python 3.14 / 3.15 / 3.16 — 3.15 в основной CI, 3.16 в python-next, подъём действийOpen
Difficulty 3/5 1-2 days Newbie friendliness 30/100
ArtVsMark/Stepik-Python-Grader#1632 ·
Maintainers usually reply within 1 day
All issues in ArtVsMark/Stepik-Python-Grader
Similar issues
-
component:benchmark
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
agentic-os-org/ANOLISA#9177 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
distrochooser/distrochooser#520 ·
Maintainers usually reply within 2 days
-
Status: Needs confirmation Status: Needs triage
Difficulty 2/5 1-3 hours Newbie friendliness 64/100
Maintainers usually reply within 1 day
-
[BUG] Published Docker images lack the redis extra: HEADROOM_COMPRESS_SESSION_STORE stops startupPossibly taken @AlessandroSpallina claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
headroomlabs-ai/headroom#4513 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 65/100
codespell-project/codespell#4060 ·
Maintainers usually reply within 1 day