This repository contains a simple voting application comprised of two microservices and a database. The application allows users to vote between two options and view real-time results. Each directory contains a README with details of the individual app.
The application consists of three main components:
- Votes API - A Python/Flask backend API that handles vote submissions and provides results endpoints
- Votes UI - A Node.js web application that provides a unified interface for voting and viewing real-time results
- PostgreSQL Database - Stores the voting data
You can regenerate the diagram(with graphviz installed on your machine) using the following command:
dot -Tpng architecture.dot -o architecture.pngVotes UI
GET /- Unified voting and results interface (HTML + WebSocket)GET /healthz- Health check endpoint (JSON)
Votes API
GET /- API information and voting options (JSON)GET /healthz- Health check endpoint (JSON)POST /vote- Submit vote (JSON)GET /results- Get voting results (JSON)
Please complete this challenge without the assistance of AI. Our goal is to assess your unique skills and strengths, and evaluate your real-world problem solving capability.
Your task is to deploy this application to a Kubernetes cluster in your local environment and provide instructions for reproduction on our own computers. The deployment should meet the following criteria:
- Kubernetes Deployment: Deploy all components to a local Kubernetes cluster. You are free to choose any Kubernetes flavor that you are comfortable with, like
minikube,k3s,kind, etc. - IaC tooling: Use Infrastructure as Code (IaC) tooling of your choice to deploy the application. This could be
Terraform,Pulumi,Crossplane,Ansible,Helm, etc. The idea here is to use some IaC tool to orchestrate all the pieces together, this means that you should not provide just raw Kubernetes .yaml files and expect us to manually runkubectlcommands to deploy the application. Shell scripting is fine to automate some of the commands that we would have to run manually, but please avoid using it solely to deploy the application, make sure you use an IaC tool to deploy the application, like Terraform. - Working Application: Both voting and results functionality must work end-to-end, make sure there are no errors shown in the UI
- Database: PostgreSQL container should be deployed in the same cluster
- Documentation: Provide clear instructions for reproducing your deployment and accessing the application
- Accessibility: The UI should be accessible via
http://{SOME_URL}:{PORT}(don't worry about HTTPS)
- Create a Private Repository: Create a new private repository in your own Github user
- Commit your changes: Clone this repository and commit your changes to your private repository
- Write some instructions: Write clear instructions in a
DEPLOYMENT.mdfile on how to reproduce your deployment - Add Collaborators: Invite the following GitHub users as collaborators:
@bgroupe@heruscode@tleung999@mustybatz@cgw-peek@lngauthier
The estimated effort of this challenge is approximately 4 hours. Feel free to include any additional notes about how you would improve this as if it were your job to maintain it in a production environment. Submit a link to your private repository.

