Files
kashilo/README.md

9.8 KiB

kashilo.com

Eine anonyme, dezentrale Kleinanzeigen-Plattform mit Monero-Bezahlung.

🎯 Vision

kashilo.com ermöglicht es Nutzern, Kleinanzeigen zu schalten und Waren/Dienstleistungen sicher über Monero (XMR) zu handeln. Besonderheiten:

  • Anonymität: Nutzung ohne Account möglich
  • Direkte Zahlung: Peer-to-Peer via Monero, keine Zahlungsvermittlung
  • Privacy-First: E2E-Verschlüsselung für Kommunikation

📊 Machbarkeitsanalyse

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

🛠️ Tech-Stack

Frontend (aktuell)

  • Vanilla JavaScript (ES Modules)
  • Web Components (Custom Elements)
  • CSS Custom Properties (Theming)
  • PWA (Service Worker, Manifest)

Backend (geplant)

  • Directus (Headless CMS)
    • REST/GraphQL API
    • Auth, Rollen, Berechtigungen
    • Custom Extensions für XMR-Integration

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)

Infrastruktur (geplant)

  • monero-wallet-rpc
  • Push-Benachrichtigungen

🚀 Setup

Voraussetzungen

  • Moderner Browser mit ES Module Support
  • Python 3 (für lokalen Server) oder beliebiger HTTP-Server

Installation

# Repository klonen
git clone https://gitea.pro/schmidt1024/dgray.git
cd dgray

# Lokalen Server starten
python3 -m http.server 8080

# Oder mit Live-Reload (Node.js erforderlich)
npx live-server

Öffne http://localhost:8080

Deployment

Für Produktion werden nur diese Dateien benötigt:

├── index.html
├── manifest.json
├── service-worker.js
├── favicon.png
├── js/
├── css/
├── locales/
└── assets/

Nicht deployen: tests/, docs/, AGENTS.md, README.md, .git/, deploy.sh

Build (Minifizierung)

# Einmalig: Dependencies installieren
pip3 install rjsmin rcssmin

# Build ausführen (erstellt dist/ mit minifizierten Dateien)
python3 build.py

Das Build-Script minifiziert alle JS- und CSS-Dateien (~111 KiB Ersparnis) und kopiert alles nach dist/.

Deploy via Script

# Einmalig: SSH-User und Pfad anpassen
./deploy.sh user@kashilo.com /home/user/web/kashilo.com/public_html

# Oder Defaults im Script setzen und einfach:
./deploy.sh

Das Script führt automatisch python3 build.py aus, dann rsync von dist/ zum Server.

Voraussetzungen:

  • Python 3 + rjsmin + rcssmin (für Build)
  • SSH-Key-Authentifizierung zum Server
  • rsync lokal und auf dem Server installiert

Tests ausführen

# Server starten
python3 -m http.server 8080

# Im Browser öffnen
# http://localhost:8080/tests/

Die Tests laufen im Browser und nutzen einen minimalen Test-Runner ohne externe Dependencies.

Projektstruktur

kashilo/
├── index.html              # Entry Point
├── manifest.json           # PWA Manifest
├── 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
├── js/
│   ├── app.js              # App-Initialisierung
│   ├── router.js           # Hash-basiertes Routing
│   ├── i18n.js             # Übersetzungssystem
│   ├── 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
│   ├── 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-footer.js   # Footer
│       ├── auth-modal.js   # Login/Register Modal
│       ├── chat-widget.js  # E2E Chat Widget
│       └── pages/          # Seiten-Komponenten
├── locales/
│   ├── de.json             # Deutsch
│   ├── en.json             # English
│   ├── fr.json             # Français
│   ├── it.json             # Italiano
│   ├── es.json             # Español
│   ├── pt.json             # Português (BR)
│   └── ru.json             # Русский
├── tests/
│   ├── index.html          # Test-Runner UI
│   ├── test-runner.js      # Test-Framework
│   └── *.test.js           # Unit Tests
└── assets/
    └── fonts/              # Self-hosted Fonts

