No description
  • Go 54.3%
  • TypeScript 33.3%
  • Python 6.2%
  • CSS 5.9%
Find a file
Sebastian Preisner 6c4092461f
All checks were successful
CI/CD Workflow / Test Backend (Go) (push) Successful in 2m3s
CI/CD Workflow / Test Frontend (Node.js) (push) Successful in 1m8s
CI/CD Workflow / E2E (Playwright + Go) (push) Successful in 5m21s
CI/CD Workflow / Build and Publish Docker Image (push) Successful in 1m11s
CI/CD Workflow / Trigger Dockhand Deployment (push) Successful in 1m21s
fix(ai-service): resolve job dispatch, JSON parsing, and config bugs
- Fix job_id field mismatch: Go sends 'job_id', workers looked for 'id'
- Fix Pydantic config: add openai_api_key/anthropic_api_key, allow extra env vars
- Fix router: read API keys from Settings object instead of os.getenv
- Fix _get_nested: return default when key resolves to None
- Fix voice_engine _parse_result: strip markdown fences, extract JSON from text
- Fix profile_analysis: use result.content instead of raw LLMResponse
- Add JSON format instruction to generation prompt template
2026-05-30 17:40:33 +02:00
.cursor/agents Add provider instance management and connect the dashboard. 2026-04-30 18:37:22 +02:00
.forgejo/workflows ci: cache Playwright browsers between E2E runs 2026-05-27 21:02:21 +02:00
.sisyphus/plans feat(recurring): add monthly_ordinal_weekday + template var expansion 2026-05-27 20:10:53 +02:00
ai-service fix(ai-service): resolve job dispatch, JSON parsing, and config bugs 2026-05-30 17:40:33 +02:00
api fix(api): add profile_analysis to isValidAIJobType 2026-05-30 01:12:22 +02:00
cmd/server Bootstrap backend scheduler service 2026-04-30 15:35:28 +02:00
db fix(db): migrate post_templates announcement columns on existing DBs 2026-05-28 00:15:33 +02:00
develop feat(admin): add repair endpoint for future posted posts 2026-05-13 09:53:40 +00:00
docs feat(frontend): add AI TypeScript types and OpenAPI skeleton 2026-05-29 23:59:36 +02:00
frontend fix: dispatch to /api/v1/jobs, fix profile analysis write-back, add job visibility 2026-05-30 01:38:59 +02:00
internal fix: dispatch to /api/v1/jobs, fix profile analysis write-back, add job visibility 2026-05-30 01:38:59 +02:00
locales feat(ui): move AI nav items into dedicated sidebar section 2026-05-30 00:53:34 +02:00
.dockerignore add platform provider tests for mastodon and bluesky 2026-04-30 22:35:23 +02:00
.env.example fix: dual API rate limits for SPA; dashboard schedule cards 2026-05-05 08:24:31 +02:00
.gitignore feat(ci): add Playwright E2E tests and Forgejo pipeline job 2026-05-14 23:07:38 +02:00
AGENT.md docs(agent): TDD workflow with security review + caveman mode 2026-05-27 17:45:54 +02:00
docker-compose-traefik.yml docker-compose-traefik.yml aktualisiert 2026-05-30 00:17:05 +02:00
docker-compose.yml feature/ai-addon (#2) 2026-05-29 22:44:51 +02:00
Dockerfile fix(ci): pin pnpm version and avoid corepack registry lookup 2026-05-20 23:13:46 +02:00
flake.lock fix: resolve syntax error in http.go after refactoring 2026-05-12 06:59:12 +00:00
flake.nix Add provider instance management and connect the dashboard. 2026-04-30 18:37:22 +02:00
go.mod fix(deps): update module modernc.org/sqlite to v1.50.1 2026-05-17 19:57:34 +00:00
go.sum fix(deps): update module modernc.org/sqlite to v1.50.1 2026-05-17 19:57:34 +00:00
goloom.code-workspace feat(recurring): add monthly_ordinal_weekday + template var expansion 2026-05-27 20:10:53 +02:00
Makefile feature/ai-addon (#2) 2026-05-29 22:44:51 +02:00
README.md docs: add Docker to Kubernetes homelab migration guide 2026-05-20 08:59:15 +02:00
redocly.yaml feat(docs): add professional OpenAPI and Redocly workflow 2026-05-07 13:04:02 +02:00
renovate.json chore(renovate): enable lockfile maintenance for frontend pnpm updates 2026-05-08 12:56:47 +02:00
ROADMAP.md docs: remove deprecated Unsplash/Giphy integrations 2026-05-05 08:42:58 +02:00

goloom

Lightweight social planning for teams and AI agents.

goloom is a self-hosted social media planning application built as one Go binary (API + web UI). It helps teams plan posts across multiple social accounts without the heavy infrastructure and pricing model of typical enterprise-first tools.

Why goloom exists

Most tools in this space are powerful but heavy: complex stacks, many paid tiers, and product scope optimized for large organizations.

goloom was created for one focused outcome:

  • plan posts across different social media accounts
  • collaborate across teams
  • keep operations simple
  • integrate cleanly with AI agents such as OpenClaw

Highlights

  • Single binary deployment: UI and API in one process.
  • SQLite by default: no external database needed.
  • PostgreSQL optional for larger deployments.
  • Team workspaces with member roles (owner, editor, viewer).
  • Scheduling, validation, per-account post versions, media library.
  • Built-in analytics for post and account metrics.
  • API-first architecture with bearer-token auth.
  • OIDC support for browser sign-in.
  • Mastodon onboarding can auto-register app credentials from instance URL.

Getting Started

1) Configure environment

cp .env.example .env

Set required values:

ENCRYPTION_KEY=replace-with-a-long-random-secret
BOOTSTRAP_ADMIN_TOKEN=replace-with-a-strong-bootstrap-token

2) Build and run

