Skip to content

Tenemo/okay-vote

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

okay.vote

Netlify Status


Production E2E smoke tests CI Tests coverage


Node version License


Monorepo for the okay.vote web app, API, shared contracts, and shared test helpers.

okay.vote is the plaintext "shadow" for sealed.vote, a cryptographically secure voting system. It keeps the core 1-10 score voting flow in a simpler, non-encrypted form.

The sealed.vote repository is Tenemo/sealed-vote. You can find more information on how it works, and how it mathematically guarantees vote privacy, in that repository.

Overview

  • apps/web contains the React frontend.
  • apps/api contains the Fastify API.
  • packages/contracts contains the shared TypeBox schemas and exported TypeScript types.
  • packages/testkit contains shared API test helpers used by route and integration tests.

Tech stack

  • Frontend: TypeScript, React, Redux Toolkit, Tailwind CSS v4, shadcn/ui, Vite, Vitest
  • Backend: TypeScript, Fastify, Drizzle ORM, PostgreSQL, Vitest
  • Tooling: pnpm workspaces, Turborepo, Playwright, ESLint

Local development

Requirements

  • Node.js 24.14.1 or newer
  • pnpm@10.33.0
  • Docker Desktop or another Docker engine with Compose support

Running the full stack

From the repository root:

pnpm install
pnpm local:reset
pnpm dev

The default local setup serves:

  • the web app at http://127.0.0.1:3000
  • the API at http://127.0.0.1:4000
  • PostgreSQL on localhost:5433

Workspace documentation

Verification

Run the shared checks from the repository root:

pnpm install --frozen-lockfile
pnpm prebuild
pnpm e2e

To generate local coverage reports without any third-party service:

pnpm coverage

This writes coverage output to apps/api/coverage and apps/web/coverage. The GitHub coverage workflow uses those same in-repo reports, publishes them as the coverage-reports artifact, and writes a summary on the workflow page.

Deployment

  • Railway uses the repository root railway.toml. The build runs from the monorepo root, deploys @okay-vote/api, runs the built migration script with pnpm --filter @okay-vote/api db:migrate:dist before startup, and checks /api/health-check.
  • Netlify uses the repository root netlify.toml for the build command, publish directory, API proxy, and SPA rewrite rule.
  • CI publishes a deployable API artifact through .github/workflows/api-artifact.yml when API-facing files change.
  • .github/workflows/production-smoke.yml uses Railway-triggered GitHub deployment statuses to run live production smoke checks against https://api.okay.vote and https://okay.vote.

License

This project is licensed under the GNU Affero General Public License v3.0 only. See LICENSE for the full text.

Contributors