Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.trypost.it/llms.txt

Use this file to discover all available pages before exploring further.

Configuration

TryPost is configured through environment variables in the .env file.

Basic Configuration

APP_NAME="TryPost"
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost
VariableDescription
APP_NAMEYour application name
APP_ENVEnvironment: local, staging, production
APP_DEBUGEnable debug mode (set to false in production)
APP_URLYour application URL

Self-Hosted Mode

SELF_HOSTED=true
When SELF_HOSTED=true, TryPost runs without any payment or subscription requirements. This is the default for self-hosted installations. What changes in self-hosted mode:
  • No Stripe configuration required
  • No subscription or payment checks (the LoadWorkspaceFromToken middleware skips the 402 Payment Required gate)
  • Plan limits are not enforced — unlimited workspaces, social accounts, members, and AI credits per account
  • AI calls go straight to your configured provider; you pay the provider directly (no credit accounting)
If you’re running TryPost as a paid SaaS, set SELF_HOSTED=false and configure Stripe.

Database

TryPost supports PostgreSQL and MySQL.
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=trypost
DB_USERNAME=postgres
DB_PASSWORD=your_password

MySQL

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=trypost
DB_USERNAME=root
DB_PASSWORD=your_password

Redis

Redis is required for queues and caching.
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

File Storage

TryPost supports local storage and S3-compatible cloud storage.

Local Storage (default)

FILESYSTEM_DISK=local

AWS S3

FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID=your_key
AWS_SECRET_ACCESS_KEY=your_secret
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=your_bucket
AWS_URL=https://your-bucket.s3.amazonaws.com

Cloudflare R2

FILESYSTEM_DISK=r2
R2_ACCESS_KEY_ID=your_key
R2_SECRET_ACCESS_KEY=your_secret
R2_ENDPOINT=https://your-account.r2.cloudflarestorage.com
R2_REGION=auto
R2_BUCKET=your_bucket
R2_URL=https://your-custom-domain.com

Other S3-Compatible Storage

Any S3-compatible storage (MinIO, DigitalOcean Spaces, etc.) can be used with the s3 disk configuration.

Mail

TryPost sends transactional emails for post notifications, team invites, account alerts, and authentication (email verification, password reset). A working mail configuration is required.

SendKit (default)

TryPost uses SendKit as the default mailer — no extra configuration needed.
SendKit offers a free plan with 3,000 emails/month, which is more than enough for a self-hosted TryPost instance to handle post notifications, team invites, and account alerts.
MAIL_MAILER=sendkit
SENDKIT_API_KEY=sk_your_sendkit_api_key
MAIL_FROM_ADDRESS="notifications@yourdomain.com"
MAIL_FROM_NAME="${APP_NAME}"

SMTP

If you prefer to use your own SMTP server:
MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="notifications@yourdomain.com"
MAIL_FROM_NAME="${APP_NAME}"

Emails sent by TryPost

EmailWhen it’s sent
Post publishedA scheduled post was successfully published
Post failedA post failed to publish on one or more platforms
Account disconnectedA social account lost its authorization and needs reconnection
Connections checkMultiple accounts in a workspace were found disconnected
Workspace inviteA team member is invited to join a workspace
Email verificationA new user needs to verify their email address
Password resetA user requests a password reset

WebSockets (Reverb)

TryPost uses Laravel Reverb for real-time updates (live post status, notifications).
REVERB_APP_ID=1001
REVERB_APP_KEY=your-reverb-key
REVERB_APP_SECRET=your-reverb-secret
REVERB_HOST="localhost"
REVERB_PORT=8080
REVERB_SCHEME=http

VITE_REVERB_APP_KEY="${REVERB_APP_KEY}"
VITE_REVERB_HOST="${REVERB_HOST}"
VITE_REVERB_PORT="${REVERB_PORT}"
VITE_REVERB_SCHEME="${REVERB_SCHEME}"
VariableDescription
REVERB_APP_IDUnique application ID
REVERB_APP_KEYApplication key for client connections
REVERB_APP_SECRETSecret key for server-side authentication
REVERB_HOSTWebSocket server host
REVERB_PORTWebSocket server port
REVERB_SCHEMEProtocol: http or https
In production, set REVERB_SCHEME=https and use a reverse proxy to handle SSL termination for WebSocket connections.

Social Platforms

Each social platform requires API credentials from its developer portal. See each platform’s documentation for step-by-step setup.
Bluesky and Mastodon don’t require API credentials — they work out of the box.

All platform credentials

# LinkedIn (https://developer.linkedin.com)
LINKEDIN_CLIENT_ID=
LINKEDIN_CLIENT_SECRET=
LINKEDIN_CLIENT_REDIRECT="${APP_URL}/accounts/linkedin/callback"
LINKEDIN_PAGE_CLIENT_REDIRECT="${APP_URL}/accounts/linkedin-page/callback"

# X / Twitter (https://developer.twitter.com)
X_CLIENT_ID=
X_CLIENT_SECRET=
X_CLIENT_REDIRECT="${APP_URL}/accounts/x/callback"

# Facebook (https://developers.facebook.com)
FACEBOOK_CLIENT_ID=
FACEBOOK_CLIENT_SECRET=
FACEBOOK_CLIENT_REDIRECT="${APP_URL}/accounts/facebook/callback"

# Instagram (https://developers.facebook.com)
INSTAGRAM_CLIENT_ID=
INSTAGRAM_CLIENT_SECRET=
INSTAGRAM_CLIENT_REDIRECT="${APP_URL}/accounts/instagram/callback"

