All-in-one content creation & social media management platform
Write, enhance with AI, schedule, and publish to LinkedIn, YouTube, and more β from a single dashboard.
Rich post editor β Create, edit, and manage posts with title, message, tags, and media
AI Studio β Generate captions, rewrite, repurpose, and enhance posts using AI (OpenAI / OpenRouter)
Infinite-scroll feed β Posts load 10 at a time with smooth pagination
π
Scheduling & Calendar
Visual calendar β Month view with dot indicators for scheduled posts
Schedule posts β Pick date/time and target platform, edit or delete anytime
Upcoming posts sidebar β Quick preview of what's queued
π Platform Integrations
Platform
Status
Features
LinkedIn
β
Live
OAuth connect, text + image posts, media upload
YouTube
β
Live
OAuth connect, video upload, shorts support, analytics
Twitter/X
π§ Planned
Instagram
π§ Planned
Facebook
π§ Planned
Dashboard overview with engagement metrics
Content performance tracking
Creator insights
YouTube-specific analytics (views, watch time, subscriber gains)
Email/password authentication
Google OAuth sign-in
Profile management
Settings (theme, notifications, connected accounts)
Layer
Technology
Frontend
React 18, Material UI v5, Redux (Thunk), React Router v7
Backend
Node.js, Express 4, Mongoose 8
Database
MongoDB Atlas
Auth
JWT + Google OAuth (@react-oauth/google)
AI
OpenAI API / OpenRouter
Styling
100% MUI sx prop β no CSS modules
Node.js 18+
MongoDB connection string
Google OAuth client ID (for YouTube integration)
LinkedIn developer app credentials
OpenRouter or OpenAI API key (for AI features)
git clone https://github.com/Fethulmubin/PublishOS.git
cd PublishOS
# Server
cd Server
npm install
# Client
cd ../Client/Memories
npm install
Create Server/.env:
CONNECTION_URL = " mongodb+srv://..."
JWT_SECRET = " your_jwt_secret"
FRONTEND_URL = " http://localhost:5173"
# LinkedIn
LINKEDIN_CLIENT_ID = " ..."
LINKEDIN_CLIENT_SECRET = " ..."
LINKEDIN_REDIRECT_URI = " http://localhost:5555/api/integrations/auth/linkedin/callback"
# Google / YouTube
YOUTUBE_CLIENT_ID = " ..."
YOUTUBE_CLIENT_SECRET = " ..."
YOUTUBE_REDIRECT_URI = " http://localhost:5555/api/integrations/auth/youtube/callback"
YOUTUBE_SCOPES = " openid profile email https://www.googleapis.com/auth/youtube.upload https://www.googleapis.com/auth/youtube.readonly https://www.googleapis.com/auth/yt-analytics.readonly"
# Shared Google URLs
GOOGLE_AUTH_URL = " https://accounts.google.com/o/oauth2/v2/auth"
GOOGLE_TOKEN_URL = " https://oauth2.googleapis.com/token"
GOOGLE_USERINFO_URL = " https://www.googleapis.com/oauth2/v3/userinfo"
# AI
OPENROUTER_API_KEY = " sk-or-v1-..."
# Terminal 1 β Server
cd Server
npm start # http://localhost:5555
# Terminal 2 β Client
cd Client/Memories
npm run dev # http://localhost:5173
Create an app at LinkedIn Developer Portal
Add redirect URI: http://localhost:5555/api/integrations/auth/linkedin/callback
Request w_member_social, openid, profile, email scopes
Enable YouTube Data API v3 and YouTube Analytics API in Google Cloud Console
Create an OAuth 2.0 Client ID (Web application)
Add redirect URI: http://localhost:5555/api/integrations/auth/youtube/callback
Add your Google email as a Test user on the OAuth consent screen
Server/
βββ controllers/ # Route handlers
β βββ post.js # CRUD + pagination
β βββ integrations.js # LinkedIn, YouTube, OAuth
β βββ schedule.js # Scheduled posts
β βββ aiStudio.js # AI generation endpoints
βββ services/
β βββ integrations/
β βββ linkedin/ # LinkedIn API wrapper
β βββ youtube/ # YouTube API wrapper (upload, analytics)
βββ models/ # Mongoose schemas
βββ middleware/ # JWT + Google auth
βββ routes/
Client/Memories/src/
βββ api/ # Axios instance + all API functions
βββ actions/ # Redux thunk actions
βββ reducers/ # Redux reducers
βββ components/
β βββ Auth/ # Login / Signup
β βββ Common/ # Reusable: dialogs, cards, sidebar widgets
β βββ Form/ # Post create/edit form
β βββ Home/ # Feed page
β βββ Layout/ # Sidebar + TopHeader + content shell
β βββ NavBar/ # Top header
β βββ NavBottom/ # Mobile bottom nav
β βββ Pages/ # Dashboard, AIStudio, Schedule, Analytics, etc.
β βββ Posts/ # Post card + list + infinite scroll
β βββ Sidebar/ # Left navigation drawer
βββ assets/ # Logos, images
Method
Endpoint
Auth
POST
/users/signin
β
POST
/users/signup
β
Method
Endpoint
Auth
Description
GET
/posts?page=1&limit=10
β
Fetch paginated posts
POST
/posts
β
Create post
PATCH
/posts/:id
β
Update own post
DELETE
/posts/:id
β
Delete own post
PATCH
/posts/:id/like
β
Toggle like
Method
Endpoint
Auth
GET
/api/schedule
β
POST
/api/schedule
β
PATCH
/api/schedule/:id
β
DELETE
/api/schedule/:id
β
Method
Endpoint
Auth
GET
/api/integrations
β
GET
/api/integrations/auth/:platform/url
β
GET
/api/integrations/auth/:platform/callback
β
POST
/api/integrations/linkedin/post
β
POST
/api/integrations/youtube/post
β
GET
/api/integrations/youtube/analytics
β
GET
/api/integrations/youtube/videos
β
DELETE
/api/integrations/disconnect/:platform
β
Method
Endpoint
Auth
POST
/api/ai/generate
β
POST
/api/ai/generate-caption
β
POST
/api/ai/rewrite
β
POST
/api/ai/repurpose
β
POST
/api/ai/structure
β
PATCH
/api/ai/enhance-post/:id
β
Fork the repository
Create a feature branch (git checkout -b feature/amazing-feature)
Commit your changes (git commit -m 'Add amazing feature')
Push to the branch (git push origin feature/amazing-feature)
Open a Pull Request
This project is licensed under the MIT License.