VoteIT is an open source project for digital decision processes. The project is maintained by the Swedish organisation VoteIT, and mainly used by the member organizations.
This repository contains the user interface (frontend) for VoteIT, based on Vue 3 and Vuetify.
Backend repository is found at VoteIT/voteit.
The app is built with:
- Vue 3 (Composition API /
<script setup>) for UI components - Vuetify 3 for the component library
- Pinia for state management
- Vue Router 4 for client-side routing
- envelope-client for real-time updates via WebSocket
- Vue i18n for translations (Swedish/English)
Feature functionality lives in src/modules/. Each module registers itself into shared plugin registries (routes, menu items, settings panels, etc.) at import time via side effects. The import order in src/main.ts matters — see the comment there for details.
Key modules: auth, organisations, meetings, polls, proposals, agendas, discussions, speakerLists, plenary, rooms, notes, tokenAPI.
| Path | Purpose |
|---|---|
src/modules/ |
Feature modules (each self-contained) |
src/components/ |
Shared UI components |
src/composables/ |
Reusable Vue 3 composables |
src/utils/ |
Utilities, REST API client, WebSocket, event bus |
src/contentTypes/ |
Content type registry and base classes |
src/plugins/ |
Vue plugin configuration (Pinia, Vuetify) |
src/locales/ |
i18n translation files |
- Node.js 22 or 24 (see
.nvmrcor CI matrix) - A running VoteIT backend — see VoteIT/voteit for backend setup
npm install
npm run devThe dev server starts at http://localhost:3000 and proxies API/WebSocket requests to the backend.
Copy .env.development and adjust if needed:
VITE_ID_HOST=http://id.localhost:8081 # OAuth identity provider
VITE_PROXY_HOST=voteit.localhost:8000 # Backend host:port to proxy requests to
| Command | What it does |
|---|---|
npm run dev |
Start dev server on port 3000 |
npm run build |
Type-check and build for production |
npm test |
Run unit tests with Vitest |
npm run lint |
Run ESLint (use --no-fix in CI) |
npm run typeCheck |
Run TypeScript type checker without building |
npm run extractLocales |
Report missing/unused translation keys |
npm testTests are colocated with source files as *.test.ts. Run type checking separately with npm run typeCheck.
See CONTRIBUTING.md for coding conventions, how to add a module, translation workflow, and PR process.