Wire PostHog identify + dual-group context across the stack so events
land on the right person and account/workspace groups, with counts kept
fresh by Inertia navigations rather than per-domain triggers.
- New `app/Jobs/SyncUserToPostHog.php` (queue `posthog`): centralised
high-level sync — identifies the user and group-identifies their
account + current workspace using `$account->usage()` so the metrics
reuse the same source of truth Inertia ships in shared props.
- `app/Actions/User/CreateUser.php`: dispatches `SyncUserToPostHog` on
signup instead of calling `PostHogService` inline. Keeps the action
fast and routes everything through the queue.
- `app/Listeners/StripeEventListener.php`: webhook now captures
`subscription.created`/`updated`/`cancelled` against the account
owner profile (with `account` group auto-attached) and re-dispatches
`SyncUserToPostHog` so plan/has_active_subscription/is_on_trial
refresh after Stripe state changes.
- `app/Services/PostHogService.php`: `capture()` accepts an optional
`Account` that auto-attaches `$groups.account`, `account_id`, and
`plan` properties. Each public method short-circuits when
`POSTHOG_API_KEY` is unset so self-hosted installs are unaffected.
- `app/Models/Traits/HasUsage.php`: adds `postCount` to the usage
shape (combined `withCount(['socialAccounts','posts'])` query) so
posts count is part of the same payload Inertia already ships.
- `config/horizon.php`: adds `posthog` to `supervisor-1` queues so the
queued PostHog jobs actually drain in production.
- `resources/js/app.ts`: extracts `syncPostHogContext(page)` and calls
it on boot AND on every Inertia navigation, reading the fresh
`usage` props. This:
- Refreshes account group counts (workspaces, social accounts,
posts, members, credits) without per-domain triggers.
- Resolves the workspace-switch case where `setup()` does not
re-run but `navigate` fires with the new `auth.currentWorkspace`.
- Captures the initial `$pageview` so the first page of a session
is no longer dropped.
- `resources/js/components/UserMenuContent.vue`: `posthog.reset()` on
logout so a follow-up login on the same browser doesn't keep events
attributed to the previous user.
- `resources/js/composables/useFeatureAccess.ts`: TS `Usage`
interface gains `postCount`.
- `tests/Feature/Models/HasUsageTraitTest.php`: updated for the new
usage shape. Full suite: 1407 passed.
Hierarchy aligned with the domain model: person = User,
group `account` = billing/plan parent, group `workspace` =
collaboration child (carries `account_id` for drill-down).
|
||
|---|---|---|
| .claude/skills | ||
| .github | ||
| app | ||
| bootstrap | ||
| config | ||
| database | ||
| lang | ||
| maizzle | ||
| public | ||
| resources | ||
| routes | ||
| storage | ||
| stubs | ||
| templates | ||
| tests | ||
| .editorconfig | ||
| .env.ci | ||
| .env.example | ||
| .env.testing | ||
| .gitattributes | ||
| .gitignore | ||
| .mcp.json | ||
| .prettierignore | ||
| .prettierrc | ||
| artisan | ||
| boost.json | ||
| CLAUDE.md | ||
| components.json | ||
| compose.yaml | ||
| composer.json | ||
| composer.lock | ||
| eslint.config.js | ||
| GEMINI.md | ||
| LICENSE.md | ||
| package-lock.json | ||
| package.json | ||
| phpunit.xml | ||
| pint.json | ||
| README.md | ||
| tsconfig.json | ||
| vite.config.ts | ||
The open-source alternative to Buffer, Hootsuite, and Later.
Schedule, write, and publish to every social network from one place.
Self-hosted. Built for teams, agencies, and creators who own their data.
Cloud • Documentation • Roadmap • Community
TryPost 1.0 is here
A massive release that turns TryPost into a complete open-source social media platform.
- MCP Server — connect Claude, Cursor, ChatGPT, and any MCP client. Schedule, publish, and pull metrics with natural language.
- REST API — Personal Access Tokens, every workflow you can do in the dashboard, available over HTTP.
- Workspaces & Teams — manage multiple brands or clients in isolated environments. Invite team members with role-based permissions.
- AI Carousel Generator — type a prompt, get a multi-slide LinkedIn / Instagram carousel back, with images and copy on-brand.
- Brand Profile — set tone, voice, language, and colors once. Every AI generation respects them automatically.
- Analytics — per-account engagement metrics from every platform that exposes them, in a single dashboard.
Read the release notes →
Why TryPost
Tired of paying $30–$200/month per user for a scheduler? Tired of your content sitting on someone else's database?
| Self-hosted, your data | Your posts, drafts, and metrics never leave your server |
| No artificial limits | Unlimited posts, unlimited connected accounts, unlimited workspaces |
| AI built in | Captions, carousels, on-brand voice — using your own keys |
| Multi-tenant ready | Workspaces + roles for agencies managing many clients |
| API + MCP first-class | Automate everything; your AI assistant can post for you |
| AGPL-licensed | Inspect every line, fork it, ship it — forever free |
Features
| Visual Calendar | See every scheduled post at a glance, switch between month/week/day |
| Multi-Platform Composer | One draft → preview & tweak for every network in parallel |
| AI Generate / Review | Draft from a prompt, get inline feedback before you publish |
| AI Carousel Builder | Prompt → multi-slide carousel with images, on-brand |
| Brand Profile | Tone, voice, language, colors — applied to every AI call |
| Asset Library | Reusable workspace media + Unsplash & Giphy search built in |
| Signatures & Labels | Reusable text blocks (hashtags, CTAs) and color-coded post tags |
| Team Collaboration | Owner / Admin / Member roles, comments with @mentions on drafts |
| Workspaces | Isolate brands, clients, or projects in their own spaces |
| REST API + MCP | Full programmatic control; AI assistants integrate natively |
| Analytics | Per-account engagement metrics across every supported platform |
| Multi-language | English, Spanish, Portuguese |
Supported Platforms
X (Twitter) |
TikTok |
|||
YouTube |
Threads |
Bluesky |
Mastodon |
Get Started
| Try it on Cloud | The fastest way. Sign up at trypost.it |
| Self-host | Free forever. Installation guide → |
| Run with AI assistants | Connect Claude / Cursor / ChatGPT via MCP → |
Contributing
We love contributions, no matter how small. Pick an issue, say hi in Discussions, or just open a PR with what you'd like to see.
If TryPost is useful to you, a star helps more people find it. That's the most valuable contribution if you're short on time.
License
GNU Affero General Public License v3.0 — use, modify, fork, self-host, and redistribute, including commercially. If you run a modified version as a network service, you need to make your changes available to its users (AGPL §13).
Built openly by the community. Star us on GitHub and tell a friend.