Commit Graph

28 Commits

Author SHA1 Message Date
Valknar XXX
e891e0de0a fix: replace bits-ui Select with native HTML select
- Remove bits-ui Select component dependency
- Use native HTML select element for device selection
- Simplify state management (single mappings Map)
- Fix selection handling with direct onchange event
- Add visual indicator for exact name matches
- Resolves selection not working issue
2025-10-28 05:51:43 +01:00
Valknar XXX
a959186de7 fix: proper state binding for Select component in device mapping
- Add separate selectedValues state map for Select component binding
- Update handleDeviceSelect to manage both mappings and selectedValues
- Bind currentSelected directly to Select.Root selected prop
- Pass full selected object in onSelectedChange callback
- Ensures Select component properly reflects user selections in Svelte 5
2025-10-28 05:48:25 +01:00
Valknar XXX
6e94ec99bc fix: select component reactivity in device mapping dialog
- Create new Map instance in handleDeviceSelect to trigger Svelte 5 reactivity
- Fixes issue where user selection wasn't updating the UI
- Ensures device mappings update correctly when user chooses from dropdown
2025-10-28 05:45:16 +01:00
Valknar XXX
9d9f72dec1 feat: add device mapping UI for playback compatibility
- Create DeviceMappingDialog component with compatibility checking
- Check actuator type compatibility between recorded and connected devices
- Auto-map devices by name with fallback to compatible devices
- Show device mapping dialog before playback starts
- Store and use device mappings during playback execution
- Update executeEvent to use mapped devices instead of name matching
- Validate all devices are mapped before starting playback

Features:
- Visual device pairing interface
- Compatibility badges showing actuator types
- Exact name match highlighting
- Auto-mapping with smart fallback
- Real-time mapping validation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 05:41:37 +01:00
Valknar XXX
50ceda94b7 feat: add recording playback functionality
- Add getRecording service function to fetch single recording
- Update play page server to load recording from URL parameter
- Implement playback engine with event scheduling
- Add playback controls (play, pause, stop, seek)
- Display playback progress bar with clickable seek
- Show recording metadata and stats during playback
- Match recorded events to connected devices by name and actuator type
- Convert normalized values back to device scale for playback

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 05:28:04 +01:00
Valknar XXX
a252da6d9d fix: recording save functionality and authentication
- Fix artist_name null handling in header component with email fallback
- Fix authentication in recording endpoints to use req.accountability
- Change duration field type from integer to double precision for millisecond precision
- Add createRecording service function with proper authentication
- Update play page to use fetch API for recording saves

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 05:16:36 +01:00
Valknar XXX
5bd2d9c215 fix: handle undefined user name in UI components
- Added null check in getUserInitials function to return "??" for undefined names
- Fixed logout button to handle undefined user.name when displaying first name
- Prevents 500 errors when rendering components for users without names

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 04:48:41 +01:00
Valknar XXX
e226a47028 fix: Docker Compose volume mapping and schema compatibility
- Fixed Directus extension volume mapping to point to bundle root instead of dist folder
- Changed directus_users.slug field to nullable to allow existing users without slugs
- These changes enable proper loading of the bundle extension in Docker environment

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 04:38:48 +01:00
Valknar XXX
aa4e376490 feat: add buttplug device recording feature (Phase 1 & 2)
Implemented complete infrastructure for recording, saving, and managing
buttplug device patterns with precise event timing.

**Phase 1: Backend & Infrastructure**
- Added Directus schema for sexy_recordings collection with all fields
  (id, status, user_created, title, description, slug, duration, events,
  device_info, tags, linked_video, featured, public)
- Created REST API endpoints in bundle extension:
  * GET /sexy/recordings - list user recordings with filtering
  * GET /sexy/recordings/:id - get single recording
  * POST /sexy/recordings - create new recording with validation
  * PATCH /sexy/recordings/:id - update recording (owner only)
  * DELETE /sexy/recordings/:id - soft delete by archiving
