Skip to main content

AI-powered LinkedIn post generator using local LLMs via Ollama

Project description

postcraftin

AI-powered LinkedIn post generator using local LLMs via Ollama. Personalized ghostwriter with 6-module profile system, modular onboarding, and CLI interface. A default profile is auto-created on first use via bootstrap.

Features

  • Local LLMs — runs fully on your machine via Ollama, no API costs, no data leaks
  • 6-Module Profile System — Identity, Voice, Audience, Content Strategy, Post History, Technical Preferences
  • Modular Onboarding — Update individual modules with --module flag
  • Few-Shot prompting — provide example posts to calibrate the output to your voice
  • Post length control — kurz (150–500), mittel (1.200–1.500), lang (1.900–2.500 Zeichen)
  • Multiple profiles — manage different personas or clients
  • Dynamic Model Selection — List and select from available Ollama models
  • Config Management — Global and profile-specific settings
  • Folder-Based Profiles — Organized storage with drafts/, published/, brandguide/, templates/, history/
  • 10 Storytelling Templates — Verlierer→Gewinner, AHA-Moment, Weg der Veränderung, and more (use --template <name> in generate, list with profile templates list)
  • Brand Guide Generator — Auto-generates voice.md, vocabulary.md, anti-patterns.md
  • YAML Frontmatter — Posts include metadata (topics, status, word count, LinkedIn URL)

Requirements

  • Python 3.10+
  • Ollama running locally
  • Node.js 18+ (for Web UI)

Installation

CLI

pip install postcraftin

Web UI (optional)

# Install API dependencies
pip install postcraftin[api]

# Start the FastAPI backend
postcraftin-api

# In a separate terminal, start the Next.js frontend
cd frontend
npm install
npm run dev

Open http://localhost:5173 in your browser.

Ports: Frontend dev server defaults to :5173, API server to :8080. Both configurable via env vars (PORT, NEXT_PUBLIC_API_URL, POSTCRAFTIN_API_PORT, POSTCRAFTIN_CORS_ORIGINS).

Usage

# Create a profile (interactive wizard - 6 modules)
postcraftin onboard --name myprofile

# Update specific module only
postcraftin onboard --name myprofile --module voice

# Generate a LinkedIn post with template
postcraftin generate --topic "The future of AI" --template verlierer-gewinner

# List available templates
postcraftin profile templates list

# Initialize templates to profile folder
postcraftin profile templates init --name myprofile

# Manage posts (drafts/published)
postcraftin profile posts list
postcraftin profile posts show <filename>
postcraftin profile posts publish <filename>
postcraftin profile posts set-topics <filename> --topics "AI,Future"

# Generate/regenerate brand guide
postcraftin profile brandguide --name myprofile --regenerate

# List available Ollama models
postcraftin models

# Select model interactively
postcraftin config model --select

# Show global config
postcraftin config

# Set profile-specific model
postcraftin profile set myprofile model gemma4:e2b

# List all profiles
postcraftin list-profiles

Default Model

gemma4:e2b — the default model for LinkedIn post generation.

First time? Pull the model with:

ollama pull gemma4:e2b

Want a different model? Browse all available models at: https://ollama.com/library

Configuration

Setting Location Description
Global Model ~/.postcraftin/config.json Default model for all profiles
Profile Model ~/.postcraftin/profiles/{name}/config.json Profile-specific model (optional)
Profiles ~/.postcraftin/profiles/{name}/ Folder-based profile storage
Drafts ~/.postcraftin/profiles/{name}/posts/drafts/ Draft posts with frontmatter
Published ~/.postcraftin/profiles/{name}/posts/published/ Published posts with LinkedIn URL
Templates ~/.postcraftin/profiles/{name}/templates/ Custom storytelling templates
Brand Guide ~/.postcraftin/profiles/{name}/brandguide/ voice.md, vocabulary.md, anti-patterns.md
History ~/.postcraftin/profiles/{name}/history/ Post statistics and analytics

License

MIT

Contributing

Contributions welcome! Open an issue or PR.

Thank you to all contributors!

Built with ❤️ for the LinkedIn community.

Open source forever.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

postcraftin-2.20.0.tar.gz (41.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

postcraftin-2.20.0-py3-none-any.whl (36.8 kB view details)

Uploaded Python 3

File details

Details for the file postcraftin-2.20.0.tar.gz.

File metadata

  • Download URL: postcraftin-2.20.0.tar.gz
  • Upload date:
  • Size: 41.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for postcraftin-2.20.0.tar.gz
Algorithm Hash digest
SHA256 ff297da1acafdab3388201b49a490c18245f6b35a896b455c19ef3b6373088ec
MD5 316c32b3d88ed39ae460a9911d21f939
BLAKE2b-256 f4d6bcbe2a9f94c01b8131562c787d398296f12c6e9ac7b0eec2b3b920ba6a06

See more details on using hashes here.

Provenance

The following attestation bundles were made for postcraftin-2.20.0.tar.gz:

Publisher: release.yml on EmreDuelger/postcraft

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file postcraftin-2.20.0-py3-none-any.whl.

File metadata

  • Download URL: postcraftin-2.20.0-py3-none-any.whl
  • Upload date:
  • Size: 36.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for postcraftin-2.20.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e6a1db0c5e08d08e16837f3934fe64d9058998e8810004ed08affc931395618b
MD5 9603eccfc4d36ba919f7d2e38b8befb4
BLAKE2b-256 184f7baca155dd7a4da416c928d853e110e3db94ed6033f72f31a696f5c2c037

See more details on using hashes here.

Provenance

The following attestation bundles were made for postcraftin-2.20.0-py3-none-any.whl:

Publisher: release.yml on EmreDuelger/postcraft

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page