{"id":28487615,"url":"https://github.com/devsteppe9/voting_app","last_synced_at":"2026-05-07T06:34:01.629Z","repository":{"id":294291144,"uuid":"985861592","full_name":"devsteppe9/voting_app","owner":"devsteppe9","description":"A simple distributed voting application orchestrated with Docker containers.","archived":false,"fork":false,"pushed_at":"2025-06-17T22:20:35.000Z","size":2826,"stargazers_count":0,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-17T22:37:17.688Z","etag":null,"topics":["distributed-computing","docker","kafka","microservices","postgresql","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devsteppe9.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-18T17:15:18.000Z","updated_at":"2025-06-17T22:20:38.000Z","dependencies_parsed_at":"2025-05-19T19:33:47.350Z","dependency_job_id":"5b15853e-0055-4adc-93de-d4bd151ad1d0","html_url":"https://github.com/devsteppe9/voting_app","commit_stats":null,"previous_names":["devsteppe9/voting_app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devsteppe9/voting_app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devsteppe9%2Fvoting_app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devsteppe9%2Fvoting_app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devsteppe9%2Fvoting_app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devsteppe9%2Fvoting_app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devsteppe9","download_url":"https://codeload.github.com/devsteppe9/voting_app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devsteppe9%2Fvoting_app/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263102715,"owners_count":23414158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["distributed-computing","docker","kafka","microservices","postgresql","spring-boot"],"created_at":"2025-06-08T04:32:06.674Z","updated_at":"2026-05-07T06:33:56.588Z","avatar_url":"https://github.com/devsteppe9.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Voting App\n\nA simple distributed voting application orchestrated with Docker containers.\n\nThis project is inspired by [Docker samples](https://github.com/dockersamples/example-voting-app) and enhanced with Spring Boot and Kafka integration. The application enables users to vote between two options and demonstrates a microservices architecture.\n\n## Demo\n![demonstration](https://github.com/devsteppe9/voting_app/blob/main/demo.gif)\n\n## Getting started\n\nDownload [Docker Desktop](https://www.docker.com/products/docker-desktop) for Mac or Windows. [Docker Compose](https://docs.docker.com/compose) will be automatically installed. On Linux, make sure you have the latest version of [Compose](https://docs.docker.com/compose/install/).\n\nThis solution uses Spring Boot, Node.js with Kafka for messaging and Postgres for storage.\n\nRun in this directory to build and run the app:\n\n```shell\ndocker compose up\n```\n\nThe `vote` app will be running at [http://localhost:8080](http://localhost:8080), and the `results` will be at [http://localhost:8081/results/{session_id}](http://localhost:8081/results/1). Replace `{session_id}` in the URL with the ID of the voting session you want to see results for (e.g., `http://localhost:8081/results/1` for session ID 1).\n\n## Run the app in Kubernetes\n\nThe folder k8s-specifications contains the YAML specifications of the Voting App's services.\n\nRun the following command to create the deployments and services. Note it will create these resources in your current namespace (`default` if you haven't changed it.)\n\n```shell\nkubectl create -f k8s-specifications/\n```\n\nThe `vote` web app is then available on port 31000 on each host of the cluster, the `result` web app is available on port 31001.\n\nTo remove them, run:\n\n```shell\nkubectl delete -f k8s-specifications/\n```\n\n## Architecture\n\n![Architecture diagram](architecture.excalidraw.png)\n\n* A front-end web app [Spring Boot/Thymeleaf](/vote) for submitting votes and lets you create multiple voting sessions\n* A [Kafka](https://hub.docker.com/_/redis/) message broker for handling vote events\n* A [Spring Boot](/worker/) worker service to process and persist votes in a Postgres database.\n* A [Spring Boot](/vote-session) REST API for managing voting sessions\n* A [Postgres](https://hub.docker.com/_/postgres/) database \n* A [Node.js](/result) web app for displaying real-time results\n\n## Notes\n\nThe voting application only accepts one vote per client browser. It does not register additional votes if a vote has already been submitted from a client.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevsteppe9%2Fvoting_app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevsteppe9%2Fvoting_app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevsteppe9%2Fvoting_app/lists"}