Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
官方系统,用于审议法案、倡议及其他提交给 SWAG 州总议会和国会成员投票的议题。
AI 翻译
Официальная система рассмотрения законопроектов, инициатив и иных вопросов, вынесенных на голосование членов Генеральной Ассамблеи и Конгресса штата SWAG.
商业JavaScript · CSSGitHub @Fegke12在线运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证用于 RP-州 SWAG 总议会的电子投票:邀请、秘密模式、自动汇总和 PDF 协议。Cloudflare Workers + D1
AI 翻译
Электронное голосование для Генеральной Ассамблеи RP-штата SWAG: приглашения, тайный режим, авто-итог и PDF-протокол. Cloudflare Workers + D1
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
🗳 Генеральная Ассамблея штата SWAG — электронная система голосования Голосование по законопроектам, поправкам, кадровым вопросам и инициативам для Генеральной Ассамблеи и Конгресса RP-штата SWAG — с приглашениями, тайным режимом, автоматическим итогом и официальным протоколом в PDF.查看完整 README ↗
Голосование по законопроектам, поправкам, кадровым вопросам и инициативам для Генеральной Ассамблеи и Конгресса RP-штата SWAG — с приглашениями, тайным режимом, автоматическим итогом и официальным протоколом в PDF.
Участник получает от Спикера Конгресса ссылку‑приглашение → проходит идентификацию → изучает законопроект → выбирает «ЗА / ПРОТИВ / ВОЗДЕРЖАЛСЯ» → подтверждает → получает номер регистрации голоса. После завершения система сама подводит итог по заданному правилу, формирует постановление и официальный протокол (PDF).
Система работает на Cloudflare Workers (сервер) + D1 (база данных, SQLite) + Cron Triggers (автозавершение голосований). На бесплатном тарифе Cloudflare этого хватает с большим запасом, сервер не «засыпает».
Нужен Node.js 20+.
npm install
npm run dev # http://localhost:8787 — с демо-данными
npm test # 34 сквозные проверки на локальном движке Cloudflare
Локальные настройки — в файле .dev.vars (не попадает в git):
SPEAKER_PASSWORD=любой_пароль
SPEAKER_NAME=Имя Фамилия
SEED_DEMO=1
/ — главная, /speaker — панель Спикера (логин speaker), /vote/8FJ2-KD91-XP72 — демо-приглашение.swag-vote. Её Database ID вписать в wrangler.toml (database_id).npx wrangler deploy (по умолчанию).SPEAKER_PASSWORD — пароль Спикера.wrangler.toml. Каждый push в main деплоится сам.Или из терминала: npx wrangler login, npx wrangler d1 create swag-vote (ID → wrangler.toml), npx wrangler secret put SPEAKER_PASSWORD, npm run deploy.
[vars] в wrangler.toml)| Переменная | По умолчанию | Назначение |
|---|---|---|
SPEAKER_PASSWORD | — (секрет) | Пароль Спикера. Смена секрета = смена пароля |
SPEAKER_LOGIN | speaker | Логин Спикера |
SPEAKER_NAME | Спикер Конгресса | Имя в протоколах и на страницах голосования |
PUBLIC_URL | адрес запроса | Базовый адрес ссылок-приглашений (если свой домен) |
DISPLAY_TZ | Europe/Moscow | Часовой пояс в скачиваемых документах |
SEED_DEMO | 0 | 1 — загрузить демо-голосования в пустую базу |
wrangler.toml конфигурация Worker: D1, статика, cron, переменные
src/
worker.js маршруты API (Hono), выдача страниц, обработчик cron
lib/schema.js схема БД + триггеры целостности (применяется автоматически)
lib/db.js обёртка D1, счётчики, распознавание ошибок базы
lib/util.js ошибки, валидация, Web Crypto
services/ бизнес-логика — все проверки здесь, на сервере
votes.js голосования, статусы, подсчёт, итог, завершение
participation.js приглашение → идентификация → регистрация голоса
invites.js приглашения: коды, срок, лимит, отзыв, продление
rules.js правила принятия (не зашиты в код — задаются Спикером)
protocols.js снимок итогов для протокола (с контрольной суммой)
events.js журнал действий и уведомления
scheduler.js начало, «осталось 30 минут», автозавершение, протоколы
auth.js вход Спикера (секрет + серверные сессии)
markdown.js, documents.js текст законопроекта и его скачиваемая версия
seed.js демо-данные
public/ фронтенд без сборки; PDF протокола собирается в браузере (pdfmake)
test/e2e.js сквозные тесты
Frontend — только интерфейс. Backend (Worker) — все решения: авторизация приглашений, регистрация голосов, проверка повторного голосования, подсчёт, итог, протоколы. Database (D1) — пользователи, сессии, голосования, редакции, приложения, приглашения, участники, бюллетени, протоколы, журнал, уведомления, комментарии, ограничения частоты запросов.
Код работает с базой через src/lib/db.js и обычный SQL — при необходимости переносится на PostgreSQL (например, через Hyperdrive) заменой этого модуля.
httpOnly‑cookie с токеном; в БД хранится только его SHA‑256.UNIQUE(vote_id, name_key)), атомарная отметка has_voted, уникальный бюллетень на участника.max_uses) проверяется в базе; опция «одно устройство — один участник».participant_id и без времени, со случайным id и номером — сопоставить участника и выбор невозможно ни по ссылке, ни по порядку записей. Выбор не попадает в журнал и уведомления; промежуточный подсчёт скрыт от Спикера до завершения.SameSite=Strict, лимит попыток входа (хранится в D1). Защита Cloudflare от DDoS — автоматически.Участник: вход по ссылке/коду/QR или по именной ссылке · идентификация (Лидер / Заместитель / вручную + департамент и подразделение) · таймер · полный текст с оглавлением (статьи, пункты, подпункты, таблицы, важные положения) · скачивание документа · приложения · обсуждение · выбор → подтверждение → модальное окно → номер голоса · понятные экраны ошибок · уведомления · итоги с диаграммой, постановлением и протоколом PDF.
Спикер: дашборд · реестр голосований (статусы, поиск, тип, даты — архив законопроектов) · создание (8 типов, редактор с предпросмотром, сроки, правило, кворум, тайное/открытое, настройки публикации, приглашение) · приглашения (копировать, QR SVG/PNG, отозвать, продлить, новые ссылки, именные ссылки списком) · участники (✓ / ◷, заявки: допустить / отклонить, удаление) · редакции текста с историей · прикрепление документов · модерация обсуждения · перенос, продление, досрочное завершение, отмена · фиксация решения при ручном правиле · повторное голосование · вынесение поправки отдельным голосованием · экспорт CSV/JSON · протокол HTML (печать) и PDF · журнал событий · статистика активности членов Ассамблеи · уведомления.
Правила принятия: простое большинство · квалифицированное (любая доля) · единогласно · необходимое число голосов «ЗА» · порог в % · решение Спикера по итогам. База: от проголосовавших / от «ЗА»+«ПРОТИВ» / от приглашённых. Кворум: число или процент.
Схема и сервисы рассчитаны на расширение. Следующий логичный шаг — несколько вопросов в одном голосовании: таблица vote_questions, у бюллетеня появляется question_id, подсчёт и протокол группируются по вопросам. Загрузка файлов (сейчас приложения — ссылки) — добавить хранилище (S3/диск) и таблицу files.