What's New
This release is the one that makes Road To usable on paper, inside a consulting team, and on a self-hosted box: print a project, hide internal work from the client, plug in the AI provider you already pay for, and stand up a single-org instance without a cloud account.
Features
- Printable PDF export: print a project or a template on A4 (always light), with checkboxes, handwriting space (compact or large), localized FR/EN dates, and a QR code back to the live page. Available from the project and template menus.
- Private task comments: comments can be visible to everyone, to the internal team only, or to you alone. Internal comments stay out of the client view.
- Private sections and tasks: mark a section or a task as internal so the client never sees it. Comments on those items stay internal as well.
- Multi-provider AI: besides Gemini, organizations can use OpenRouter, Mistral, or a custom OpenAI-compatible endpoint (Ollama, xAI/Grok, and similar). Pick a provider, list models, and keep several keys without switching the active one by accident.
- Self-host license like n8n: Community boots without a key. An optional registered key and a paid Pro key bind to the instance (anti-clone). Wrapped JWTs are stripped so a copied token still activates cleanly.
- White-label (self-host Pro): instance name and logo on the chrome, emails, and pricing. Org switcher and Stripe billing stay out of the self-host UI; unlocks go to Licence.
- First-run self-host setup: an uninitialized instance opens a wizard that creates the owner, the single organization, and instance settings in one shot. Public signup and extra orgs are locked afterwards.
- Update check for self-host owners: the instance compares its version to GitHub Releases and shows a banner plus
/admin/system when an update is available. No auto-update — Docker Compose and Coolify steps are documented.
Improvements
- SMTP for self-hosting fails loudly when neither SMTP nor Resend is configured, and send errors are caught the same way on both transports.
- Custom AI hosts list models instead of a free-text model id, with clearer errors (auth, network, missing encryption secret).
Administration
InstanceSettings singleton (PostgreSQL-enforced id and init state) and owner helpers for the self-host single-org contract (#119, #107, #108, part of #98).
- Atomic owner + org + settings bootstrap; Better Auth signup and org-create closed after init (#120, #109, #110, #111).
/admin/system update check: GitHub releases/latest, 12h cache in AppSetting, ETag/304, ROADTO_UPDATE_CHECK_DISABLED (#121, #104). Owner-only; cloud has no banner/page.
- Community template / license bind: Instance ID +
/api/license/activate call-home (#99, #93, #94, #92).
Infrastructure
- Vercel Functions pinned to Paris
cdg1 to sit next to the FR Postgres (#90, #89).
- Docker image build sets
VERCEL=1 so Prisma prerender does not blow up in the container (#99).
pnpm dev:selfhosted on :3001 with ROADTO_SELFHOSTED.
- SMTP hardening + self-host/Docker docs + Playwright coverage (#97, #77).
- Vitest acceptance suites for PDF export, comment/section channels, AI providers/slots, license, instance settings, setup, update-check.