Source for docs.ekklesia.vote. Built with Jekyll and deployed via GitHub Pages.
This repository is the central issue tracker for the Ekklesia platform. File bugs, feature requests, and questions about any component, including the frontend, backend, Hydra integration, helpers, proposal module, rewards, or the documentation itself, through the issue templates. Each template asks which component is affected, so the issue reaches the right place.
The Hydra SDK is the exception: it is a general-purpose library for building on Cardano Hydra rather than a part of Ekklesia, so it keeps its own tracker at hydra-sdk.
bundle install
bundle exec jekyll serve # local dev server
bundle exec jekyll build # production build, same as CI runs before deployMarkdown files are auto-formatted with Prettier (80-char prose wrap, expanded tables):
npm install
npm run fmt # format all markdown
npm run fmt:check # check without writingIf you touch a spec under api/, validate it and regenerate the Postman
collections derived from it:
npm run lint:specs # validate the OpenAPI specs with Redocly
npm run postman # regenerate the Postman collections in downloads/_files/Commit the regenerated collection files alongside the spec change.
Every change needs an entry, including editorial ones:
npx changesetThis writes a small markdown file under .changeset/ to commit alongside your
change. Publishing happens when a release is cut rather than on every merge, so
a change with no entry sits merged but unpublished. Pick the bump from what the
change does:
patchfor editorial work: typos, grammar, wording, formatting, broken linksminorfor substantive work: a page added, removed, renamed, or moved, an OpenAPI spec change, or documented behavior that now reads differently
The test suite runs against live local API instances and doubles as a QA suite with comprehensive happy and unhappy path coverage.
- Node.js 22+
- Docker (for local MongoDB and API instances)
- cardano-signer >= 1.32.0 on PATH. Used for CIP-30 key generation and message signing.
The test environment runs MongoDB + both APIs + seed data via Docker Compose:
npm install
# Start everything (MongoDB, Voting API, Proposals API, seed data)
npm run env:up
# Copy the pre-configured Docker env
cp __tests/.env.docker __tests/.env
# Run all tests
npm test
# When done
npm run env:downnpm run env:up # start MongoDB + APIs + seed data
npm run env:down # stop everything (keeps data)
npm run env:reset # stop, wipe data, restart fresh
npm run env:logs # tail all container logsNote: The rate limit tests intentionally exhaust API rate limits. If you need to re-run the test suite, reset the environment first with
npm run env:resetor wait ~60 seconds for the rate limit windows to expire.
npm test # all tests
npm run test:voting # voting API only
npm run test:proposals # proposals API onlyTest keys (DRep, Pool) are auto-generated via cardano-signer on first run
and cached in __tests/keys/. No manual key setup needed.
If you prefer to run the APIs natively, see __tests/.env.example for the
required environment variables and configure accordingly.
Downloads are managed as a Jekyll collection. The Postman collections are
generated from the OpenAPI specs by npm run postman rather than added by hand.
To add any other downloadable resource:
- Create a file in
_downloads/with the following frontmatter:
---
title: "Ekklesia API — Postman Collection"
description: "Pre-built Postman collection for the Backend API"
version: "v0.1.0"
size: "12 KB"
file: "/downloads/_files/ekklesia-api.postman_collection.json"
---- Place the actual file in
downloads/_files/.
The download will automatically appear on the Downloads page.