shiplog Svelte Themes

Shiplog

Turn your git activity into social media content. AI-powered content pipeline for engineers who ship but don't post.

ShipLog

Turn your git history into social media content.

ShipLog watches what you build, understands the significance, and generates authentic posts for LinkedIn, Twitter, Telegram, and Dev.to. You review and approve. It publishes.

Engineers build incredible things every day but remain invisible online. ShipLog fixes that.

shiplog.frankfmy.com


How it works

Your git activity
  → ShipLog detects stories (not just commits — narratives)
  → AI generates platform-specific drafts
  → You review (swipe to approve)
  → Published at optimal times

Why not just use ChatGPT?

ChatGPT ShipLog
Knows what you built You describe From git
Knows your writing style Generic Learned from edits
Remembers past posts No Never repeats
Tracks what performs No Adjusts topics
Multi-platform formatting Manual Automatic
Scheduling None Optimal times

ShipLog accumulates context over time. After a month, it knows your voice, your best topics, and your audience. ChatGPT starts from zero every time.

Quick start

CLI

# Clone and install
git clone https://github.com/FrankFMY/shiplog.git
cd shiplog && bun install

# Scan a repo
bun run packages/cli/src/index.ts init ~/your-project

# See what stories ShipLog found
bun run packages/cli/src/index.ts stories ~/your-project

# Generate drafts (requires OPENROUTER_API_KEY)
bun run packages/cli/src/index.ts draft 1

# Copy to clipboard
bun run packages/cli/src/index.ts approve 1 --platform linkedin

Self-hosting

git clone https://github.com/FrankFMY/shiplog.git
cd shiplog
cp .env.example .env  # add your API keys
docker compose up -d  # PostgreSQL + Redis
bun install
bun run build

Features

  • Git-native context — reads commits, PRs, releases, deploys
  • Narrative extraction — clusters commits into stories, not summaries
  • 6 story types — bug hunt, feature ship, refactoring, architecture decision, open source, milestone
  • Narrative elements — detects tension, scale, surprise, decision, learning, impact
  • Voice learning — adapts to your style from every edit (confidence-based)
  • Anti-slop — 22 banned AI cliches, quality gate before every draft
  • Multi-platform — LinkedIn, Twitter, Telegram, Dev.to, VK
  • Smart thresholds — only posts about significant work
  • Anti-repetition — semantic dedup, topic diversity, format rotation
  • Privacy-first — never reads source code, only commit messages
  • CLI + Web — terminal for power users, web UI for everyone else
  • Team features — organizations, brand voice, approval workflows
  • Scheduling — BullMQ job queue, optimal posting times per platform

Architecture

Git → Ingest → Filter → Cluster → Score → Generate → Review → Publish
                                             ↑
                                          Memory
                                   (voice, history, rules)

Pipeline

Stage What it does
Ingest Parse .git/ — commits, branches, tags, numstat
Filter Skip merges, typos, bots, deps, security-sensitive (15+ patterns)
Cluster Group by PR → branch → file+time proximity (3-pass)
Score Heuristic scoring with 10+ modifiers
Classify 11 topic categories + 6 narrative element detectors
Compose LLM generation with platform-specific prompts, quality feedback loop
Publish Telegram Bot API, Dev.to REST API, clipboard fallback

Tech stack

Layer Technology
Language TypeScript (strict)
Runtime Bun
Backend Elysia
Frontend SvelteKit 5 + Tailwind v4
Database PostgreSQL 16 + Drizzle ORM
LLM OpenRouter (Gemini, Claude, GPT)
Queue BullMQ + Redis
Auth GitHub OAuth + httpOnly cookies
Payments Stripe
CI GitHub Actions
Deploy PM2 + Caddy

Monorepo structure

shiplog/
├── apps/
│   ├── api/          # Elysia backend (12 route groups)
│   └── web/          # SvelteKit frontend (7 pages)
├── packages/
│   ├── db/           # Drizzle schema (18 tables)
│   ├── core/         # Pipeline, LLM, types, utils
│   └── cli/          # CLI tool (6 commands)
├── .github/workflows/ci.yml
├── docker-compose.yml
├── ecosystem.config.cjs
├── deploy.sh
├── Caddyfile
└── turbo.json

CLI

shiplog init [path]              # Scan repo, find stories
shiplog stories [path]           # List post-worthy stories
shiplog draft <number>           # Generate platform-specific drafts
shiplog approve <number>         # Copy draft to clipboard
shiplog note "message"           # Add manual note/event
shiplog stats [path]             # Show pipeline statistics

API

Auth:       GET  /api/auth/github, /callback, /me  POST /logout
Repos:      GET/POST/DELETE /api/repos              POST /repos/:id/scan
Stories:    GET/PATCH /api/stories
Drafts:     GET/PATCH /api/drafts                   POST /drafts/:id/publish
Memory:     GET/PUT/DELETE /api/memory/:category/:key
Analytics:  GET  /api/analytics/overview, /best-posts, /schedule
Platforms:  GET  /api/platforms                      POST /telegram/connect
Pipeline:   POST /api/pipeline/run, /generate-drafts
Billing:    GET  /api/billing/plan                   POST /checkout, /portal
Teams:      GET/POST /api/teams                      POST /invite, /approvals
Webhooks:   POST /api/webhooks/github, /webhooks/stripe

Tests

cd packages/core && bunx vitest run   # 120 tests
cd apps/api && bunx vitest run         # 55 tests

Environment

See .env.example. Key variables:

DATABASE_URL=postgresql://...
REDIS_URL=redis://localhost:6379
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
OPENROUTER_API_KEY=               # required for drafts
TELEGRAM_BOT_TOKEN=               # optional
STRIPE_SECRET_KEY=                # optional

License

MIT. See LICENSE.

Author

Pryanishnikov Artyom Alekseevich

Top categories

Loading Svelte Themes