Commit Graph
115 Commits
Author SHA1 Message Date
google-labs-jules[bot] efc3b9b554 feat: Add example data seeding on startup
- Implement `ExampleDataService` to export/import Characters, Equipments, Poses, Expressions, and Generations.
- Add `generate-example` script to `package.json` to generate example data from current DB.
- Add startup logic in `src/index.ts` to seed example data if system is uninitialized and no data exists.
- Store system initialization state in `Setting` table.
- Add comprehensive tests for `ExampleDataService` in `src/service/example-data.test.ts` mocking filesystem and database operations.
- Refactor `src/service/example-data.ts` to use default `node:fs` import for better test compatibility.
2026-02-16 04:09:40 +00:00
google-labs-jules[bot] 8986dd6b81 feat: Add example data seeding on startup
- Implement `ExampleDataService` to export/import Characters, Equipments, Poses, Expressions, and Generations.
- Add `generate-example` script to `package.json` to generate example data from current DB.
- Add startup logic in `src/index.ts` to seed example data if system is uninitialized and no data exists.
- Store system initialization state in `Setting` table.
- Add comprehensive tests for `ExampleDataService` in `src/service/example-data.test.ts` mocking filesystem and database operations.
2026-02-16 03:44:57 +00:00
google-labs-jules[bot] b04a011c2b feat: Add example data seeding on startup
- Implement `ExampleDataService` to export/import Characters, Equipments, Poses, Expressions, and Generations.
- Add `generate-example` script to `package.json` to generate example data from current DB.
- Add startup logic in `src/index.ts` to seed example data if system is uninitialized and no data exists.
- Store system initialization state in `Setting` table.
- Add comprehensive tests for `ExampleDataService` in `src/service/example-data.test.ts` mocking filesystem and database operations.
2026-02-16 03:38:04 +00:00
google-labs-jules[bot] dcfb885a01 feat: Add example data seeding on startup
- Implement `ExampleDataService` to export/import Characters, Equipments, Poses, Expressions, and Generations.
- Add `generate-example` script to `package.json` to generate example data from current DB.
- Add startup logic in `src/index.ts` to seed example data if system is uninitialized and no data exists.
- Store system initialization state in `Setting` table.
- Add comprehensive tests for `ExampleDataService` in `src/service/example-data.test.ts` mocking filesystem and database operations.
2026-02-16 03:32:05 +00:00
Yiling-J 790ecf27a0 Merge pull request #30 from Yiling-J/feat-equipment-extraction-confirm-16289701959854915767
Add confirmation step to equipment extraction
2026-02-16 10:56:00 +08:00
google-labs-jules[bot] 45f7d0b2ef fix: allow deleting equipment
- Add `DELETE /api/equipments/:id` endpoint.
- Add `deleteEquipment` method to `EquipmentService` which also cleans up associated assets and generation references.
- Implement delete action in `Equipments` page UI.
- Pass `actions` prop to `VibeCard` to enable context menu.
2026-02-16 02:55:09 +00:00
google-labs-jules[bot] b2f6869563 feat: add confirmation step to equipment extraction
Split the equipment extraction process into two phases:
1. Analyze & Split: Generates texture sheet and crops assets.
2. Refine & Save: Allows user to select which assets to keep before refining and saving.