- Added TypeScript types: RecordedEvent, DeviceInfo, Recording
- Created frontend services: getRecordings(), deleteRecording()
- Built RecordingCard component with stats, device info, and actions
- Added Recordings tab to /me dashboard page with grid layout
- Added i18n translations for recordings UI

**Phase 2: Recording Capture**
- Implemented recording state management in /play page
- Added Start/Stop Recording buttons with visual indicators
- Capture device events with precise timestamps during recording
- Normalize actuator values (0-100) for cross-device compatibility
- Created RecordingSaveDialog component with:
  * Recording stats display (duration, events, devices)
  * Form inputs (title, description, tags)
  * Device information preview
- Integrated save recording API call from play page
- Added success/error toast notifications
- Automatic event filtering during recording

**Technical Details**
- Events stored as JSON array with timestamp, deviceIndex, deviceName,
  actuatorIndex, actuatorType, and normalized value
- Device metadata includes name, index, and capability list
- Slug auto-generated from title for SEO-friendly URLs
- Status workflow: draft → published → archived
- Permission checks: users can only access own recordings or public ones
- Frontend uses performance.now() for millisecond precision timing

**User Flow**
1. User scans and connects devices on /play page
2. Clicks "Start Recording" to begin capturing events
3. Manipulates device sliders - all changes are recorded
4. Clicks "Stop Recording" to end capture
5. Save dialog appears with recording preview and form
6. User enters title, description, tags and saves
7. Recording appears in dashboard /me Recordings tab
8. Can play back, edit, or delete recordings

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 04:05:09 +01:00
Valknar XXX
e587552fcb feat: better logging 2025-10-26 14:48:30 +01:00
Valknar XXX
56e3bfd3ef Update frontend .env with production URLs for build
- Set PUBLIC_API_URL to https://sexy.pivoine.art/api
- Set PUBLIC_URL to https://sexy.pivoine.art
- These values will be baked into the build via GitHub Actions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 13:09:24 +01:00
Valknar XXX
c17758b12b docs: beate uhse for freedom 2025-10-26 09:57:45 +01:00
Valknar XXX
3952868712 docs: beate uhse for freedom 2025-10-26 09:35:35 +01:00
Valknar XXX
6d8996fef1 fix: dockerfile 2025-10-26 07:47:22 +01:00
Valknar XXX
9154548cf0 fix: dockerfile 2025-10-26 03:35:29 +01:00
Valknar XXX
dc2a6a16d3 fix: dockerfile 2025-10-26 02:36:04 +02:00
Valknar XXX
4058757389 fix: dockerfile 2025-10-26 02:25:13 +02:00
Valknar XXX
392d42ce2c fix: dockerfile 2025-10-26 02:10:36 +02:00
Valknar XXX
3c04314492 fix: dockerfile 2025-10-26 01:56:26 +02:00
Valknar XXX
75d0039bed fix: pnpm version 2025-10-26 01:50:41 +02:00
Valknar XXX
762241c5e7 fix: pnpm version 2025-10-26 01:41:14 +02:00
Valknar XXX
cc19e57131 fix: newer node image 2025-10-26 00:12:58 +02:00
Valknar XXX
5df6f10968 fix: pnpm prune --prod 2025-10-26 00:00:28 +02:00
Valknar XXX
0ee4d65e7f fix: pnpm ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY 2025-10-25 23:35:32 +02:00
Valknar XXX
03baca8272 fix: .env.production in Dockerfile 2025-10-25 23:08:07 +02:00
Valknar XXX
29e8808be1 fix: PUBLIC_URL usage and add ffmpeg 2025-10-25 22:38:45 +02:00
Valknar XXX
bcc9ba1c6d feat: docker 2025-10-25 22:29:06 +02:00
Valknar XXX
be0fc11a5c A new start 2025-10-25 22:04:41 +02:00