A clean, intuitive tweet scheduling platform that makes scheduling your X (Twitter) content effortless.
simply_tweeted.mp4
- π Tweet Scheduling: Plan your content in advance and let Simply Tweeted post it at the perfect time. Support posting on communities
- π Authentication: OAuth integration with X (Twitter) for secure access
- π Token Security: User tokens are encrypted and securely stored in the database
- π± Responsive Design: Works seamlessly on desktop and mobile devices
Simply Tweeted can be easily self-hosted using Docker. You have two options for the database: use an existing MongoDB instance or self-host MongoDB alongside the application.
π‘ Tip: You can use MongoDB which offers a free tier, perfect if you don't want to self-host MongoDB.
First, you'll need to create an X (Twitter) developer application to get your API credentials. Follow the detailed guide in the Setting Up X (Twitter) Developer Application section below.
docker pull ghcr.io/timotme/simplytweeted:latestCreate a .env file with your configuration:
# Authentication
AUTH_SECRET=your_auth_secret_key # Generate with `openssl rand -base64 64`
AUTH_URL=https://your-domain.com # Your public domain
AUTH_TRUST_HOST=true
# Database
DB_ENCRYPTION_KEY=your_encryption_key_for_tokens # Generate with `openssl rand -base64 64`
MONGODB_URI=mongodb://username:password@your-mongodb-host:27017/simplyTweeted
# Twitter API
AUTH_TWITTER_ID=your_twitter_client_id
AUTH_TWITTER_SECRET=your_twitter_client_secret
# Security
ALLOWED_TWITTER_ACCOUNTS=your_twitter_username,another_username # Comma-separated list
# Host Settings
ORIGIN=https://your-domain.com # Full URL as seen in browser
PORT=3000docker run -d \
--name simply-tweeted \
-p 3000:3000 \
--env-file .env \
ghcr.io/timotme/simplytweeted:latestIf you want to self-host MongoDB as well, use the provided Docker Compose configuration:
# Download the docker-compose.yml and environment template
curl https://raw.githubusercontent.com/timotme/SimplyTweeted/main/deployment/prod/self-hosted/docker-compose.ymlCreate a .env.docker file in the same directory:
# Authentication
AUTH_SECRET=your_auth_secret_key # Generate with `openssl rand -base64 32`
AUTH_URL=https://your-domain.com
AUTH_TRUST_HOST=true
# Database (for self-hosted MongoDB)
DB_ENCRYPTION_KEY=your_encryption_key_for_tokens # Generate with `openssl rand -base64 32`
MONGODB_URI=mongodb://root:example@mongo:27017/simplyTweeted
# Twitter API
AUTH_TWITTER_ID=your_twitter_client_id
AUTH_TWITTER_SECRET=your_twitter_client_secret
# Security
ALLOWED_TWITTER_ACCOUNTS=your_twitter_username,another_username
# Host Settings
ORIGIN=https://your-domain.com
PORT=3000docker-compose up -dThis will start both MongoDB and Simply Tweeted. The application will be available on port 3000, and MongoDB will be accessible on port 27018 (mapped from internal 27017).
- Twitter API Setup: Make sure to configure your Twitter App's OAuth callback URL to match your domain
- Security: Use strong, randomly generated secrets for
AUTH_SECRETandDB_ENCRYPTION_KEY - Firewall: Only expose port 3000 to the internet; keep MongoDB port (27018) internal
- Backup: Regular database backups are recommended for production use
- SSL: Use a reverse proxy (like Nginx) with SSL certificates for production deployments
For production deployments, consider:
- Using a reverse proxy (Nginx/Traefik) with SSL termination
- Setting up automated backups for MongoDB
- SvelteKit: Modern web framework with SSR support
- TypeScript: Type-safe development
- Tailwind CSS: Utility-first CSS framework
- DaisyUI: Beautiful component library
- Node.js - Runtime environment
- MongoDB - Database for storing tweets and user data
- Twitter API v2 - Official X (Twitter) API integration
- Docker - Containerized deployment
- Node-cron - Automated scheduling service
This is a monorepo containing three main packages:
simply-tweeted-app: The main web application (SvelteKit)scheduler: Background service for posting scheduled tweetsshared-lib: Shared TypeScript utilities and database models
Requirements:
- Node.js 18+ - JavaScript runtime environment
- npm - Package manager
- Docker - For running MongoDB locally
- X (Twitter) Developer Account - Required for API access and OAuth integration
git clone https://github.com/yourusername/SimplyTweeted.git
cd SimplyTweetednpm installcd deployment/dev
docker-compose up -dCreate the same environement file in the scheduler and simply-tweeted-app package:
Create .env:
# Authentication
AUTH_SECRET=your_auth_secret_key # Generate with `openssl rand -base64 32`
AUTH_URL=http://localhost:3000 # Base URL for authentication callbacks
# Database
DB_ENCRYPTION_KEY=your_encryption_key_for_tokens # Generate with `openssl rand -base64 32`
MONGODB_URI=mongodb://root:your_secure_password@localhost:27017/simplyTweeted
# Twitter API
AUTH_TWITTER_ID=your_twitter_client_id
AUTH_TWITTER_SECRET=your_twitter_client_secret
# Security
ALLOWED_TWITTER_ACCOUNTS=your_twitter_username,another_username # List of account allowed to access the scheduler separated by a comma
# Host setting
ORIGIN=http://localhost:3000 # Full URL as seen in the browser
PORT=3000 # Port on which the web app will be exposednpm run build --workspace=shared-libThis will run the front-end.
npm run dev --workspace=simply-tweeted-appThis will run the scheduler once
npm run dev runOnce --workspace=tweet-poster-serviceThis will run the service concurently
npm run devThe app will be available at:
- Web App: http://localhost:5173
- Scheduler: Runs in background
- Create a Twitter Developer Account
- Create a new App in the Twitter Developer Portal
- Generate your API keys and tokens
- Add the credentials to your environment file
- Set up OAuth 2.0 with the correct callback URLs
The application uses MongoDB with collections for:
- Users and authentication sessions
- Scheduled tweets
- Tweet history and analytics
- User preferences
We love contributions from the community! Whether you're fixing bugs, adding new features, improving documentation, or sharing ideas, your input helps make Simply Tweeted better for everyone.
What we're looking for:
- π Bug fixes and performance improvements
- β¨ New features and enhancements
- π Documentation improvements
- π¨ UI/UX enhancements
- π‘ Feature suggestions and feedback
New to open source? No problem! We welcome first-time contributors and are happy to help you get started!
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
packages/
βββ simply-tweeted-app/ # Main web application
β βββ src/routes/ # SvelteKit routes
β βββ src/lib/ # Shared components and utilities
β βββ src/auth.ts # Authentication configuration
βββ scheduler/ # Tweet posting service
β βββ src/ # Main scheduler logic
βββ shared-lib/ # Shared utilities and types
βββ src/types/ # TypeScript type definitions
βββ src/database/ # Database models and utilities
This project is licensed under the GPL-3.0-or-later License - see the LICENSE file for details.
If you encounter any issues or have questions, please open an issue on GitHub.
Made with β€οΈ by [Timothy] [https://x.com/timot_me]
To use Simply Tweeted, you'll need to create an X (Twitter) developer application to get the required API credentials. Here's a step-by-step guide:
- Visit the X Developer Portal: Go to developer.twitter.com
- Sign in: Use your X (Twitter) account credentials
- Apply for Access: Click "Apply" and select "Professional" use case
- Fill out the Application:
- Describe your intended use (e.g., "Personal tweet scheduling application")
- Explain how you'll use the Twitter API
- Agree to the Developer Agreement and Policy
Once your developer account is approved:
- Navigate to the Developer Portal: Go to your developer dashboard
- Create a New Project: Click "Create Project"
- Project Details:
- Name: Simply Tweeted (or your preferred name)
- Use Case: Choose "Making a bot" or "Building tools for yourself"
- Environment: Select "Development" for testing or "Production" for live use
- App Settings: Click on your newly created app
- App Permissions:
- Set to "Read and write" (required for posting tweets)
- Enable "Request email address from users" if you want email access
- Authentication Settings:
- App Type: Set to "Web App"
- Callback URLs: Add your domain callback:
For local development, also add:
https://your-domain.com/auth/callback/twitterhttp://localhost:3000/auth/callback/twitter - Website URL: Add your application's URL (this is not important)
Simply Tweeted uses OAuth 2.0 for authentication. You only need the OAuth 2.0 Client ID and Client Secret:
- User Authentication Settings: In your app settings, click "Set up" in the OAuth 2.0 section
- OAuth 2.0 Settings:
- App Type: Select "Confidential client"
- Client ID: This becomes your
AUTH_TWITTER_ID - Client Secret: This becomes your
AUTH_TWITTER_SECRET
Note: You don't need the older API Key and API Secret - Simply Tweeted only uses OAuth 2.0 credentials.
- Rate Limits: Free tier has limited API calls per day/months. ~ 17 scheduled posts per 24h
- Security: Keep your API keys secure and never commit them to version control
- Callback URLs: Must exactly match your domain (including https/http)
- Callback URL Mismatch: Ensure your
AUTH_URLenvironment variable matches the callback URL in your X app - Permission Denied: Verify your app has "Read and write" permissions
- Invalid Credentials: Double-check your
AUTH_TWITTER_IDandAUTH_TWITTER_SECRET
For more detailed information, visit the X API documentation.