Railway

Deploy It's a Plan

Self-hosted project tracker with boards, cycles and AI agents

Deploy It's a Plan

/var/lib/postgresql/data

Just deployed

Just deployed

Just deployed

Just deployed

attachments

Bucket

Just deployed

Deploy and Host It's a Plan on Railway

It's a Plan is a self-hosted project tracker. It holds projects, issues, boards, cycles and initiatives, and every project defines its own columns, issue types, labels and custom fields. Dashboards, webhooks, a Telegram bot, an MCP server and AI agents that work on issues are included. The source is AGPL-3.0.

About Hosting It's a Plan

The stack is four services built from one repository, plus a database and a bucket. api is an Elysia server on Bun that applies its own database migrations on startup and serves the REST API, the MCP endpoint and the auth handler. web is a Next.js app rendered on the server; the API origin is compiled into its bundle, so it rebuilds whenever that origin changes. worker delivers webhooks and notifications and runs agent schedules. bot runs Telegram long polling and stays at a single replica. Postgres holds all data and the bucket holds issue attachments. Secrets are generated at deploy time — you supply two hostnames and nothing else.

Common Use Cases

  • Teams that want an issue tracker on their own infrastructure, with data in a database they control
  • Instances where AI agents pick up issues and work through them under human review
  • Projects that drive their tracker from code, through the MCP server or the REST API

Dependencies for It's a Plan Hosting

  • PostgreSQL for all application data
  • An S3-compatible bucket for issue attachments
  • A domain you control, with two hostnames pointing at this project
  • Source: https://github.com/croffasia/itsaplan (AGPL-3.0)

Implementation Details

A domain of your own is required. Railway's generated *.up.railway.app hostnames are on the Public Suffix List, so the browser treats each service as a separate site and rejects the session cookie: sign-in returns 200 and then bounces straight back to the login page. Two hostnames under one registrable domain fix this, because the cookie is then issued on their shared parent.

Deploying takes three steps:

  1. Enter API_DOMAIN and APP_DOMAIN, for example api.example.com and app.example.com.
  2. After the deploy, add API_DOMAIN as a custom domain on the api service and APP_DOMAIN on the web service, then create the CNAME records Railway gives you. Keep them unproxied.
  3. Open the web app and register. The first account becomes the instance administrator.

SMTP, AI provider keys and the Telegram bot token are configured in the interface after sign-in, not through environment variables.

Why Deploy It's a Plan on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying It's a Plan on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.


Template Content

attachments

Bucket

More templates in this category

View Template
Rocky Linux
[Jul'26] Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀

codestorm
41
View Template
Foundry Virtual Tabletop
A Self-Hosted & Modern Roleplaying Platform

Lucas
71
View Template
Letta Code Remote
Run a Letta Code agent 24/7. No inbound ports, just deploy.

Letta
51