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
|
||||
*.db-shm
|
||||
*.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