- Refactored `src/api/extract.ts` to expose `/analyze` and `/refine` endpoints.
- Updated `src/ui/components/ExtractorDialog.tsx` to handle the multi-step flow and selection UI.
- Added `CandidateAsset` type and updated `ExtractionStatus` in `src/ui/types.ts`.
2026-02-16 02:39:37 +00:00
Yiling-J d8cc081023 Merge pull request #29 from Yiling-J/delete-functionality-and-ui-tweaks-5663815655053873953
Implement cascading deletion and UI tweaks
2026-02-16 10:06:08 +08:00
yiling ji a611b68143 update vibe card style 2026-02-16 10:03:44 +08:00
google-labs-jules[bot] 8e22e3808c feat: implement deletion and ui tweaks
- Added `deleteFile` to `FileService` and `deleteAsset` to `AssetService` to support file deletion.
- Implemented cascading deletion in `CharacterService` (delete looks -> delete character image -> delete character).
- Updated `GenerationService`, `PoseService`, and `ExpressionService` to delete associated image assets upon deletion.
- Added `DELETE /api/generations/:id` endpoint.
- Created `DropdownMenu` and `DeleteConfirmDialog` UI components.
- Updated `VibeCard` to include an internal `DropdownMenu` driven by a new `actions` prop.
- Updated `Characters`, `Poses`, and `Expressions` pages to use the new `VibeCard` `actions` prop for deletion.
- Updated `FittingRoom` page to use the `DropdownMenu` and `DeleteConfirmDialog` for deleting looks.
- Updated `CreateLookDialog` to enforce single selection for equipment categories.
- Added necessary tests adjustments.
2026-02-16 01:58:45 +00:00
google-labs-jules[bot] 0373a8b43c feat: implement character/asset deletion and ui tweaks
- Added `deleteFile` to `FileService` and `deleteAsset` to `AssetService` to support file deletion.
- Implemented cascading deletion in `CharacterService` (delete looks -> delete character image -> delete character).
- Updated `GenerationService`, `PoseService`, and `ExpressionService` to delete associated image assets upon deletion.
- Added `DELETE /api/generations/:id` endpoint.
- Created `DropdownMenu` and `DeleteConfirmDialog` UI components.
- Updated `Characters`, `Poses`, `Expressions`, and `FittingRoom` pages to use the new delete UI (3-dot menu + confirmation).
- Updated `CreateLookDialog` to enforce single selection for equipment categories.
- Added necessary tests adjustments.
2026-02-16 01:41:32 +00:00
Yiling-J 0d1cd167ed Merge pull request #28 from Yiling-J/optimize-image-upload-11326080443017578345
Optimize Image Uploads
2026-02-15 22:15:32 +08:00
google-labs-jules[bot] a433927de7 Optimize image uploads to 2k webp 2026-02-15 14:10:07 +00:00
yiling ji 16b3ab2bc0 update pose images 2026-02-15 15:50:08 +08:00
Yiling-J b2640a59e8 Merge pull request #27 from Yiling-J/feature-backup-restore-6292895868242646111
Add Backup and Restore System
2026-02-15 15:38:37 +08:00
google-labs-jules[bot] b228376598 Refactor backup tests to mock fs and prevent CI race conditions
- Update `src/service/backup.test.ts` to fully mock `node:fs` methods (`existsSync`, `renameSync`, `mkdirSync`, `rmSync`).
- This prevents the test from interacting with the real file system, eliminating the `ENOENT` race condition error observed in CI pipelines.
- Ensures the test is idempotent and safely verifies the service logic without side effects.
- Verified all 49 tests pass locally.
2026-02-15 07:26:59 +00:00
google-labs-jules[bot] a452d79802 Refactor backup/restore to Service Layer and add comprehensive tests
- Create `BackupService` in `src/service/backup.ts` to encapsulate tar stream creation and restore logic (db connection, fs operations).
- Refactor `src/api/backup.ts` and `src/api/restore.ts` to use `BackupService`.
- Add unit tests for `BackupService` in `src/service/backup.test.ts`.
- Add API tests for backup and restore endpoints in `src/api/backup.test.ts` and `src/api/restore.test.ts`.
- Maintain existing functionality: uncompressed tar streaming, safe restore with rollback.
2026-02-15 05:30:33 +00:00
google-labs-jules[bot] a8f1ae7686 Add backup and restore system (tar only)
- Implement `GET /api/backup` to stream `data` directory as a tarball using `node-tar`.
- Implement `POST /api/restore` to accept and extract tarballs to the `data` directory.
- Update `BackupRestoreDialog` to accept `.tar` files and remove gzip references.
- Ensure safe restore with database connection management and rollback.
- Disabled Gzip compression as requested since assets are already compressed WebP files.
2026-02-15 05:22:01 +00:00
google-labs-jules[bot] 588a48e7f9 Add backup and restore system with gzip support
- Implement `GET /api/backup` to stream `data` directory as a gzipped tarball using `node-tar`.
- Implement `POST /api/restore` to accept and extract gzipped tarballs to the `data` directory, handling database disconnection/reconnection and rollbacks.
- Add `BackupRestoreDialog` UI component for downloading backups and uploading restore files.
- Integrate backup dialog trigger into the AppSidebar logo.
- Ensure type safety and add temporary integration tests for verification.
2026-02-15 05:16:03 +00:00
google-labs-jules[bot] 7381400d79 Add backup and restore functionality
- Add `GET /api/backup` endpoint to stream `data` directory as a tar file.
- Add `POST /api/restore` endpoint to handle tar file upload and restore.
- Implement `BackupRestoreDialog` in the UI for user interaction.
- Integrate backup/restore dialog into the sidebar via the logo.
- Ensure safe restore with rollback on failure and database connection management.
2026-02-15 05:07:36 +00:00
Yiling-J 92742b1272 Merge pull request #26 from Yiling-J/docs-update-readme-7271330270801183496
Update README
2026-02-15 12:08:40 +08:00
google-labs-jules[bot] 6952100ad6 docs: update README with project details, setup instructions, and key features 2026-02-15 04:03:45 +00:00
google-labs-jules[bot] a9c754a6bd docs: update README with project details and setup 2026-02-15 03:53:58 +00:00
Yiling-J 7de382a2c5 Merge pull request #25 from Yiling-J/docker-support-6109449474535310293
Add Docker support with multi-stage build and production serving
2026-02-15 11:41:35 +08:00
google-labs-jules[bot] 703badd7a2 feat: Add Dockerfile and production build support 2026-02-15 03:39:37 +00:00
Yiling-J 338558e990 Merge pull request #24 from Yiling-J/refactor-data-folder-10365341915644708364
Refactor data storage to `data/` folder and remove env files
2026-02-15 11:05:17 +08:00
google-labs-jules[bot] 8270715f5b Refactor data storage to data/ folder and remove env files
- Consolidate SQLite database and file storage into `data/` directory.
- Update `src/index.ts` to ensure `data` and `data/files` directories exist on startup.
- Update `src/db.ts` to use hardcoded `file:./data/data.db` path.
- Update `prisma.config.ts` to use absolute path to `data/data.db` for CLI compatibility.
- Update `.gitignore` to ignore `data/` directory entirely.
- Remove `.env.example` and `.env.test` as they are no longer needed.
- Fix TS2307 typecheck error by adding `*.webp` declaration to `src/env.d.ts`.
2026-02-15 03:02:24 +00:00
google-labs-jules[bot] bedf5670a8 Refactor data storage to data/ folder and remove env files
- Consolidate SQLite database and file storage into `data/` directory.
- Update `src/index.ts` to ensure `data` and `data/files` directories exist on startup.
- Update `src/db.ts` to use hardcoded `file:./data/data.db` path.
- Update `prisma.config.ts` to use absolute path to `data/data.db` for CLI compatibility.
- Update `.gitignore` to ignore `data/` directory entirely.
- Remove `.env.example` and `.env.test` as they are no longer needed.
2026-02-15 02:39:31 +00:00
yiling ji deb72c923f update env 2026-02-15 10:17:41 +08:00
yiling ji 233e289624 update ui 2026-02-15 10:04:20 +08:00
Yiling-J fd511c4af0 Merge pull request #23 from Yiling-J/infinite-scroll-9407279652325460799
Implement infinite scroll and pagination (limit 20)
2026-02-15 09:17:56 +08:00
google-labs-jules[bot] 261ba90ca4 feat: implement infinite scroll for all lists and set api limit to 20
- Added `useInfiniteScroll` hook using `react-intersection-observer`.
- Updated `PoseService` and `ExpressionService` to support pagination with mixed built-in and DB items.
- Updated `OutfitService` to support pagination.
- Updated `src/api/pose.ts`, `src/api/expression.ts`, `src/api/outfit.ts`, `src/api/character.ts` to accept `page`/`limit` (default limit 20).
- Refactored `Equipments`, `Characters`, `Poses`, `Expressions` pages to use infinite scroll.
- Refactored `CreateLookDialog` and `LoadOutfitDialog` to use infinite scroll.
- Updated `AGENTS.md` with new guidelines.
2026-02-14 15:18:02 +00:00
Yiling-J ea35643609 Merge pull request #22 from Yiling-J/redesign-create-look-dialog-13997618871008273386
Refine CreateLookDialog Layout
2026-02-14 16:53:46 +08:00
google-labs-jules[bot] 3e6ef3c7ab Refactor CreateLookDialog to use compact sidebar and 2-column grid
This change refines the `CreateLookDialog` layout to be more compact and user-friendly.

