From 0ef072f64456f9e6a0105bd123987d66434a2254 Mon Sep 17 00:00:00 2001 From: Dawid Rycerz Date: Mon, 21 Jul 2025 20:08:09 +0300 Subject: ci: Update readme, ci and add cursor rules --- README.md | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) (limited to 'README.md') diff --git a/README.md b/README.md index 6faebe1..61248fd 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ Silmataivas is a weather monitoring service that sends personalized alerts based on user-defined thresholds and notification preferences. This is the Rust version, providing a RESTful API for managing users, locations, weather thresholds, and notification settings. ## Features + - Weather monitoring using OpenWeatherMap API - Custom weather thresholds per user - Flexible notifications: NTFY (push) and SMTP (email) @@ -10,6 +11,7 @@ Silmataivas is a weather monitoring service that sends personalized alerts based - RESTful API for all resources ## Project Structure + - **src/main.rs**: All application logic and API endpoints (no lib.rs, not a library) - **src/**: Modules for users, locations, notifications, weather thresholds, etc. - **migrations/**: SQL migrations for SQLite @@ -18,10 +20,12 @@ Silmataivas is a weather monitoring service that sends personalized alerts based ## Quick Start ### Prerequisites + - Rust (see [rustup.rs](https://rustup.rs/)) - SQLite (default, or set `DATABASE_URL` for PostgreSQL) ### Running Locally + ```bash # Clone the repository git clone https://codeberg.org/silmataivas/silmataivas.git @@ -35,12 +39,14 @@ Silmataivas is a weather monitoring service that sends personalized alerts based The server will listen on port 4000 by default. You can set the `DATABASE_URL` environment variable to change the database location. ### Using Docker + ```bash docker build -t silmataivas . docker run -p 4000:4000 -e DATABASE_URL=sqlite:///data/silmataivas.db silmataivas ``` ## API Usage + All API endpoints (except `/health`) require authentication using a Bearer token: ``` @@ -50,17 +56,88 @@ Authorization: Bearer See the source code for endpoint details. (OpenAPI docs are not yet auto-generated in this Rust version.) ## Migration Note + This project was previously implemented in Elixir/Phoenix. All Elixir/Phoenix code, references, and setup instructions have been removed. The project is now a Rust binary only (no library, no Elixir code). ## Development + - Format: `cargo fmt` - Lint: `cargo clippy` - Test: `cargo test` ## Contributing + - Use conventional commits for PRs - See the code for module structure and API details --- For any issues or questions, please open an issue on Codeberg. + +## TODO + +### โœ… Project Completion Checklist for Weather Monitoring App + +#### ๐Ÿงฑ Architecture & Code Quality + +- [ ] Centralized error handling (e.g., `thiserror`, `anyhow`, `IntoResponse`) +- [ ] Organize code into service/domain/modules to improve separation of concerns +- [ ] Add rate limiting/backoff for OpenWeather API usage +- [ ] Write unit tests for core logic (e.g., user CRUD, weather checks) +- [ ] Add integration tests for full API endpoints +- [ ] Benchmark endpoint latency and cold-start performance + +#### ๐Ÿ”’ Security + +- [ ] Ensure proper SQL injection protection (`sqlx` should cover this, but verify inputs) +- [ ] Review CORS and CSRF protection for web endpoints +- [ ] Validate and sanitize all environment variables at startup +- [ ] Secure storage for SMTP/Ntfy credentials (env vars or secret store) + +#### ๐Ÿ”ญ Observability & Monitoring + +- [ ] Add `/healthz` and `/metrics` endpoints (e.g., Prometheus) +- [ ] Use structured logging (`tracing` spans for request lifecycle) +- [ ] Consider log rotation or persistent log storage +- [ ] Alerting or notifications if cron job fails + +#### โš™๏ธ CLI & Deployment + +- [ ] Build CLI for DB/settings management (with help output and scripting support) +- [ ] Implement DB backup or export functionality (even for SQLite) +- [ ] Enable SQLite WAL mode and regular vacuuming +- [ ] Add install/setup instructions to CLI or README + +#### ๐Ÿง‘โ€๐Ÿ’ป Web Interface (MVP) + +- [ ] Add a minimal web UI (htmx, Yew, or static + API) +- [ ] Ensure UI is responsive/mobile friendly +- [ ] Add form to configure thresholds, ntfy/smtp, location, etc. +- [ ] Web UI: Add table or list of current weather rules + +#### โ˜€๏ธ Weather & Notifications Logic + +- [ ] Only send notification on threshold **crossing**, not on every cron run +- [ ] Allow multiple thresholds per user (e.g., temp < 0ยฐC and wind > 30km/h) +- [ ] Store basic history of weather checks (for debugging/trends) +- [ ] Abstract weather provider to allow future plug-ins (e.g., Tomorrow.io, Meteomatics) + +#### ๐Ÿงช Testing & QA + +- [ ] Add CI test for API correctness (user + notification config CRUD) +- [ ] Add e2e test for full flow: create user โ†’ set threshold โ†’ trigger alert +- [ ] Add test for OpenAPI schema consistency + +#### ๐Ÿ“ฆ Open Source Readiness + +- [ ] Add detailed README with setup, architecture overview, and usage +- [ ] Add LICENSE file +- [ ] Add `CONTRIBUTING.md` with basic guide +- [ ] Add `.env.example` with defaults +- [ ] Add changelog or release notes for future versions + +#### ๐Ÿš€ Final Steps + +- [ ] Deploy to production server +- [ ] Verify Docker Compose deployment with CLI and web UI +- [ ] Publish initial release/tag on Codeberg -- cgit v1.2.3