@vibes.diy/prompts 14.3.100 → 14.3.102

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/llms/calendar.md CHANGED
@@ -247,16 +247,22 @@ useEffect(() => {
247
247
  const token = btoa(bin).replace(/[+]/g, "-").replace(/[/]/g, "_").replace(/=+$/, "");
248
248
  database.put({ _id: `caltoken-${me.userHandle}`, type: "caltoken", userId: me.userHandle, token, createdAt: Date.now() }).catch(() => {});
249
249
  }, [signedIn, myItems.length, calToken]);
250
- const icsPath = signedIn && calToken
251
- ? `/_api/faves.ics?t=${encodeURIComponent(calToken)}&n=${encodeURIComponent(me.userHandle)}`
250
+ // The feed lives at the app's public address, which also serves backend.js:
251
+ // https://vibes.diy/vibe/<handle>/<app>/_api/faves.ics. The app's own host,
252
+ // `<app>--<handle>.…`, names both in its first label.
253
+ const label = location.hostname.split(".")[0];
254
+ const cut = label.indexOf("--");
255
+ const appAddress = `vibes.diy/vibe/${label.slice(cut + 2)}/${label.slice(0, cut)}`;
256
+ const icsUrl = signedIn && calToken
257
+ ? `${appAddress}/_api/faves.ics?t=${encodeURIComponent(calToken)}&n=${encodeURIComponent(me.userHandle)}`
252
258
  : null;
253
- {icsPath && (
254
- <a href={`webcal://${window.location.host}${icsPath}`} target="_blank" rel="noopener noreferrer"
259
+ {icsUrl && (
260
+ <a href={`webcal://${icsUrl}`} target="_blank" rel="noopener noreferrer"
255
261
  title="Subscribe in your phone's calendar — it follows your picks live. iOS may warn about an insecure connection; tap Continue. Share the link and friends can follow your picks.">
256
262
  📆 Subscribe on iPhone
257
263
  </a>
258
264
  )}
259
- // Plus a copy button that copies `https://${window.location.host}${icsPath}` —
265
+ // Plus a copy button that copies `https://${icsUrl}` —
260
266
  // that form pastes into Google Calendar (From URL) and into iOS Settings →
261
267
  // Calendar → Add Subscribed Calendar (which skips the warning entirely).
262
268
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibes.diy/prompts",
3
- "version": "14.3.100",
3
+ "version": "14.3.102",
4
4
  "type": "module",
5
5
  "main": "./index.js",
6
6
  "exports": {
@@ -39,10 +39,10 @@
39
39
  "license": "Apache-2.0",
40
40
  "dependencies": {
41
41
  "@adviser/cement": "~0.5.34",
42
- "@vibes.diy/api-types": "14.3.100",
43
- "@vibes.diy/call-ai-v2": "14.3.100",
44
- "@vibes.diy/identity": "14.3.100",
45
- "@vibes.diy/use-vibes-types": "14.3.100",
42
+ "@vibes.diy/api-types": "14.3.102",
43
+ "@vibes.diy/call-ai-v2": "14.3.102",
44
+ "@vibes.diy/identity": "14.3.102",
45
+ "@vibes.diy/use-vibes-types": "14.3.102",
46
46
  "arktype": "~2.2.6",
47
47
  "json-schema-faker": "~0.6.3"
48
48
  },
@@ -212,7 +212,18 @@ useEffect(() => {
212
212
  }, []);
213
213
  ```
214
214
 
215
- Build the share link the same way — `` `${location.origin}${location.pathname}#friend=${me}` `` — and never write a one-time param into the query.
215
+ Every link the app hands a person — Copy link, the share sheet, a QR code, an invite — is the app's public address, the one people open: `https://vibes.diy/vibe/<handle>/<app>` plus the fragment. The app runs on its own host, `<app>--<handle>.…`, whose first label names both, so one helper builds the address and follows the app through a remix:
216
+
217
+ ```jsx
218
+ function publicUrl(hash = "") {
219
+ const label = location.hostname.split(".")[0];
220
+ const cut = label.indexOf("--");
221
+ return `https://vibes.diy/vibe/${label.slice(cut + 2)}/${label.slice(0, cut)}${hash}`;
222
+ }
223
+ // publicUrl(`#friend=${me}`) → https://vibes.diy/vibe/alice/picker#friend=bob
224
+ ```
225
+
226
+ Hand `publicUrl(...)` to `navigator.clipboard.writeText`, `navigator.share` and the QR code, and keep every one-time param in the fragment.
216
227
 
217
228
  ### Say only what you can observe
218
229
 
@@ -216,7 +216,18 @@ useEffect(() => {
216
216
  }, []);
217
217
  ```
218
218
 
219
- Build the share link the same way — `` `${location.origin}${location.pathname}#friend=${me}` `` — and never write a one-time param into the query.
219
+ Every link the app hands a person — Copy link, the share sheet, a QR code, an invite — is the app's public address, the one people open: `https://vibes.diy/vibe/<handle>/<app>` plus the fragment. The app runs on its own host, `<app>--<handle>.…`, whose first label names both, so one helper builds the address and follows the app through a remix:
220
+
221
+ ```jsx
222
+ function publicUrl(hash = "") {
223
+ const label = location.hostname.split(".")[0];
224
+ const cut = label.indexOf("--");
225
+ return `https://vibes.diy/vibe/${label.slice(cut + 2)}/${label.slice(0, cut)}${hash}`;
226
+ }
227
+ // publicUrl(`#friend=${me}`) → https://vibes.diy/vibe/alice/picker#friend=bob
228
+ ```
229
+
230
+ Hand `publicUrl(...)` to `navigator.clipboard.writeText`, `navigator.share` and the QR code, and keep every one-time param in the fragment.
220
231
 
221
232
  ### Say only what you can observe
222
233
 
package/system-prompt.md CHANGED
@@ -793,7 +793,18 @@ useEffect(() => {
793
793
  }, []);
794
794
  ```
795
795
 
796
- Build the share link the same way — `` `${location.origin}${location.pathname}#friend=${me}` `` — and never write a one-time param into the query.
796
+ Every link the app hands a person — Copy link, the share sheet, a QR code, an invite — is the app's public address, the one people open: `https://vibes.diy/vibe/<handle>/<app>` plus the fragment. The app runs on its own host, `<app>--<handle>.…`, whose first label names both, so one helper builds the address and follows the app through a remix:
797
+
798
+ ```jsx
799
+ function publicUrl(hash = "") {
800
+ const label = location.hostname.split(".")[0];
801
+ const cut = label.indexOf("--");
802
+ return `https://vibes.diy/vibe/${label.slice(cut + 2)}/${label.slice(0, cut)}${hash}`;
803
+ }
804
+ // publicUrl(`#friend=${me}`) → https://vibes.diy/vibe/alice/picker#friend=bob
805
+ ```
806
+
807
+ Hand `publicUrl(...)` to `navigator.clipboard.writeText`, `navigator.share` and the QR code, and keep every one-time param in the fragment.
797
808
 
798
809
  ### Say only what you can observe
799
810