docs: add CLAUDE.md project instructions
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
4f6ed04891
commit
1d75fbab57
1 changed files with 48 additions and 0 deletions
48
CLAUDE.md
Normal file
48
CLAUDE.md
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
PHP Composer library (`lthn/php-plug-web3`) providing decentralised/Web3 social media provider integrations for the Plug framework. Depends on `lthn/php` which supplies the base contracts, concerns, and `Response` class.
|
||||
|
||||
## Commands
|
||||
|
||||
No build step — this is a library. Install dependencies:
|
||||
```bash
|
||||
composer install
|
||||
```
|
||||
|
||||
No test suite or linter is configured in this repository.
|
||||
|
||||
## Architecture
|
||||
|
||||
**Namespace:** `Core\Plug\Web3\` (PSR-4 from `src/`)
|
||||
|
||||
**Six providers**, each under `src/{Provider}/`:
|
||||
- **Bluesky** — AT Protocol, app passwords, optional custom PDS via `withPds()`
|
||||
- **Farcaster** — Neynar API, managed signers via `withSigner()` + `withApiKey()`
|
||||
- **Lemmy** — REST API v3, username/password JWT auth, federated via `forInstance()`
|
||||
- **Mastodon** — REST API v1, OAuth 2.0, federated via `forInstance()`
|
||||
- **Nostr** — Cryptographic key pairs (secp256k1), relay-based publishing, no HTTP auth
|
||||
- **Threads** — Meta Graph API, OAuth 2.0, two-step container+publish flow
|
||||
|
||||
**Each provider has up to 5 classes** implementing contracts from `Core\Plug\Contract\`:
|
||||
- `Auth` implements `Authenticable` — authentication/token exchange
|
||||
- `Post` implements `Postable` — publishing content (`publish(string $text, Collection $media, array $params)`)
|
||||
- `Read` implements `Readable` — fetching content (`get()`, `me()`, `list()`)
|
||||
- `Delete` implements `Deletable` — removing content
|
||||
- `Media` implements `MediaUploadable` — file uploads (Mastodon, Bluesky only)
|
||||
- Lemmy also has `Comment` and `Communities` (implements `Listable`)
|
||||
|
||||
**Shared behaviour via concerns** from `Core\Plug\Concern\`:
|
||||
- `BuildsResponse` — wraps API responses into `Core\Plug\Response` (`fromHttp()`, `ok()`, `error()`)
|
||||
- `UsesHttp` — provides `$this->http()` (Laravel HTTP client)
|
||||
- `ManagesTokens` — `withToken()`, `accessToken()`, `getToken()`
|
||||
|
||||
**Key patterns:**
|
||||
- All public methods return `Core\Plug\Response`
|
||||
- Federated providers (Mastodon, Lemmy) require instance URL set via `forInstance()` before API calls
|
||||
- `Post::publish()` has a uniform signature across all providers; provider-specific options go in `$params`
|
||||
- Each provider has static `externalPostUrl()` and `externalAccountUrl()` helpers for generating web URLs
|
||||
- Strict types declared in every file; PHP 8.2+ required
|
||||
Loading…
Add table
Reference in a new issue