fix: use subdomain format {space}.rspace.online instead of path-based routing

Space creation popup slug field now shows input followed by .rspace.online
suffix instead of rspace.online/ prefix. Also fixes rtasks notification
link and browser extension help text.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-04-02 15:16:02 -07:00
parent 52e2f77383
commit 2c3f8568a3
3 changed files with 8 additions and 8 deletions

View File

@ -44,7 +44,7 @@
<div class="field">
<label for="slug">Space slug</label>
<input type="text" id="slug" placeholder="my-space" />
<div class="help">Your space name in the URL (e.g. "my-space" from rspace.online/my-space)</div>
<div class="help">Your space name in the URL (e.g. "my-space" from my-space.rspace.online)</div>
</div>
</div>

View File

@ -353,7 +353,7 @@ routes.post("/api/spaces/:slug/tasks", async (c) => {
// Notify space members about the new task
import('../rinbox/agent-notify').then(({ sendSpaceNotification }) => {
sendSpaceNotification(slug, `New Task: ${title.trim()}`,
`<h3>${title.trim()}</h3>${description ? `<p>${description}</p>` : ''}<p><strong>Priority:</strong> ${priority || 'MEDIUM'}</p><p><a href="https://rspace.online/${slug}/rtasks">View in rTasks</a></p>`
`<h3>${title.trim()}</h3>${description ? `<p>${description}</p>` : ''}<p><strong>Priority:</strong> ${priority || 'MEDIUM'}</p><p><a href="https://${slug}.rspace.online/rtasks">View in rTasks</a></p>`
).catch(() => {});
}).catch(() => {});

View File

@ -1335,8 +1335,8 @@ export class RStackSpaceSwitcher extends HTMLElement {
<label class="cs-label">Slug</label>
<div class="cs-slug-row">
<span class="cs-slug-prefix">rspace.online/</span>
<input class="cs-input cs-slug-input" id="cs-slug" value="${slug}" maxlength="40" />
<span class="cs-slug-suffix">.rspace.online</span>
</div>
<div class="cs-slug-status" id="cs-slug-status"></div>
@ -2265,13 +2265,13 @@ const CREATE_SPACE_MODAL_STYLES = `
/* Slug row */
.cs-slug-row { display: flex; align-items: center; gap: 0; }
.cs-slug-prefix {
padding: 9px 0 9px 12px; background: var(--rs-bg-hover, #171717);
border: 1px solid var(--rs-input-border, #404040); border-right: none;
border-radius: 8px 0 0 8px; font-size: 0.8rem; color: var(--rs-text-muted, #525252);
.cs-slug-input { border-radius: 8px 0 0 8px !important; }
.cs-slug-suffix {
padding: 9px 12px 9px 0; background: var(--rs-bg-hover, #171717);
border: 1px solid var(--rs-input-border, #404040); border-left: none;
border-radius: 0 8px 8px 0; font-size: 0.8rem; color: var(--rs-text-muted, #525252);
white-space: nowrap;
}
.cs-slug-input { border-radius: 0 8px 8px 0 !important; }
.cs-slug-status { font-size: 0.72rem; min-height: 1.1em; margin-top: 3px; }
.cs-slug-available { color: #34d399; }