feat: Add Compose Multiplatform Desktop support foundation
- Add desktopApp module with JVM entry point and sidebar navigation - Add Claude specs for AI-assisted development: - Agent definitions: nostr-protocol, kotlin-multiplatform, compose-ui, kotlin-coroutines - Skills: quartz-kmp conversion, compose-desktop patterns - Commands: desktop-run, nip, extract - Update Gradle configuration with Compose Multiplatform 1.7.1 plugin - Add coroutines and secp256k1 JVM dependencies to version catalog Next steps: - Convert Quartz library to full KMP (expect/actual for crypto) - Implement relay connections in desktop app - Share UI components between Android and Desktop 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
---
|
||||
description: Build and run the desktop app
|
||||
---
|
||||
|
||||
Build and run the Amethyst Desktop application:
|
||||
|
||||
```bash
|
||||
./gradlew :desktopApp:run
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
If the build fails, check:
|
||||
|
||||
1. **JDK Version**: Requires JDK 17+
|
||||
```bash
|
||||
java -version
|
||||
```
|
||||
|
||||
2. **Compose Multiplatform Plugin**: Verify version in `gradle/libs.versions.toml`
|
||||
|
||||
3. **Quartz Build**: Ensure Quartz compiles first
|
||||
```bash
|
||||
./gradlew :quartz:build
|
||||
```
|
||||
|
||||
4. **Desktop Dependencies**: Check `desktopApp/build.gradle.kts` has:
|
||||
```kotlin
|
||||
implementation(compose.desktop.currentOs)
|
||||
```
|
||||
|
||||
## Creating Distributable
|
||||
|
||||
```bash
|
||||
# macOS
|
||||
./gradlew :desktopApp:packageDmg
|
||||
|
||||
# Windows
|
||||
./gradlew :desktopApp:packageMsi
|
||||
|
||||
# Linux
|
||||
./gradlew :desktopApp:packageDeb
|
||||
```
|
||||
|
||||
Outputs will be in `desktopApp/build/compose/binaries/`
|
||||
@@ -0,0 +1,50 @@
|
||||
---
|
||||
description: Extract a composable from amethyst to shared code
|
||||
---
|
||||
|
||||
Extract the component `$ARGUMENTS` from the Android app to shared KMP code:
|
||||
|
||||
## Process
|
||||
|
||||
1. **Locate the component** in the amethyst module:
|
||||
```bash
|
||||
find amethyst/src -name "*$ARGUMENTS*" -o -name "*$ARGUMENTS*"
|
||||
grep -r "fun $ARGUMENTS\|class $ARGUMENTS" amethyst/src/
|
||||
```
|
||||
|
||||
2. **Analyze dependencies**:
|
||||
- Android-specific imports (Context, Intent, etc.)
|
||||
- Platform APIs (Camera, MediaStore, etc.)
|
||||
- Android Compose specifics vs standard Compose
|
||||
|
||||
3. **Identify what can be shared**:
|
||||
- Pure Composable functions → `shared-ui/commonMain/`
|
||||
- Business logic → `quartz/commonMain/`
|
||||
- Platform-specific → create expect/actual
|
||||
|
||||
4. **Create shared version**:
|
||||
- Move to appropriate shared module
|
||||
- Replace Android imports with multiplatform alternatives
|
||||
- Add expect declarations for platform-specific parts
|
||||
|
||||
5. **Update references**:
|
||||
- Change imports in amethyst module
|
||||
- Add implementations in desktopApp if needed
|
||||
|
||||
## Common Replacements
|
||||
|
||||
| Android | Multiplatform |
|
||||
|---------|---------------|
|
||||
| `LocalContext.current` | expect/actual or parameter |
|
||||
| `stringResource()` | `Res.string.*` |
|
||||
| `painterResource()` | `painterResource(Res.drawable.*)` |
|
||||
| `Toast.makeText()` | Custom snackbar/notification |
|
||||
| `Intent` | expect/actual for navigation |
|
||||
|
||||
## Example
|
||||
|
||||
```
|
||||
/extract NoteCard
|
||||
```
|
||||
|
||||
This will find NoteCard, analyze its dependencies, and guide you through extracting it to shared code.
|
||||
@@ -0,0 +1,32 @@
|
||||
---
|
||||
description: Get NIP specification and implementation guidance
|
||||
---
|
||||
|
||||
Fetch and explain NIP-$ARGUMENTS from the Nostr protocol:
|
||||
|
||||
1. **Get the specification** from https://github.com/nostr-protocol/nips/blob/master/$ARGUMENTS.md
|
||||
|
||||
2. **Show key details**:
|
||||
- Event kind(s) used
|
||||
- Required and optional fields
|
||||
- Tag structure
|
||||
- Message flow between client and relay
|
||||
|
||||
3. **Check implementation status** in Quartz:
|
||||
```bash
|
||||
grep -r "NIP-$ARGUMENTS\|nip$ARGUMENTS\|kind.*=" quartz/src/
|
||||
```
|
||||
|
||||
4. **Provide implementation guidance**:
|
||||
- Which Quartz classes to use or create
|
||||
- Event construction example
|
||||
- Relay subscription filters
|
||||
- Verification/validation logic
|
||||
|
||||
## Example Usage
|
||||
|
||||
```
|
||||
/nip 01 # Basic protocol
|
||||
/nip 44 # Versioned encryption
|
||||
/nip 57 # Zaps
|
||||
```
|
||||
Reference in New Issue
Block a user