# Nostr Poster

An automated content posting bot for Nostr networks. This tool allows you to schedule regular posting of images and videos to Nostr relays, supporting both NIP-94 and Blossom upload services.


### Core Implementation
- [x] replace hex format

### Essential Settings
- [x] Make enable button functional
- [ ] Proper nostr Profile:
  - [x] Bio 
  - [x] NIP-05 
  - [ ] Username/display name
  - [ ] Zap address
  - [ ] PFP/banner upload
  - [ ] Posting interval controls
  - [ ] Content album selection

### Content System
- [x] Create upload/organization page
- [x] Implement manual post interface:
  - [x] Text 
  - [x] Media upload
  - [x] Kind:20 posts

### Bot Interaction
- [ ] Develop basic bot feed:
  - [ ] Display Comments
  - [ ] Reply

### Validation
- [x] Test NSEC key import
- [ ] Test manual posts:
  -[x] Text only 
  - [x] blossom Media upload
  - [ ] NIP-94 uploads
- [ ] Verify bot reply works


## Features

- **Media Management**: Upload content to either NIP-94/96 compatible servers or Blossom storage servers
- **Scheduled Posting**: Configure posting intervals for automated content sharing
- **Multiple Bot Support**: Manage multiple bot identities, each with their own keypair
- **Keypair Management**: Create new keypairs or import existing ones
- **Relay Configuration**: Configure which relays to publish to for each bot
- **Profile Management**: Set up and publish bot profiles (name, bio, avatar, etc.)
- **Content Archiving**: Posted content gets archived to avoid duplicate posts

## Installation

### Requirements

- Go 1.18 or higher
- SQLite 3

### Building from Source

1. Clone the repository:
```bash
git clone https://github.com/yourusername/nostr-poster.git
cd nostr-poster
```

2. Build the application:
```bash
make build
```

3. Run the application:
```bash
make run
```

## Configuration

The application can be configured via a YAML file or environment variables. By default, the config file is located at `/config.yaml`.

### Example Configuration

```yaml
app_name: "Nostr Poster"
server_port: 8080
log_level: "info"

bot:
  keys_file: "./keys.json"
  content_dir: "./content"
  archive_dir: "./archive"
  default_interval: 60  # minutes

db:
  path: "./nostr-poster.db"

media:
  default_service: "nip94"
  nip94:
    server_url: "https://nostr.build/api/upload/nostr"
    require_auth: true
  blossom:
    server_url: "https://blossom.example.com"

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
```

## Usage

### Set up a Bot

1. Navigate to the web interface at `http://localhost:8765`
2. Log in with your Nostr extension (NIP-07)
3. Create a new bot by providing a name and optional keypair
4. Configure the posting schedule, media upload service, and relays
5. Add content to the bot's content directory
6. Enable the bot to start automated posting

### Manual Posting

You can also trigger a post manually through the web interface

## NIPs Supported

- NIP-01: Basic protocol flow
- NIP-07: Browser extension authentication
- NIP-55: Android signer application (soon TM)
- NIP-94: File metadata
- NIP-96: HTTP file storage
- NIP-98: HTTP authentication

## License

This project is licensed under the MIT License - see the LICENSE file for details.

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.