Content OS
approvedby eharris128
Post directly to LinkedIn from your vault.
Content OS
Post directly to LinkedIn from your vault.
Overview
Content OS is an Obsidian plugin that bridges the gap between your note-taking and content publishing workflows. Create and publish LinkedIn posts directly from Obsidian without switching between applications.
Features
- Seamless Workflow: Create LinkedIn posts without leaving Obsidian
- User-Friendly Interface: Simple modal for composing and publishing posts
- Character Counter: Real-time character count with LinkedIn limits
Quick Start
1. Installation
- Download the plugin files
- Place them in your Obsidian plugins directory:
.obsidian/plugins/content-os/ - Enable the plugin in Obsidian settings
2. LinkedIn Authentication
- Open plugin settings
- Click "Generate LinkedIn access token"
- Complete the login flow in your browser
- Copy and paste the access token into the plugin settings
- Click "Validate token" to verify the token works
3. Create Your First Post
- Use the ribbon icon (send icon) to open the post composer
- Or use the command palette: "Create LinkedIn post"
- Write your content in the modal
- Click "Post" to publish
Usage
Creating Posts
- Ribbon Icon: Click the send icon in the left ribbon
- Command Palette: Search for "Create LinkedIn post"
- Write Content: Enter your post content in the modal
- Character Limit: Stay within LinkedIn's 3000 character limit
- Publish: Click "Post" to publish immediately
Settings Configuration
- LinkedIn Access Token: Your OAuth token for API access (password field for security)
- Dev Mode: Enable for detailed logging and debugging
- Log Level: Control the verbosity of logs when dev mode is enabled
Authentication
Content OS uses LinkedIn's OAuth 2.0 for secure authentication:
- Initial Setup: Generate a token through the OAuth proxy
- Token Storage: Tokens are stored securely in Obsidian's data storage
- Auto-Validation: The plugin automatically validates tokens before posting
- User ID Caching: LinkedIn user IDs are cached to avoid repeated API calls
Development
Prerequisites
- Node.js 18+
- npm or yarn
Setup
npm install
npm run dev # Development with file watching
npm run build # Production build
npm run lint # Code linting
npm run typecheck # TypeScript checking
Project Structure
├── main.ts # Main plugin entry point
├── manifest.json # Plugin metadata
├── src/
│ ├── linkedin/
│ │ ├── api.ts # LinkedIn API integration
│ │ └── PostComposer.ts # Post creation modal
│ └── utils/
│ └── logger.ts # Logging utility
└── README.md # This file
API Integration
Content OS integrates with LinkedIn's v2 API:
- User Info Endpoint:
/v2/userinfofor user identification - Posts Endpoint:
/v2/postsfor content publishing - OAuth Flow: Standard OAuth 2.0 with PKCE for security
Privacy & Security
- Local Storage: All tokens are stored locally in Obsidian
- No Data Collection: Content OS doesn't collect or transmit user data
- OAuth Security: Uses industry-standard OAuth 2.0 authentication
- Token Validation: Tokens are validated before each use
OAuth Host
- I have a small open source repo here where the LinkedIn OAuth flow is driven from. When a user uses the
Generate LinkedIn access tokenbutton within this app, this is the code standing behind the URL where they are pushed.
Troubleshooting
Common Issues
Token Invalid/Expired
- Generate a new token through the OAuth flow
- Ensure you're using the correct LinkedIn account
- Check that the token hasn't expired
Post Failed to Publish
- Verify your internet connection
- Check that your LinkedIn account has posting permissions
- Ensure content doesn't exceed character limits
Plugin Not Loading
- Enable dev mode in settings for detailed logs
- Check the developer console for error messages
- Verify plugin files are in the correct directory
Debug Mode
Enable dev mode in plugin settings to see detailed logs in the developer console:
- Open plugin settings
- Toggle "Dev mode" on
- Set log level to "Debug"
- Check browser developer console for detailed information
License
MIT License - See LICENSE file for details.
Support
For issues, feature requests, or questions:
- GitHub Issues: Report an issue
Attribution
- This plugin builds on top of the LinkedIn APIs, but is in no way affiliated or endorsed by LinkedIn.
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.