Key changes:
- Replaced the sidebar with a text-only vertical navigation bar (`w-32`) to maximize content space.
- Adjusted the equipment, pose, and expression grids to a fixed 2-column layout (`grid-cols-2`) for better item visibility and reduced density.
- Removed icons from sidebar buttons to streamline the interface.
- Updated `ScrollArea` components to correctly fill available height (`h-full`) to enable proper scrolling.
- Maintained the tabbed structure (Equipment, Pose, Expression, Instructions) and footer layout from the previous iteration.
2026-02-14 08:45:33 +00:00
google-labs-jules[bot] db22c3f271 Refactor CreateLookDialog to use compact sidebar and 2-column grid
This change refines the `CreateLookDialog` layout to be more compact and user-friendly.

Key changes:
- Replaced the sidebar with a text-only vertical navigation bar (`w-32`) to maximize content space.
- Adjusted the equipment grid to a fixed 2-column layout (`grid-cols-2`) for better item visibility and reduced density.
- Removed icons from sidebar buttons to streamline the interface.
- Maintained the tabbed structure (Equipment, Pose, Expression, Instructions) and footer layout from the previous iteration.
2026-02-14 08:26:08 +00:00
Yiling-J f5dbce1640 Merge pull request #21 from Yiling-J/feature-expression-customize-12480180928928972950
Add Expression Customization Feature
2026-02-14 15:13:34 +08:00
google-labs-jules[bot] aecad49192 feat: add expression customization
- Rename public/expressions files to expression_*.webp
- Add Expression model to Prisma schema
- Add expression field to Generation model
- Implement ExpressionService and API
- Update GenerationService to support expressions in AI prompt
- Add Expressions page and dialogs
- Update CreateLookDialog to include expression selector
- Add Expressions to sidebar and routing
2026-02-14 06:36:45 +00:00
yiling ji e3e38d2e9f add expressions 2026-02-14 13:49:07 +08:00
Yiling-J f323d9c69b Merge pull request #20 from Yiling-J/feature-custom-poses-12084446650630398805
Add custom poses support
2026-02-14 13:43:21 +08:00
google-labs-jules[bot] 6738e7f125 feat: add custom poses support
- Moved builtin poses to `public/poses`
- Added `Pose` model to schema and updated `Generation` model
- Created Pose Service and API
- Added Poses page to Frontend
- Updated CreateLookDialog to allow pose selection
- Updated Generation Service to handle pose instructions
- Added tests for Pose Service and Generation Service update
2026-02-14 04:51:24 +00:00
yiling ji 503b9ab6f3 add posegrid 2026-02-14 10:10:58 +08:00
Yiling-J 155744374d Merge pull request #19 from Yiling-J/refactor-equipment-single-select-and-fitting-room-header-13808441959024977531
feat: single select equipment category and updated fitting room header
2026-02-14 09:57:09 +08:00
yiling ji d6515e8c29 ui update 2026-02-13 21:27:20 +08:00
google-labs-jules[bot] a9dfa41083 feat: single select equipment category and updated fitting room header
- Refactored `Equipments` page to use single category selection.
- Updated `FittingRoom` page to use `PageHeader` component.
- Added `backButton` prop to `PageHeader` component to support navigation controls.
- Removed "Manage looks for" hint text from Fitting Room header.
2026-02-13 13:17:55 +00:00
Yiling-J 221dbea09f Merge pull request #18 from Yiling-J/extraction-grid-refactor-6576410645135316312
Refactor extraction to use grid-based splitting
2026-02-13 19:54:39 +08:00
google-labs-jules[bot] 50c0b0a943 Enhance extraction prompt for detail preservation
- Updated texture generation and refinement prompts to emphasize capturing and maintaining all details, materials, and patterns.
- Reverted analyze prompt to original state to avoid over-constraint.
2026-02-13 11:40:57 +00:00
google-labs-jules[bot] d18c4e771c Return texture sheet to client in extraction flow
- API: Emit 'texture_generated' event with sheet image and grid dimensions
- UI: Render generated texture sheet with grid overlay in ExtractorDialog
- Service: Expose getGridDimensions method publicly
2026-02-13 11:12:34 +00:00
google-labs-jules[bot] c887f6ebf0 Return texture sheet to client in extraction flow
- API: Emit 'texture_generated' event with sheet image and grid dimensions
- UI: Render generated texture sheet with grid overlay in ExtractorDialog
- Service: Expose getGridDimensions method publicly
2026-02-13 09:26:36 +00:00
google-labs-jules[bot] 2670930334 Refactor extraction to use grid-based splitting
- Removed AI-based bounding box detection
- Implemented deterministic grid calculation (1x3, 2x2, 2x3, 3x3)
- Updated extraction prompts to request specific grid layouts and white background
- Removed color assignment logic
- Updated ExtractedAsset interface
- Updated API to stream grid splitting status instead of detection status
- Updated tests to verify new logic and mock removal of color fields
- Removed "Detect Bounding Boxes" step from ExtractionFlowDesigner UI
2026-02-13 09:18:12 +00:00
google-labs-jules[bot] cfe624c5aa Refactor extraction to use grid-based splitting
- Removed AI-based bounding box detection
- Implemented deterministic grid calculation (1x3, 2x2, 2x3, 3x3)
- Updated extraction prompts to request specific grid layouts and white background
- Removed color assignment logic
- Updated ExtractedAsset interface
- Updated API to stream grid splitting status instead of detection status
- Updated tests to verify new logic and mock removal of color fields
2026-02-13 08:37:03 +00:00