Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
翻訳待ち
Официальная система рассмотрения законопроектов, инициатив и иных вопросов, вынесенных на голосование членов Генеральной Ассамблеи и Конгресса штата SWAG.
翻訳待ち
ビジネスJavaScript · CSSGitHub @Fegke12オンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Электронное голосование для Генеральной Ассамблеи RP-штата SWAG: приглашения, тайный режим, авто-итог и PDF-протокол. Cloudflare Workers + D1
翻訳待ち
Loading the full README. The saved excerpt is shown below.
🗳 Генеральная Ассамблея штата SWAG — электронная система голосования Голосование по законопроектам, поправкам, кадровым вопросам и инициативам для Генеральной Ассамблеи и Конгресса RP-штата SWAG — с приглашениями, тайным режимом, автоматическим итогом и официальным протоколом в PDF.Read the full 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) заменой этого модуля.
This is the beginning of the README. Read the rest at the original. Read the full README ↗