smoodly 0.0.11 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +40 -13
  2. package/package.json +5 -1
package/README.md CHANGED
@@ -312,11 +312,14 @@ Implemented:
312
312
  admin no longer derives a path of its own.
313
313
  - `smoodly/image` — the site's media components: `<SmoodlyImage>`,
314
314
  `<SmoodlyVideo>`, `imageUrl(image, { width, quality? }, loader?)`,
315
- `frameFor`/`boxAspectOf` (the crop math) and `smoodlyImages()` for
316
- `next.config`'s `images`: the Supabase host as a remote pattern, plus
317
- `dangerouslyAllowLocalIP` when that host is loopback or private Next
318
- 16's optimizer refuses a private upstream otherwise, and the local stack
319
- is one. Server-safe, no `"use client"`.
315
+ `frameFor`/`boxAspectOf` (the crop math). Server-safe, no `"use client"`.
316
+ - `smoodly/image/config` — `smoodlyImages()` for `next.config`'s `images`:
317
+ the Supabase host as a remote pattern, plus `dangerouslyAllowLocalIP`
318
+ when that host is loopback or private Next 16's optimizer refuses a
319
+ private upstream otherwise, and the local stack is one. Its own entry
320
+ because Next loads `next.config.ts` in plain Node, where anything that
321
+ reaches `next/image` fails to resolve (next@16 has no `exports` map);
322
+ `smoodly/image` still re-exports the helper for code the bundler sees.
320
323
 
321
324
  - Locked zones are usable: `fillLockedZones` (a pure tree op) materializes
322
325
  the one node of every empty locked zone from the component's `sample`
@@ -370,17 +373,41 @@ is open is hiding a section by a locale-dependent condition).
370
373
 
371
374
  ## Releasing
372
375
 
373
- Both packages move together. From the repo root:
376
+ Both packages move together. Bump before build (the CLI's templates are
377
+ regenerated from `examples/site` in the build and pin `smoodly@<version>`),
378
+ the user runs the two publishes (npm 2FA is a browser passkey), tag only
379
+ after both are on the registry. From the repo root:
374
380
 
375
- npm version 0.0.4 -w smoodly -w create-smoodly-app --no-git-tag-version
381
+ npm version 0.0.12 -w smoodly -w create-smoodly-app --no-git-tag-version
376
382
  npm run build
377
- npm publish -w smoodly --access public
378
- npm publish -w create-smoodly-app --access public
379
- git commit -am "release: 0.0.4" && git tag v0.0.4 && git push --tags origin main
383
+ npm publish -w smoodly --dry-run && npm publish -w create-smoodly-app --dry-run
384
+ npm publish -w smoodly --access public # user; first, the scaffold pins it
385
+ npm publish -w create-smoodly-app --access public # user
386
+ npm view smoodly@0.0.12 version # 404s for a minute or two after a good publish; poll
387
+ npm view create-smoodly-app@0.0.12 version
388
+ git commit -am "release: 0.0.12 — <changes since 0.0.11>" && git tag v0.0.12 && git push --tags origin main
380
389
 
381
- `prepublishOnly` rebuilds each package; the CLI's template is regenerated from
382
- `examples/site` in that build, so the template always matches the example
383
- site at the tagged commit.
390
+ `prepublishOnly` rebuilds each package. The Claude Code skill
391
+ `.claude/skills/releasing-smoodly` carries the same order with its checks.
392
+
393
+ ## Follow-ups (logged 2026-09-08, tooling session)
394
+
395
+ - **CI live job red since e09a632, 0.0.11 fresh install broken — fixed
396
+ 2026-09-08, released as 0.0.12: `smoodly/image/config` is the entry
397
+ `next.config.ts` imports; `test/image-config-entry.test.ts` loads the
398
+ built file under bare node.** The
399
+ scaffolded `next.config.ts` imports `smoodlyImages` from `smoodly/image`,
400
+ whose index re-exports `SmoodlyImage.tsx` and its `import Image from
401
+ "next/image"`. Next loads the config in plain Node ESM and next@16.3.4
402
+ has no `exports` map, so the extensionless specifier fails
403
+ (`ERR_MODULE_NOT_FOUND ... Did you mean "next/image.js"?`) before
404
+ `next build` starts; the bundler resolves it, which is why nothing else
405
+ caught it. Reproduce from `examples/site`:
406
+ `node --input-type=module -e "await import('smoodly/image')"`. Fix: a
407
+ component-free entry for the config helper (the template and the
408
+ example comment then import from it), a plain-Node import test, then
409
+ release 0.0.12. Appending `.js` alone is weaker: Node hands back the
410
+ CommonJS `module.exports` object as the default, not the component.
384
411
 
385
412
  ## Follow-ups (logged 2026-09-08, client routing spec)
386
413
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smoodly",
3
- "version": "0.0.11",
3
+ "version": "0.0.12",
4
4
  "description": "Open-source, code-first CMS for Next.js on Supabase: define a component once, it becomes a typed, editable building block.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -24,6 +24,10 @@
24
24
  "types": "./dist/image/index.d.ts",
25
25
  "default": "./dist/image/index.js"
26
26
  },
27
+ "./image/config": {
28
+ "types": "./dist/image/next-config.d.ts",
29
+ "default": "./dist/image/next-config.js"
30
+ },
27
31
  "./admin": {
28
32
  "types": "./dist/admin/index.d.ts",
29
33
  "default": "./dist/admin/index.js"