About this Portal
A self-service dashboard that gives developers real-time visibility into all deployed applications — no infrastructure access required.
What is it?
The Rydoo Shipyard Portal aggregates data from the deployment platform and GitHub, presenting it in a single, easy-to-use dashboard. Think of it as a read-friendly overview of every deployed service in the organisation.
Features
Dashboard Overview
- App cards with status, domain links, and GitHub repo links
- Server metrics (CPU, memory, disk, network)
- Search and filter by status or app-type
- Dark / light mode with OS preference detection
Health Monitoring
- Green — HTTP health check passed
- Blue — Running background service (no web UI)
- Red — Deployment error or app in error state
- Gray — Health check in progress
Deployment Insights
- Recent deployments with status and build duration
- Build error messages shown inline — see exactly why a build failed
- Real-time build logs streamed via WebSocket — follow builds as they happen
- Build queue with pending / running status indicators
- One-click Redeploy button from the detail panel
- Deploy from a different branch on any existing app
Branch Deploys
- Deploy any feature branch as a temporary application
- Pick a repo → branch → manifest (monorepo-aware)
- Full monorepo support — detects manifests at any depth using Git Trees API with Code Search fallback
- Set a custom domain or use the auto-suggested one
- Ephemeral apps are automatically deleted when the branch is removed
- Manual delete available via the detail panel
Preview Environments
- Active PR preview environments listed on the main dashboard
- Preview URLs, PR links, branch names, and status
- Preview URLs shown on each app card
- Optional PR label gating — only deploy previews for PRs with specific labels (configured via
preview.labelsin ship.yaml)
Developer Convenience
- Pin / favourite apps to the top (saved in your browser)
- Toast notifications when an app's status changes
- Environment variable viewer (names only, values are masked)
- Manifest metadata badges (app-type, build type, preview count)
Security
- Entra ID (Azure AD) single sign-on — only org members can access
- SSO for deployed apps — add
auth.sso: trueto ship.yaml to protect any app with Entra ID via Traefik ForwardAuth - Secure, httpOnly session cookies with 8-hour expiry
- No secrets or sensitive values exposed to the browser
FAQ
What does "manifest not found" mean?
The app's GitHub repo doesn't have a ship.yaml file,
or the GitHub token isn't configured. Without a manifest, the portal can't
display metadata like app-type or environment variable info.
What does "app-type missing" mean?
The repo has a ship.yaml but it doesn't include an
app-type field. Ask the repo owner to add it (e.g.
app-type: Service or app-type: Tool).
Why is the health dot blue instead of green?
Blue means the app is deployed and running, but it doesn't serve HTTP traffic (e.g. a Slack bot, a background worker, or a cron job). This is normal — the app is healthy, it just doesn't have a web UI to health-check.
How often does the data refresh?
The dashboard auto-refreshes every 2 minutes. Health checks are cached for 2 minutes. You can also click the Refresh button for an immediate update.
How do I redeploy an application?
Click on the app card to open the detail panel, then click the Redeploy button. This triggers a new deployment using the latest code from the app's configured branch. You can also pick a different branch from the dropdown to do a one-off deploy.
How do I deploy a feature branch?
Click Branch Deploy in the top toolbar. Select a repository, branch, and (for monorepos) a manifest file. Enter or edit the suggested domain, then click Deploy Branch. The portal creates a new application linked to your branch. When the branch is deleted (e.g. after merging the PR), the app is automatically cleaned up.
Why did my build fail?
Open the app's detail panel and scroll to Recent Deployments. Failed deployments show the error message in a red box. Common causes include Dockerfile syntax errors, missing dependencies, or failing health checks.
What is a preview environment?
When preview deployments are enabled for a repo, the platform automatically creates an isolated environment for each pull request. This lets you test changes on a unique URL before merging. Preview environments appear in the "Active Preview Environments" section on the dashboard and on each app card.
Can I see environment variable values?
For security, only environment variable names are shown — values are always masked. If you need to update a value, contact the Tech team.
How do I configure my app's URL?
There are two ways to set the public hostname in
ship.yaml:
Option A (recommended): Use appname +
optional domain. The hostname is computed as
{appname}.{domain}. The domain defaults to
rydoo.cloud, so appname: mailingservice-ui
produces mailingservice-ui.rydoo.cloud.
Option B (legacy): Use url to specify the
full hostname directly, e.g.
url: mailingservice-ui.rydoo.cloud.
The same applies to preview domains: set
preview.domain: preview.rydoo.cloud (auto-computes the
wildcard as *.preview.rydoo.cloud) or use the legacy
preview.wildcard field.
How do I add my app to the portal?
The portal automatically shows all deployed apps. To add metadata
(app-type, description, environment info), create a
ship.yaml in the root of your repo. See the
PlatformTools repo
for the schema and examples.
Tip: Open Copilot Chat in VS Code and type
/create-ship-manifest — it will inspect your repo and generate
a valid manifest for you. Copy the prompt file from
.github/prompts/ in the PlatformTools repo to your own repo
to have it available locally.
Who has access?
All Rydoo org members can log in via Entra ID (Microsoft SSO). Everyone can view apps, trigger redeployments, and create branch deploys. Configuration changes (env vars, domains, build settings) are managed through the manifest system.
How do I protect my app with SSO?
Add auth: { sso: true } to your ship.yaml.
The sync job configures Traefik's ForwardAuth middleware on your app,
which delegates authentication to the platform portal's Entra ID login.
Users must sign in through the portal before they can access your app.
The portal must be deployed with ENTRA_* and PORTAL_BASE_URL env vars.
Tech Stack
| Frontend | Vanilla JavaScript SPA, responsive CSS |
| Backend | Node.js 20 + Express 5 |
| Auth | Entra ID SSO (OIDC via MSAL) |
| Hosting | Docker, auto-deploy on push to main |
| Data | Real-time from platform API + GitHub API |