Inki
← Все шаблоны
Приложениепроверен 4 октября 2026 г.

Голосование с живыми результатами

Приложение с живыми данными: человек нажимает на вариант, и полосы сдвигаются у всех, кто открыл страницу. Голос можно перенести. Один файл, без своего сервера.

Claude.ai и Claude DesktopChatGPTDeepSeekClaude CodeCodexCursorОткрыть пример
Промпт
Сделай голосование с живыми результатами: приложение в одном HTML-файле, JavaScript внутри, без сборки и внешних библиотек. Вопрос: [вопрос]. Варианты:
- [вариант 1]
- [вариант 2]
- [ещё 1-4 варианта]

Данные хранит сайт (раздел «Данные Inki» ниже):
1. Коллекция options, режим open: title (в длинной форме с "constant": true, чтобы посетители не меняли текст), votes с индексом, order с индексом. Пустую коллекцию страница заполняет сама вариантами из запроса: doc(id).set с латинскими id и votes: 0.
2. Коллекция ballots, режим private: option (id выбранного варианта). Это голос самого человека: найди его через mine().

Поведение:
1. Варианты это большие кнопки. Нажатие прибавляет голос через inki.db.op.increment(1) и записывает ballot.
2. Нажатие на другой вариант переносит голос: increment(-1) у старого, increment(1) у нового, ballot обновляется.
3. В каждой кнопке полоса и процент, выбранный вариант помечен «ваш голос», внизу «Всего: 12 голосов».
4. Полосы обновляются сами, пока страница открыта (onSnapshot).

Оформление плаката: светлый серо-зелёный фон, вопрос огромным узким шрифтом Oswald. Каждый вариант белой карточкой со своим насыщенным цветом (синий, хвойный, бирюзовый, янтарный): проценты крупно этим цветом, полоса плавно заполняется, свой голос в рамке и с меткой «ваш голос». Текст шрифтом Golos Text (Google Fonts). Адаптивно под телефон, видимый фокус. В <title> и meta description: о чём голосование.

Правила Inki, добавляются к промпту при копировании:

## Правила Inki (добавь к результату)
- Внешние скрипты, стили и шрифты только с этих хостов: cdnjs.cloudflare.com, cdn.jsdelivr.net, unpkg.com, esm.sh, fonts.googleapis.com, fonts.gstatic.com, code.jquery.com, cdn.tailwindcss.com, mc.yandex.ru. Остальное Inki вырежет при публикации.
- Встраивать видео только с: www.youtube.com, www.youtube-nocookie.com, vk.com, vkvideo.ru, rutube.ru, kinescope.io.
- Без автоматических переходов, скачиваний и всплывающих окон при открытии.
- Отдай один самодостаточный файл index.html: стили и скрипты внутри, картинки рядом с файлом или по https.
- Обязательны <title> и <meta name="description">: из них Inki делает превью для соцсетей и поиска.
- Размер: index.html до 5 МБ, папка страницы до 50 МБ, один файл до 25 МБ.

## Данные Inki (записи хранит сайт)
- Объяви данные блоком в <head>, иначе запись отклонят:
<script type="application/inki+json">
{ "collections": {
  "items": { "mode": "owner", "fields": { "title": "string!", "order": "int! @index" } },
  "scores": { "mode": "own", "fields": { "name": { "type": "string", "required": true, "maxLength": 40 }, "tags": "string[]", "points": "int! @index" } }
} }
</script>
- Типы: string, text, int, number, bool, datetime, enum(a|b|c), json; string[] это список, ! в конце обязательное (text!, string[]!). Сортировка и сравнения только по полю с @index или по createdAt.
- Режимы: owner: читают все, пишет владелец сайта; own: читают все, каждый правит своё; open: читают и правят все; private: читает и пишет только автор; append: посетители добавляют, читает владелец.
- Личные данные людей (почта, телефон) только в private, append или owner.
- Подключи <script src="/_inki/sdk.js"></script> и работай из <script type="module">:
const scores = inki.db.collection('scores')
await scores.add({ name, points })
const top = scores.orderBy('points', 'desc').limit(10) // без 'desc' по возрастанию
const { docs } = await top.get() // doc: id, поля, createdAt, mine
const stop = top.onSnapshot(({ docs }) => render(docs)) // живое обновление
await scores.doc(id).update({ points: inki.db.op.increment(1) })
- Ещё: where(field, '==', value), mine(), count(), doc(id).get(), doc(id).set(data) со своим id, doc(id).delete().
- Лимиты: запись до 64 КБ, за запрос до 200 записей.
- Без объекта inki (файл с диска, предпросмотр в чате) покажи примерные данные и строку «Записи заработают после публикации на Inki».
- Отказ это ошибка с полем code (quota, rate_limited, schema, forbidden): покажи человеку понятный текст.
- Введённое посетителями вставляй через textContent, не innerHTML.

Как достать артефакт

Claude.ai и Claude Desktop
  1. Открой артефакт справа от ответа
  2. Меню артефакта, «Скачать»: получишь файл .html
  3. Перетащи файл на inki.ru/new и нажми «Опубликовать»
ChatGPT
  1. Открой результат в Canvas
  2. Меню Canvas, «Скачать»: файл .html
  3. Перетащи файл на inki.ru/new и нажми «Опубликовать»
DeepSeek
  1. Скопируй код из ответа целиком
  2. На inki.ru/new открой вкладку «Код» и вставь
  3. Нажми «Опубликовать»
Claude Code
  1. Попроси сохранить результат в папку с index.html
  2. В терминале: npx -y inki-cli publish ./папка-со-страницей
  3. Или скажи агенту «опубликуй на Inki»: подключение на inki.ru/agent
Codex
  1. Попроси сохранить результат в папку с index.html
  2. В терминале: npx -y inki-cli publish ./папка-со-страницей
  3. Или скажи агенту «опубликуй на Inki»: подключение на inki.ru/agent
Cursor
  1. Сохрани файл агента как index.html в отдельную папку
  2. В терминале: npx -y inki-cli publish ./папка-со-страницей
  3. Или скажи агенту «опубликуй на Inki»: подключение на inki.ru/agent

Готовый файл или папку: опубликовать на Inki.

Что получится

Голосование по одному адресу: результат виден сразу и меняется на глазах у всех, кто смотрит. Счётчики лежат в кабинете Inki, в разделе «Данные»: там их можно обнулить или поправить текст варианта.

Как доработать

Скрывай результаты, пока человек не проголосовал: до голоса только кнопки без полос.
Добавь срок: после [дата и время] кнопки выключаются, остаются итоги и подпись «Голосование закрыто».
Разреши предлагать свои варианты: поле «Свой вариант» добавляет запись в options.