Technology whitelist

a simple cartoon scroll next to a computer
AI generated image by SDXL 1.0

Over engineering is a common pitfall for technical founders starting their own business. Maybe there's new hype about "framework X" or we definitely want to learn "technology Y" but this is often fraught with pitfalls and time wasting.

Realistically if we have existing knowledge and skills to be able to deliver a project, we should use them. Users do not care what technology is being used and as our default position is failure we need to be delivering early, learning and evolving.

Of course should one want to combine both creating a project with learning something new, this can be a great way to learn, however for Kukri Labs projects this is predominantly not the case. Technology can, in certain situations, also be a key differentiator so we remain open to using the right tool for the job but the majority of work will be done with familiar, mature tech.

Approved list

From the beginning, we define an approved list of technologies to take time out of making these decisions in the future. While this is a living document the idea is that if it's not on the list, don't choose it (unless there's a very good reason to research something new).

Frontend

Name What is it? Experience Notes
Angular SPA & SSR (with Angular Universal) framework Extensive Typescript native. Opinionated. Lots of out-of-the-box functionality.

Note: For API driven applications, Angular is the preferred SPA. For server rendered applications, the relevant templating language will be used.

Backend

Name What is it? Experience Notes
Django Python web framework Extensive Lots of out-of-the-box functionality
Pocketbase 'Backend as a Service' written in Go with SQLite DB Go - extensive; Pocketbase - Medium For simple, lightweight APIs

Data storage

Name What is it? Experience Notes
SQLite Relational DB Extensive Fast. Suitable for a lot of read-heavy projects. Has limitations but unlikely to reach with small projects. Is simple.
PostgreSQL Relational DB Medium-Extensive Battle tested database. More complex but good if needing something more advanced than SQLite
Redis In memory database and cache Medium-Extensive Battle tested database. Fast reads and writes and can persist to disk if necessary.
S3 (or compatible) Blob storage Extensive Any S3 compatible storage for blob data. Likely Cloudflare R2.

Infrastructure

Name What is it? Experience Notes
Hetzner servers Cloud and dedicated servers Extensive Low cost servers. CAX{xx} Arm cloud servers; EX{xx} dedicated servers
Debian Linux operating system Extensive Simple, performant and well documented
Ansible Configuration management Extensive Repeatable configuration of servers. Used for quickly bringing up new servers as needed
Podman/Docker Containers for applications Extensive Immutable infrastructure to build application and then promote. Easy to isolate different applications on same VM this way.

Note: We have chosen to explicitly avoid Kubernetes at this time as it is just something else to manage. Podman containers can be isolated using separate networks and run by Systemd so that should be good enough

Other

Name What is it? Experience Notes
Ghost Blogging and content creation platform Medium Opinionated and restricting at times however has email management, analytics etc. built right in with first class support. Work with the project.
Cloudflare CDN; Serverless compute; Edge K/V database Medium DDoS protection for projects.
Tailscale Wireguard VPN service Medium Secure connections to & between servers.
Material design Google design guidelines Medium Rather than reinvent designs for common elements, use an off-the-shelf design system that integrates well with Angular & Django, is accessible etc.

Subscribe to Kukri Labs

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe