599 lines
15 KiB
Markdown
599 lines
15 KiB
Markdown
<p align="center">
|
|||
|
|
<img src="apps/frontend/public/brand/postsider-logo.png" alt="PostSider" width="88" height="88" />
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<h1 align="center">PostSider</h1>
|
||
|
|
|
||
|
|
<p align="center">
|
||
|
|
<strong>Open-source social media scheduling for humans, teams, and AI agents.</strong>
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p align="center">
|
||
|
|
Schedule and publish across <strong>33 built-in connectors</strong> from one calendar.<br/>
|
||
|
|
Self-host with Docker, automate through the REST API and Node.js SDK, or connect AI agents through MCP.
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p align="center">
|
||
|
|
<a href="https://postsider.com"><strong>Website</strong></a>
|
||
|
|
·
|
||
|
|
<a href="https://docs.postsider.com"><strong>Documentation</strong></a>
|
||
|
|
·
|
||
|
|
<a href="#quick-start"><strong>Quick Start</strong></a>
|
||
|
|
·
|
||
|
|
<a href="#ai-agents-mcp"><strong>MCP</strong></a>
|
||
|
|
·
|
||
|
|
<a href="#public-api--sdk"><strong>API & SDK</strong></a>
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p align="center">
|
||
|
|
<a href="https://github.com/lumizone/postsider/actions/workflows/ci.yml"><img src="https://github.com/lumizone/postsider/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
|
||
|
|
<a href="https://github.com/lumizone/postsider/releases"><img src="https://img.shields.io/github/v/release/lumizone/postsider?color=black" alt="Latest release" /></a>
|
||
|
|
<a href="https://github.com/lumizone/postsider/stargazers"><img src="https://img.shields.io/github/stars/lumizone/postsider?style=flat&logo=github&label=Stars" alt="GitHub stars" /></a>
|
||
|
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-AGPL--3.0-black" alt="License: AGPL-3.0" /></a>
|
||
|
|
<a href="#self-hosting"><img src="https://img.shields.io/badge/self--hosted-Docker-black?logo=docker&logoColor=white" alt="Self-hosted with Docker" /></a>
|
||
|
|
<a href="apps/mcp/README.md"><img src="https://img.shields.io/badge/MCP-ready-black" alt="MCP ready" /></a>
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p align="center">
|
||
|
|
<img src=".github/assets/social-preview.png" alt="PostSider — open-source social media scheduling you can self-host and AI agents can use" width="760" />
|
||
|
|
</p>
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## What is PostSider?
|
||
|
|
|
||
|
|
PostSider is an open-source social media management and scheduling platform built around four ways of working:
|
||
|
|
|
||
|
|
| Use PostSider as | What you get |
|
||
|
|
|---|---|
|
||
|
|
| **Social media scheduler** | One calendar for planning, composing, approving, scheduling, and publishing content |
|
||
|
|
| **Self-hosted platform** | A Docker-based deployment you can run on your own infrastructure |
|
||
|
|
| **Automation backend** | A public REST API plus the `@postsider/node` SDK |
|
||
|
|
| **AI-agent bridge** | An MCP server that lets compatible agents work with PostSider through structured tools |
|
||
|
|
|
||
|
|
PostSider ships with **33 active connectors** registered in the application. You configure credentials only for the platforms you actually use.
|
||
|
|
|
||
|
|
AI features are optional. PostSider works without an OpenAI API key.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Quick Start
|
||
|
|
|
||
|
|
For a local evaluation, the fastest path is Docker Compose.
|
||
|
|
|
||
|
|
### Requirements
|
||
|
|
|
||
|
|
- Docker
|
||
|
|
- Docker Compose
|
||
|
|
|
||
|
|
### Start PostSider
|
||
|
|
|
||
|
|
```bash
|
||
|
|
git clone https://github.com/lumizone/postsider.git
|
||
|
|
cd postsider
|
||
|
|
docker compose up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
The default Compose stack pulls:
|
||
|
|
|
||
|
|
```text
|
||
|
|
ghcr.io/lumizone/postsider-app:latest
|
||
|
|
```
|
||
|
|
|
||
|
|
and starts PostSider with PostgreSQL, Redis, and Temporal.
|
||
|
|
|
||
|
|
Open:
|
||
|
|
|
||
|
|
```text
|
||
|
|
http://localhost:4007
|
||
|
|
```
|
||
|
|
|
||
|
|
Create the first administrator account:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker exec -it postsider pnpm bootstrap
|
||
|
|
```
|
||
|
|
|
||
|
|
The bootstrap command prints a one-time password. Sign in with:
|
||
|
|
|
||
|
|
```text
|
||
|
|
[email protected]
|
||
|
|
```
|
||
|
|
|
||
|
|
and the generated password. PostSider then prompts you to set your real email address and password.
|
||
|
|
|
||
|
|
> The root `docker-compose.yaml` is convenient for local evaluation. For an internet-facing deployment, use the production setup and the [self-hosting guide](https://docs.postsider.com/self-hosting).
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Highlights
|
||
|
|
|
||
|
|
### Scheduling and publishing
|
||
|
|
|
||
|
|
- Visual calendar with drag-and-drop scheduling
|
||
|
|
- Posting queue and find-free-slot scheduling
|
||
|
|
- Smart Slot suggestions
|
||
|
|
- Evergreen content recycling
|
||
|
|
- Per-platform previews
|
||
|
|
- Per-platform validation before publishing
|
||
|
|
- Automatic first comments where supported
|
||
|
|
- Bulk CSV import
|
||
|
|
|
||
|
|
### Content workflow
|
||
|
|
|
||
|
|
- Hashtag groups
|
||
|
|
- Caption templates
|
||
|
|
- Reusable snippets
|
||
|
|
- UTM builder
|
||
|
|
- Draft and approval workflows
|
||
|
|
- Shared media library
|
||
|
|
|
||
|
|
### Teams and organizations
|
||
|
|
|
||
|
|
- Multi-organization workspaces
|
||
|
|
- Separate workspaces for brands or clients
|
||
|
|
- Admin and User roles
|
||
|
|
- Shared publishing workflow
|
||
|
|
|
||
|
|
### Automation
|
||
|
|
|
||
|
|
- Public REST API
|
||
|
|
- Node.js SDK: `@postsider/node`
|
||
|
|
- MCP server: `@postsider/mcp`
|
||
|
|
- Webhooks
|
||
|
|
- Programmatic scheduling and channel access
|
||
|
|
|
||
|
|
### Optional AI
|
||
|
|
|
||
|
|
- Post Checker
|
||
|
|
- Caption rewriting
|
||
|
|
- Platform-level `OPENAI_API_KEY`
|
||
|
|
- Per-organization bring-your-own key support
|
||
|
|
|
||
|
|
### Security
|
||
|
|
|
||
|
|
- Optional TOTP two-factor authentication
|
||
|
|
- One-time recovery codes
|
||
|
|
- Organization-wide 2FA enforcement
|
||
|
|
- Encrypted provider credentials at rest
|
||
|
|
- Security activity trail
|
||
|
|
- Secure `httpOnly` cookies
|
||
|
|
- CORS and CSP controls
|
||
|
|
- Rate limiting
|
||
|
|
- Server-side authorization and plan enforcement
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Supported Platforms
|
||
|
|
|
||
|
|
The list below mirrors the active providers registered in:
|
||
|
|
|
||
|
|
[`libraries/nestjs-libraries/src/integrations/integration.manager.ts`](libraries/nestjs-libraries/src/integrations/integration.manager.ts)
|
||
|
|
|
||
|
|
| Category | Platforms |
|
||
|
|
|---|---|
|
||
|
|
| **Social & creator platforms** | X, LinkedIn Profile, LinkedIn Page, Facebook, Instagram via Facebook, Instagram Standalone, Threads, YouTube, TikTok, Pinterest, Bluesky, Mastodon, Nostr, Farcaster, Lemmy, Twitch, Dribbble, Google Business Profile, Whop, Moltbook |
|
||
|
|
| **Chat & community** | Discord, Slack, Telegram |
|
||
|
|
| **Blogs & publishing** | Dev.to, Hashnode, Medium, WordPress, Ghost, Blogger, Notion, Mataroa, Write.as, Listmonk |
|
||
|
|
|
||
|
|
That is **33 active connectors** in the current integration registry.
|
||
|
|
|
||
|
|
You only need OAuth/API credentials for the providers you intend to use. See:
|
||
|
|
|
||
|
|
- [`.env.example`](.env.example)
|
||
|
|
- [Channel configuration](https://docs.postsider.com/channels/overview)
|
||
|
|
- [Environment configuration](https://docs.postsider.com/configuration/environment)
|
||
|
|
|
||
|
|
Mastodon supports custom instances through the standard Mastodon provider.
|
||
|
|
|
||
|
|
### Adding a provider
|
||
|
|
|
||
|
|
Provider integrations live in:
|
||
|
|
|
||
|
|
```text
|
||
|
|
libraries/nestjs-libraries/src/integrations/social/
|
||
|
|
```
|
||
|
|
|
||
|
|
A new connector typically:
|
||
|
|
|
||
|
|
1. Extends `SocialAbstract`
|
||
|
|
2. Implements `SocialProvider`
|
||
|
|
3. Is registered in `socialIntegrationList` in `integration.manager.ts`
|
||
|
|
4. Adds the corresponding frontend platform metadata/assets
|
||
|
|
|
||
|
|
New provider integrations are especially welcome as pull requests.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## AI Agents (MCP)
|
||
|
|
|
||
|
|
PostSider includes an MCP server for compatible AI clients and agents.
|
||
|
|
|
||
|
|
The package is:
|
||
|
|
|
||
|
|
```text
|
||
|
|
@postsider/mcp
|
||
|
|
```
|
||
|
|
|
||
|
|
The MCP layer is a thin interface over PostSider's public API and exposes **19 tools** for workflows such as:
|
||
|
|
|
||
|
|
- Listing connected channels
|
||
|
|
- Reviewing the publishing calendar
|
||
|
|
- Creating drafts
|
||
|
|
- Requesting approval
|
||
|
|
- Uploading media
|
||
|
|
- Working with scheduled content
|
||
|
|
- Reading analytics
|
||
|
|
|
||
|
|
The intended workflow is **read-first and draft-first**: an agent can prepare work inside the same PostSider workflow used by humans, while publishing remains a deliberate action.
|
||
|
|
|
||
|
|
### Build the MCP server
|
||
|
|
|
||
|
|
```bash
|
||
|
|
pnpm --filter @postsider/mcp build
|
||
|
|
```
|
||
|
|
|
||
|
|
For a local/stdio connection, configure:
|
||
|
|
|
||
|
|
```text
|
||
|
|
POSTSIDER_API_KEY
|
||
|
|
POSTSIDER_API_URL
|
||
|
|
```
|
||
|
|
|
||
|
|
`POSTSIDER_API_URL` points the MCP server at the PostSider instance you want to use.
|
||
|
|
|
||
|
|
Full MCP documentation:
|
||
|
|
|
||
|
|
- [`apps/mcp/README.md`](apps/mcp/README.md)
|
||
|
|
- [Hosted MCP walkthrough](https://docs.postsider.com/cloud/mcp)
|
||
|
|
|
||
|
|
### Claude Code plugin
|
||
|
|
|
||
|
|
This repository also contains the Claude Code plugin metadata and the `postsider-workflow` skill.
|
||
|
|
|
||
|
|
```bash
|
||
|
|
claude plugin marketplace add lumizone/postsider
|
||
|
|
claude plugin install postsider@postsider
|
||
|
|
```
|
||
|
|
|
||
|
|
A safe read-only connection check:
|
||
|
|
|
||
|
|
```text
|
||
|
|
List my connected PostSider channels. Do not create or modify anything.
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Public API & SDK
|
||
|
|
|
||
|
|
PostSider exposes a public REST API for external applications and automation.
|
||
|
|
|
||
|
|
Authenticate with your organization's API key.
|
||
|
|
|
||
|
|
### Node.js SDK
|
||
|
|
|
||
|
|
The published SDK package is:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
npm install @postsider/node
|
||
|
|
```
|
||
|
|
|
||
|
|
Example:
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
import Postsider from '@postsider/node';
|
||
|
|
|
||
|
|
const client = new Postsider(
|
||
|
|
'your-api-key',
|
||
|
|
'https://your-instance.com'
|
||
|
|
);
|
||
|
|
|
||
|
|
// Schedule a post
|
||
|
|
await client.post({
|
||
|
|
type: 'schedule',
|
||
|
|
date: '2025-01-15T10:00:00',
|
||
|
|
posts: [
|
||
|
|
{
|
||
|
|
integration: { id: 'channel-id' },
|
||
|
|
value: [{ content: 'Hello!' }],
|
||
|
|
},
|
||
|
|
],
|
||
|
|
});
|
||
|
|
|
||
|
|
// List posts
|
||
|
|
const posts = await client.postList({
|
||
|
|
page: 0,
|
||
|
|
limit: 20,
|
||
|
|
});
|
||
|
|
|
||
|
|
// List connected channels
|
||
|
|
const channels = await client.integrations();
|
||
|
|
```
|
||
|
|
|
||
|
|
The public API is exposed under `/public/v1`.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Architecture
|
||
|
|
|
||
|
|
PostSider is a TypeScript `pnpm` monorepo.
|
||
|
|
|
||
|
|
```text
|
||
|
|
postsider/
|
||
|
|
├── apps/
|
||
|
|
│ ├── backend/ # NestJS REST API
|
||
|
|
│ ├── orchestrator/ # Temporal workers
|
||
|
|
│ ├── frontend/ # Next.js dashboard
|
||
|
|
│ ├── commands/ # CLI/bootstrap utilities
|
||
|
|
│ ├── sdk/ # @postsider/node
|
||
|
|
│ └── mcp/ # @postsider/mcp
|
||
|
|
├── libraries/
|
||
|
|
│ ├── nestjs-libraries/ # Shared backend, database, integrations
|
||
|
|
│ └── helpers/ # Shared utilities
|
||
|
|
├── docker-compose.yaml
|
||
|
|
├── docker-compose.production.yaml
|
||
|
|
└── .env.example
|
||
|
|
```
|
||
|
|
|
||
|
|
### Tech stack
|
||
|
|
|
||
|
|
| Layer | Technology |
|
||
|
|
|---|---|
|
||
|
|
| Backend API | NestJS 11, TypeScript |
|
||
|
|
| Frontend | Next.js 15, React 19 |
|
||
|
|
| Database | PostgreSQL + Prisma 6.5 |
|
||
|
|
| Cache | Redis |
|
||
|
|
| Workflow engine | Temporal |
|
||
|
|
| AI | OpenAI, optional |
|
||
|
|
| Billing | Polar.sh, optional |
|
||
|
|
| Storage | Local filesystem, Cloudflare R2, or MinIO |
|
||
|
|
| Authentication | JWT, GitHub OAuth, Google OAuth, Generic OIDC |
|
||
|
|
| Monitoring | Sentry |
|
||
|
|
|
||
|
|
### Design decisions
|
||
|
|
|
||
|
|
**Temporal for durable scheduling**
|
||
|
|
|
||
|
|
Scheduled publishing and token-refresh work run through Temporal workflows so background jobs are not tied to one web-process lifetime.
|
||
|
|
|
||
|
|
**Provider-based integrations**
|
||
|
|
|
||
|
|
Each social platform is implemented behind a common provider interface. The active registry lives in `integration.manager.ts`.
|
||
|
|
|
||
|
|
**Public API first**
|
||
|
|
|
||
|
|
External tools can use `/public/v1`, while Node.js consumers can use `@postsider/node`.
|
||
|
|
|
||
|
|
**One codebase for hosted and self-hosted deployments**
|
||
|
|
|
||
|
|
Optional capabilities are controlled through environment configuration. Billing and AI are not required for a self-hosted installation.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Configuration
|
||
|
|
|
||
|
|
Start from the example environment file:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cp .env.example .env
|
||
|
|
```
|
||
|
|
|
||
|
|
The primary local-development settings are:
|
||
|
|
|
||
|
|
| Variable | Purpose |
|
||
|
|
|---|---|
|
||
|
|
| `DATABASE_URL` | PostgreSQL connection string |
|
||
|
|
| `REDIS_URL` | Redis connection string |
|
||
|
|
| `JWT_SECRET` | JWT signing secret |
|
||
|
|
| `BACKEND_URL` | URL used to reach the backend |
|
||
|
|
| `FRONTEND_URL` | URL used to reach the frontend |
|
||
|
|
| `NEXT_PUBLIC_BACKEND_URL` | Public backend URL embedded in the frontend |
|
||
|
|
| `BACKEND_INTERNAL_URL` | Backend URL used by internal services |
|
||
|
|
|
||
|
|
For production, set a dedicated `ENCRYPTION_KEY` as documented in [`.env.example`](.env.example).
|
||
|
|
|
||
|
|
The full reference is maintained in:
|
||
|
|
|
||
|
|
- [`.env.example`](.env.example)
|
||
|
|
- [PostSider environment documentation](https://docs.postsider.com/configuration/environment)
|
||
|
|
|
||
|
|
### Storage
|
||
|
|
|
||
|
|
Local storage is the default:
|
||
|
|
|
||
|
|
```env
|
||
|
|
STORAGE_PROVIDER=local
|
||
|
|
UPLOAD_DIRECTORY=./uploads
|
||
|
|
```
|
||
|
|
|
||
|
|
Cloudflare R2 and MinIO are also supported through environment configuration.
|
||
|
|
|
||
|
|
### Provider credentials
|
||
|
|
|
||
|
|
Social providers have their own API/OAuth settings. You do **not** need to configure all 33 providers.
|
||
|
|
|
||
|
|
Configure only the services you plan to connect.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Self-Hosting
|
||
|
|
|
||
|
|
PostSider is designed to run on your own infrastructure.
|
||
|
|
|
||
|
|
Two Compose files are included:
|
||
|
|
|
||
|
|
| File | Purpose |
|
||
|
|
|---|---|
|
||
|
|
| `docker-compose.yaml` | Simple local/evaluation stack using the published GHCR image |
|
||
|
|
| `docker-compose.production.yaml` | Production-oriented stack built from the repository |
|
||
|
|
|
||
|
|
The production stack includes the PostSider application, PostgreSQL, Redis, MinIO, Temporal, and supporting services used by the deployment.
|
||
|
|
|
||
|
|
For production, use the dedicated guide:
|
||
|
|
|
||
|
|
**[Self-host PostSider](https://docs.postsider.com/self-hosting)**
|
||
|
|
|
||
|
|
The production Compose file intentionally expects production secrets and deployment-specific values rather than shipping usable defaults.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Local Development
|
||
|
|
|
||
|
|
### Requirements
|
||
|
|
|
||
|
|
- Node.js `>=20.17.0 <23.0.0`
|
||
|
|
- pnpm `10.6.x`
|
||
|
|
- PostgreSQL
|
||
|
|
- Redis
|
||
|
|
|
||
|
|
Clone and install:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
git clone https://github.com/lumizone/postsider.git
|
||
|
|
cd postsider
|
||
|
|
pnpm install
|
||
|
|
```
|
||
|
|
|
||
|
|
Create your environment file:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cp .env.example .env
|
||
|
|
```
|
||
|
|
|
||
|
|
Apply database migrations:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
pnpm prisma-migrate-deploy
|
||
|
|
```
|
||
|
|
|
||
|
|
Create the initial admin:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
pnpm bootstrap
|
||
|
|
```
|
||
|
|
|
||
|
|
Start the backend and orchestrator:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
pnpm dev
|
||
|
|
```
|
||
|
|
|
||
|
|
In another terminal, start the frontend:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
pnpm dev:frontend
|
||
|
|
```
|
||
|
|
|
||
|
|
Default development URLs:
|
||
|
|
|
||
|
|
```text
|
||
|
|
Backend: http://localhost:3000
|
||
|
|
Frontend: http://localhost:4200
|
||
|
|
```
|
||
|
|
|
||
|
|
### Useful commands
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Backend only
|
||
|
|
pnpm dev:backend
|
||
|
|
|
||
|
|
# Orchestrator only
|
||
|
|
pnpm dev:orchestrator
|
||
|
|
|
||
|
|
# Frontend only
|
||
|
|
pnpm dev:frontend
|
||
|
|
|
||
|
|
# Generate Prisma client
|
||
|
|
pnpm prisma-generate
|
||
|
|
|
||
|
|
# Create a Prisma migration
|
||
|
|
pnpm prisma-migrate-dev
|
||
|
|
|
||
|
|
# Apply migrations
|
||
|
|
pnpm prisma-migrate-deploy
|
||
|
|
|
||
|
|
# Build backend + orchestrator
|
||
|
|
pnpm build
|
||
|
|
|
||
|
|
# Build the Node.js SDK
|
||
|
|
pnpm build:sdk
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Contributing
|
||
|
|
|
||
|
|
Contributions are welcome.
|
||
|
|
|
||
|
|
Good places to contribute include:
|
||
|
|
|
||
|
|
- New provider integrations
|
||
|
|
- Bug fixes with clear reproduction steps
|
||
|
|
- Documentation
|
||
|
|
- Performance improvements
|
||
|
|
- Automated tests
|
||
|
|
- Type-safety improvements
|
||
|
|
|
||
|
|
Typical workflow:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
git checkout -b feature/my-feature
|
||
|
|
# make changes
|
||
|
|
pnpm run build:backend
|
||
|
|
```
|
||
|
|
|
||
|
|
Then open a pull request with a clear explanation of the change.
|
||
|
|
|
||
|
|
For provider-specific contribution steps, see [`CONTRIBUTING.md`](CONTRIBUTING.md).
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Roadmap
|
||
|
|
|
||
|
|
- [x] GitHub Actions CI
|
||
|
|
- [x] Runtime image published to GHCR
|
||
|
|
- [x] Public REST API
|
||
|
|
- [x] Node.js SDK
|
||
|
|
- [x] MCP server
|
||
|
|
- [ ] Broader automated coverage for core flows
|
||
|
|
- [ ] Enable `strictNullChecks` across the codebase
|
||
|
|
- [ ] Mobile app
|
||
|
|
- [ ] Plugin system for custom integrations
|
||
|
|
- [ ] Advanced analytics dashboard
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Support PostSider
|
||
|
|
|
||
|
|
If PostSider is useful to you, consider starring the repository. It helps other developers discover the project.
|
||
|
|
|
||
|
|
<p align="center">
|
||
|
|
<a href="https://github.com/lumizone/postsider/stargazers">
|
||
|
|
<img src="https://img.shields.io/github/stars/lumizone/postsider?style=for-the-badge&logo=github&label=Star%20PostSider" alt="Star PostSider on GitHub" />
|
||
|
|
</a>
|
||
|
|
</p>
|
||
|
|
|
||
|
|
Bug reports, feature requests, and pull requests are also appreciated.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## License
|
||
|
|
|
||
|
|
PostSider is licensed under the [GNU Affero General Public License v3.0](LICENSE).
|
||
|
|
|
||
|
|
You may use, modify, and distribute PostSider under the terms of the AGPL-3.0. If you run a modified version as a network service, the license requires the corresponding source code to be made available to users of that service.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
<p align="center">
|
||
|
|
<strong>PostSider</strong><br/>
|
||
|
|
Open-source social media scheduling for humans, teams, and AI agents.
|
||
|
|
</p>
|
||
|
|
|
||
|
|
<p align="center">
|
||
|
|
<a href="https://postsider.com">Website</a>
|
||
|
|
·
|
||
|
|
<a href="https://docs.postsider.com">Docs</a>
|
||
|
|
·
|
||
|
|
<a href="https://github.com/lumizone/postsider">GitHub</a>
|
||
|
|
</p>
|