This is a guide detailing the architecture and infrastructure used for developing {du}punkto software.
{du}punkto software is primarily developed in three languages: Elixir, TypeScript (using Bun), and PHP8.
The language chosen depends on the requirements of the project. Generally, the following guidelines apply:
- Is this a large, complicated web-based application? Use Elixir with PostgreSQL for maintainability (and scalability).
- Is this self-hosted consumer software? Use PHP8 with SQLite to maximise compatibility and ease-of-use.
- Is this highly interactive? Use TypeScript with the Bun runtime.
{du}punkto makes heavy use of Bakefile (a Bash-based alternative to Makefile) to streamline development. The following targets are recommended for all projects:
setupinstalls dependencies.servestarts a local development server.buildbuilds or bundles production software.publishgenerates and uploads documentation to docs.dupunkto.org.deploybuilds and deploys the current source tree to production.
{du}punkto software is deployed to the November server using Lift, our in-house Docker-based deployment infrastructure.
All containers are exposed behind a Caddy reverse-proxy which manages SSL, sets appropriate security headers and handles proper caching.
To deploy any project, simply run lift deploy (although bake deploy is preferred, since some projects do additional post-deploy maintenance via their Bakefile)