From a95c769057ab8c98333d6442dc57106dd65e9c87 Mon Sep 17 00:00:00 2001 From: Danny Kim Date: Sat, 18 Jul 2026 02:00:05 +0900 Subject: [PATCH] Add code rules --- README.md | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..815b9e0 --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +# Policy for Choosing Languages and Frameworks + +## General + +Languages are allowed only if they meet **all** of the following criteria: + +1. **Null safety** + - C++ is not allowed; use Rust instead. + - Java is not allowed; use Kotlin instead. +2. **Type safety** + - For Python, type hints with a strict type checker are mandatory. + - Use TypeScript instead of JavaScript. +3. **Concurrency support** + - Event-driven, async models only. + - Thread-based models are not allowed. + +Never mix backend and frontend **runtime code**. Doing so can lead to serious security vulnerabilities. + +Choose technologies that align with the business idea and available resources to enable rapid validation. + +Using linters, formatters, and CI is strongly recommended. + +Put CI workflows in top-level `.gitea` directory and use the `self-hosted` machine. + +## Containers + +Use Podman instead of Docker. Podman is commercially free and vendor-neutral. Use `Containerfile`, `compose.yaml`, and `.containerignore` filenames instead of `Dockerfile`, `docker-compose.yml`, and `.dockerignore`. + +## Backend + +Containerization is mandatory for all backend services. + +For Python, always use `uv`, `ruff`, and `ty` for code quality. + +## Frontend + +A **no-framework approach is mandatory**. Always focus on web standards. Web components composed of pure HTML, CSS, and JavaScript must be used. Third-party frameworks do not guarantee long-term security, stability, or continued adoption. + +By using only web components, we achieve: + +- A central UI component library with design consistency +- Improved security +- Better end-user performance +- Long-term maintainability +- Direct DOM debugging capabilities + +This means banned options include, but are not limited to: + +- React +- Tailwind +- Vue +- Svelte +- Angular +- Solid + +Currently approved options are: + +- Lit +- Raw TypeScript + +For all TypeScript projects, always prefer Deno over Node. Deno provides built-in support for type-checking, linting, formatting, and bundling.