From bd25cc4ab6e429246757461854450a2d22e9af9f Mon Sep 17 00:00:00 2001 From: Alexander Schmidt Date: Wed, 11 Feb 2026 15:34:46 +0100 Subject: [PATCH] docs: translate README to English --- README.md | 326 +++++++++++++++++++++++++----------------------------- 1 file changed, 149 insertions(+), 177 deletions(-) diff --git a/README.md b/README.md index 4ae7117..ab205a9 100644 --- a/README.md +++ b/README.md @@ -1,99 +1,87 @@ # kashilo.com -Eine anonyme, dezentrale Kleinanzeigen-Plattform mit Monero-Bezahlung. +A privacy-first classifieds platform with Monero payments. ## 🎯 Vision -kashilo.com ermΓΆglicht es Nutzern, Kleinanzeigen zu schalten und Waren/Dienstleistungen sicher ΓΌber Monero (XMR) zu handeln. Besonderheiten: +kashilo.com lets users post classifieds and trade goods/services securely via Monero (XMR). -- **AnonymitΓ€t**: Nutzung ohne Account mΓΆglich -- **Direkte Zahlung**: Peer-to-Peer via Monero, keine Zahlungsvermittlung -- **Privacy-First**: E2E-VerschlΓΌsselung fΓΌr Kommunikation +- **Anonymous**: No personal data required +- **Direct payments**: Peer-to-peer via Monero, no payment intermediary +- **Privacy-first**: End-to-end encrypted communication --- -## πŸ“Š Machbarkeitsanalyse +## πŸ“Š Features -### Technisch realisierbar - -| Feature | KomplexitΓ€t | Status | -|---------|-------------|--------| -| Anzeigen CRUD | Niedrig | βœ… Fertig | -| Fiat/XMR Preisanzeige | Niedrig | βœ… Fertig | -| Anonyme Nutzung (UUID + Hash) | Mittel | βœ… Fertig | -| PWA | Mittel | βœ… GrundgerΓΌst | -| Light/Dark Mode | Niedrig | βœ… Fertig | -| i18n (7 Sprachen) | Niedrig | βœ… Fertig | -| Bildergalerie | Niedrig | βœ… Fertig | -| E2E-Chat (NaCl box.before + secretbox) | Hoch | βœ… Fertig | -| PoW Captcha (Server-seitig) | Mittel | βœ… Fertig | -| Rating-System | Mittel | βœ… Fertig | -| Verifiable Listings | Mittel | βœ… Fertig | -| Reputation-System | Mittel | βœ… Fertig | -| 2FA | Mittel | πŸ”² Offen | - -### ⚠️ Kritische Punkte - -1. **Rechtliche Aspekte** - - AGB, Datenschutz, Impressum erforderlich - - Kein Escrow β†’ kein VASP β†’ kein KYC - - Haftung bei Betrug klΓ€ren - -2. **E2E-VerschlΓΌsselung** - - Key-Management fΓΌr anonyme Nutzer - - Optionen: Signal-Protokoll, Matrix-Protokoll +| Feature | Complexity | Status | +|---------|------------|--------| +| Listings CRUD | Low | βœ… Done | +| Fiat/XMR price display | Low | βœ… Done | +| Anonymous accounts (UUID + Hash) | Medium | βœ… Done | +| PWA | Medium | βœ… Done | +| Light/Dark Mode | Low | βœ… Done | +| i18n (7 languages) | Low | βœ… Done | +| Image gallery | Low | βœ… Done | +| E2E Chat (NaCl box.before + secretbox) | High | βœ… Done | +| PoW Captcha (server-side) | Medium | βœ… Done | +| Rating & Reputation system | Medium | βœ… Done | +| Verifiable Listings | Medium | βœ… Done | +| Pseudonyms & Identicons | Low | βœ… Done | +| Invite code system (alpha) | Low | βœ… Done | +| 2FA | Medium | πŸ”² Planned | --- -## πŸ› οΈ Tech-Stack +## πŸ› οΈ Tech Stack -### Frontend (aktuell) +### Frontend - **Vanilla JavaScript** (ES Modules) - **Web Components** (Custom Elements) - **CSS Custom Properties** (Theming) - **PWA** (Service Worker, Manifest) ### Backend -- **Directus** (Headless CMS, selbst gehostet) +- **Directus** (Headless CMS, self-hosted) - REST API - - Auth, Rollen, Berechtigungen + - Auth, roles, permissions ### Services -- **Directus** Backend: `api.kashilo.com` (Docker) -- **PoW Captcha + Payment Proxy**: `pow.kashilo.com` (PHP, HMAC-signierte Challenges, BTCPay Proxy + Webhook, OG Meta Proxy) -- **BTCPay Server**: `pay.xmr.rocks` (Monero-Zahlungen, Trocador-Plugin) -- **TweetNaCl**: Self-hosted in `js/vendor/` (E2E-VerschlΓΌsselung) +- **Directus** backend: `api.kashilo.com` (Docker) +- **PoW Captcha + Payment Proxy**: `pow.kashilo.com` (PHP, HMAC-signed challenges, BTCPay proxy + webhook, OG meta proxy) +- **BTCPay Server**: `pay.xmr.rocks` (Monero payments, self-hosted) +- **TweetNaCl**: Self-hosted in `js/vendor/` (E2E encryption) -### Geplant -- Push-Benachrichtigungen (Web Push API) +### Planned +- Push notifications (Web Push API) --- ## πŸš€ Setup -### Voraussetzungen -- Moderner Browser mit ES Module Support -- Python 3 (fΓΌr lokalen Server) oder beliebiger HTTP-Server +### Prerequisites +- Modern browser with ES Module support +- Python 3 (for local server) or any HTTP server ### Installation ```bash -# Repository klonen +# Clone the repository git clone https://gitea.pro/schmidt1024/kashilo.git cd kashilo -# Lokalen Server starten +# Start local server python3 -m http.server 8080 -# Oder mit Live-Reload (Node.js erforderlich) +# Or with live-reload (Node.js required) npx live-server ``` -Γ–ffne http://localhost:8080 +Open http://localhost:8080 ### Deployment -FΓΌr Produktion werden nur diese Dateien benΓΆtigt: +Production requires only these files: ``` β”œβ”€β”€ index.html @@ -106,92 +94,92 @@ FΓΌr Produktion werden nur diese Dateien benΓΆtigt: └── assets/ ``` -**Nicht deployen:** `tests/`, `docs/`, `AGENTS.md`, `README.md`, `.git/`, `deploy.sh` +**Do not deploy:** `tests/`, `docs/`, `AGENTS.md`, `README.md`, `.git/`, `deploy.sh` -#### Build (Minifizierung) +#### Build (minification) ```bash -# Einmalig: Dependencies installieren +# One-time: install dependencies pip3 install rjsmin rcssmin -# Build ausfΓΌhren (erstellt dist/ mit minifizierten Dateien) +# Run build (creates dist/ with minified files) python3 build.py ``` -Das Build-Script minifiziert alle JS- und CSS-Dateien (~111 KiB Ersparnis) und kopiert alles nach `dist/`. +The build script minifies all JS and CSS files (~111 KiB savings) and copies everything to `dist/`. -#### Deploy via Script +#### Deploy via script ```bash -# Einmalig: SSH-User und Pfad anpassen +# One-time: adjust SSH user and path ./deploy.sh user@kashilo.com /home/user/web/kashilo.com/public_html -# Oder Defaults im Script setzen und einfach: +# Or set defaults in the script and simply run: ./deploy.sh ``` -Das Script fΓΌhrt automatisch `python3 build.py` aus, dann `rsync` von `dist/` zum Server. +The script automatically runs `python3 build.py`, then `rsync` from `dist/` to the server. -**Voraussetzungen:** -- Python 3 + `rjsmin` + `rcssmin` (fΓΌr Build) -- SSH-Key-Authentifizierung zum Server -- `rsync` lokal und auf dem Server installiert +**Requirements:** +- Python 3 + `rjsmin` + `rcssmin` (for build) +- SSH key authentication to server +- `rsync` installed locally and on the server -### Tests ausfΓΌhren +### Running tests ```bash -# Server starten +# Start server python3 -m http.server 8080 -# Im Browser ΓΆffnen +# Open in browser # http://localhost:8080/tests/ ``` -Die Tests laufen im Browser und nutzen einen minimalen Test-Runner ohne externe Dependencies. +Tests run in the browser using a minimal test runner without external dependencies. -### Projektstruktur +### Project structure ``` kashilo/ -β”œβ”€β”€ index.html # Entry Point +β”œβ”€β”€ index.html # Entry point β”œβ”€β”€ manifest.json # PWA Manifest -β”œβ”€β”€ service-worker.js # Offline-Support +β”œβ”€β”€ service-worker.js # Offline support β”œβ”€β”€ css/ β”‚ β”œβ”€β”€ fonts.css # Web Fonts (Inter, Space Grotesk) β”‚ β”œβ”€β”€ variables.css # Theming (Light/Dark) -β”‚ β”œβ”€β”€ base.css # Reset, Grundstyles -β”‚ └── components.css # UI-Komponenten +β”‚ β”œβ”€β”€ base.css # Reset, base styles +β”‚ └── components.css # UI components β”œβ”€β”€ js/ -β”‚ β”œβ”€β”€ app.js # App-Initialisierung -β”‚ β”œβ”€β”€ router.js # Hash-basiertes Routing -β”‚ β”œβ”€β”€ i18n.js # Übersetzungssystem +β”‚ β”œβ”€β”€ app.js # App initialization +β”‚ β”œβ”€β”€ router.js # Hash-based routing +β”‚ β”œβ”€β”€ i18n.js # Translation system β”‚ β”œβ”€β”€ services/ -β”‚ β”‚ β”œβ”€β”€ directus.js # Directus API Client -β”‚ β”‚ β”œβ”€β”€ auth.js # UUID-Auth (SHA-256 Hash) -β”‚ β”‚ β”œβ”€β”€ listings.js # Listings-Service -β”‚ β”‚ β”œβ”€β”€ categories.js # Kategorien-Service -β”‚ β”‚ β”œβ”€β”€ locations.js # Standorte-Service -β”‚ β”‚ β”œβ”€β”€ conversations.js# Zero-Knowledge Chat -β”‚ β”‚ β”œβ”€β”€ crypto.js # NaCl Encryption (box.before + secretbox) -β”‚ β”‚ β”œβ”€β”€ currency.js # XMR/Fiat Umrechnung -β”‚ β”‚ β”œβ”€β”€ pow-captcha.js # PoW Captcha (Server-first, lokaler Fallback) -β”‚ β”‚ β”œβ”€β”€ btcpay.js # BTCPay Server Integration (Invoice, Checkout) -β”‚ β”‚ β”œβ”€β”€ favorites.js # Favoriten (localStorage + Directus Sync) -β”‚ β”‚ β”œβ”€β”€ notifications.js# Benachrichtigungen (Polling, Badge) -β”‚ β”‚ β”œβ”€β”€ reputation.js # Reputation (Deals, Ratings, Level) -β”‚ β”‚ β”œβ”€β”€ verification.js # Verifiable Listings (Proof of Possession) -β”‚ β”‚ └── identity.js # Pseudonyme & Identicon-Avatare +β”‚ β”‚ β”œβ”€β”€ directus.js # Directus API client +β”‚ β”‚ β”œβ”€β”€ auth.js # UUID auth (SHA-256 hash) +β”‚ β”‚ β”œβ”€β”€ listings.js # Listings service +β”‚ β”‚ β”œβ”€β”€ categories.js # Categories service +β”‚ β”‚ β”œβ”€β”€ locations.js # Locations service +β”‚ β”‚ β”œβ”€β”€ conversations.js# Zero-knowledge chat +β”‚ β”‚ β”œβ”€β”€ crypto.js # NaCl encryption (box.before + secretbox) +β”‚ β”‚ β”œβ”€β”€ currency.js # XMR/fiat conversion (Kraken + CoinGecko) +β”‚ β”‚ β”œβ”€β”€ pow-captcha.js # PoW captcha (server-first, local fallback) +β”‚ β”‚ β”œβ”€β”€ btcpay.js # BTCPay Server integration +β”‚ β”‚ β”œβ”€β”€ favorites.js # Favorites (localStorage + Directus sync) +β”‚ β”‚ β”œβ”€β”€ notifications.js# Notifications (polling, badge) +β”‚ β”‚ β”œβ”€β”€ reputation.js # Reputation (deals, ratings, levels) +β”‚ β”‚ β”œβ”€β”€ verification.js # Verifiable listings (proof of possession) +β”‚ β”‚ └── identity.js # Pseudonyms & identicon avatars β”‚ β”œβ”€β”€ vendor/ β”‚ β”‚ β”œβ”€β”€ nacl-fast.min.js # TweetNaCl (self-hosted) β”‚ β”‚ β”œβ”€β”€ nacl-util.min.js # TweetNaCl Utils β”‚ β”‚ └── cropper.min.js # Image Cropper β”‚ └── components/ -β”‚ β”œβ”€β”€ app-shell.js # Layout-Container -β”‚ β”œβ”€β”€ app-header.js # Header mit Navigation +β”‚ β”œβ”€β”€ app-shell.js # Layout container +β”‚ β”œβ”€β”€ app-header.js # Header with navigation β”‚ β”œβ”€β”€ app-footer.js # Footer -β”‚ β”œβ”€β”€ auth-modal.js # Login/Register Modal -β”‚ β”œβ”€β”€ chat-widget.js # E2E Chat Widget -β”‚ └── pages/ # Seiten-Komponenten +β”‚ β”œβ”€β”€ auth-modal.js # Login/Register modal +β”‚ β”œβ”€β”€ chat-widget.js # E2E chat widget +β”‚ └── pages/ # Page components β”œβ”€β”€ locales/ β”‚ β”œβ”€β”€ de.json # Deutsch β”‚ β”œβ”€β”€ en.json # English @@ -201,120 +189,104 @@ kashilo/ β”‚ β”œβ”€β”€ pt.json # PortuguΓͺs (BR) β”‚ └── ru.json # Русский β”œβ”€β”€ tests/ -β”‚ β”œβ”€β”€ index.html # Test-Runner UI -β”‚ β”œβ”€β”€ test-runner.js # Test-Framework -β”‚ └── *.test.js # Unit Tests +β”‚ β”œβ”€β”€ index.html # Test runner UI +β”‚ β”œβ”€β”€ test-runner.js # Test framework +β”‚ └── *.test.js # Unit tests └── assets/ - └── fonts/ # Self-hosted Fonts + └── fonts/ # Self-hosted fonts ``` --- -## πŸ“‹ Offene Punkte / Roadmap +## πŸ“‹ Roadmap -### Phase 1: MVP Frontend -- [x] Projektstruktur -- [x] Routing -- [x] i18n (DE/EN/FR) -- [x] Light/Dark Mode -- [x] PWA GrundgerΓΌst -- [x] Startseite mit Suche, Kategorien, Listings-Grid -- [x] Typografie (Inter + Space Grotesk) -- [x] Such-Komponente mit Accordion-Kategorien -- [x] Anzeige-Detailseite mit Bildergalerie -- [x] Anzeige-Erstellen-Formular -- [x] Suchseite mit Filtern (merged in Home) -- [x] Skeleton Loading, Error Boundary, Offline Indicator -- [x] Lazy Loading fΓΌr Bilder -- [ ] Responsive Optimierungen +### Phase 1: Frontend βœ… +- [x] Project structure, routing, i18n (7 languages) +- [x] Light/Dark mode, PWA shell +- [x] Home page with search, categories, listings grid +- [x] Listing detail page with image gallery +- [x] Create/edit listing form +- [x] Skeleton loading, error boundary, offline indicator -### Phase 2: Backend-Integration ⬅️ **Aktuell** -- [x] Directus aufsetzen (`api.kashilo.com`) -- [x] Listings-Collection (CRUD) -- [x] Categories mit Übersetzungen -- [x] User-Auth (UUID + SHA-256 Hash, anonym) -- [x] Bilder-Upload (Junction-Table) -- [x] API-Services (`directus.js`, `listings.js`, `categories.js`, `locations.js`) -- [x] Directus Public-Berechtigungen (siehe `docs/DIRECTUS-SCHEMA.md`) -- [x] Neue Seiten: Favoriten, Meine Anzeigen, Nachrichten, Einstellungen -- [x] Listings bearbeiten (Edit-Modus fΓΌr eigene Anzeigen) +### Phase 2: Backend integration βœ… +- [x] Directus setup (`api.kashilo.com`) +- [x] Listings, categories, locations collections +- [x] Anonymous auth (UUID + SHA-256 hash) +- [x] Image upload, favorites, my listings, messages, settings pages -### Phase 3: Kommunikation & Sicherheit -- [x] Chat-System (E2E-verschlΓΌsselt mit NaCl box.before + secretbox) -- [x] Conversations/Messages Services -- [x] Merkliste (Favoriten-Seite) -- [x] Favoriten Directus-Sync (Union-Merge bei Login, localStorage-Fallback) -- [x] PoW Captcha (server-seitig via pow.kashilo.com, HMAC-signiert) -- [x] TweetNaCl self-hosted (kein CDN) -- [x] In-App Benachrichtigungen (Notifications-Service, Glocke mit Badge) -- [x] Open Graph & X Card Meta-Tags (dynamisch pro Listing) -- [ ] Push-Benachrichtigungen (Web Push API) +### Phase 3: Communication & Security βœ… +- [x] E2E encrypted chat (NaCl box.before + secretbox) +- [x] Favorites with Directus sync (union merge on login) +- [x] PoW captcha (server-side via pow.kashilo.com) +- [x] TweetNaCl self-hosted (no CDN) +- [x] In-app notifications (polling, badge) +- [x] Open Graph & X Card meta tags -### Phase 4: Payments -- [x] XMR-Kursabfrage API (Kraken primary, CoinGecko fallback) -- [x] Fiat ↔ XMR Umrechnung (Dual-Preis-Anzeige) -- [x] BTCPay Server Integration (`pay.xmr.rocks`, Proxy auf `pow.kashilo.com`) -- [x] Listing-GebΓΌhr: 1 USD via Monero -- [x] Webhook fΓΌr Auto-Publish nach Blockchain-Confirmation -- [x] Expired Listings (Directus Flow, Status-Badges auf Cards) -- [x] Token-Refresh bei Tab-Visibility-Change -### Phase 5: Trust & Safety -- [x] Rating-System -- [x] Reputation-System (Deals, Levels, Badges) -- [x] Verifiable Listings (Proof of Possession) -- [x] Pseudonyme & Identicon-Avatare +### Phase 4: Payments βœ… +- [x] XMR rate API (Kraken primary, CoinGecko fallback) +- [x] Fiat ↔ XMR conversion (dual price display) +- [x] BTCPay Server integration (self-hosted) +- [x] Listing fee: $1 via Monero +- [x] Webhook for auto-publish after blockchain confirmation +- [x] Expired listings (Directus flow, status badges) + +### Phase 5: Trust & Safety βœ… +- [x] Rating & reputation system (deals, levels, badges) +- [x] Verifiable listings (proof of possession) +- [x] Pseudonyms & identicon avatars +- [x] Terms of service, privacy policy, legal notice (7 languages) - [ ] 2FA -- [ ] Reporting/Moderation -- [x] AGB, Datenschutz, Impressum (EntwΓΌrfe in 7 Sprachen) +- [ ] Reporting/moderation +- [ ] Push notifications (Web Push API) --- -## 🎨 Design-Entscheidungen +## 🎨 Design -### Typografie +### Typography - **Headlines**: Space Grotesk (Medium, Bold) - **Body**: Inter (Regular, Medium, SemiBold, Bold) -- Self-hosted Fonts (SIL Open Font License) +- Self-hosted fonts (SIL Open Font License) -### Farbpalette +### Color palette - **Warm Teal Theme** -- **Light Mode**: BG #FAFAF9, Text #1C1917, Accent #0D9488 (Teal) -- **Dark Mode**: BG #171717, Text #F5F5F4, Accent #2DD4BF (Teal light) +- **Light Mode**: BG #FAFAF9, Text #1C1917, Accent #0D9488 +- **Dark Mode**: BG #171717, Text #F5F5F4, Accent #2DD4BF -### Mobile-First -- Responsive Grid (2 Spalten Mobile, 5 Spalten Desktop) -- Touch-optimierte Buttons -- Icon-only Buttons auf kleinen Screens +### Mobile-first +- Responsive grid (2 columns mobile, 5 columns desktop) +- Touch-optimized buttons +- Icon-only buttons on small screens --- ## 🀝 Contributing -1. Feature-Branch erstellen -2. Γ„nderungen committen -3. Pull Request ΓΆffnen +1. Create a feature branch +2. Commit your changes +3. Open a pull request -### Code-Konventionen -- ES Modules verwenden -- Web Components fΓΌr UI-Komponenten -- CSS Custom Properties fΓΌr Theming -- ÜbersetzungsschlΓΌssel fΓΌr alle Texte -- Keine Semikolons in JavaScript (außer for-loops, CSS) -- Englische Kommentare im Code +### Code conventions +- ES Modules +- Web Components for UI +- CSS Custom Properties for theming +- Translation keys for all user-facing text +- No semicolons in JavaScript (except for-loops, CSS) +- English comments in code --- -## πŸ“„ Lizenz +## πŸ“„ License -Dieses Projekt steht unter der [GNU Affero General Public License v3.0 (AGPL-3.0)](LICENSE). +This project is licensed under the [GNU Affero General Public License v3.0 (AGPL-3.0)](LICENSE). -Der Quellcode ist frei verfΓΌgbar. Forks und Modifikationen mΓΌssen ebenfalls unter AGPL-3.0 verΓΆffentlicht werden. +Source code is freely available. Forks and modifications must also be published under AGPL-3.0. -**kashilo** ist eine eingetragene Marke. Der Name und das Logo dΓΌrfen nicht ohne Genehmigung fΓΌr abgeleitete Projekte verwendet werden. +**kashilo** is a registered trademark. The name and logo may not be used for derivative projects without permission. --- -## πŸ“ž Kontakt +## πŸ“ž Contact - **Issues:** [gitea.pro/schmidt1024/kashilo/issues](https://gitea.pro/schmidt1024/kashilo/issues) - **Website:** [kashilo.com](https://kashilo.com)