📋 Offene Punkte / Roadmap

Phase 1: MVP Frontend

  • Projektstruktur
  • Routing
  • i18n (DE/EN/FR)
  • Light/Dark Mode
  • PWA Grundgerüst
  • Startseite mit Suche, Kategorien, Listings-Grid
  • Typografie (Inter + Space Grotesk)
  • Such-Komponente mit Accordion-Kategorien
  • Anzeige-Detailseite mit Bildergalerie
  • Anzeige-Erstellen-Formular
  • Suchseite mit Filtern (merged in Home)
  • Skeleton Loading, Error Boundary, Offline Indicator
  • Lazy Loading für Bilder
  • Responsive Optimierungen

Phase 2: Backend-Integration ⬅️ Aktuell

  • Directus aufsetzen (api.kashilo.com)
  • Listings-Collection (CRUD)
  • Categories mit Übersetzungen
  • User-Auth (UUID + SHA-256 Hash, anonym)
  • Bilder-Upload (Junction-Table)
  • API-Services (directus.js, listings.js, categories.js, locations.js)
  • Directus Public-Berechtigungen (siehe docs/DIRECTUS-SCHEMA.md)
  • Neue Seiten: Favoriten, Meine Anzeigen, Nachrichten, Einstellungen
  • Listings bearbeiten (Edit-Modus für eigene Anzeigen)

Phase 3: Kommunikation & Sicherheit

  • Chat-System (E2E-verschlüsselt mit NaCl box.before + secretbox)
  • Conversations/Messages Services
  • Merkliste (Favoriten-Seite)
  • Favoriten Directus-Sync (Union-Merge bei Login, localStorage-Fallback)
  • PoW Captcha (server-seitig via pow.kashilo.com, HMAC-signiert)
  • TweetNaCl self-hosted (kein CDN)
  • In-App Benachrichtigungen (Notifications-Service, Glocke mit Badge)
  • Open Graph & X Card Meta-Tags (dynamisch pro Listing)
  • Push-Benachrichtigungen (Web Push API)

Phase 4: Payments

  • XMR-Kursabfrage API (CoinGecko)
  • Fiat ↔ XMR Umrechnung (Dual-Preis-Anzeige)
  • BTCPay Server Integration (pay.xmr.rocks, Proxy auf pow.kashilo.com)
  • Listing-Gebühr: 1 EUR/USD/CHF/GBP (200 JPY) via Monero
  • Webhook für Auto-Publish nach Blockchain-Confirmation
  • Expired Listings (Directus Flow, Status-Badges auf Cards)
  • Token-Refresh bei Tab-Visibility-Change

Phase 5: Trust & Safety

  • Rating-System
  • Reputation-System (Deals, Levels, Badges)
  • Verifiable Listings (Proof of Possession)
  • Pseudonyme & Identicon-Avatare
  • 2FA
  • Reporting/Moderation
  • AGB, Datenschutz, Impressum (Entwürfe in 7 Sprachen)

🎨 Design-Entscheidungen

Typografie

  • Headlines: Space Grotesk (Medium, Bold)
  • Body: Inter (Regular, Medium, SemiBold, Bold)
  • Self-hosted Fonts (SIL Open Font License)

Farbpalette

  • Warm Teal Theme
  • Light Mode: BG #FAFAF9, Text #1C1917, Accent #0D9488 (Teal)
  • Dark Mode: BG #171717, Text #F5F5F4, Accent #2DD4BF (Teal light)

Mobile-First

  • Responsive Grid (2 Spalten Mobile, 5 Spalten Desktop)
  • Touch-optimierte Buttons
  • Icon-only Buttons auf kleinen Screens

🤝 Contributing

  1. Feature-Branch erstellen
  2. Änderungen committen
  3. Pull Request öffnen

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

📄 Lizenz

TBD


📞 Kontakt

TBD