# AGENTS.md - AI Assistant Context Dieses Dokument hilft AI-Assistenten (Amp, Copilot, etc.) das Projekt zu verstehen. ## Projekt-Überblick **dgray.io** ist eine Kleinanzeigen-PWA mit Monero-Bezahlung. - **Status**: Active Development (Frontend + Directus Backend) - **Ziel**: Anonyme, dezentrale Marktplatz-Alternative ## Tech-Stack | Layer | Technologie | |-------|-------------| | Frontend | Vanilla JS, Web Components, CSS Custom Properties | | Routing | Hash-basierter Client-Side Router (`js/router.js`) | | i18n | Custom System (`js/i18n.js`), JSON-Dateien in `/locales/` | | Theming | CSS Variables, Dark/Light Mode | | Backend | Directus (`api.dgray.io`) | | Auth | UUID-basiert, anonym (`js/services/auth.js`) | | E2E Crypto | TweetNaCl (self-hosted in `js/vendor/`), `box.before` + `secretbox` | | PoW Captcha | PHP-Server (`pow.dgray.io`), Fallback auf lokal | ## Häufige Befehle ```bash # Lokaler Entwicklungsserver python3 -m http.server 8080 # Oder mit Live-Reload npx live-server # Build (JS/CSS minifizieren → dist/) pip3 install rjsmin rcssmin # einmalig python3 build.py # Deploy (baut automatisch, dann rsync von dist/) ./deploy.sh # Tests ausführen (im Browser) # Server starten, dann http://localhost:8080/tests/ öffnen # Git Push (Token in URL) git push origin master ``` ## Commit-Konvention Wenn der User nach **"commit text"** fragt: - **Immer nur eine einzeilige** Commit-Message im Format: `git commit -m "..."` - Keine mehrzeiligen Messages oder Body-Text - Nutze [Conventional Commits](https://www.conventionalcommits.org/): `feat:`, `fix:`, `docs:`, `refactor:`, `chore:` - Standardsprache: Englisch (außer User fragt explizit nach "de") ## Dateistruktur ``` js/ ├── app.js # Entry, lädt i18n, dann Shell ├── router.js # Hash-Router mit :params ├── i18n.js # t('key'), subscribe(), updateDOM() ├── services/ │ ├── directus.js # Directus API Client (Core) │ ├── auth.js # UUID-basierte Authentifizierung (SHA-256 Hash) │ ├── listings.js # Listings Service (Filter) │ ├── categories.js # Kategorien Service (Baum, Übersetzungen, Cache) │ ├── locations.js # Standorte Service (Geo-Suche) │ ├── conversations.js # Zero-Knowledge Chat (E2E, per-listing keys) │ ├── crypto.js # NaCl Encryption + per-listing keypair management │ ├── currency.js # XMR/Fiat Umrechnung │ ├── pow-captcha.js # Proof-of-Work Captcha (Challenge/Verify) │ ├── btcpay.js # BTCPay Server Integration (Invoice, Checkout, Webhook) │ ├── favorites.js # Favoriten-Service (localStorage + Directus Sync) │ ├── notifications.js # Benachrichtigungen (Polling, Badge) │ └── reputation.js # Reputation-System (Deals, Ratings, Level) └── components/ ├── app-shell.js # Layout, registriert Routes ├── app-header.js # Header (Theme-Toggle, Lang-Dropdown, Profil-Dropdown) ├── app-footer.js # Footer ├── auth-modal.js # Login/Register Modal (mit PoW-Captcha) ├── pow-captcha.js # PoW-Captcha Web Component ├── chat-widget.js # E2E Chat Widget └── pages/ # Seiten als Web Components docs/ ├── DIRECTUS-SETUP.md # Directus Backend Setup ├── DIRECTUS-SCHEMA.md # Collection-Strukturen & Permissions ├── MONETIZATION.md # Monetarisierung & Anti-Abuse ├── LAUNCH-PLAN.md # Release-Phasen, Pricing, Checkliste ├── REPUTATION.md # Reputation-System (Konzept, Directus-Anleitung) ├── pow-server/ # PHP PoW-Captcha Server (pow.dgray.io) └── og-proxy.php # Open Graph Meta-Tag Proxy (pow.dgray.io) css/ ├── fonts.css # @font-face Definitionen (Inter, Space Grotesk) ├── variables.css # CSS Custom Properties (Farben, Spacing) ├── base.css # Reset, Container └── components.css # UI-Komponenten (Buttons, Cards, etc.) assets/ ├── fonts/ # Self-hosted Fonts (Inter, Space Grotesk) └── press/ # Press Kit (Logos, OG-Image, Brand Guidelines) tests/ ├── index.html # Test-Runner UI (im Browser öffnen) ├── test-runner.js # Minimaler Test-Framework ├── helpers.test.js # Unit Tests für helpers.js ├── i18n.test.js # Unit Tests für i18n.js └── router.test.js # Unit Tests für router.js locales/ ├── de.json # Deutsch (Fallback) ├── en.json ├── fr.json ├── it.json # Italienisch ├── es.json # Spanisch ├── pt.json # Portugiesisch (BR) └── ru.json # Russisch ``` ## Konventionen ### JavaScript - **Keine Semikolons** am Zeilenende (außer in for-loops, CSS) - **Englische Kommentare** im Code - ES Modules mit `import/export` ### Web Components - Custom Elements mit `class extends HTMLElement` - Styles als `