From 5d77957b5513290313bc039e698c9ef85fdb706f Mon Sep 17 00:00:00 2001 From: padreug Date: Tue, 17 Jun 2025 18:15:28 +0200 Subject: [PATCH] create claude.md --- CLAUDE.md | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..6957e6b --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,107 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +This is an LNBits extension called "satoshimachine" (currently using template name "MyExtension"). LNBits extensions are modular add-ons that extend the functionality of the LNBits Lightning Network wallet platform. + +## Development Commands + +### Code Quality & Formatting +```bash +# Format all code +make format + +# Check code quality +make check + +# Individual commands +poetry run black . # Python formatting +poetry run ruff check . --fix # Python linting with auto-fix +poetry run ./node_modules/.bin/prettier --write . # JavaScript formatting +poetry run mypy . # Python type checking +poetry run ./node_modules/.bin/pyright # JavaScript type checking +``` + +### Testing +```bash +# Run tests +make test +# or +PYTHONUNBUFFERED=1 DEBUG=true poetry run pytest +``` + +### Pre-commit Hooks +```bash +# Install pre-commit hooks +make install-pre-commit-hook + +# Run pre-commit on all files +make pre-commit +``` + +## Architecture + +### Core Structure +LNBits extensions follow a specific FastAPI + Vue.js architecture: + +- **Backend (Python/FastAPI)**: + - `__init__.py` - Extension initialization and router setup + - `models.py` - Pydantic data models + - `crud.py` - Database operations + - `views.py` - Frontend page routes + - `views_api.py` - API endpoints + - `views_lnurl.py` - LNURL protocol handlers + - `migrations.py` - Database schema changes + - `tasks.py` - Background tasks + - `helpers.py` - Utility functions + +- **Frontend (Vue.js 3 Options API + Quasar)**: + - `static/js/index.js` - Main Vue app + - `static/js/components/` - Vue components + - `templates/` - HTML templates with Jinja2 + +### Key Conventions + +1. **Template Syntax Rules**: + - Use `{{ }}` and `{% %}` ONLY in `index.html` files (Jinja2) + - In Vue components: Use `v-text='value'` instead of `{{ value }}` + - Use `:attribute='value'` for binding, `v-html='value'` for HTML content + +2. **API Patterns**: + - Always include wallet key (inkey/adminkey) as third parameter in API calls + - Use `LNbits.api.request()` for all API calls + - Destructure responses: `const {data} = await LNbits.api.request(...)` + +3. **Component Registration**: + - Templates must be included BEFORE scripts in HTML + - Components must be registered BEFORE app.mount() + +### The Magical G Object +The global `this.g` object provides access to: +- `this.g.user` - Complete user data including wallets array +- `this.g.user.wallets[0].inkey` - Invoice key for API calls +- `this.g.user.wallets[0].adminkey` - Admin key for privileged operations +- `this.g.wallet` - Currently selected wallet + +### Built-in Utilities +- Currency conversion: `/api/v1/currencies`, `/api/v1/conversion` +- QR code generation: `/api/v1/qrcode/{data}` or Quasar VueQrcode component +- WebSocket support: `wss://host/api/v1/ws/{id}` with POST to `/api/v1/ws/{id}/{data}` + +## Configuration Files + +- `config.json` - Extension configuration +- `manifest.json` - Extension manifest for installation +- `pyproject.toml` - Python dependencies and tool configuration +- `package.json` - JavaScript dependencies + +## Important Notes + +- This extension is currently a template with placeholder "MyExtension" naming +- The actual functionality appears to be related to "satoshimachine" based on directory structure +- The `tmp/` directory contains a more developed version with DCA (Dollar Cost Averaging) functionality +- Extensions must follow snake_case naming conventions for Python files +- Use Quasar components (QBtn, QInput, QSelect, etc.) for UI consistency +- Always implement proper loading states and error handling with `LNbits.utils.notifyApiError(error)` \ No newline at end of file