npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

create-daniworks-app

v0.11.3

Published

Scaffold a new Daniworks Builder project (Strapi v5 CMS + Next.js block-rendering front end)

Readme

create-daniworks-app

Create a Strapi CMS and Next.js Open Atelier site with actual packaged Korean business content.

Requirements: Node >=22.13 and pnpm >=10.26 on PATH.

npx create-daniworks-app my-site --template business-basic --theme open-atelier --composition forest-stay --palette pine

# Optional locale examples:
npx create-daniworks-app multilingual-site --i18n
npx create-daniworks-app regional-site --i18n=ko,en,ja

cd my-site
pnpm --filter cms template:import
pnpm --filter cms dev

Open http://localhost:1337/admin, register an admin and create a Content API token under Settings → API Tokens. Set STRAPI_TOKEN in apps/web/.env.local, then run pnpm --filter web dev and open http://localhost:3000/ (also /about and /contact). admin:create-user creates an account, not a token. The local importer requires no token and must run with the CMS stopped.

Template, theme, composition and palette accept --name value or --name=value. i18n values require =:

| Option | Values | Default | | --------------- | ------------------------------------------------------ | ---------------- | | --template | business-basic | business-basic | | --theme | open-atelier | open-atelier | | --composition | forest-stay, logistics, ceramics | forest-stay | | --i18n | bare / true / false / comma-separated locale codes | off (ko) | | --palette | pine, ocean, clay | pine |

--help prints usage. Unknown flags, missing values and invalid selections fail before creating files. All nine composition/palette combinations are independent; palette changes only brand colors. Selection and manifest version are recorded in template-selection.json; portable data/assets remain sourced from @dani-builder/site-templates.

The generated README contains complete storage, permissions and recovery instructions. Repeated import verifies durable ownership and preserves IDs. Draft/customer edits, unowned destinations and changed versions/selections report conflicts instead of reseeding. Upload interruption reconciles marked Media Library rows; ambiguous provider-only outcomes require explicit manual recovery. The importer validates resolved payloads against installed runtime schemas and publishes through Strapi's Document Service.

For repository maintainers, run node packages/create-daniworks-app/scripts/packed-smoke.mjs from the repository root for an independent packed CLI/consumer install → real SQLite import → CMS/web production build → browser verification. packed-matrix.mjs collects all nine combinations independently and exits nonzero on failures; its strict workflow runs weekly for forest-stay/pine, while dispatch defaults to all nine cells and supports scope=single. A separate registry smoke runs after publishing Releases and weekly, generating through npx and checking import plus CMS/web builds; automatic runs preserve pnpm release-age protection, with an explicit dispatch override for fresh publications. The existing PR scaffold gate remains. The root .claude/skills/builder-extender/ is canonical; template/.claude/skills/builder-extender/ is its bundled copy. Refresh the copy with pnpm --filter create-daniworks-app sync:skills after changing the root skill. test/skills.test.js fails when the copy's file list or bytes differ from the root skill and prints the sync command. Generated consumers are retained under ignored build/dev-258-consumers/; tarball hashes, commands, logs and screenshots are under node_modules/.tmp/packed-scaffold/evidence/. See packed scaffold verification for Chrome, reuse and troubleshooting. These checks do not use the demo database. Runtime visual acceptance requires independent inspection of captured pages; historical Figma scores are not runtime scores.

MIT © HJ-company

New projects require Builder plugin and client >=2.0.0 <3 for Page.directAccess and home routing. The locale root (/) resolves the published Global.home relation by documentId; a missing relation returns 404. Page.directAccess defaults to true and controls public slug routes and sitemap visibility. Seeded home pages set it to false. An accessible home slug uses / as its canonical URL. Page and Global publish/unpublish webhooks invalidate the root, page routes, and sitemap; authenticated draft previews preserve their signed page path.

Generated sites map CMS SEO to page metadata and JSON-LD, serve CMS-aware robots rules, and mount site verification, favicon and analytics settings; GTM uses the official Next.js integration with the required @next/third-parties peer included in generated apps. GA4 uses the same required peer and needs adapter registration in a client integration wrapper; Matomo needs its optional peer and adapter registration.

Builder forms and global blocks

New projects require blocks >=2.0.0 <3 for SiteWideBlocks and BuilderForm. pnpm --filter cms template:import creates the owned published contact Form (version 1) targeting plugin::builder.inquiry, with required name and optional email, phone, subject and message fields. Fresh imports bind inquiry blocks with missing or blank form slugs in Page.blocks and Global.siteWideBlocks to contact, preserving explicit slugs and the source seed fingerprint. Reimport skips existing owned documents (including older blank slugs); edited content and unowned destinations still conflict instead of being overwritten.

The generated web app includes optional form peers, BuilderFormsProvider, anonymous same-origin GET definition/POST submission proxies and SiteWideBlocks above the footer. Inquiry blocks use the fetched definition's fields, consent and version; INQUIRY_* settings apply only to direct users of the legacy /api/inquiries bridge. Custom definitions and global block placement can be configured in Admin.

Existing generated sites do not gain these files by upgrading the CLI. Install blocks 1.0.0 and its optional form peers, adopt the provider, GET/POST proxy routes and SiteWideBlocks placement, publish Forms with the intended fields and consent, and manually select their slugs on existing inquiry blocks. Move block transport or extension inquiryTransport callbacks to provider transport(slug, SubmissionInput); block callbacks are ignored. Back up former custom block consent before upgrading and copy it into the Form definition. See the repository's forms setup guide.

New projects use next-intl locale routing with an unprefixed Korean default. Locale detection and automatic alternate links are disabled. Omit --i18n or use --i18n=false for Korean only; --i18n and --i18n=true enable ko,en. Use --i18n=ko,en,ja for a custom list: include ko, use unique Strapi-supported codes without uppercase or whitespace, and separate values with =. Korean is always first and the remaining locales keep their input order. A bare flag never consumes the next argument (--i18n site is valid); repeated and negated flags are rejected.

The importer creates missing selected CMS locales, retains existing locales, and sets the CMS default to ko before importing content. Only the packaged Korean seed is imported; /en or another locale returns 404 until its content is authored and published. Generated apps/web/lib/i18n.ts and template-selection.json contain the selection. This does not migrate existing projects. Legacy selections without i18n import as Korean only and retain their original ledger identity; changing an imported selection reports a conflict before writes. Language links require a published translation or target home; SEO alternates include actual published translations only.