Onboarding

Let your agent set it up for you.

Letwrites runs on your own infrastructure. The fastest way in: copy the prompt below, paste it to your AI coding agent, and it handles the deploy, your admin account, and moving your Confluence content over. Prefer to do it by hand? The same steps are right below.

Paste this to your AI agent
Set up Letwrites for me. It is an open source, self hosted wiki that replaces Confluence.

1. Clone the repo: https://github.com/Lynne-ang/letwrites
2. Ask me where to run it (a Linux server with Docker, or my Kubernetes cluster)
   and ask for my domain, for example docs.mycompany.com.
3. Deploy it there with HTTPS:
     Docker  → use wiki/deploy: copy .env.example to .env, set my domain, run ./deploy.sh
     K8s     → install the Helm chart at wiki/deploy/helm/letwrites with my domain
               and my ingress class.
4. Create my admin account with the email and password I give you,
   and confirm public sign up is turned off.
5. Help me export my Confluence space, then run the migration image
   ghcr.io/lynne-ang/letwrites-migrate to import it. Show me the integrity report
   so I can confirm every page and image came across.

Check in with me at each step and wait for my answer when you need a decision.

Works with Claude Code, Cursor, or any agent that can run shell commands. It will ask you for your domain and the admin login you want, so nothing is preset for you.

Step 1

Get it running, where you want it.

Letwrites is a wiki, a database, and the access engine, fronted by your own HTTPS. It keeps state, so pick the home that fits how you operate. Your data never leaves it.

Easiest

A server with Docker

Any VM or on-prem box you control

One command brings up the whole stack and fetches a real certificate. Best for a single box.

# point your domain at the box, then cd letwrites/wiki/deploy cp .env.example .env ./deploy.sh
Private / air-gapped

Kubernetes (Helm)

Your cluster, your ingress

A Helm chart runs everything and exposes only the wiki through your ingress. The engine stays internal.

helm install letwrites \ wiki/deploy/helm/letwrites \ --set domain=your-domain.com \ --set ingress.className=nginx
Customize

Pull the images

Pin a version, run anywhere

Prebuilt images, no build step. Mirror them into a private registry for an air-gapped install.

# on GitHub Container Registry ghcr.io/lynne-ang/ letwrites-bookstack letwrites-engine letwrites-migrate
Swap in your own domain. Everywhere you see your-domain.com, use your real one, for example docs.mycompany.com. Serverless platforms like Cloud Run are not a fit for the wiki because it keeps state on disk.
Step 2

Your first sign-in, your admin account.

There is no public sign up. The first account is the administrator, and you set it. From there your admin brings the team in and decides who sees what.

1

Claim the owner account

On first launch your setup hands you a one time login. Open the wiki, sign in, and set your own email and password right away. That account is now your admin.

2

Invite your team

Public registration stays off, so nobody can sign themselves up. Your admin invites people and gives each one a role. Add email settings if you want the invites to go out by mail.

3

Roles become the rule

The roles you set here are exactly what the access engine enforces later, so an AI agent only ever returns what the person asking is allowed to see.

Step 3

Bring your Confluence content over.

Three ways out of Confluence. Pick by who is running it and whether you have admin. Every run ends with a report that checks your source against what landed, so loss is never a surprise.

Whole space

HTML space export

Space admin

Export the space to a zip, point Letwrites at it. The page tree and every attachment come across at once.

docker run --rm -v "$PWD:/work" \ ghcr.io/lynne-ang/letwrites-migrate \ --from-confluence-export /work/space
No admin needed

Export to Word

Any user

Anyone can export a page to Word. Images travel inside the file and Letwrites pulls them back out. One page per file.

docker run --rm -v "$PWD:/work" \ ghcr.io/lynne-ang/letwrites-migrate \ --from-confluence-word /work/page.doc
Automated

Connect the API

Authorize once

Approve a Confluence app a single time, then Letwrites pulls text, structure, and images on its own.

# approve in the browser, then npm run oauth -- --authorize npm run migrate -- --space ENG
One token first. As the admin, create an API token in the wiki and pass it to the migration so it can write. The full reference, including the integrity report and air-gapped notes, lives in wiki/deploy/DEPLOY.md.
Step 4

Connect your SSO, and harden for production.

The wiki is unmodified BookStack, so its own official docs are the source of truth for login and hardening. Hand the prompt below to your agent: it reads those docs and applies them, with the Letwrites-specific gotchas already baked in so you skip the traps that bite first-time installs.

Paste this to your AI agent
Harden my Letwrites for production and connect our SSO. It is self hosted BookStack,
so use BookStack's own official docs, plus the Letwrites notes below.

1. Read these official BookStack docs and apply them to my deploy:
   Requirements + install   https://www.bookstackapp.com/docs/admin/installation/
   Security hardening       https://www.bookstackapp.com/docs/admin/security/
   LDAP / Active Directory  https://www.bookstackapp.com/docs/admin/ldap-auth/
   SAML 2.0 (Okta, Azure)   https://www.bookstackapp.com/docs/admin/saml2-auth/
2. Put SSO and mail settings in wiki/deploy/bookstack.env (NOT .env), then
   run: docker compose up -d bookstack. The file wiki/deploy/bookstack.env.example
   lists every key with comments.
3. Apply these Letwrites specifics, they are what trip people up:
   - Google Secure LDAP and most modern LDAPS are v3 only: set LDAP_VERSION=3,
     or the bind fails with "ldap_bind(): Protocol error".
   - With a client cert: BookStack runs as uid 1000 (PUID). The cert folder and
     files under data/config/ldap-tls MUST be owned by and readable by uid 1000,
     or login fails with "path could not be resolved". chown -R 1000:1000 them.
   - Keep REGISTRATION_ENABLED=false (no public signup); invite users as admin.
   - HTTPS is automatic via Caddy once DNS points at the box and 80/443 are open.
4. Verify: I can sign in through SSO, and
   curl https://MY_DOMAIN/letwrites/health returns {"ok":true}.
   Then confirm a nightly backup is scheduled (see wiki/deploy/BACKUP.md).

Check in with me at each step and wait for my answer when you need a decision.

The links go to BookStack's own documentation, so the steps stay correct as BookStack evolves. Prefer to read them yourself? Open the four docs directly: install, security, LDAP, SAML 2.0.