No description
Find a file
Paulo Castellano 3c3b170b21 feat: @mentions in comments, AI Action layer + MCP tools, settings tabs
Mentions in post comments
- @mention autocomplete (workspace members, current user excluded) with
  marker syntax @[uuid] persisted, display names rendered via CommentBody
  chips; live edit replaces markers with names and converts back on save.
- NotifyMentions action with workspace-scoped membership check, dedupes
  same user, only newly-added mentions on update.
- Email + in-app via SendNotification job, respecting per-user
  notification_preferences.mentioned_in_comment.
- Heartbeat-based presence (Cache, 60s TTL, 30s ping) so online recipients
  get only the in-app notification — no email noise.
- Real-time bell on workspace.{id}.user.{id} private channel
  (NotificationCreated event), scoped channel name avoids client-side
  filtering and lays out a convention for future workspace channels.
- Mailable localized via lang/{en,es,pt-BR}/mail.php; Maizzle source
  template for the email is committed and built into resources/views/mail.

AI generation refactor (Action layer + MCP)
- Extracted Actions/Ai/Generate{Image,Video} with QuotaExhaustedException
  so agent tools and MCP tools share a single domain entry point.
- Mcp/Tools/Ai/Generate{Image,Video}Tool registered in TryPostServer; both
  return MediaResource payloads.
- Orientation::imageApiSize maps non-OpenAI ratios to 1:1/2:3/3:2.
- config/ai.php is now the single source of truth driven by env, removing
  the trypost.ai shim. Default text/image providers flipped to OpenAI.

Settings/UX
- /settings/workspace split into shadcn Tabs (Workspace / Brand / Users)
  with three components.
- /assets and the in-editor MediaPicker open the ImagePreviewDialog
  lightbox on image click while preserving action button behaviour.
- Comments tab landed via ?tab=comments&comment=<id> from notification
  click (scroll-to + temporary highlight).
- Mention autocomplete popover flips above when near the viewport bottom.
- Real social platform PNGs replace Tabler brand glyphs in schedule
  pills and post list, with hover tooltip carrying display_name + handle.

Bug fixes
- AcceptInvite: controller now passes workspace + role payload that the
  Vue page expects; login/register CTAs preselect the invite email.
- WorkspaceInvite mailable: stopped referencing nonexistent
  $invite->workspace and $invite->role; column added to the migration,
  Invite model casts role to WorkspaceRole, CreateInvite persists it.
- PostCommentCreated: added broadcastAs so .PostCommentCreated actually
  matches the Echo listener; payload now includes mentioned_users so
  receivers render the chip correctly without a refetch.
- Preview components for X/Pinterest/Threads/Bluesky/LinkedIn/Mastodon/
  TikTok/YouTube switched from item.type === 'image' to
  !isVideoMedia(item) so media without a persisted type still renders.
- UpdatePostRequest now accepts media.*.{type,mime_type,size,...} so the
  posts.media JSON keeps the metadata that the previews need.
- Removed throttle:6,1 from social connect routes (was 429ing legitimate
  OAuth retries).
- Used MediaType enum cases instead of literal 'image'/'video' strings
  when creating media rows.

Tests
- MentionParser unit tests, NotifyMentions feature tests including
  online/offline channel selection and preference gating, MCP AI tool
  happy paths, MentionedInComment mailable rendering, AcceptInvite +
  search-members + index mentioned_users path. 1229 passing.
