makeplane / makeplane/helm-charts

plane-app-admin backend doesn't handle /god-mode without trailing slash as sent by the Get started button

Open
#274 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Go Template
Stars
23
Forks
31
Avg merge
1d 13h
Merged PRs (30d)
13

Description

Summary

When following the README's documented "Custom Ingress Routes" pattern (routing /god-mode/, /spaces/, /live/ etc. to their respective backend services), requests to these paths without a trailing slash don't 404 or redirect — they silently return the main landing page's content with a 200, because the frontend's own in-app links to these routes omit the trailing slash.

Environment: K3s, Traefik ingress controller, standard networking.k8s.io/v1 Ingress (chart's own ingress: templates disabled, custom Ingress written per the README's routing table).


Details

Per the README, /god-mode/, /spaces/, and /live/ route to the plane-app-admin, plane-app-space, and plane-app-live services respectively — separate Next.js apps from the main plane-app-web frontend.

The frontend's own in-app link to these routes (e.g. the "Get Started" button shown on first load, which links to /god-mode) omits the trailing slash. When that bare path is requested:

  • With pathType: Prefix on the Ingress rule, Traefik correctly forwards the request to the plane-app-admin backend.
  • That backend doesn't have a route/static asset at the exact bare path (only at /god-mode/), and instead of a 404 or redirect, it returns a 200 with content identical to the main landing page (plane-app-web's /).

Reproduction

curl -s https://<host>/god-mode  | md5sum   # identical hash to below
curl -s https://<host>/          | md5sum   # landing page

curl -s https://<host>/god-mode/ | md5sum   # different hash — correct admin content

Impact

Clicking "Get Started" from the landing page silently fails — the browser loads what looks like the same landing page again, with no visible error apart from a couple of minified React hydration errors (#418/#423) in the console (presumably from the mismatched content being hydrated against route state that expected the admin app). Since this is triggered by the frontend's own generated link (not a manually-typed URL), this will affect any self-hoster following the documented custom-Ingress pattern, not just unusual setups — anyone landing on a fresh instance hits this on their very first click.

Workaround we used

Added a Traefik redirectRegex Middleware to force a trailing slash onto /god-mode, /spaces, and /live before the request reaches the backend.

Suggested fix

Either:
(a) the chart ships this redirect Middleware itself as part of its templates when custom-Ingress values are used, or
(b) the affected Next.js apps (admin, space, live) handle the no-trailing-slash case themselves (redirect or correct route match) rather than falling back to serving unrelated content with a 200.

Given the frontend's own generated links omit the trailing slash, (b) feels like the more robust long-term fix, but (a) would be a smaller, chart-only change if that's preferred.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the README's Custom Ingress Routes table and the chart's ingress templates, then reproduce the behavior with the three curl requests for /god-mode, /god-mode/, and /. Trace how the admin, space, and live services handle the bare paths. Done means the documented routing and the frontend's generated links reach the intended app without serving the landing page incorrectly.

Written by the indexing model from the issue text.

Assessment

Tech stack
helm, nextjs
Domain
devops, infrastructure
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.