Skip to content
Closed
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
Binary file added public/appicons/io.pilot.generallegal.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions scripts/gen-apps.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ function toApp(app) {
homepage: emptyToNull(app.homepage),
methods: (app.methods || []).map((method) => ({
name: method.name, summary: emptyToNull(method.summary),
example: emptyToNull(method.example), gated: emptyToNull(method.gated),
example: emptyToNull(method.example), gated: emptyToNull(method.gated), billable: emptyToNull(method.billable),
})),
changelog: (app.changelog || []).map((release) => ({
version: release.version, date: emptyToNull(release.date), notes: release.notes || [],
Expand Down Expand Up @@ -200,7 +200,7 @@ const FEATURED = (document.featured_order || []).filter((id) => apps.some((app)
const source = fetched ? API : `${path.basename(SNAPSHOT)} (offline)`;
const banner = `// AUTO-GENERATED by scripts/gen-apps.mjs from the app-store metadata API\n// (${source}) — the same document the Alpha management console reads.\n// Do not edit by hand, and do not edit the records here: change an app in\n// pilot-protocol/app-template under appstore-meta/data/apps/ and redeploy.\n// No ratings or install counts — those are not published by the catalogue.\n`;
const body = `${banner}
export interface AppMethod { name: string; summary: string | null; example: string | null; gated: string | null; }
export interface AppMethod { name: string; summary: string | null; example: string | null; gated: string | null; billable: string | null; }
export interface AppLimit { label: string; value: string; }
export interface AppChangelog { version: string; date?: string | null; notes: string[]; }
export interface AppBundle { platform: string; bytes: number | null; }
Expand Down
903 changes: 607 additions & 296 deletions src/data/app-metadata.json

Large diffs are not rendered by default.

1,723 changes: 1,254 additions & 469 deletions src/data/apps.ts

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/pages/app-store.astro
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ const canonicalUrl = 'https://pilotprotocol.network/app-store';
const featured = featuredApps();
const hero = featured[0];
const sideFeatured = featured.slice(1, 4);
const freshPinned = ['io.pilot.dial', 'io.pilot.deadsimple', 'io.pilot.kinetic', 'io.pilot.rentahuman', 'io.pilot.upfile', 'io.pilot.bowmark', 'io.pilot.primitive', 'io.pilot.didit', 'io.pilot.agentphone', 'io.pilot.orthogonal', 'io.pilot.miren', 'io.pilot.smol', 'io.pilot.wallet', 'io.pilot.slipstream'];
const freshPinned = ['io.pilot.generallegal', 'io.pilot.dial', 'io.pilot.deadsimple', 'io.pilot.kinetic', 'io.pilot.rentahuman', 'io.pilot.upfile', 'io.pilot.bowmark', 'io.pilot.primitive', 'io.pilot.didit', 'io.pilot.agentphone', 'io.pilot.orthogonal', 'io.pilot.miren', 'io.pilot.smol', 'io.pilot.wallet', 'io.pilot.slipstream'];
const freshExclude = new Set(['io.pilot.postgres', 'io.pilot.docker']);
// The pinned ids are curated here, but the app list is served by the
// app-store metadata API — so an id can now disappear from under this list.
Expand Down
2 changes: 2 additions & 0 deletions src/pages/apps/[id].astro
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,9 @@ const canonicalUrl = `https://pilotprotocol.network/apps/${app.id}`;
{freeMethods.map((m) => (
<div class="mrow">
<code class="mname">{m.name}</code>
{m.billable && <span class="gated-badge paid-badge">paid</span>}
<div class="ms">{m.summary ?? '—'}</div>
{m.billable && <div class="mgate">{m.billable}</div>}
{m.example && m.example !== '{}' && (
<pre class="mex"><span class="mex-k">example</span>{m.example}</pre>
)}
Expand Down
2 changes: 1 addition & 1 deletion src/pages/plain/app-store.astro
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
// Auto-generated by scripts/regen-plain.mjs. Edit the marketing source and re-run.
// plain-source: src/pages/app-store.astro
// plain-source-sha256: 05caa5483c7cb824a1633a914ad2d24ea5ea2d26bead9f12b661f90fe92c0a7e
// plain-source-sha256: 5c50cc06cd095b67ea51703f5229c0059aa6745ed8ffbddb6e5731a394715ad4
import PlainLayout from '../../layouts/PlainLayout.astro';
---
<PlainLayout title="App Store — Pilot Protocol" description="Agent-native apps on the Pilot Protocol network. Install with one command; publish your own from your browser or by PR." canonical="https://pilotprotocol.network/plain/app-store/">
Expand Down
6 changes: 6 additions & 0 deletions src/styles/appstore.css
Original file line number Diff line number Diff line change
Expand Up @@ -475,3 +475,9 @@
.demo-list.demo-next li { list-style: none; }
.demo-list.demo-next { padding-left: 0; }
.demo-list.demo-next code { font-family: var(--mono); font-size: 12.5px; color: var(--ink-dim); background: color-mix(in oklab, var(--ink) 8%, transparent); padding: 2px 6px; border-radius: 4px; }

/* A method that spends real money. Distinct from .gated-badge on purpose:
gated means your plan does not include it, paid means it works and charges
you — conflating the two misleads in both directions. */
.gated-badge.paid-badge{background:rgba(198,74,42,.14);color:#c64a2a;border-color:rgba(198,74,42,.3);}
@media (prefers-color-scheme:dark){.gated-badge.paid-badge{background:rgba(240,140,110,.16);color:#f0937a;border-color:rgba(240,140,110,.32);}}
Loading