2026-05-01 20:59:03 -03:00
.claude/skills feat: add CommentsTab component with replies, reactions, and real-time 2026-04-15 20:15:29 -03:00
.github fix: reorder CI steps — env before composer, key after 2026-03-31 12:08:04 -03:00
app feat: @mentions in comments, AI Action layer + MCP tools, settings tabs 2026-05-01 20:59:03 -03:00
bootstrap refactor: remove onboarding flow, implement brand analysis services, and replace setup middleware with account readiness checks 2026-04-16 23:05:51 -03:00
config feat: @mentions in comments, AI Action layer + MCP tools, settings tabs 2026-05-01 20:59:03 -03:00
database feat: @mentions in comments, AI Action layer + MCP tools, settings tabs 2026-05-01 20:59:03 -03:00
docs/superpowers docs: manual verification checklist for media pipeline 2026-04-23 15:34:40 -03:00
lang feat: @mentions in comments, AI Action layer + MCP tools, settings tabs 2026-05-01 20:59:03 -03:00
maizzle feat: @mentions in comments, AI Action layer + MCP tools, settings tabs 2026-05-01 20:59:03 -03:00
public chore: posthog, ui, features and more 2026-03-30 21:18:07 -03:00
resources feat: @mentions in comments, AI Action layer + MCP tools, settings tabs 2026-05-01 20:59:03 -03:00
routes feat: @mentions in comments, AI Action layer + MCP tools, settings tabs 2026-05-01 20:59:03 -03:00
storage chore: first commit 2026-01-14 22:13:44 -03:00
stubs feat: implement MCP server with tools, Post API tests, auth middleware 2026-03-29 20:30:36 -03:00
tests feat: @mentions in comments, AI Action layer + MCP tools, settings tabs 2026-05-01 20:59:03 -03:00
.editorconfig chore: first commit 2026-01-14 22:13:44 -03:00
.env.ci feat: adding tests.. 2026-01-18 22:01:55 -03:00
.env.example feat: @mentions in comments, AI Action layer + MCP tools, settings tabs 2026-05-01 20:59:03 -03:00
.env.testing feat: improvements on ui 2026-01-21 20:50:57 -03:00
.gitattributes chore: first commit 2026-01-14 22:13:44 -03:00
.gitignore chore: working 2026-04-02 17:57:06 -03:00
.mcp.json chore: update boost skills and config 2026-03-31 09:36:09 -03:00
.prettierignore chore: first commit 2026-01-14 22:13:44 -03:00
.prettierrc chore: first commit 2026-01-14 22:13:44 -03:00
artisan chore: first commit 2026-01-14 22:13:44 -03:00
boost.json feat: add CommentsTab component with replies, reactions, and real-time 2026-04-15 20:15:29 -03:00
CLAUDE.md feat: add CommentsTab component with replies, reactions, and real-time 2026-04-15 20:15:29 -03:00
components.json chore: first commit 2026-01-14 22:13:44 -03:00
compose.yaml feat: add documentation for connecting social media platforms and getting started guide 2026-01-18 18:57:15 -03:00
composer.json feat: use LLM to polish brand autofill when provider is configured 2026-04-16 11:33:02 -03:00
composer.lock feat: use LLM to polish brand autofill when provider is configured 2026-04-16 11:33:02 -03:00
eslint.config.js chore: first commit 2026-01-14 22:13:44 -03:00
GEMINI.md chore: update config files and remove unused translation files 2026-01-26 12:02:24 -03:00
LICENSE.md feat: Introduce a self-hosted mode, refactor email notifications to use Mailable classes with new templates, and update the project README. 2026-01-18 17:48:12 -03:00
package-lock.json fix: resolve all TypeScript errors 2026-03-31 09:34:39 -03:00
package.json fix: resolve all TypeScript errors 2026-03-31 09:34:39 -03:00
phpunit.xml feat: adding tests 2026-01-18 22:04:34 -03:00
pint.json chore: first commit 2026-01-14 22:13:44 -03:00
README.md fix: Stripe webhook setup completion, notifications routing, billing UI 2026-03-31 13:52:36 -03:00
TIKTOK_REVIEW_VIDEO_SCRIPT.md chore: working 2026-04-23 13:23:24 -03:00
tsconfig.json chore: first commit 2026-01-14 22:13:44 -03:00
vite.config.ts feat: Implement soft deletes for workspace hashtags and labels, and integrate content_type into the initial post platforms table creation. 2026-01-17 14:44:37 -03:00

TryPost

The open-source social media scheduling platform

Schedule, manage, and publish content to all your social media accounts from one place.
Self-hosted. Privacy-focused. No limits.

Stars License Release

Documentation • Roadmap • Community


Why TryPost?

Tired of paying expensive monthly fees for social media scheduling tools? Want full control over your data? TryPost is the solution.

100% Open Source Inspect the code, contribute, make it yours
Self-Hosted Your data stays on your servers
No Limits Schedule unlimited posts, connect unlimited accounts
Privacy First No tracking, no analytics, no data selling

Features

Visual Calendar Drag and drop posts across your content calendar
Post Composer Create and preview posts for multiple platforms at once
Media Library Upload images and videos with automatic optimization
Team Collaboration Invite team members with role-based permissions (Owner, Admin, Member)
Workspaces Manage multiple brands or clients separately
REST API Full API with Bearer token authentication
MCP Server AI-ready with Model Context Protocol support
Google Login Sign up and log in with Google OAuth
Notifications In-app and email notifications for post status
i18n Available in English, Spanish, and Portuguese

Supported Platforms


X (Twitter)

LinkedIn

Facebook

Instagram

TikTok

YouTube

Pinterest

Threads

Bluesky

Mastodon

Tech Stack

Layer Technology
Backend Laravel 13, PHP 8.4
Frontend Vue 3, Inertia.js v3, Tailwind CSS v4
Database PostgreSQL
Queue Redis + Laravel Horizon
WebSockets Laravel Reverb
API REST with Bearer token auth
MCP Laravel MCP for AI integrations
Payments Laravel Cashier (Stripe)

Getting Started

Get TryPost running in minutes:

Installation Guide Step-by-step setup
Docker Setup Run with Laravel Sail
Configuration Environment setup
Platform Setup Connect your social accounts

Quick Start

git clone https://github.com/trypost-it/trypost.git
cd trypost
cp .env.example .env
composer install
npm install
php artisan key:generate
php artisan migrate
npm run build

API

TryPost includes a REST API for programmatic access. All endpoints are under /api and require a Bearer token.

curl -H "Authorization: Bearer tp_your_token" \
  https://your-domain.com/api/posts

See the API documentation for all available endpoints.

MCP Server

TryPost ships with a Model Context Protocol (MCP) server at /mcp/trypost, enabling AI assistants to manage your social media directly.

Contributing

We love contributions! Check the issues for open tasks.

License

TryPost is licensed under the Functional Source License (FSL).

You can: Use for personal or business use, self-host, modify and contribute.

You cannot: Offer as a competing SaaS, white-label and resell.


If TryPost helps you, please give us a star