DaydreamMods
NOVA
Двадцать идей следующему разработчику. Раздел оставил Nova, аутсорс-разработчик этого сайта.
Этот раздел оставил Nova. Nova — сторонний разработчик, который собрал сайт по заказу. Это не сотрудник студии и не автор сборок.
Ниже не обещание сроков и не список багов. Это заметки следующему, кто будет вести платформу: подписка, кабинет, админка, файлы на диске, Robokassa и эта документация.
1. Поток загрузки без буфера в памяти
Сейчас ZIP целиком собирается в памяти процесса, и большой архив легко упирается в таймаут. Писать файл на диск потоком, по кускам, и только потом отвечать ключом local:.
2. Докачка и отмена
Кнопка «Отменить» на полосе загрузки и повтор с того места, где оборвалось. Иначе архив на 300 МБ каждый раз начинают сначала.
3. Настоящий CDN вместо пометки «в разработке»
Когда бакет появится, ключ local: при публикации версии уезжает в S3, а скачивание идёт оттуда. Админка показывает, где лежит файл: диск или бакет.
4. Проверка архива до публикации
После загрузки смотреть, что это ZIP, а не переименованный exe, и что внутри есть ожидаемый манифест сборки. Черновик не становится published, пока проверка не прошла.
5. Автопродление
Сейчас в кабинете честно написано, что его нет. Следующий шаг — повторный счёт за несколько дней до endsAt и письмо со ссылкой, без списания «само собой», пока Robokassa не подтвердит.
6. Письмо за три дня до конца
Отдельная задача по расписанию: активные подписки, у которых конец через 72 часа, и одно письмо на подписку. Повторно в ту же дату не слать.
7. Истечение статусом, а не только отказом скачивания
Раз в час переводить active с прошедшим endsAt в expired. Кабинет и Dashboard тогда не расходятся.
8. Роль Discord по факту оплаты
После ResultURL ставить роль тарифа через бота и снимать её, когда подписка перестала быть активной. В тарифе поле роли уже предусмотрено.
9. История переписки в письме целиком
Ответ поддержки сейчас приходит отдельным письмом. Имеет смысл вкладывать последние реплики, чтобы человек не искал ссылку /support/t/… в старом ящике.
10. Внутренняя заметка в тикете
Текст, который видит только администратор: «ждал лог», «дубль платежа». Клиенту на странице переписки его нет.
11. Черновик ответа
Незакрытый текст в поле ответа не должен пропадать при переключении тикета. Хранить черновик в браузере по id обращения.
12. Промокод на витрине до оплаты
Сейчас код вводят на checkout. Показать цену со скидкой на карточке тарифа после ввода кода, чтобы человек видел сумму до Robokassa.
13. Одноразовые коды
Флаг «один раз на аккаунт». Иначе один код на 100 использований может сжечь один человек десятью почтами — лимит общий это не ловит, если не считать уникальных пользователей.
14. Страница сборки из блоков
Особенности и механики уже строки в базе. Дальше — порядок блоков: текст, галерея, цитата, требования. Редактор как у документов, но для мира.
15. Превью страницы мира из админки
Кнопка «Как увидит игрок» открывает /projects/slug с черновиком, не дожидаясь публикации. Сейчас черновик просто скрыт.
16. Журнал версий на витрине
На странице мира список опубликованных версий уже есть. Добавить сравнение «что было в 0.8 / что в 0.9» из changelog, без отдельного сайта.
17. Дашборд без пустых нулей
Если визитов нет, карточка всё равно объясняет, откуда цифра: трекер на маркетинговых страницах, не админка. Иначе кажется, что статистика сломана.
18. Поиск по админке
Настройки уже ищутся внутри страницы. Общий поиск по нику, почте, коду промокода, slug сборки и номеру счёта — одна строка в шапке панели.
19. Резервная копия одной кнопкой
Раздел в админке не отдаёт дамп в браузер (это опасно), а ставит задачу: pg_dump и архив storage/packs в /var/backups, в интерфейсе — дата последнего успешного снимка и ошибка, если cron молчит.
20. Документация из репозитория сама
Страницы этой доки — MDX рядом с кодом. Хук или ручной шаг после выкладки: node documentation/build.mjs и копирование в /var/www/docs.daydreammods.ru, чтобы docs не отставали от прода на неделю.