Cess Advisor 🐪🚽 is a stupid yet really useful web app that helps you find a suitable toilet when you are in a hurry.
TL;DR: OCaml 🐪 (Sihl) + JavaScript 🤢 (SvelteKit) + PostgreSQL 🐘
[!TIP] If you want to preserve your mental health, you should NOT write JavaScript code (and frontends in general). OCaml is just better.
The project started as an excuse to play around with OCaml, but I needed a frontend to make it useful. I tried to pick the simplest one and ended up with Svelte. But I absolutely fucked up and started a SvelteKit project (the docs don't mention how to setup a vanilla Svelte project). So I ended up writing SSR pages and basically two backends.
Backend: OCaml 🐪
Frontend: JavaScript 🤢
Database: 🐘
TL;DR: Docker 🐳 + GitHub Actions 🤖 for backend and Cloudflare Pages ☁️ for frontend
Backend: Docker 🐳 + GitHub Actions 🤖
main branch, deploy-backend GitHub action is triggeredHOST, USERNAME, PORT, KEY, SCRIPT secrets to GitHubKEY provided in secrets to allowed hosts on server.env file in the root of the repository (see .env.template for reference)logs in the root of the repositorySCRIPT secret should cd into the repository and run git pull and docker-compose up -d --build --force-recreateFrontend: Cloudflare Pages ☁️
main branch, the Cloudflare pages integration detects the changeRoot directory (advanced) as frontendThe project is licensed under the GPLv3 license.
It was licensed under CC-BY 4.0 before version 1.0 (commit a21d9f70c002aa497e5196308c6e71012211e468), so the code before that commit is licensed under CC-BY 4.0 (the license is not revokable).
Each contribution is welcome, especially building alteranive better frontends (if you are brave enough to write JavaScript code).
Please follow the conventions below.
This project follows the following commit convention: <type>(<part>/<scope>): <summary>
Type: commit type
feat: add new featurefix: bug fixrefactor: code refactoringbuild: build system (dependencies, ...)test: add testsdocs: documentation changesci: continuous integration (github actions, ...)Module/Scope: commit part (mandatory) and scope (optional)
be/: backendhandlers: request handlersmiddlewares: middleware functionsutils: utility modulefe/: frontendcomponents: componentspages: pages (client side)ssr: server side rendered pagesservices: interaction with backend APIvalidators: form validatorsdb/: databasetables: tablesrepo: repository (omit scope)Summary: commit summary, present tense, start with lowercase, no period at the end
Adding new scopes is allowed if necessary, just add it to the list above.
See CHANGELOG.md file.