Ceremonia is a user-friendly GUI that simplifies validator key creation and DKG ceremonies, making cryptographic processes accessible without needing command-line skills.
Ceremonia is a project that allows for easier and more secure running of Distributed Key Generation. It runs both on the web and as a stand-alone cross-platform desktop application. A user can for instance use the web version for testnets and the desktop app for the generation of key shares to be used on the mainnet. Ceremonia removes the need for a user to know about docker and the CLI as a whole, the only thing they need is just basic computer knowledge. This means that anyone can be a validator easily.
This project uses various technologies. The backend is built with Go and is just an API interface between the front end and the SSV-DKG CLI. It takes the requests, generates the files, serves the files, and deletes files within a given time defined by the user. To deploy the backend I am using a VPS and exposing the endpoints using CaddyServer as a reverse proxy.
There are two front-end clients: web and desktop. The web version uses Nextjs, tailwind, Shadcn, framer-motion, and Zustand to handle the global state of the application. The web version is called the deployed version of the backend
The desktop client on the other hand uses Electron, React, React router, Zustand, tailwind, and Shadcn. The desktop app is bundled with both the API binary and the SSV-DKG binary. This means that it can run locally without having to call any outside endpoint to run the Ceremony. Getting the desktop application to compile for various platform targets was one of the toughest things I faced but overcame it though not for windows at the moment.
To make deployment easier, I wrote some makefiles that are used in the CI/CD process by the GitHub actions that create releases of new versions of the application. Github action runs also helped in building the Mac targets for the SSV-DKG binary and the desktop application. This was not possible locally since I use a Linux machine, and building for Mac is next to impossible while in Linux.