|
| 1 | +--- |
| 2 | +name: solid-apps |
| 3 | +description: Find working LOSOS apps that handle a urn:solid type, or contribute a new app to the catalog. Use when the user wants a real application (not just a demo) for some Solid data, or when packaging a LOSOS app for discoverability. |
| 4 | +--- |
| 5 | + |
| 6 | +# solid-apps |
| 7 | + |
| 8 | +Working LOSOS applications, one per directory. Each is a single-HTML-file app built on the full stack (LION + urn-solid + solid-schema + solid-panes + LOSOS) and ships with a catalog manifest declaring what `urn:solid:` types it handles. |
| 9 | + |
| 10 | +``` |
| 11 | +LION → urn-solid → solid-schema → solid-panes → LOSOS → solid-apps (this) |
| 12 | +``` |
| 13 | + |
| 14 | +## When to use this skill |
| 15 | + |
| 16 | +- The user has Solid data of some `urn:solid:` type and wants a ready-to-use app for it. |
| 17 | +- The user is building a new LOSOS app and wants to publish it for discovery. |
| 18 | +- The user asks "what apps work with my pod?" or "what handles `urn:solid:X`?" |
| 19 | + |
| 20 | +## Finding an app for a type |
| 21 | + |
| 22 | +Reverse index maps each handled type to the apps that handle it: |
| 23 | + |
| 24 | +``` |
| 25 | +curl -s https://solid-apps.github.io/reverse-index.json |
| 26 | +# { "urn:solid:Tracker": ["/todos/"], "urn:solid:Vtodo": ["/todos/"], ... } |
| 27 | +``` |
| 28 | + |
| 29 | +Catalog index has the full manifests: `https://solid-apps.github.io/index.json`. |
| 30 | + |
| 31 | +## Anatomy of an app |
| 32 | + |
| 33 | +``` |
| 34 | +todos/ |
| 35 | + app.json Catalog manifest (required) |
| 36 | + index.html The app — opens at https://solid-apps.github.io/todos/ |
| 37 | + ... Optional: custom panes, sample data, screenshots |
| 38 | +``` |
| 39 | + |
| 40 | +`app.json` shape (validated by `schema/app.schema.json`): |
| 41 | + |
| 42 | +```json |
| 43 | +{ |
| 44 | + "name": "Todos", |
| 45 | + "description": "A list of tasks. Built on LOSOS's bespoke todo-pane via the urn:solid:Tracker manifest.", |
| 46 | + "entry": "./index.html", |
| 47 | + "types": ["urn:solid:Tracker", "urn:solid:Vtodo"], |
| 48 | + "icon": "\u2705", |
| 49 | + "author": "Melvin Carvalho", |
| 50 | + "status": "stable", |
| 51 | + "added": "2026-04-19" |
| 52 | +} |
| 53 | +``` |
| 54 | + |
| 55 | +## What's in an app's index.html |
| 56 | + |
| 57 | +A typical app composes the stack: |
| 58 | + |
| 59 | +```html |
| 60 | +<!-- 1. JSON-LD data island, inline (or load from a pod via ?uri= query param) --> |
| 61 | +<script type="application/ld+json">{ "@type": "Tracker", "issue": [...] }</script> |
| 62 | + |
| 63 | +<!-- 2. Panes — declare which to load (LOSOS picks via canHandle) --> |
| 64 | +<script type="module" data-pane src="https://losos.org/panes/todo-pane.js"></script> |
| 65 | +<script type="module" data-pane src="https://losos.org/panes/schema-pane.js"></script> |
| 66 | +<script type="module" data-pane src="https://solid-panes.github.io/schema-view.js"></script> |
| 67 | +<script type="module" data-pane src="https://losos.org/panes/source-pane.js"></script> |
| 68 | + |
| 69 | +<!-- 3. Mount point --> |
| 70 | +<div id="losos"></div> |
| 71 | + |
| 72 | +<!-- 4. Boot: autoSchema patches $schema based on @type, then shell --> |
| 73 | +<script type="module"> |
| 74 | + import { autoSchema } from 'https://solid-panes.github.io/auto-schema.js' |
| 75 | + await autoSchema() |
| 76 | + await import('https://losos.org/losos/shell.js') |
| 77 | +</script> |
| 78 | +``` |
| 79 | + |
| 80 | +That's the universal pattern. What changes between apps is mostly: the data, which panes are declared, and the type the manifest claims. |
| 81 | + |
| 82 | +## Adding a new app |
| 83 | + |
| 84 | +1. **Make sure the types you handle exist in urn-solid + have schemas in solid-schema + have manifests in solid-panes.** If not, add them upstream first. |
| 85 | +2. Create `<slug>/` with `app.json` and `index.html`. |
| 86 | +3. `npm run validate && npm run build`. |
| 87 | +4. Commit + push. |
| 88 | +5. The catalog (https://solid-apps.github.io/) and reverse-index update automatically. |
| 89 | + |
| 90 | +## Don't |
| 91 | + |
| 92 | +- Don't list types in `app.json#types` that aren't in urn-solid. |
| 93 | +- Don't ship an app that depends on private LOSOS APIs — only use the URL-stable ones (`losos.org/losos/*.js`, `losos.org/panes/*.js`). |
| 94 | +- Don't bundle LOSOS or panes into the app — fetch them at the stable URLs so updates propagate. |
| 95 | +- Don't put pane *implementations* in solid-apps — they belong in LOSOS or solid-panes. solid-apps composes; it doesn't define new core machinery. |
| 96 | + |
| 97 | +## Reference URLs |
| 98 | + |
| 99 | +- Catalog: https://solid-apps.github.io/index.json |
| 100 | +- By-type index: https://solid-apps.github.io/reverse-index.json |
| 101 | +- Corpus: https://solid-apps.github.io/corpus.jsonl |
| 102 | +- Manifest schema: https://solid-apps.github.io/schema/app.schema.json |
| 103 | +- Site: https://solid-apps.github.io/ |
| 104 | + |
| 105 | +## Related skills |
| 106 | + |
| 107 | +- `urn-solid` — vocabulary registry |
| 108 | +- `solid-schema` — type contracts |
| 109 | +- `solid-panes` — pane registry (which pane handles which type) |
| 110 | +- `losos` — runtime |
0 commit comments