Skip to content

Storyteller: new service - #387

Open
jackspiering wants to merge 3 commits into
mainfrom
t3code/add-storyteller-service
Open

jackspiering wants to merge 3 commits into
mainfrom
t3code/add-storyteller-service

Conversation

@jackspiering

@jackspiering jackspiering commented Oct 13, 2026 •

Copy link
Copy Markdown
Collaborator

Description

Adds Storyteller, a self-hosted platform for creating and reading ebooks with synced narration, behind a Tailscale sidecar.

  • Maintained. The GitLab project is not archived, and its latest activity and releases are from this week. The image is the one the maintainer publishes and documents (registry.gitlab.com/storyteller-platform/storyteller).
  • Tag. latest, the tag the upstream docs recommend. At the time of the test it pointed to the stable release web-v2.14.23, the same digest that I tested, and the newer web-v3.0.0-beta.* tags are betas.
  • Sidecar needed. The image ships no tailscale or tailscaled (which tailscale tailscaled finds neither), so it cannot join a Tailnet by itself.
  • Secret. STORYTELLER_SECRET_KEY is required (${STORYTELLER_SECRET_KEY:?...}) and empty in .env, with a # Required: comment. The issue's compose file uses a secret file, and upstream accepts the environment variable as well.
  • Health check. The image defines none, so the stack calls the web interface with wget, which the image ships.
  • PUID and PGID are passed because the image's entrypoint reads them. The image refuses to start with user: set.

Related Issues

Verification

  • docker compose config --quiet from services/storyteller, with a dummy value for the required variable
  • The stack started, Tailscale is healthy, and the service is reachable through the Tailnet. Serve was tested from inside the container namespace, because test nodes cannot be reached from the host: https://<node>.<tailnet>.ts.net/ answers 307 to /init, and /login after setup.
  • The main function of the service works, and its data survives a restart. I created the first account on /init, logged in through /api/v2/token, created a collection, and read it back. After docker compose down and up -d, the collection and the login were still there, and both containers were healthy. The app health check also passed with docker exec.
  • rumdl check --config .markdownlint.yml . on the whole repository (0.2.78, the pinned version), and git diff --check origin/main

Not run: the optional ports block (LAN access) and the GPU image variants. The stack does not enable either.

Impact on existing users

  • None.

Checklist

  • I have performed a self-review of my code and followed the templates structure.
  • I did not commit a working auth key, password, token, or other credential.
  • The service README uses the headings of the template, in the same order, and is up to date.
  • I added, removed, or renamed the service in the root README.md, in alphabetical order, or this PR does not change the list of services.

Additional Context

  • docker compose restart on this stack (and any stack that uses network_mode: service:tailscale) can leave the application stopped with cannot join network namespace of a non running container, because the application starts while the sidecar restarts. docker compose up -d brings it back. This is not specific to Storyteller and I did not change it here.

@jackspiering jackspiering added the new service request to add a new service label Oct 13, 2026
@jackspiering jackspiering self-assigned this Oct 13, 2026
@jackspiering
jackspiering requested a review from crypt0rr October 13, 2026 21:05
@jackspiering
jackspiering marked this pull request as ready for review October 13, 2026 21:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new service request to add a new service

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🏗️ New Service: storyteller

1 participant