Skip to content

Fethulmubin/PublishOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

199 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

PublishOS

PublishOS

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.


✨ Features

πŸ“ Content Management

  • 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

πŸ“Š Analytics

  • Dashboard overview with engagement metrics
  • Content performance tracking
  • Creator insights
  • YouTube-specific analytics (views, watch time, subscriber gains)

πŸ‘€ User System

  • Email/password authentication
  • Google OAuth sign-in
  • Profile management
  • Settings (theme, notifications, connected accounts)

🧱 Tech Stack

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

πŸš€ Getting Started

Prerequisites

  • 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)

1. Clone & Install

git clone https://github.com/Fethulmubin/PublishOS.git
cd PublishOS

# Server
cd Server
npm install

# Client
cd ../Client/Memories
npm install

2. Environment Variables

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-..."

3. Run

# Terminal 1 β€” Server
cd Server
npm start        # http://localhost:5555

# Terminal 2 β€” Client
cd Client/Memories
npm run dev      # http://localhost:5173

4. OAuth Setup

LinkedIn

  1. Create an app at LinkedIn Developer Portal
  2. Add redirect URI: http://localhost:5555/api/integrations/auth/linkedin/callback
  3. Request w_member_social, openid, profile, email scopes

YouTube (Google)

  1. Enable YouTube Data API v3 and YouTube Analytics API in Google Cloud Console
  2. Create an OAuth 2.0 Client ID (Web application)
  3. Add redirect URI: http://localhost:5555/api/integrations/auth/youtube/callback
  4. Add your Google email as a Test user on the OAuth consent screen

πŸ“ Project Structure

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

πŸ”Œ API Endpoints

Authentication

Method Endpoint Auth
POST /users/signin β€”
POST /users/signup β€”

Posts (paginated)

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

Schedule

Method Endpoint Auth
GET /api/schedule βœ…
POST /api/schedule βœ…
PATCH /api/schedule/:id βœ…
DELETE /api/schedule/:id βœ…

Integrations

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 βœ…

AI Studio

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 βœ…

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License.

About

Create once. Publish everywhere. PublishOS helps creators and marketers generate, manage, and distribute content with AI.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages