# 📰 Maltemedia ![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg) ![Rust](https://img.shields.io/badge/Made%20with-Rust-black?logo=rust) A modern, fast, and secure application to stay updated with the latest news from different worlds — from decentralized social networks to AI-generated insights. --- ## ✨ Key Features - **📡 Nostr Feed**: Browse decentralized posts from various relays (like Damus and Snort) anonymously using secure, temporary keys. - **🤖 AI-Powered News**: Get instant tech news summaries generated by powerful AI models via Groq (Llama 3) or OpenRouter. - **📻 RSS Reader**: Follow your favorite news sources (like NASA or Heise) by adding custom RSS/Atom feeds. - **📝 Markdown Support**: Enjoy a clean reading experience with full Markdown rendering for all posts and articles. - **🔒 Private & Secure**: Built with Rust and Tauri v2 for a native, high-performance experience with a minimal footprint. --- ## 📂 Project Structure The project is split into a **Frontend** (UI) and a **Backend** (System) layer. ### 🌓 Frontend (`src/`) Built with **Yew** (Rust/Wasm) for a reactive and fast interface. | File/Folder | Purpose | | :--- | :--- | | `main.rs` | Entry point for the WebAssembly application. | | `app.rs` | Handles client-side routing and the main layout shell. | | `navbar/` | Contains the side navigation component. | | `pages/home.rs` | The UI for the Nostr feed display. | | `pages/news.rs` | The UI for AI News, RSS feeds, and configuration settings. | ### 🌑 Backend (`src-tauri/`) Built with **Rust** to handle system-level tasks and networking. | File/Folder | Purpose | | :--- | :--- | | `src/main.rs` | The main entry point for the desktop executable. | | `src/lib.rs` | Configures Tauri plugins and registers all backend commands. | | `src/home.rs` | Logic for connecting to Nostr relays and fetching posts. | | `src/news.rs` | Logic for parsing RSS feeds and calling AI APIs (Groq/OpenRouter). | --- ## 🛠️ Tech Stack - **Framework**: [Tauri v2](https://tauri.app/) (Desktop Bridge) - **Frontend**: [Yew](https://yew.rs/) (Rust to WebAssembly) - **Styling**: Vanilla CSS (Modern & Responsive) - **Networking**: `reqwest` & `feed-rs` - **Protocol**: `nostr-sdk` for decentralised communication - **Config**: RON (Rusty Object Notation) for local settings --- ## 🚀 Customization & Extension ### How to add a new Page 1. **Create the UI**: Add a new `.rs` file in `src/pages/`. 2. **Export it**: Add your page to `src/pages/mod.rs`. 3. **Add Route**: Define a new path in `src/app.rs` inside the `Route` enum and `switch` function. ### How to add a Backend Command 1. **Write the Logic**: Create a function in `src-tauri/src/` (e.g., in a new module). 2. **Use `#[tauri::command]`**: Mark your function so it can be called from the frontend. 3. **Register it**: Add the function to the `invoke_handler` in `src-tauri/src/lib.rs`. ### How to change the Design - Most visual styles are defined in `styles.css` in the project root. - The Navbar layout can be adjusted in `src/navbar/`. --- *Made with ❤️ and Rust.* --- ## ⚖️ License This project is licensed under the **GNU GPL v3**. See the [LICENSE](LICENSE) file for the full license text. *Copyright (c) 2026 Bytemalte*