update git ignore
This commit is contained in:
parent
c06b046df5
commit
34e326d40a
3
.gitignore
vendored
3
.gitignore
vendored
@ -76,3 +76,6 @@ npm-debug.log*
|
|||||||
**/.claude/settings.local.json
|
**/.claude/settings.local.json
|
||||||
*.db-shm
|
*.db-shm
|
||||||
*.db-wal
|
*.db-wal
|
||||||
|
|
||||||
|
# Claude.ai files
|
||||||
|
CLAUDE.md
|
||||||
|
243
CLAUDE.md
243
CLAUDE.md
@ -1,243 +0,0 @@
|
|||||||
# Development Guide for nostr-poster
|
|
||||||
|
|
||||||
## Build & Run Commands
|
|
||||||
- `make build`: Build application
|
|
||||||
- `make run`: Build and run application
|
|
||||||
- `make clean`: Clean build artifacts
|
|
||||||
- `make test`: Run all tests (`go test -v ./...`)
|
|
||||||
- `make lint`: Run golangci-lint
|
|
||||||
- `make fmt`: Format code with goimports
|
|
||||||
- `make tools`: Install development tools
|
|
||||||
|
|
||||||
## Code Style Guidelines
|
|
||||||
- Format: Use `goimports` (run `make fmt` before commits)
|
|
||||||
- Linting: Run `make lint` to check code quality
|
|
||||||
- Error handling: Return errors with context, log with zap
|
|
||||||
- Package names: Short, lowercase, singular nouns
|
|
||||||
- Functions: CamelCase (e.g., GetBot, CreateBot)
|
|
||||||
- Variables: camelCase (e.g., botService, relayManager)
|
|
||||||
- Interfaces: End with "-er" (e.g., Manager, Uploader)
|
|
||||||
- Imports: Standard library first, then external packages
|
|
||||||
- Testing: Write tests for all public functions
|
|
||||||
|
|
||||||
## Project Organization
|
|
||||||
- `/cmd`: Application entrypoints
|
|
||||||
- `/internal`: Non-public packages
|
|
||||||
- `/web`: Frontend assets and templates
|
|
||||||
- Go version: 1.24.0
|
|
||||||
|
|
||||||
# Nostr Poster
|
|
||||||
|
|
||||||
A self-hosted solution for automated content posting to the Nostr network, supporting multiple bots, scheduled posting, and various media upload protocols.
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
Nostr Poster is a web application that allows you to create and manage multiple Nostr bots. Each bot can automatically post content from a local directory to the Nostr network on a schedule. The application supports different types of Nostr events, including standard notes (kind:1), picture posts (kind:20), and video posts (kind:21/22).
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
- **Multiple Bot Management**: Create and manage multiple Nostr bots with separate identities
|
|
||||||
- **Scheduled Posting**: Configure each bot to post content on a regular schedule
|
|
||||||
- **Media Upload Support**: Upload media to various services including NIP-94/96 compatible servers and Blossom servers
|
|
||||||
- **Global Relay Management**: Configure global relays for all your bots following the NIP-65 Outbox Model
|
|
||||||
- **Manual Posting**: Create manual posts in addition to scheduled posts
|
|
||||||
- **Profile Management**: Edit bot profiles and publish them to the Nostr network
|
|
||||||
- **Content Management**: Upload and organize content files for your bots
|
|
||||||
- **Secure Key Storage**: Private keys are encrypted and stored securely
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
### Backend Components
|
|
||||||
|
|
||||||
- **API**: RESTful API built with Go and Gin web framework
|
|
||||||
- **Database**: SQLite database for storing bot configurations and metadata
|
|
||||||
- **Scheduler**: Cron-based scheduler for running automated posting jobs
|
|
||||||
- **Auth Service**: Authentication service using NIP-07 compatible signatures
|
|
||||||
- **Media Upload**: Support for NIP-94/96 and Blossom protocols for media uploading
|
|
||||||
- **Key Store**: Secure storage for bot private keys with encryption
|
|
||||||
|
|
||||||
### Frontend Components
|
|
||||||
|
|
||||||
- **Web UI**: Bootstrap-based responsive user interface
|
|
||||||
- **Authentication**: NIP-07 compatible authentication with browser extensions
|
|
||||||
- **Bot Management**: Interface for creating and configuring bots
|
|
||||||
- **Content Management**: Interface for uploading and managing content files
|
|
||||||
- **Manual Posting**: Interface for creating manual posts
|
|
||||||
|
|
||||||
## NIPs Implemented
|
|
||||||
|
|
||||||
The project implements the following Nostr Implementation Possibilities (NIPs):
|
|
||||||
|
|
||||||
- **NIP-01**: Basic protocol flow, events, and client-relay communication
|
|
||||||
- **NIP-07**: Browser extension integration for authentication
|
|
||||||
- **NIP-19**: Bech32-encoded entities for human-friendly display of IDs
|
|
||||||
- **NIP-55**: Android signer application integration (optional)
|
|
||||||
- **NIP-65**: Relay list metadata for the Outbox Model
|
|
||||||
- **NIP-68**: Picture-first feeds
|
|
||||||
- **NIP-71**: Video events
|
|
||||||
- **NIP-92**: Media attachments
|
|
||||||
- **NIP-94**: File metadata
|
|
||||||
- **NIP-96**: HTTP file storage integration
|
|
||||||
- **NIP-98**: HTTP Auth
|
|
||||||
|
|
||||||
## Setup
|
|
||||||
|
|
||||||
### Prerequisites
|
|
||||||
|
|
||||||
- Go 1.19 or higher
|
|
||||||
- Web browser with NIP-07 compatible extension (like nos2x or Alby)
|
|
||||||
|
|
||||||
### Installation
|
|
||||||
|
|
||||||
1. Clone the repository:
|
|
||||||
```
|
|
||||||
git clone https://github.com/yourusername/nostr-poster.git
|
|
||||||
cd nostr-poster
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Configure the application by editing `config.yaml`:
|
|
||||||
```yaml
|
|
||||||
app_name: "Nostr Poster"
|
|
||||||
server_port: 8765
|
|
||||||
log_level: "info"
|
|
||||||
|
|
||||||
bot:
|
|
||||||
keys_file: "keys.json"
|
|
||||||
content_dir: "./content"
|
|
||||||
archive_dir: "./archive"
|
|
||||||
default_interval: 60
|
|
||||||
|
|
||||||
db:
|
|
||||||
path: "./nostr-poster.db"
|
|
||||||
|
|
||||||
media:
|
|
||||||
default_service: "nip94"
|
|
||||||
nip94:
|
|
||||||
server_url: "https://files.sovbit.host"
|
|
||||||
require_auth: true
|
|
||||||
blossom:
|
|
||||||
server_url: "https://cdn.sovbit.host/upload"
|
|
||||||
|
|
||||||
relays:
|
|
||||||
- url: "wss://relay.damus.io"
|
|
||||||
read: true
|
|
||||||
write: true
|
|
||||||
- url: "wss://nostr.mutinywallet.com"
|
|
||||||
read: true
|
|
||||||
write: true
|
|
||||||
- url: "wss://relay.nostr.band"
|
|
||||||
read: true
|
|
||||||
write: true
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Build and run the application:
|
|
||||||
```
|
|
||||||
go build -o nostr-poster
|
|
||||||
./nostr-poster
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Access the web interface at `http://localhost:8765`
|
|
||||||
|
|
||||||
### Authentication
|
|
||||||
|
|
||||||
1. The application uses NIP-07 compatible authentication.
|
|
||||||
2. Install a NIP-07 compatible browser extension like nos2x or Alby.
|
|
||||||
3. Click "Login with Nostr" on the web interface to authenticate.
|
|
||||||
|
|
||||||
### Creating a Bot
|
|
||||||
|
|
||||||
1. After logging in, click "Create New Bot" on the dashboard.
|
|
||||||
2. Fill in the bot details, including name, display name, and bio.
|
|
||||||
3. Choose to generate a new keypair or import an existing NSEC key.
|
|
||||||
4. Configure posting interval and hashtags.
|
|
||||||
5. Add relay information if needed.
|
|
||||||
6. Click "Create Bot" to create the bot.
|
|
||||||
|
|
||||||
### Uploading Content
|
|
||||||
|
|
||||||
1. Go to the "Content" tab in the navigation.
|
|
||||||
2. Select a bot from the dropdown menu.
|
|
||||||
3. Click "Load Content" to see the bot's content files.
|
|
||||||
4. Use the file upload form to upload new content files.
|
|
||||||
5. Files will be automatically posted based on the bot's schedule.
|
|
||||||
|
|
||||||
### Manual Posting
|
|
||||||
|
|
||||||
1. Go to the "Content" tab in the navigation.
|
|
||||||
2. Select a bot from the dropdown menu.
|
|
||||||
3. Scroll down to the "Create Manual Post" section.
|
|
||||||
4. Choose the post type (standard post or picture post).
|
|
||||||
5. Fill in the content and upload any media.
|
|
||||||
6. Click "Post Now" to publish the post immediately.
|
|
||||||
|
|
||||||
## Architecture Details
|
|
||||||
|
|
||||||
### Database Schema
|
|
||||||
|
|
||||||
- **bots**: Stores bot information (ID, keys, profile data)
|
|
||||||
- **post_config**: Stores posting configuration for each bot
|
|
||||||
- **media_config**: Stores media upload configuration for each bot
|
|
||||||
- **relays**: Stores relay information for each bot
|
|
||||||
- **global_relays**: Stores global relays for the user
|
|
||||||
- **posts**: Stores information about posts made by bots
|
|
||||||
|
|
||||||
### Key Storage
|
|
||||||
|
|
||||||
- Private keys are encrypted using NaCl secretbox with a password derived from the application configuration.
|
|
||||||
- The encrypted keys are stored in a JSON file specified in the configuration.
|
|
||||||
|
|
||||||
### Scheduler
|
|
||||||
|
|
||||||
- The scheduler uses a cron-based approach to run posting jobs on the configured intervals.
|
|
||||||
- Each bot has its own schedule based on its configuration.
|
|
||||||
|
|
||||||
### Media Upload
|
|
||||||
|
|
||||||
- The application supports two main media upload protocols:
|
|
||||||
- **NIP-94/96**: For uploading to NIP-96 compatible servers with NIP-94 metadata
|
|
||||||
- **Blossom**: For uploading to Blossom protocol servers (BUD-01, BUD-02)
|
|
||||||
- The application handles authentication, compression, and metadata extraction automatically.
|
|
||||||
|
|
||||||
## Development
|
|
||||||
|
|
||||||
### Adding a New Feature
|
|
||||||
|
|
||||||
1. Fork the repository
|
|
||||||
2. Create a new branch for your feature
|
|
||||||
3. Implement your changes
|
|
||||||
4. Submit a pull request
|
|
||||||
|
|
||||||
### Code Structure
|
|
||||||
|
|
||||||
```
|
|
||||||
.
|
|
||||||
├── internal
|
|
||||||
│ ├── api # API handlers and services
|
|
||||||
│ ├── auth # Authentication services
|
|
||||||
│ ├── config # Configuration handling
|
|
||||||
│ ├── crypto # Cryptographic operations and key storage
|
|
||||||
│ ├── db # Database access and schema
|
|
||||||
│ ├── media # Media handling (upload, prepare)
|
|
||||||
│ ├── models # Data models
|
|
||||||
│ ├── nostr # Nostr protocol implementation
|
|
||||||
│ │ ├── events # Event creation and signing
|
|
||||||
│ │ ├── nip65 # Outbox model implementation
|
|
||||||
│ │ └── relay # Relay management
|
|
||||||
│ ├── scheduler # Scheduled posting
|
|
||||||
│ └── utils # Utility functions
|
|
||||||
├── web # Web interface
|
|
||||||
│ ├── assets # Static assets
|
|
||||||
│ │ ├── css # CSS files
|
|
||||||
│ │ └── js # JavaScript files
|
|
||||||
│ └── index.html # Main HTML file
|
|
||||||
```
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
[MIT License](LICENSE)
|
|
||||||
|
|
||||||
## Acknowledgements
|
|
||||||
|
|
||||||
- [go-nostr](https://github.com/nbd-wtf/go-nostr) - Nostr library for Go
|
|
||||||
- [Gin Web Framework](https://github.com/gin-gonic/gin) - Web framework for Go
|
|
||||||
- [Bootstrap](https://getbootstrap.com/) - Frontend framework
|
|
Loading…
x
Reference in New Issue
Block a user