Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ host39 lets individuals and businesses register agent identities and publish A2A

```
GET /moonbakery.com/orders.json # domain identity
GET /personal/john@email.com/card.json # personal identity
GET /personal/john/card.json # personal identity
GET /.well-known/ai-catalog.json # all active cards
```

Expand Down Expand Up @@ -66,7 +66,7 @@ docker compose up --build

| Method | Path | Description |
|---|---|---|
| `GET` | `/personal/:email/:slug.json` | Fetch a personal agent card |
| `GET` | `/personal/:handle/:slug.json` | Fetch a personal agent card |
| `GET` | `/:domain/:slug.json` | Fetch a domain agent card |
| `GET` | `/.well-known/ai-catalog.json` | All active cards |
| `GET` | `/health` | Liveness probe |
Expand All @@ -75,7 +75,7 @@ docker compose up --build

## Identity types

**Personal (email)** — for individuals. Cards are served under `/personal/<email>/`.
**Personal (email)** — for individuals. Cards are served under `/personal/<handle>/`, where `<handle>` is the username chosen at registration.

**Domain (business)** — for orgs with a domain. Cards are served under `/<domain>/`. Only one user can register a given domain.

Expand Down
8 changes: 4 additions & 4 deletions web/src/app/dashboard/cards/[id]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -200,8 +200,8 @@ export default function EditCardPage() {
description="Update your agent card details."
>
<div className="max-w-lg space-y-6">
{/* Public URL banner */}
{isPublic ? (
{/* Public URL banner — only when the card is actually served publicly */}
{isPublic && status === "active" ? (
<div className="rounded-3xl border border-black/10 bg-white p-5 shadow-sm">
<p className="mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-slate-500">
Public URL
Expand All @@ -228,8 +228,8 @@ export default function EditCardPage() {
</div>
) : (
<div className="rounded-3xl border border-amber-200 bg-amber-50 p-5">
<p className="text-xs font-semibold uppercase tracking-[0.18em] text-amber-600">Private</p>
<p className="mt-1 text-sm text-amber-700">This card is not publicly accessible. Enable &ldquo;Public&rdquo; below to publish it.</p>
<p className="text-xs font-semibold uppercase tracking-[0.18em] text-amber-600">Not public</p>
<p className="mt-1 text-sm text-amber-700">This card is not publicly served. Set it to &ldquo;Public&rdquo; and &ldquo;Active&rdquo; below to publish it.</p>
</div>
)}

Expand Down
30 changes: 18 additions & 12 deletions web/src/app/dashboard/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -165,18 +165,24 @@ export default function DashboardPage() {
<p className="mt-1 text-sm text-slate-500 line-clamp-1">{card.description}</p>
)}

{/* Public URL */}
<div className="mt-3 flex items-center gap-2">
<code className="min-w-0 flex-1 truncate rounded-lg border border-black/5 bg-slate-50 px-3 py-1.5 font-mono text-xs text-slate-600">
{publicUrl}
</code>
<button
onClick={() => copyUrl(publicUrl, card.id)}
className="shrink-0 rounded-lg border border-black/10 bg-white px-3 py-1.5 text-xs text-slate-600 hover:bg-slate-50"
>
{copiedId === card.id ? "Copied!" : "Copy"}
</button>
</div>
{/* Public URL — only shown when the card is actually served publicly */}
{card.is_public && card.status === "active" ? (
<div className="mt-3 flex items-center gap-2">
<code className="min-w-0 flex-1 truncate rounded-lg border border-black/5 bg-slate-50 px-3 py-1.5 font-mono text-xs text-slate-600">
{publicUrl}
</code>
<button
onClick={() => copyUrl(publicUrl, card.id)}
className="shrink-0 rounded-lg border border-black/10 bg-white px-3 py-1.5 text-xs text-slate-600 hover:bg-slate-50"
>
{copiedId === card.id ? "Copied!" : "Copy"}
</button>
</div>
) : (
<p className="mt-3 text-xs text-slate-400">
Not publicly served — set Public and Active to publish.
</p>
)}
</div>

<Link
Expand Down
5 changes: 3 additions & 2 deletions web/src/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,11 @@ export default function HomePage() {
<div className="rounded-3xl border border-black/10 bg-white p-6 shadow-sm">
<p className="text-xs font-semibold uppercase tracking-[0.18em] text-slate-500">Personal / Email</p>
<code className="mt-3 block rounded-xl border border-black/5 bg-slate-50 p-4 font-mono text-sm text-slate-800">
/personal/john@hotmail.com/card.json
/personal/john/card.json
</code>
<p className="mt-3 text-sm text-slate-600">
Register with your email for personal agent cards — great for developers and individuals.
Register with your email and pick a username — your personal cards live at a clean
handle-based URL. Great for developers and individuals.
</p>
</div>
</div>
Expand Down