docs: translate README to English
This commit is contained in:
326
README.md
326
README.md
@@ -1,99 +1,87 @@
|
|||||||
# kashilo.com
|
# kashilo.com
|
||||||
|
|
||||||
Eine anonyme, dezentrale Kleinanzeigen-Plattform mit Monero-Bezahlung.
|
A privacy-first classifieds platform with Monero payments.
|
||||||
|
|
||||||
## 🎯 Vision
|
## 🎯 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
|
- **Anonymous**: No personal data required
|
||||||
- **Direkte Zahlung**: Peer-to-Peer via Monero, keine Zahlungsvermittlung
|
- **Direct payments**: Peer-to-peer via Monero, no payment intermediary
|
||||||
- **Privacy-First**: E2E-Verschlüsselung für Kommunikation
|
- **Privacy-first**: End-to-end encrypted communication
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📊 Machbarkeitsanalyse
|
## 📊 Features
|
||||||
|
|
||||||
### Technisch realisierbar
|
| Feature | Complexity | Status |
|
||||||
|
|---------|------------|--------|
|
||||||
| Feature | Komplexität | Status |
|
| Listings CRUD | Low | ✅ Done |
|
||||||
|---------|-------------|--------|
|
| Fiat/XMR price display | Low | ✅ Done |
|
||||||
| Anzeigen CRUD | Niedrig | ✅ Fertig |
|
| Anonymous accounts (UUID + Hash) | Medium | ✅ Done |
|
||||||
| Fiat/XMR Preisanzeige | Niedrig | ✅ Fertig |
|
| PWA | Medium | ✅ Done |
|
||||||
| Anonyme Nutzung (UUID + Hash) | Mittel | ✅ Fertig |
|
| Light/Dark Mode | Low | ✅ Done |
|
||||||
| PWA | Mittel | ✅ Grundgerüst |
|
| i18n (7 languages) | Low | ✅ Done |
|
||||||
| Light/Dark Mode | Niedrig | ✅ Fertig |
|
| Image gallery | Low | ✅ Done |
|
||||||
| i18n (7 Sprachen) | Niedrig | ✅ Fertig |
|
| E2E Chat (NaCl box.before + secretbox) | High | ✅ Done |
|
||||||
| Bildergalerie | Niedrig | ✅ Fertig |
|
| PoW Captcha (server-side) | Medium | ✅ Done |
|
||||||
| E2E-Chat (NaCl box.before + secretbox) | Hoch | ✅ Fertig |
|
| Rating & Reputation system | Medium | ✅ Done |
|
||||||
| PoW Captcha (Server-seitig) | Mittel | ✅ Fertig |
|
| Verifiable Listings | Medium | ✅ Done |
|
||||||
| Rating-System | Mittel | ✅ Fertig |
|
| Pseudonyms & Identicons | Low | ✅ Done |
|
||||||
| Verifiable Listings | Mittel | ✅ Fertig |
|
| Invite code system (alpha) | Low | ✅ Done |
|
||||||
| Reputation-System | Mittel | ✅ Fertig |
|
| 2FA | Medium | 🔲 Planned |
|
||||||
| 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
|
## 🛠️ Tech Stack
|
||||||
|
|
||||||
### Frontend (aktuell)
|
### Frontend
|
||||||
- **Vanilla JavaScript** (ES Modules)
|
- **Vanilla JavaScript** (ES Modules)
|
||||||
- **Web Components** (Custom Elements)
|
- **Web Components** (Custom Elements)
|
||||||
- **CSS Custom Properties** (Theming)
|
- **CSS Custom Properties** (Theming)
|
||||||
- **PWA** (Service Worker, Manifest)
|
- **PWA** (Service Worker, Manifest)
|
||||||
|
|
||||||
### Backend
|
### Backend
|
||||||
- **Directus** (Headless CMS, selbst gehostet)
|
- **Directus** (Headless CMS, self-hosted)
|
||||||
- REST API
|
- REST API
|
||||||
- Auth, Rollen, Berechtigungen
|
- Auth, roles, permissions
|
||||||
|
|
||||||
### Services
|
### Services
|
||||||
- **Directus** Backend: `api.kashilo.com` (Docker)
|
- **Directus** backend: `api.kashilo.com` (Docker)
|
||||||
- **PoW Captcha + Payment Proxy**: `pow.kashilo.com` (PHP, HMAC-signierte Challenges, BTCPay Proxy + Webhook, OG Meta Proxy)
|
- **PoW Captcha + Payment Proxy**: `pow.kashilo.com` (PHP, HMAC-signed challenges, BTCPay proxy + webhook, OG meta proxy)
|
||||||
- **BTCPay Server**: `pay.xmr.rocks` (Monero-Zahlungen, Trocador-Plugin)
|
- **BTCPay Server**: `pay.xmr.rocks` (Monero payments, self-hosted)
|
||||||
- **TweetNaCl**: Self-hosted in `js/vendor/` (E2E-Verschlüsselung)
|
- **TweetNaCl**: Self-hosted in `js/vendor/` (E2E encryption)
|
||||||
|
|
||||||
### Geplant
|
### Planned
|
||||||
- Push-Benachrichtigungen (Web Push API)
|
- Push notifications (Web Push API)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🚀 Setup
|
## 🚀 Setup
|
||||||
|
|
||||||
### Voraussetzungen
|
### Prerequisites
|
||||||
- Moderner Browser mit ES Module Support
|
- Modern browser with ES Module support
|
||||||
- Python 3 (für lokalen Server) oder beliebiger HTTP-Server
|
- Python 3 (for local server) or any HTTP server
|
||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Repository klonen
|
# Clone the repository
|
||||||
git clone https://gitea.pro/schmidt1024/kashilo.git
|
git clone https://gitea.pro/schmidt1024/kashilo.git
|
||||||
cd kashilo
|
cd kashilo
|
||||||
|
|
||||||
# Lokalen Server starten
|
# Start local server
|
||||||
python3 -m http.server 8080
|
python3 -m http.server 8080
|
||||||
|
|
||||||
# Oder mit Live-Reload (Node.js erforderlich)
|
# Or with live-reload (Node.js required)
|
||||||
npx live-server
|
npx live-server
|
||||||
```
|
```
|
||||||
|
|
||||||
Öffne http://localhost:8080
|
Open http://localhost:8080
|
||||||
|
|
||||||
### Deployment
|
### Deployment
|
||||||
|
|
||||||
Für Produktion werden nur diese Dateien benötigt:
|
Production requires only these files:
|
||||||
|
|
||||||
```
|
```
|
||||||
├── index.html
|
├── index.html
|
||||||
@@ -106,92 +94,92 @@ Für Produktion werden nur diese Dateien benötigt:
|
|||||||
└── assets/
|
└── 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
|
```bash
|
||||||
# Einmalig: Dependencies installieren
|
# One-time: install dependencies
|
||||||
pip3 install rjsmin rcssmin
|
pip3 install rjsmin rcssmin
|
||||||
|
|
||||||
# Build ausführen (erstellt dist/ mit minifizierten Dateien)
|
# Run build (creates dist/ with minified files)
|
||||||
python3 build.py
|
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
|
```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
|
./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
|
./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:**
|
**Requirements:**
|
||||||
- Python 3 + `rjsmin` + `rcssmin` (für Build)
|
- Python 3 + `rjsmin` + `rcssmin` (for build)
|
||||||
- SSH-Key-Authentifizierung zum Server
|
- SSH key authentication to server
|
||||||
- `rsync` lokal und auf dem Server installiert
|
- `rsync` installed locally and on the server
|
||||||
|
|
||||||
### Tests ausführen
|
### Running tests
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Server starten
|
# Start server
|
||||||
python3 -m http.server 8080
|
python3 -m http.server 8080
|
||||||
|
|
||||||
# Im Browser öffnen
|
# Open in browser
|
||||||
# http://localhost:8080/tests/
|
# 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/
|
kashilo/
|
||||||
├── index.html # Entry Point
|
├── index.html # Entry point
|
||||||
├── manifest.json # PWA Manifest
|
├── manifest.json # PWA Manifest
|
||||||
├── service-worker.js # Offline-Support
|
├── service-worker.js # Offline support
|
||||||
├── css/
|
├── css/
|
||||||
│ ├── fonts.css # Web Fonts (Inter, Space Grotesk)
|
│ ├── fonts.css # Web Fonts (Inter, Space Grotesk)
|
||||||
│ ├── variables.css # Theming (Light/Dark)
|
│ ├── variables.css # Theming (Light/Dark)
|
||||||
│ ├── base.css # Reset, Grundstyles
|
│ ├── base.css # Reset, base styles
|
||||||
│ └── components.css # UI-Komponenten
|
│ └── components.css # UI components
|
||||||
├── js/
|
├── js/
|
||||||
│ ├── app.js # App-Initialisierung
|
│ ├── app.js # App initialization
|
||||||
│ ├── router.js # Hash-basiertes Routing
|
│ ├── router.js # Hash-based routing
|
||||||
│ ├── i18n.js # Übersetzungssystem
|
│ ├── i18n.js # Translation system
|
||||||
│ ├── services/
|
│ ├── services/
|
||||||
│ │ ├── directus.js # Directus API Client
|
│ │ ├── directus.js # Directus API client
|
||||||
│ │ ├── auth.js # UUID-Auth (SHA-256 Hash)
|
│ │ ├── auth.js # UUID auth (SHA-256 hash)
|
||||||
│ │ ├── listings.js # Listings-Service
|
│ │ ├── listings.js # Listings service
|
||||||
│ │ ├── categories.js # Kategorien-Service
|
│ │ ├── categories.js # Categories service
|
||||||
│ │ ├── locations.js # Standorte-Service
|
│ │ ├── locations.js # Locations service
|
||||||
│ │ ├── conversations.js# Zero-Knowledge Chat
|
│ │ ├── conversations.js# Zero-knowledge chat
|
||||||
│ │ ├── crypto.js # NaCl Encryption (box.before + secretbox)
|
│ │ ├── crypto.js # NaCl encryption (box.before + secretbox)
|
||||||
│ │ ├── currency.js # XMR/Fiat Umrechnung
|
│ │ ├── currency.js # XMR/fiat conversion (Kraken + CoinGecko)
|
||||||
│ │ ├── pow-captcha.js # PoW Captcha (Server-first, lokaler Fallback)
|
│ │ ├── pow-captcha.js # PoW captcha (server-first, local fallback)
|
||||||
│ │ ├── btcpay.js # BTCPay Server Integration (Invoice, Checkout)
|
│ │ ├── btcpay.js # BTCPay Server integration
|
||||||
│ │ ├── favorites.js # Favoriten (localStorage + Directus Sync)
|
│ │ ├── favorites.js # Favorites (localStorage + Directus sync)
|
||||||
│ │ ├── notifications.js# Benachrichtigungen (Polling, Badge)
|
│ │ ├── notifications.js# Notifications (polling, badge)
|
||||||
│ │ ├── reputation.js # Reputation (Deals, Ratings, Level)
|
│ │ ├── reputation.js # Reputation (deals, ratings, levels)
|
||||||
│ │ ├── verification.js # Verifiable Listings (Proof of Possession)
|
│ │ ├── verification.js # Verifiable listings (proof of possession)
|
||||||
│ │ └── identity.js # Pseudonyme & Identicon-Avatare
|
│ │ └── identity.js # Pseudonyms & identicon avatars
|
||||||
│ ├── vendor/
|
│ ├── vendor/
|
||||||
│ │ ├── nacl-fast.min.js # TweetNaCl (self-hosted)
|
│ │ ├── nacl-fast.min.js # TweetNaCl (self-hosted)
|
||||||
│ │ ├── nacl-util.min.js # TweetNaCl Utils
|
│ │ ├── nacl-util.min.js # TweetNaCl Utils
|
||||||
│ │ └── cropper.min.js # Image Cropper
|
│ │ └── cropper.min.js # Image Cropper
|
||||||
│ └── components/
|
│ └── components/
|
||||||
│ ├── app-shell.js # Layout-Container
|
│ ├── app-shell.js # Layout container
|
||||||
│ ├── app-header.js # Header mit Navigation
|
│ ├── app-header.js # Header with navigation
|
||||||
│ ├── app-footer.js # Footer
|
│ ├── app-footer.js # Footer
|
||||||
│ ├── auth-modal.js # Login/Register Modal
|
│ ├── auth-modal.js # Login/Register modal
|
||||||
│ ├── chat-widget.js # E2E Chat Widget
|
│ ├── chat-widget.js # E2E chat widget
|
||||||
│ └── pages/ # Seiten-Komponenten
|
│ └── pages/ # Page components
|
||||||
├── locales/
|
├── locales/
|
||||||
│ ├── de.json # Deutsch
|
│ ├── de.json # Deutsch
|
||||||
│ ├── en.json # English
|
│ ├── en.json # English
|
||||||
@@ -201,120 +189,104 @@ kashilo/
|
|||||||
│ ├── pt.json # Português (BR)
|
│ ├── pt.json # Português (BR)
|
||||||
│ └── ru.json # Русский
|
│ └── ru.json # Русский
|
||||||
├── tests/
|
├── tests/
|
||||||
│ ├── index.html # Test-Runner UI
|
│ ├── index.html # Test runner UI
|
||||||
│ ├── test-runner.js # Test-Framework
|
│ ├── test-runner.js # Test framework
|
||||||
│ └── *.test.js # Unit Tests
|
│ └── *.test.js # Unit tests
|
||||||
└── assets/
|
└── assets/
|
||||||
└── fonts/ # Self-hosted Fonts
|
└── fonts/ # Self-hosted fonts
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📋 Offene Punkte / Roadmap
|
## 📋 Roadmap
|
||||||
|
|
||||||
### Phase 1: MVP Frontend
|
### Phase 1: Frontend ✅
|
||||||
- [x] Projektstruktur
|
- [x] Project structure, routing, i18n (7 languages)
|
||||||
- [x] Routing
|
- [x] Light/Dark mode, PWA shell
|
||||||
- [x] i18n (DE/EN/FR)
|
- [x] Home page with search, categories, listings grid
|
||||||
- [x] Light/Dark Mode
|
- [x] Listing detail page with image gallery
|
||||||
- [x] PWA Grundgerüst
|
- [x] Create/edit listing form
|
||||||
- [x] Startseite mit Suche, Kategorien, Listings-Grid
|
- [x] Skeleton loading, error boundary, offline indicator
|
||||||
- [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 2: Backend-Integration ⬅️ **Aktuell**
|
### Phase 2: Backend integration ✅
|
||||||
- [x] Directus aufsetzen (`api.kashilo.com`)
|
- [x] Directus setup (`api.kashilo.com`)
|
||||||
- [x] Listings-Collection (CRUD)
|
- [x] Listings, categories, locations collections
|
||||||
- [x] Categories mit Übersetzungen
|
- [x] Anonymous auth (UUID + SHA-256 hash)
|
||||||
- [x] User-Auth (UUID + SHA-256 Hash, anonym)
|
- [x] Image upload, favorites, my listings, messages, settings pages
|
||||||
- [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 3: Kommunikation & Sicherheit
|
### Phase 3: Communication & Security ✅
|
||||||
- [x] Chat-System (E2E-verschlüsselt mit NaCl box.before + secretbox)
|
- [x] E2E encrypted chat (NaCl box.before + secretbox)
|
||||||
- [x] Conversations/Messages Services
|
- [x] Favorites with Directus sync (union merge on login)
|
||||||
- [x] Merkliste (Favoriten-Seite)
|
- [x] PoW captcha (server-side via pow.kashilo.com)
|
||||||
- [x] Favoriten Directus-Sync (Union-Merge bei Login, localStorage-Fallback)
|
- [x] TweetNaCl self-hosted (no CDN)
|
||||||
- [x] PoW Captcha (server-seitig via pow.kashilo.com, HMAC-signiert)
|
- [x] In-app notifications (polling, badge)
|
||||||
- [x] TweetNaCl self-hosted (kein CDN)
|
- [x] Open Graph & X Card meta tags
|
||||||
- [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 4: Payments
|
### Phase 4: Payments ✅
|
||||||
- [x] XMR-Kursabfrage API (Kraken primary, CoinGecko fallback)
|
- [x] XMR rate API (Kraken primary, CoinGecko fallback)
|
||||||
- [x] Fiat ↔ XMR Umrechnung (Dual-Preis-Anzeige)
|
- [x] Fiat ↔ XMR conversion (dual price display)
|
||||||
- [x] BTCPay Server Integration (`pay.xmr.rocks`, Proxy auf `pow.kashilo.com`)
|
- [x] BTCPay Server integration (self-hosted)
|
||||||
- [x] Listing-Gebühr: 1 USD via Monero
|
- [x] Listing fee: $1 via Monero
|
||||||
- [x] Webhook für Auto-Publish nach Blockchain-Confirmation
|
- [x] Webhook for auto-publish after blockchain confirmation
|
||||||
- [x] Expired Listings (Directus Flow, Status-Badges auf Cards)
|
- [x] Expired listings (Directus flow, status badges)
|
||||||
- [x] Token-Refresh bei Tab-Visibility-Change
|
|
||||||
### Phase 5: Trust & Safety
|
### Phase 5: Trust & Safety ✅
|
||||||
- [x] Rating-System
|
- [x] Rating & reputation system (deals, levels, badges)
|
||||||
- [x] Reputation-System (Deals, Levels, Badges)
|
- [x] Verifiable listings (proof of possession)
|
||||||
- [x] Verifiable Listings (Proof of Possession)
|
- [x] Pseudonyms & identicon avatars
|
||||||
- [x] Pseudonyme & Identicon-Avatare
|
- [x] Terms of service, privacy policy, legal notice (7 languages)
|
||||||
- [ ] 2FA
|
- [ ] 2FA
|
||||||
- [ ] Reporting/Moderation
|
- [ ] Reporting/moderation
|
||||||
- [x] AGB, Datenschutz, Impressum (Entwürfe in 7 Sprachen)
|
- [ ] Push notifications (Web Push API)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🎨 Design-Entscheidungen
|
## 🎨 Design
|
||||||
|
|
||||||
### Typografie
|
### Typography
|
||||||
- **Headlines**: Space Grotesk (Medium, Bold)
|
- **Headlines**: Space Grotesk (Medium, Bold)
|
||||||
- **Body**: Inter (Regular, Medium, SemiBold, 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**
|
- **Warm Teal Theme**
|
||||||
- **Light Mode**: BG #FAFAF9, Text #1C1917, Accent #0D9488 (Teal)
|
- **Light Mode**: BG #FAFAF9, Text #1C1917, Accent #0D9488
|
||||||
- **Dark Mode**: BG #171717, Text #F5F5F4, Accent #2DD4BF (Teal light)
|
- **Dark Mode**: BG #171717, Text #F5F5F4, Accent #2DD4BF
|
||||||
|
|
||||||
### Mobile-First
|
### Mobile-first
|
||||||
- Responsive Grid (2 Spalten Mobile, 5 Spalten Desktop)
|
- Responsive grid (2 columns mobile, 5 columns desktop)
|
||||||
- Touch-optimierte Buttons
|
- Touch-optimized buttons
|
||||||
- Icon-only Buttons auf kleinen Screens
|
- Icon-only buttons on small screens
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🤝 Contributing
|
## 🤝 Contributing
|
||||||
|
|
||||||
1. Feature-Branch erstellen
|
1. Create a feature branch
|
||||||
2. Änderungen committen
|
2. Commit your changes
|
||||||
3. Pull Request öffnen
|
3. Open a pull request
|
||||||
|
|
||||||
### Code-Konventionen
|
### Code conventions
|
||||||
- ES Modules verwenden
|
- ES Modules
|
||||||
- Web Components für UI-Komponenten
|
- Web Components for UI
|
||||||
- CSS Custom Properties für Theming
|
- CSS Custom Properties for theming
|
||||||
- Übersetzungsschlüssel für alle Texte
|
- Translation keys for all user-facing text
|
||||||
- Keine Semikolons in JavaScript (außer for-loops, CSS)
|
- No semicolons in JavaScript (except for-loops, CSS)
|
||||||
- Englische Kommentare im Code
|
- 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)
|
- **Issues:** [gitea.pro/schmidt1024/kashilo/issues](https://gitea.pro/schmidt1024/kashilo/issues)
|
||||||
- **Website:** [kashilo.com](https://kashilo.com)
|
- **Website:** [kashilo.com](https://kashilo.com)
|
||||||
|
|||||||
Reference in New Issue
Block a user