Files
artcraft/frontend
Dylan M. Taylor d6772fdd94 frontend: uuidv4 for local ids instead of Math.random (Sonar S2245) (#2820)
Clears the 38 open typescript:S2245 issues (18 files).

Each `Math.random().toString(36)…` made a local id: an upload row, a
reference title, a batch or subscriber id, an idempotency token, an
image cache-buster. They now use `uuidv4()` from `uuid`, which is
already a dependency and imported the same way elsewhere (`import { v4
as uuidv4 } from "uuid"`). It reads `crypto.getRandomValues`, so it also
works where `crypto.randomUUID` doesn't (outside a secure context). The
`crypto.randomUUID ? … : Math.random()…` fallbacks therefore collapse to
`uuidv4()`, and `subscriberId ? subscriberId : …` becomes `subscriberId
|| uuidv4()`.

Ids are now 36 characters instead of 5–13. Nothing parses or compares
their length. Typecheck is left to CI.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
<!-- coderabbit-ai-generated:v1 -->

## Summary by CodeRabbit

* **Improvements**
* Creative tools now handle identifiers more consistently for generated
content, uploads, reference media, and generation batches.
* Completed generation results are displayed more reliably when there
isn’t a matching pending result.
* These improvements span image, video, audio, 3D, drawing, and
visual-effects workflows, helping keep related media and results
organized across the app.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Also: `ImageTo3DStore` and `ImageTo3DWorldStore` shared the same 30-line
`completeGeneration` (find the subscriber's result, else the first
pending one, and mark it completed, or add a completed one). It's now
one `completeGenerationResult` in `pages/Stores/`, which removes the
duplication the new-code gate counted against this PR.
2026-11-10 21:49:49 -05:00
..
2026-09-11 14:19:51 -04:00
2026-09-27 14:48:34 -04:00
2026-09-11 14:19:51 -04:00
2026-09-11 14:19:51 -04:00
2026-09-11 14:19:51 -04:00
2026-09-11 14:19:51 -04:00
2026-09-11 14:19:51 -04:00
2026-09-11 14:19:51 -04:00

Artcraft frontend

This Nx workspace contains the Tauri desktop frontend in apps/artcraft and its shared libraries in libs. Website and Netlify builds live in artcraft-services.

Use Node.js 20 or newer and npm. Run the following commands from frontend/:

npm ci
npx nx dev artcraft
npx nx build artcraft

The frontend development server uses port 5173. Start the Rust app separately from the repository root:

./script/artcraft/unix_rust_dev.sh

The repository-root frontend launcher installs dependencies and starts the same server:

./script/artcraft/unix_frontend_dev.sh

On Windows, use script/artcraft/windows_frontend_dev.ps1 and script/artcraft/windows_rust_dev.ps1 in separate terminals. See development setup for Rust and Tauri prerequisites.

The Vite build writes apps/artcraft/dist, which Tauri bundles. Public resources come from apps/artcraft/app/public. The app also needs its retained libraries, root package lock, TypeScript project references, and Nx/Vite configuration. The aliases in tsconfig.base.json resolve shared libraries to their source for both development and production. The app's Vite configuration loads this file explicitly so imports inside shared libraries use the same aliases. The desktop build does not require library dist/ outputs or a separate library build.

Import shared libraries by the names declared in their package.json files:

import { Button } from "@storyteller/ui-button";
import { Modal } from "@storyteller/ui-modal";

Use the workspace-local Nx version through npx nx. npm ci and the release workflows use the checked-in lockfile; do not reinstall different Nx versions inside CI.

clean_modules.sh is an explicit cleanup command that removes build outputs, Nx caches, and frontend dependencies. Do not run it when preserving local build outputs during repository pruning.