make build
./bin/goloom

Open http://localhost:8080.

3) Bootstrap first admin access

Use the bootstrap token in the UI Settings screen. After first login, create normal API tokens and rotate bootstrap secrets.

API Documentation

goloom API is designed for both developers and AI agents. Professional documentation stack uses OpenAPI + Redocly.

Base paths

  • Primary: /v1/...
  • Alias: /api/v1/... (same handlers, for tools expecting /api/v1)

Authentication

Use bearer tokens:

Authorization: Bearer <oidc-id-token-or-api-token>

API quickstart (curl)

Health and auth status:

curl -s http://localhost:8080/healthz
curl -s http://localhost:8080/v1/auth/status

List providers:

curl -s http://localhost:8080/v1/providers

Get current identity:

curl -s \
  -H "Authorization: Bearer $TOKEN" \
  http://localhost:8080/v1/me

Endpoint groups

  • Discovery: /healthz, /v1/providers, /v1/auth/status
  • Identity: /v1/me, /v1/me/api-tokens
  • Teams: /v1/teams, /v1/teams/{teamID}/members
  • Accounts: /v1/teams/{teamID}/accounts, OAuth start endpoints
  • Posts: /v1/teams/{teamID}/posts, validation, versions, cancel
  • Analytics: /v1/teams/{teamID}/analytics*, post analytics
  • Admin: /v1/admin/*, provider instance management

For complete route list, see api/http.go.

Build professional API docs

Lint OpenAPI spec:

make docs-api-lint

Build static API docs (Redoc HTML):

make docs-api-build

Generated output:

  • docs/api/dist/index.html
  • source spec: docs/api/openapi.yaml

AI agent integration notes (OpenClaw and similar)

  • Stable JSON responses across core endpoints.
  • Predictable resource paths with team-scoped objects.
  • Validation endpoint before scheduling: POST /v1/teams/{teamID}/posts/validate.
  • API token lifecycle endpoints for secure agent onboarding.

Provider Support

Mastodon

  • OAuth account connection
  • optional automatic app registration via instance URL
  • publishing and metrics (likes, reposts, replies)

Friendica

  • manual provider app credentials
  • publishing and Mastodon-compatible metrics

Bluesky

  • account connection with app password
  • publishing and metrics support

Deployment Options

Default (single binary + SQLite)

Best for low-ops environments and small-to-medium teams.

DATABASE_URL=file:./data/goloom.db

PostgreSQL

Use when you need external DB operations and scale patterns:

DATABASE_URL=postgres://postgres:postgres@localhost:5432/goloom?sslmode=disable

Production migration (Docker → Kubernetes)

If you run Goloom with Docker PostgreSQL and want to move to the homelab CNPG deployment, see docs/migrations/docker-to-kubernetes-homelab.md.

Docker

Build:

docker build -t goloom .

Run:

docker run --rm \
  -p 8080:8080 \
  -e ENCRYPTION_KEY=replace-with-a-long-random-secret \
  -e BOOTSTRAP_ADMIN_TOKEN=replace-with-a-strong-bootstrap-token \
  -v "$(pwd)/data:/app/data" \
  goloom

Development

nix develop
make run

Frontend-only dev server:

make frontend-dev

Recommended API-doc workflow in CI:

  • run make docs-api-lint on pull requests
  • optionally publish docs/api/dist/index.html as artifact/site

Configuration

Start from .env.example. Common keys:

  • APP_ENV, HTTP_ADDR, PUBLIC_BASE_URL
  • DATABASE_URL
  • ENCRYPTION_KEY
  • BOOTSTRAP_ADMIN_*
  • SCHEDULER_*
  • OIDC_*
  • MASTODON_*

Positioning vs heavy platforms

goloom is intentionally optimized for:

  • lower runtime overhead
  • easier self-hosting
  • practical team collaboration
  • API-first automation for agent workflows

If you need broad enterprise suites, many commercial upsell modules, or advanced campaign ecosystems, other products may fit better. If you need a focused scheduler with strong API ergonomics and simple ops, goloom is the target shape.

Security notes

  • Provider access tokens are encrypted at rest.
  • API tokens are stored as hashes.
  • Set strong ENCRYPTION_KEY and rotate bootstrap/admin secrets after setup.

License

See repository license file.