You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
2.4 KiB

{
"name": "active",
"private": true,
"version": "0.0.1",
"license": "UNLICENSED",
"type": "module",
"sideEffects": [
"**/*.css",
"**/*.svelte"
],
"repository": {
"type": "git",
"url": "https://192.168.18.112/go/active-svelte.git"
},
"bugs": {
"url": "https://192.168.18.112/go/active-svelte/issues"
},
"homepage": "https://192.168.18.112/go/active-svelte#readme",
"engines": {
"node": ">=22"
},
"scripts": {
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"prepare": "svelte-kit sync || echo ''",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
Nexo desktop-first redesign + demo restructure Move servers/dating → demos/dating/server and the dating route's co-located _components/_lib/_design assets → demos/dating/web. Single `npm run dating:dev` boots both server and web via concurrently. Replace the warm-paper / raspberry-pink Claude Design adaptation with a sober desktop-first system: - Tokens: slate neutrals + violet accent, Inter family, dark mode via prefers-color-scheme + explicit data-theme. - Inline SVG icon set (Icon.svelte, Feather-style) — no Unicode glyph placeholders. - Layout shell: 240px rail nav on desktop, bottom tab bar on mobile; auth + onboarding own their own shell. - Discover: square photo carousel (dots + chevrons), name/age/location overlay, action buttons floating off the photo edge, sticky context panel on desktop. - Matches: clean conversation list with unread dot + chevron-on-hover. - Chat: 3-column on desktop (threads + thread + match context), 2-col on tablet, single thread on mobile. Day separators, retry/dismiss on failed messages, autogrow composer with Enter-to-send. - Profile: sticky hero card + 3-section form, dirty/saved indicator. - Photos: dropzone + grid with hover-only cell toolbar (set primary, reorder, delete). - Onboarding: sidebar stepper (320px) + content panel. - Auth: split layout (form left, brand quote right) on ≥900px. Server boot: env loader's repo-root resolution corrected after the move (../../.. instead of ../..) so .env.local at the repo root is picked up again. Hoist BRAND.md and SECURITY.md into docs/, drop superseded audit notes that were already closed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
"dating:server": "node demos/dating/server/server.mjs",
"dating:web": "vite dev",
"dating:dev": "concurrently --names \"server,web\" --prefix-colors \"magenta,cyan\" --kill-others-on-fail \"npm run dating:server\" \"npm run dating:web\"",
"dev:conn-chat": "node scripts/conn-chat-server.mjs",
"lint": "prettier --check . && eslint .",
"format": "prettier --write .",
"test:typecheck": "npm run check",
"test:bundle": "node scripts/bundle-smoke.mjs",
"test:static": "node scripts/static-smoke.mjs",
5 months ago
"test:aliases": "node scripts/check-aliases.mjs",
"test:all": "npm run check && npm test && npm run build && npm run test:aliases && npm run test:static && npm run test:bundle",
"test:unit": "vitest",
"test": "npm run test:unit -- --run"
},
"devDependencies": {
"@eslint/compat": "^2.0.4",
"@eslint/js": "^10.0.1",
"@sveltejs/adapter-static": "^3.0.10",
"@sveltejs/kit": "^2.57.0",
"@sveltejs/vite-plugin-svelte": "^7.0.0",
"@types/node": "^22",
"@vitest/browser-playwright": "^4.1.3",
Nexo desktop-first redesign + demo restructure Move servers/dating → demos/dating/server and the dating route's co-located _components/_lib/_design assets → demos/dating/web. Single `npm run dating:dev` boots both server and web via concurrently. Replace the warm-paper / raspberry-pink Claude Design adaptation with a sober desktop-first system: - Tokens: slate neutrals + violet accent, Inter family, dark mode via prefers-color-scheme + explicit data-theme. - Inline SVG icon set (Icon.svelte, Feather-style) — no Unicode glyph placeholders. - Layout shell: 240px rail nav on desktop, bottom tab bar on mobile; auth + onboarding own their own shell. - Discover: square photo carousel (dots + chevrons), name/age/location overlay, action buttons floating off the photo edge, sticky context panel on desktop. - Matches: clean conversation list with unread dot + chevron-on-hover. - Chat: 3-column on desktop (threads + thread + match context), 2-col on tablet, single thread on mobile. Day separators, retry/dismiss on failed messages, autogrow composer with Enter-to-send. - Profile: sticky hero card + 3-section form, dirty/saved indicator. - Photos: dropzone + grid with hover-only cell toolbar (set primary, reorder, delete). - Onboarding: sidebar stepper (320px) + content panel. - Auth: split layout (form left, brand quote right) on ≥900px. Server boot: env loader's repo-root resolution corrected after the move (../../.. instead of ../..) so .env.local at the repo root is picked up again. Hoist BRAND.md and SECURITY.md into docs/, drop superseded audit notes that were already closed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
"concurrently": "^9.2.1",
"eslint": "^10.2.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-svelte": "^3.17.0",
"globals": "^17.4.0",
"jsdom": "^29.1.0",
"playwright": "^1.59.1",
"prettier": "^3.8.1",
"prettier-plugin-svelte": "^3.5.1",
"svelte": "^5.55.2",
"svelte-check": "^4.4.6",
"typescript": "^6.0.2",
"typescript-eslint": "^8.58.1",
"vite": "^8.0.7",
"vitest": "^4.1.3",
"vitest-browser-svelte": "^2.1.0"
},
"dependencies": {
"@floating-ui/core": "^1.7.1",
"@floating-ui/dom": "^1.7.1",
Add vitals, entry.id, per-level transport routing and buffering logr: - entry.id auto-generated (UUID v4 / hex fallback) — survives backend dedup, batched-retry, cross-transport correlation. - Transport.levels replaces minLevel — per-level { enabled, filter? } record. More flexible: enable/disable individual levels, attach per-level filters. Helper levelsAtLeast(level) for the common min-level case; allLevels() for the permissive case. - Transport buffering: buffer, flushIntervalMs, writeBatch on the Transport interface. Logger tracks per-transport queues, flushes on size/time/flush()/detach/beforeunload. httpTransport and lokiTransport implement writeBatch for true batched HTTP delivery. - logger.flush() to drain all buffered transports manually. - Web Vitals integration (src/arts/logr/vitals.ts): registerWebVitals(logger, webVitalsSDK, options?) turns LCP/INP/CLS/FCP/TTFB samples into structured log entries tagged with route/rating. Zero-deps in logr — SDK is injected. - ConsoleTransportOptions now exposes filter so vitals can be silenced on console while still flowing to Sentry/Datadog/Loki. - Runtime name constant: `engine_logger` (via src/arts/logr/consts.ts) replaces hardcoded 'logr' string in failure reports, console prefix and synthetic entry tags. lang: - README expanded with a dedicated section on ts() and the LangString type: plain strings, LangRecord, LangRef; the `message: LangString` prop pattern for generic components; when to use the isLang* guards. Tests: 185 passing (added vitals + buffer + entry.id coverage). Docs: logr README now documents vitals (hot-zone patterns for LogQL / Sentry Discover / Datadog), buffering, the levels config, and the helpers. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6 months ago
"@sentry/browser": "^10.50.0",
Nexo realtime — WebSocket distributor for chat fan-out Replaces the chat poll-every-3-seconds compromise with a real WebSocket pipeline. Server side: `realtime.mjs`: - In-memory hub mapping `userId → Set<WebSocket>`. Single-process, zero external deps; fine for the local demo. A clustered deployment would swap in Redis pub/sub behind the same surface. - `attach(userId, socket)` registers a socket and self-detaches on close/error. - `broadcast(userIds, event)` JSON-encodes once and dispatches to every subscriber of every listed user, swallowing per-socket errors. `server.mjs`: - Adds a `WebSocketServer({ noServer: true })` that listens on the HTTP server's `'upgrade'` event for `/api/realtime` paths. - Authentication mirrors the HTTP path: extract `dating_session` from the upgrade request's `Cookie` header, pass through `currentSession` and reject with 401 if it doesn't resolve. - Rejects upgrades from origins outside the CORS allowlist (the cookie-based auth is the second line of defence; origin gating is the first). - On accept, attaches the socket to the hub and sends a `hello` envelope so the client can confirm authentication round-trip. `routes.mjs:messagesPost`: - After persisting a new message, calls `broadcast(relationIds(match.users), { type: 'dating.message.created', message: view })`. Both members (sender and counterpart) get the push, so multi-device sessions stay in sync. Adds `ws` (8.20) + `@types/ws` to dependencies. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
"@types/ws": "^8.18.1",
"csstype": "^3.2.3",
"esm-env": "^1.1.2",
"runed": "0.37.1",
"tabbable": "^6.2.0",
Nexo realtime — WebSocket distributor for chat fan-out Replaces the chat poll-every-3-seconds compromise with a real WebSocket pipeline. Server side: `realtime.mjs`: - In-memory hub mapping `userId → Set<WebSocket>`. Single-process, zero external deps; fine for the local demo. A clustered deployment would swap in Redis pub/sub behind the same surface. - `attach(userId, socket)` registers a socket and self-detaches on close/error. - `broadcast(userIds, event)` JSON-encodes once and dispatches to every subscriber of every listed user, swallowing per-socket errors. `server.mjs`: - Adds a `WebSocketServer({ noServer: true })` that listens on the HTTP server's `'upgrade'` event for `/api/realtime` paths. - Authentication mirrors the HTTP path: extract `dating_session` from the upgrade request's `Cookie` header, pass through `currentSession` and reject with 401 if it doesn't resolve. - Rejects upgrades from origins outside the CORS allowlist (the cookie-based auth is the second line of defence; origin gating is the first). - On accept, attaches the socket to the hub and sends a `hello` envelope so the client can confirm authentication round-trip. `routes.mjs:messagesPost`: - After persisting a new message, calls `broadcast(relationIds(match.users), { type: 'dating.message.created', message: view })`. Both members (sender and counterpart) get the push, so multi-device sessions stay in sync. Adds `ws` (8.20) + `@types/ws` to dependencies. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 months ago
"web-vitals": "^5.2.0",
"ws": "^8.20.0"
}
}

Powered by TurnKey Linux.