Technology whitelist
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. |