# Postiz CLI - Project Structure ## Overview The Postiz CLI is a complete command-line interface package for interacting with the Postiz social media scheduling API. It's designed for developers and AI agents to automate social media posting. ## Directory Structure ``` apps/cli/ ├── src/ # Source code │ ├── index.ts # Main CLI entry point │ ├── api.ts # API client for Postiz API │ ├── config.ts # Configuration and environment handling │ └── commands/ # Command implementations │ ├── posts.ts # Posts management commands │ ├── integrations.ts # Integrations listing │ └── upload.ts # Media upload command │ ├── examples/ # Usage examples │ └── basic-usage.sh # Shell script example │ ├── dist/ # Build output (generated) │ ├── index.js # Compiled CLI executable │ └── index.js.map # Source map │ ├── package.json # Package configuration ├── tsconfig.json # TypeScript configuration ├── tsup.config.ts # Build configuration │ ├── README.md # Main documentation ├── SKILL.md # AI agent usage guide ├── QUICK_START.md # Quick start guide ├── CHANGELOG.md # Version history ├── PROJECT_STRUCTURE.md # This file │ ├── .gitignore # Git ignore rules └── .npmignore # npm publish ignore rules ``` ## File Descriptions ### Source Files #### `src/index.ts` - Main entry point for the CLI - Uses `yargs` for command parsing - Defines all available commands and their options - Contains help text and usage examples #### `src/api.ts` - API client class `PostizAPI` - Handles all HTTP requests to the Postiz API - Methods for: - Creating posts - Listing posts - Deleting posts - Uploading files - Listing integrations - Error handling and response parsing #### `src/config.ts` - Configuration management - Environment variable handling - Validates required settings (API key) - Provides default values #### `src/commands/posts.ts` - Post management commands implementation - `createPost()` - Create new social media posts - `listPosts()` - List posts with filters - `deletePost()` - Delete posts by ID #### `src/commands/integrations.ts` - Integration management - `listIntegrations()` - Show connected accounts #### `src/commands/upload.ts` - Media upload functionality - `uploadFile()` - Upload images to Postiz ### Configuration Files #### `package.json` - Package name: `postiz` - Version: `1.0.0` - Executable bin: `postiz` → `dist/index.js` - Scripts: `dev`, `build`, `start`, `publish` - Repository and metadata information #### `tsconfig.json` - Extends base config from monorepo - Target: ES2017 - Module: CommonJS - Enables decorators and source maps #### `tsup.config.ts` - Build tool configuration - Entry point: `src/index.ts` - Output format: CommonJS - Adds shebang for Node.js execution - Generates source maps ### Documentation Files #### `README.md` - Main package documentation - Installation instructions - Usage examples - API reference - Development guide #### `SKILL.md` - Comprehensive guide for AI agents - Usage patterns and workflows - Command examples - Best practices - Error handling #### `QUICK_START.md` - Fast onboarding guide - Installation steps - Basic commands - Common workflows - Troubleshooting #### `CHANGELOG.md` - Version history - Release notes - Feature additions - Bug fixes ### Example Files #### `examples/basic-usage.sh` - Bash script example - Demonstrates basic CLI workflow - Shows integration listing, post creation, and deletion ## Build Process ### Development Build ```bash pnpm run dev ``` - Watches for file changes - Rebuilds automatically - Useful during development ### Production Build ```bash pnpm run build ``` 1. Cleans `dist/` directory 2. Compiles TypeScript → JavaScript 3. Bundles dependencies 4. Adds shebang for executable 5. Generates source maps 6. Makes output executable ### Output - `dist/index.js` - Main executable (~490KB) - `dist/index.js.map` - Source map (~920KB) ## Commands Architecture ### Command Flow ``` User Input ↓ index.ts (yargs parser) ↓ Command Handler (posts.ts, integrations.ts, upload.ts) ↓ config.ts (get API key) ↓ api.ts (make API request) ↓ Response / Error ↓ Output to console ``` ### Available Commands 1. **posts:create** - Options: `--content`, `--integrations`, `--schedule`, `--image` - Handler: `commands/posts.ts::createPost()` 2. **posts:list** - Options: `--page`, `--limit`, `--search` - Handler: `commands/posts.ts::listPosts()` 3. **posts:delete** - Positional: `` - Handler: `commands/posts.ts::deletePost()` 4. **integrations:list** - No options - Handler: `commands/integrations.ts::listIntegrations()` 5. **upload** - Positional: `` - Handler: `commands/upload.ts::uploadFile()` ## Environment Variables | Variable | Required | Default | Usage | |----------|----------|---------|-------| | `POSTIZ_API_KEY` | ✅ Yes | - | Authentication token | | `POSTIZ_API_URL` | ❌ No | `https://api.postiz.com` | Custom API endpoint | ## Dependencies ### Runtime Dependencies (from root) - `yargs` - CLI argument parsing - `node-fetch` - HTTP requests - Standard Node.js modules (`fs`, `path`) ### Dev Dependencies - `tsup` - TypeScript bundler - `typescript` - Type checking - `@types/yargs` - TypeScript types ## Integration Points ### With Monorepo 1. **Build Scripts** - Added to root `package.json` - `pnpm run build:cli` - Build the CLI - `pnpm run publish-cli` - Publish to npm 2. **TypeScript Config** - Extends `tsconfig.base.json` - Shares common compiler options 3. **Dependencies** - Uses shared dependencies from root - No duplicate packages ### With Postiz API 1. **Endpoints Used** - `POST /public/v1/posts` - Create post - `GET /public/v1/posts` - List posts - `DELETE /public/v1/posts/:id` - Delete post - `GET /public/v1/integrations` - List integrations - `POST /public/v1/upload` - Upload media 2. **Authentication** - API key via `Authorization` header - Configured through environment variable ## Publishing ### To npm ```bash pnpm run publish-cli ``` This will: 1. Build the package 2. Publish to npm with public access 3. Include only `dist/`, `README.md`, and `SKILL.md` ### Package Contents (via .npmignore) **Included:** - `dist/` - Compiled code - `README.md` - Documentation **Excluded:** - `src/` - Source code - `examples/` - Examples - Config files - Other markdown files ## Testing ### Manual Testing ```bash # Test help node dist/index.js --help # Test without API key (should error) node dist/index.js posts:list # Test with API key (requires valid key) POSTIZ_API_KEY=test node dist/index.js integrations:list ``` ### Automated Testing (Future) - Unit tests for API client - Integration tests for commands - E2E tests with mock API ## Future Enhancements 1. **More Commands** - Analytics retrieval - Team management - Settings configuration 2. **Features** - Interactive mode - Config file support (~/.postizrc) - Output formatting (JSON, table, CSV) - Verbose/debug mode - Batch operations from file 3. **Developer Experience** - TypeScript types export - Programmatic API - Plugin system - Custom integrations ## Support - **Issues:** https://github.com/gitroomhq/postiz-app/issues - **Docs:** See README.md, SKILL.md, QUICK_START.md - **Website:** https://postiz.com