<p align="center">
  <img src="public/logo.png" alt="Maltemedia Logo" width="150">
</p>

# 📰 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*