# Threads (https://developers.facebook.com)
THREADS_CLIENT_ID=
THREADS_CLIENT_SECRET=
THREADS_CLIENT_REDIRECT="${APP_URL}/accounts/threads/callback"

# TikTok (https://developers.tiktok.com)
TIKTOK_CLIENT_ID=
TIKTOK_CLIENT_SECRET=
TIKTOK_CLIENT_REDIRECT="${APP_URL}/accounts/tiktok/callback"

# Google / YouTube (https://console.cloud.google.com)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_CLIENT_REDIRECT="${APP_URL}/accounts/youtube/callback"

# Pinterest (https://developers.pinterest.com)
PINTEREST_CLIENT_ID=
PINTEREST_CLIENT_SECRET=
PINTEREST_CLIENT_REDIRECT="${APP_URL}/accounts/pinterest/callback"

Enabling/disabling platforms

You can selectively enable or disable platforms without removing their credentials. This is useful when API credentials are pending approval or temporarily revoked.
LINKEDIN_ENABLED=true
LINKEDIN_PAGE_ENABLED=true
X_ENABLED=true
TIKTOK_ENABLED=true
YOUTUBE_ENABLED=true
FACEBOOK_ENABLED=true
INSTAGRAM_ENABLED=true
INSTAGRAM_FACEBOOK_ENABLED=true
THREADS_ENABLED=true
PINTEREST_ENABLED=true
BLUESKY_ENABLED=true
MASTODON_ENABLED=true
Set any platform to false to hide it from the UI. All platforms are enabled by default.

Google Login

TryPost supports sign in with Google. This uses the same Google OAuth credentials as the YouTube integration, but with a separate callback URL.
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
GOOGLE_AUTH_CALLBACK="${APP_URL}/auth/google/callback"
In the Google Cloud Console, add both callback URLs to your OAuth 2.0 client:
  • https://your-domain.com/accounts/youtube/callback (YouTube connection)
  • https://your-domain.com/auth/google/callback (Google login)

AI features (optional)

The Generate / Review / Create AI flows in the post editor need a configured text-generation provider. Without one, the AI buttons stay disabled.
AI_TEXT_PROVIDER=openai
AI_TEXT_MODEL=gpt-5.4
OPENAI_API_KEY=sk-...

# Optional — image generation for the AI Create wizard
AI_IMAGE_PROVIDER=openai

# Optional — voiceover / TTS (used by future video flows)
AI_AUDIO_PROVIDER=elevenlabs
ELEVENLABS_API_KEY=
ELEVENLABS_DEFAULT_VOICE=
VariableDescription
AI_TEXT_PROVIDERopenai, anthropic, gemini, azure, groq, xai, deepseek, mistral, or ollama. Defaults to openai.
AI_TEXT_MODELModel identifier for the text provider. Defaults to gpt-5.4.
AI_IMAGE_PROVIDERProvider used for AI image generation in the Create wizard. Defaults to openai.
OPENAI_API_KEYYour OpenAI API key. Each provider has its own key (ANTHROPIC_API_KEY, GEMINI_API_KEY, etc.).
Self-hosted instances skip the credit/quota check entirely (SELF_HOSTED=true), so AI calls go straight to the configured provider — you pay the provider directly.

Asset library (Unsplash & Giphy)

The Assets page exposes optional Unsplash and Giphy tabs. Configure these to enable them:
UNSPLASH_ACCESS_KEY=
UNSPLASH_SECRET_KEY=

GIPHY_API_KEY=
Without these keys, the Library tab still works — only the stock-photo and GIF tabs are hidden.

Stripe (Cloud / paid SaaS deployments)

Only required when running TryPost as a paid SaaS (SELF_HOSTED=false). Self-hosted instances skip all subscription and billing checks.
SELF_HOSTED=false

STRIPE_KEY=pk_live_...
STRIPE_SECRET=sk_live_...
STRIPE_WEBHOOK_SECRET=whsec_...
CASHIER_TRIAL_DAYS=8

# Plan price IDs from Stripe (one each for monthly + yearly)
STRIPE_STARTER_MONTHLY=price_...
STRIPE_STARTER_YEARLY=price_...
STRIPE_PLUS_MONTHLY=price_...
STRIPE_PLUS_YEARLY=price_...
STRIPE_PRO_MONTHLY=price_...
STRIPE_PRO_YEARLY=price_...
STRIPE_MAX_MONTHLY=price_...
STRIPE_MAX_YEARLY=price_...
Webhook endpoint: {APP_URL}/stripe/webhook. Configure it in your Stripe dashboard and copy the signing secret into STRIPE_WEBHOOK_SECRET. After updating these, run php artisan db:seed --class=PlanSeeder so the plans table picks up the price IDs.

Analytics (optional)

PostHog

POSTHOG_API_KEY=phc_your_key
POSTHOG_HOST=https://us.i.posthog.com

VITE_POSTHOG_API_KEY="${POSTHOG_API_KEY}"
VITE_POSTHOG_HOST="${POSTHOG_HOST}"

Google Tag Manager

GTM_ID=GTM-XXXXXXX
Both are optional and only needed if you want to track usage analytics.

Horizon (Queue Dashboard)

Laravel Horizon provides a dashboard to monitor your queues. Access it at /horizon.
HORIZON_ALLOWED_EMAILS=admin@example.com,dev@example.com
VariableDescription
HORIZON_ALLOWED_EMAILSComma-separated list of emails allowed to access Horizon in production
If not set, Horizon dashboard will be inaccessible in non-local environments.

Next Steps