The repo had no way to ship setup docs with a template (there was a single placeholder blueprints/ackee/instructions.md that nothing rendered). This PR implements the mechanism end to end:
Templates can now include an optional blueprints/<id>/instructions.md.
The template browser fetches it together with docker-compose.yml / template.toml and shows it as a new Instructions tab in the template dialog (it becomes the default tab when present). Rendering uses a small dependency-free markdown component (app/src/components/ui/markdown.tsx), so no new packages or lockfile changes.
Missing files are handled safely: the SPA fallback on Cloudflare Pages returns index.html with a 200 for non-existent paths, so the fetch guards on the text/html content type (verified against vite preview: real files serve as text/markdown, missing ones as text/html).
The ackee placeholder ("We don't have nothing to show here....") was removed so it does not surface as a junk tab.
blueprints/supabase/instructions.md covers deploying, logging in to Studio (main domain routes to Kong, basic auth with DASHBOARD_USERNAME/DASHBOARD_PASSWORD), where to find ANON_KEY/SERVICE_ROLE_KEY, and recommended env review (SITE_URL, SMTP_*).
It also documents the invalid_password pitfall from #816: the Postgres data directory and the internal Supabase roles are initialized with the firstPOSTGRES_PASSWORD (the roles init script only runs on first boot), so changing the env var later does not change the database. The doc gives both fixes: ALTER USER ... for all affected roles inside the db container (keeps data), or deleting files/volumes/db/data and redeploying (destroys data).
blueprints/triggerdotdev/instructions.md explains first login: no email transport is configured by default, so the magic link is printed to the logs of the webapp container (Dokploy: service -> Logs -> webapp, search for magic). It also documents optional email delivery (EMAIL_TRANSPORT=smtp/resend with the related vars), TRIGGER_PROTOCOL=https for HTTPS domains, and restricting signup with WHITELISTED_EMAILS.
Verification
pnpm build in app/ passes (tsc + vite build, 476 templates validated).
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/Dokploy/templates/pull/1015
**Author:** [@Siumauricio](https://github.com/Siumauricio)
**Created:** 7/14/2026
**Status:** ✅ Merged
**Merged:** 7/14/2026
**Merged by:** [@Siumauricio](https://github.com/Siumauricio)
**Base:** `canary` ← **Head:** `docs/template-instructions`
---
### 📝 Commits (1)
- [`03a60bb`](https://github.com/Dokploy/templates/commit/03a60bb417fcbd6030dee00d2c3f4eca3c8d3dea) docs: add per-template setup instructions (supabase, trigger.dev)
### 📊 Changes
**6 files changed** (+349 additions, -11 deletions)
<details>
<summary>View changed files</summary>
📝 `app/src/components/TemplateDialog.tsx` (+36 -1)
📝 `app/src/components/TemplateGrid.tsx` (+21 -6)
➕ `app/src/components/ui/markdown.tsx` (+177 -0)
➖ `blueprints/ackee/instructions.md` (+0 -4)
➕ `blueprints/supabase/instructions.md` (+61 -0)
➕ `blueprints/triggerdotdev/instructions.md` (+54 -0)
</details>
### 📄 Description
## What this PR does
This PR adds a per-template setup instructions mechanism and uses it to document the Supabase and Trigger.dev templates.
### Instructions mechanism (#107)
The repo had no way to ship setup docs with a template (there was a single placeholder `blueprints/ackee/instructions.md` that nothing rendered). This PR implements the mechanism end to end:
- Templates can now include an optional `blueprints/<id>/instructions.md`.
- The template browser fetches it together with `docker-compose.yml` / `template.toml` and shows it as a new **Instructions** tab in the template dialog (it becomes the default tab when present). Rendering uses a small dependency-free markdown component (`app/src/components/ui/markdown.tsx`), so no new packages or lockfile changes.
- Missing files are handled safely: the SPA fallback on Cloudflare Pages returns `index.html` with a 200 for non-existent paths, so the fetch guards on the `text/html` content type (verified against `vite preview`: real files serve as `text/markdown`, missing ones as `text/html`).
- The ackee placeholder ("We don't have nothing to show here....") was removed so it does not surface as a junk tab.
### Supabase instructions (#80, #816)
`blueprints/supabase/instructions.md` covers deploying, logging in to Studio (main domain routes to Kong, basic auth with `DASHBOARD_USERNAME`/`DASHBOARD_PASSWORD`), where to find `ANON_KEY`/`SERVICE_ROLE_KEY`, and recommended env review (`SITE_URL`, `SMTP_*`).
It also documents the `invalid_password` pitfall from #816: the Postgres data directory and the internal Supabase roles are initialized with the **first** `POSTGRES_PASSWORD` (the roles init script only runs on first boot), so changing the env var later does not change the database. The doc gives both fixes: `ALTER USER ...` for all affected roles inside the `db` container (keeps data), or deleting `files/volumes/db/data` and redeploying (destroys data).
### Trigger.dev instructions (#106)
`blueprints/triggerdotdev/instructions.md` explains first login: no email transport is configured by default, so the magic link is printed to the logs of the `webapp` container (Dokploy: service -> Logs -> `webapp`, search for `magic`). It also documents optional email delivery (`EMAIL_TRANSPORT=smtp`/`resend` with the related vars), `TRIGGER_PROTOCOL=https` for HTTPS domains, and restricting signup with `WHITELISTED_EMAILS`.
### Verification
- `pnpm build` in `app/` passes (tsc + vite build, 476 templates validated).
- Served files smoke-tested through `vite preview`.
Closes #80
Closes #816
Closes #106
Closes #107
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/Dokploy/templates/pull/1015
Author: @Siumauricio
Created: 7/14/2026
Status: ✅ Merged
Merged: 7/14/2026
Merged by: @Siumauricio
Base:
canary← Head:docs/template-instructions📝 Commits (1)
03a60bbdocs: add per-template setup instructions (supabase, trigger.dev)📊 Changes
6 files changed (+349 additions, -11 deletions)
View changed files
📝
app/src/components/TemplateDialog.tsx(+36 -1)📝
app/src/components/TemplateGrid.tsx(+21 -6)➕
app/src/components/ui/markdown.tsx(+177 -0)➖
blueprints/ackee/instructions.md(+0 -4)➕
blueprints/supabase/instructions.md(+61 -0)➕
blueprints/triggerdotdev/instructions.md(+54 -0)📄 Description
What this PR does
This PR adds a per-template setup instructions mechanism and uses it to document the Supabase and Trigger.dev templates.
Instructions mechanism (#107)
The repo had no way to ship setup docs with a template (there was a single placeholder
blueprints/ackee/instructions.mdthat nothing rendered). This PR implements the mechanism end to end:blueprints/<id>/instructions.md.docker-compose.yml/template.tomland shows it as a new Instructions tab in the template dialog (it becomes the default tab when present). Rendering uses a small dependency-free markdown component (app/src/components/ui/markdown.tsx), so no new packages or lockfile changes.index.htmlwith a 200 for non-existent paths, so the fetch guards on thetext/htmlcontent type (verified againstvite preview: real files serve astext/markdown, missing ones astext/html).Supabase instructions (#80, #816)
blueprints/supabase/instructions.mdcovers deploying, logging in to Studio (main domain routes to Kong, basic auth withDASHBOARD_USERNAME/DASHBOARD_PASSWORD), where to findANON_KEY/SERVICE_ROLE_KEY, and recommended env review (SITE_URL,SMTP_*).It also documents the
invalid_passwordpitfall from #816: the Postgres data directory and the internal Supabase roles are initialized with the firstPOSTGRES_PASSWORD(the roles init script only runs on first boot), so changing the env var later does not change the database. The doc gives both fixes:ALTER USER ...for all affected roles inside thedbcontainer (keeps data), or deletingfiles/volumes/db/dataand redeploying (destroys data).Trigger.dev instructions (#106)
blueprints/triggerdotdev/instructions.mdexplains first login: no email transport is configured by default, so the magic link is printed to the logs of thewebappcontainer (Dokploy: service -> Logs ->webapp, search formagic). It also documents optional email delivery (EMAIL_TRANSPORT=smtp/resendwith the related vars),TRIGGER_PROTOCOL=httpsfor HTTPS domains, and restricting signup withWHITELISTED_EMAILS.Verification
pnpm buildinapp/passes (tsc + vite build, 476 templates validated).vite preview.Closes #80
Closes #816
Closes #106
Closes #107
🤖 Generated with Claude Code
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.