Fix SPA deep-link 404s on Hugging Face and remove leftover debug instrumentation.
NeonClary+1: Cursor
eb876f5
Serve index.html for client-side routes via SPAStaticFiles (Starlette HTTPException), strip debug logging from advisor preview and creations auth merge, and fix an unused-symbol build error.
Co-authored-by: Cursor <cursoragent@cursor.com>
Fix interactive chat wizards and surface in-progress creations on workshop pages.
NeonClary+1: Cursor
bf83eaf
Persist chat sessions and draft snapshots, ask for panel/persona name first, sync partial drafts into the creations list with an In progress label, add chat/form navigation and titles, and improve Docker HMR polling on Windows.
Co-authored-by: Cursor <cursoragent@cursor.com>
Merge pull request #1 from NeonClary/dev-cursor
NeonClary
Unverified signature
7aadf4f
Dev cursor
Switch all LLM calls to GPT-5.4 and load secrets from shared.env.
NeonClary+1: Cursor
923783c
Replace Gemini backend with OpenAI (chat, wizards, Whisper transcription), default to gpt-5.4, and resolve env from ~/.secrets/shared.env or ENV_FILE_PATH.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add Cursor project rules for workshop stack and git workflow.
NeonClary
a51b302
EOF
fix: advisor preview accepts main JWT; resilient user lookup for /auth/me
NeonClary+1: Cursor
d8dfbb8
- Resolve JWT sub with ObjectId or string id so /api/auth/me works after login.
- Preview iframe shares localStorage with parent; accept workshop_preview or
main app bearer on advisor-preview-api routes and return real user profile.
- Add PATCH /advisor-preview-api/auth/me stub for the static bundle.
- Keep NDJSON debug logs in advisor_preview for session 17c34d until verified.
Co-authored-by: Cursor <cursoragent@cursor.com>
Fix workshop samples after auth profile hydration
NeonClary+1: Cursor
80ed675
Re-inject built-in sample personas/panel after merging server profile unless the user removed them (localStorage opt-out). Clear User Data clears the opt-out key. Adds debug-mode client log helper.
Co-authored-by: Cursor <cursoragent@cursor.com>
Fix frontend build: include workshopDefaults and sibling data files
NeonClary+1: Cursor
7e5a3b9
The HF Space Docker build failed at npm run build because
frontend/src/lib/creations.ts imported from ../data/workshopDefaults
which was not present in the repo. Root cause: the unanchored data/
pattern in the root .gitignore was excluding every directory named
data anywhere in the tree, including frontend/src/data/, so the
workshopDefaults.ts source plus its sibling prompt/config files had
never been committed even though they exist locally.
Anchor the pattern to /data/ so it only matches the runtime DATA_DIR
at the repo root, add backend/data/ explicitly to keep the legacy
local upload dir out of git, and commit the previously ignored
frontend/src/data/ tree (workshopDefaults.ts + 4 prompt .txt files +
whiteLabelBuiltConfig.json). Verified with tsc -b and npm run build
locally; both pass.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace MongoDB with SQLite + bucket-mounted file uploads
NeonClary+1: Cursor
48115e8
The Space had no local Mongo, so registration was timing out. Swap the
Motor/Mongo backend for an aiosqlite-backed db.py facade plus on-disk
file storage rooted at DATA_DIR (default /data, the HF Storage Bucket
mount). Routers, services, and the React frontend keep their existing
contract since the facade re-exposes the subset of the Motor API they
already use, plus a GridFS-shaped bucket for binaries.
A single hf buckets sync against the attached bucket now backs up the
entire database and all uploaded RAG files, so user data is salvageable
across deploys without any external service.
Includes backend/tests/test_local_persistence.py (35 checks: register
-> login -> /me -> profile round-trip -> artifact create/list ->
document upload/download/delete) which passes locally.
Co-authored-by: Cursor <cursoragent@cursor.com>
Workshop: sample data menu, manage page, LLM UX, HANA 422 fix
NeonClary
4a0e265
- UserMenu: Sample Data submenu (add/delete sample personas + advisor panel)
with stable IDs so merges are idempotent
- New ManageCreationsPage (/workshop/manage) with per-item select,
hide/show toggle, and delete for personas and advisor panels
- SavedPersona / SavedAdvisorPanel gain a `hidden` flag; workshop lists,
experiment pickers, and advisor wizard filter hidden items (still
includable when already referenced)
- PersonaWorkshopPage hides the advisor-panels section; both workshop
pages link to the new Manage page via a blue-bordered CTA
- Header: custom Neon logo asset, and the UserMenu shifts to the right of
the brand on wide viewports (useMediaQuery hook)
- ExperimentAdvisorPage: Save/Discard/Refresh toolbar beside the title on
wide screens, and collapses into a sidebar Controls section on narrow
- ExperimentPage: changing the LLM model now prompts "Switch model?" when
there's a conversation, mirroring the existing persona-switch clear-chat
- HANA 422 fix: /brai…
fix(advisor-preview): workshop iframe auth, static bundle, Vite proxy
NeonClary
583b9d3
- Proxy /advisor-preview and /advisor-preview-api in Vite; bind dev server with host:true
- Stub GET /advisor-preview-api/api/users/me/profile for workshop token so chat navigation works
- Workshop login/banner patches in CCAI bundle + CSS; script to reapply after rebuilds
- Repair minified JS syntax (header close + onSubmit braces)
Made-with: Cursor
feat(experiment): multi-LLM chat with LLMChats3-style registry
NeonClary
6e8eb6b
- Add provider settings, resolve_model, HANA/OpenAI-compat clients and experiment_llm_router (Neon HANA multi-turn-safe path).
- GET /api/experiment-chat/models; POST /message accepts model_id and routes via run_experiment_llm.
- Experiment page: Model dropdown next to Save to persona, localStorage persistence (experiment_selected_llm_v1).
- Document optional HANA and third-party keys in .env.example.
Made-with: Cursor
Add RAG document upload and context injection for personas and advisor panels
NeonClary
1242b65
Backend: file-type restriction (.txt/.md), per-file (1GB), per-persona (5GB), and per-advisor-panel (20GB) size limits with aggregate checks. Document context service loads uploaded docs and injects text into LLM prompts for experiment chat, persona prompt build, and advisor panel build. Optional auth on experiment/build endpoints; select specific doc IDs.
Frontend: DocumentUploadSection component with drag-and-drop, auto-save of draft on first upload, added to Persona (step 2) and Advisor (step 5) wizards. ExperimentRagPanel on Persona Prompt Testing page with upload, selectable checklist, deduplication by filename, persistent selection across persona switches.
Also: persist editingId in drafts so Build/Rebuild button label survives reload; move Build buttons inline with Download on Review step; enlarge and fix alignment of prompt accordion.
Made-with: Cursor
- Persona and advisor interactive Q&A ordered by form fields; wizard copy and navigation
- Experiment pages: persona prompt testing fixes (TDZ/stopTts order), persona switch clears chat
- Advisor experiment page with iframe preview, config API, static bundle under backend
- Build persona prompt / build advisor panel pipelines (Gemini), hosts, modals
- Profile modal shows account fields; create-new buttons on wizards and Q&A
- Remove submit/email backup from wizards; backup download label
- Omit authorName from persona prompt build payload; rebuild button labels when already built
- Auth, profile, user library, storage cleanup and related backend/frontend updates
- Ignore local advisor-panel-demo clone; commit built advisor-preview-static assets
Made-with: Cursor
feat: advisor panel wizard, persona selection, and workshop updates
NeonClary
cf169c6
- Multi-step advisor form (vision, branding, user context, chat, personas)
- Include personas step with local selections and create-persona return flow
- Persist includedPersonaIds; advisor summary lists linked personas
- Add advisorPanelFormModel, wizard state/focus helpers, draft migration
- Persona wizard returnTo navigation; chat draft merge for advisor fields
- Assorted frontend/backend updates (TTS, chat, Docker, scripts)
Made-with: Cursor