## What The `storytold/printcraft` repo is now [`storytold/pdfcraft`](https://github.com/storytold/pdfcraft), and every Crafting Apps README already links `getartcraft.com/apps/pdfcraft`, which didn't exist on the site until now. This renames the app on the site. - **Slug and name:** `/apps/pdfcraft`, shown as "PdfCraft" in the nav, footer, `/apps` hub, sitemap, press kit and JSON-LD. Copy, category and theme colour are unchanged; only the name changes. - **Legacy links redirect permanently (308):** - `/apps/printcraft` → `/apps/pdfcraft` - `/images/apps/printcraft/<file>` → `/images/apps/pdfcraft/<file>`, so share images already cached by social sites keep loading. - **Images:** moved to `public/images/apps/pdfcraft/`. The four screenshots and the share image were rebuilt from the README's renamed `pdfcraft-*.png` renders, which are slightly newer than the site's (they show the in-app Discord button). The "Full size" and press-kit links had been pointing at the old `printcraft-*.png` names, which no longer exist; they now point at the new files. - **Downloads:** v0.2.1 was published before the rename, so its files are still called `printcraft-0.2.1-*`. `CraftRelease` gains an optional `fileSlug` for this, and PdfCraft sets it to `printcraft`. Once a release ships with `pdfcraft-*` names, removing that one line switches it over. ## Verification Rendered locally: - `/apps/printcraft` and the old image URLs return 308 to their PdfCraft equivalents. Following the redirect lands on the PdfCraft page with its theme. - `/apps/pdfcraft`: the title, canonical URL and `og:image` use pdfcraft. All 17 download links resolve directly on `storytold/pdfcraft`, without going through GitHub's redirect. - The sitemap lists `/apps/pdfcraft`, and `/`, `/apps` and `/press-kit` show no "PrintCraft". All press-kit links for PdfCraft return 200. - `tsc` shows no errors in the changed files. The errors that remain are already on `main`. ## Note The screenshots still show "PrintCraft" inside the app (the window tab and the sample PDF), because the PdfCraft repo renamed the image files without re-rendering them. They'll update once the README screenshots are re-captured. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Frontend
This is the Nx workspace for ArtCraft web apps and shared libraries. The desktop frontend is maintained in storytold/artcraft.
All commands to run these projects are performed from this directory (except the repo-root launcher scripts noted below).
Requirements
- Node.js 20+ (Nx 21 / Vite 6 requirement). Install via nvm,
nodejs.org, or
brew install node. - npm (ships with Node).
We use npm, not pnpm. pnpm was briefly adopted ("add pnpm to solve build issues") and later removed ("fix(frontend): consume video-editor libs via nx path aliases, drop pnpm"). If you have leftovers from that era — a
pnpm-lock.yaml,pnpm-workspace.yaml, or anode_modules/.pnpmdirectory — npm installs will fail (typically withENOTEMPTYrename errors). See Troubleshooting below.
Install dependencies
npm install
Running the apps in dev mode
From the repository root, the launcher scripts (these preflight your environment, install dependencies, and free the dev port first):
./script/website/unix_frontend_website_dev.sh # artcraft-website (marketing site), port 4200
./script/website/unix_frontend_webapp_dev.sh # artcraft-webapp (user dashboard), port 4201
Run the webapp from artcraft-services, not the separate artcraft desktop
checkout. The webapp launcher also works from another directory when invoked
by its full or relative path:
../artcraft-services/script/website/unix_frontend_webapp_dev.sh
Or directly from this directory:
nx dev artcraft-website
npx nx dev @frontend/artcraft-webapp
Building
npx nx build artcraft-website
npx nx build artcraft-webapp
Netlify deploys run apps/<app>/script/netlify_build.sh (see each app's
netlify.toml).
Troubleshooting
npm install fails with ENOTEMPTY: directory not empty, rename ...
Your node_modules tree is corrupted — usually an interrupted install, or a
tree written by pnpm back when the repo briefly used it. Fix:
./clean_modules.sh
npm install
Or the manual minimum:
rm -rf node_modules .nx pnpm-lock.yaml pnpm-workspace.yaml
npm install
Stale build state after switching branches
Call this when starting on main or a new branch:
./clean_modules.sh
It removes all dist/ outputs, resets the nx cache, and removes
node_modules.
Import aliases
The names for @frontend and @storyteller come from the package.json file
in the libs folder:
import { Login } from "@frontend/login";
import { api } from "@storyteller/api";
For shared UI components, import from @storyteller/ui-[componentname]:
import { Button } from "@storyteller/ui-button";
import { Modal } from "@storyteller/ui-modal";
Generating a new component library
# 1. Generate the library
npx nx g @nx/react:library libs/components/toaster --import-path=@storyteller/ui-toaster --bundler=vite
npm install
# 2. Import it somewhere in code
# 3. Sync and build
nx sync
nx build