Commit Graph

42 Commits

Author SHA1 Message Date
8a36d803b3 feat(media): full Clean Architecture scaffold
Media is now a complete vertical-feature package mirroring auth/blog
structure: entities (models + errors), application (repositories +
use-cases), infrastructure (real Payload-backed + mock siblings),
interface-adapters (per-use-case controllers), DI (symbols + module +
container + bind-production), integrations/api (mediaRouter), factory,
contract suite, and feature integration tests.

Wired into:
- packages/core-api/src/root.ts (added `media: mediaRouter`)
- apps/web-next/src/server/bind-production.ts (calls bindProductionMedia)
- tsconfig.base.json (added @repo/media/api and ./di/bind-production aliases)

56 new tests in @repo/media (13 test files); core-api router test updated
to assert media. procedures. All 26 turbo tasks green.

Refactor log: §2, §4.1, §4.2, §5.1, §6.1
Spec: §6.5

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 00:29:05 +02:00
bd50a67662 feat(storybook): wire @storybook/test-runner for story smoke tests
Every story is now executed as a smoke test (mount + no console errors)
via @storybook/test-runner. New script: pnpm test:stories runs
build-storybook then test-storybook against the static build.

Spec: §6.8

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 19:10:41 +02:00
119eab49fe feat(apps): add unit tests for providers + bind-production + cms config
web-next: bindAllProduction calls all 4 feature binders exactly once;
Providers renders children. web-tanstack: equivalent providers + bind tests.
cms: payload.config exports a SanitizedConfig with all expected collections.

Spec: §6.7, §9

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 16:34:19 +02:00
eb55a698f3 fix(turbo-boundaries): resolve 32 violations
- Re-tag core-trpc as core-composition (transitively reaches features
  through core-api's AppRouter type) and allow core-composition packages
  to depend on other core-composition packages in turbo.json
- Add @payloadcms/richtext-lexical as direct dep of apps/cms (was pulled
  transitively via core-cms; Payload's importMap.js imports it directly)
- Add @storybook/react as devDep of core-ui and apps/storybook (stories
  belong with components per Atomic Design)
- Update apps/storybook .storybook/{main,preview}.ts to point at
  packages/core-ui (was still referencing deleted packages/ui) and export
  CSS via package exports instead of direct file import
- Add JSDoc type annotation to Payload-generated importMap.js to suppress
  TypeScript's TS2742 error from complex inferred types
- Add storybook-static to eslint ignores in core-eslint base config

pnpm turbo boundaries now reports zero violations.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 12:12:27 +02:00
9899e213ca build(turbo): add boundaries enforcement matching ESLint dependency graph
Per-package tags + root boundaries block now enforce the same three-tag
model as eslint-plugin-boundaries:
- app          → may depend on: app, core, core-composition, feature, tooling
- feature      → may depend on: core, tooling
- core         → may depend on: core, core-composition, tooling
- core-composition (core-api, core-cms) → may depend on: core, feature, tooling
- tooling (core-eslint, core-typescript) → may depend on: tooling

Tags applied: 4 apps (app), 3 core foundation packages (core),
2 core composition packages (core-composition), 5 features (feature),
2 tooling packages (tooling). All test suites pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 11:59:44 +02:00
0972645ebb refactor: rename eslint-config + typescript-config to core-eslint + core-typescript
Aligns tooling packages with the core-* naming convention used by all
other foundation packages (core-shared, core-cms, core-api, core-trpc,
core-ui). Updates ~50 files: package.json names, devDependencies,
tsconfig extends, eslint.config imports, vitest.config imports, AGENTS.md
references, and the boundaries plugin patterns to match the new paths.

The tooling-specific patterns in boundaries/elements are now ordered BEFORE
the broader core-* pattern to ensure correct first-match-wins behavior.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 10:37:07 +02:00
3856701252 fix(lint): exempt next-env.d.ts triple-slash + declare globalEnv vars
next-env.d.ts is a generated file using triple-slash references that
TypeScript requires. ESLint exemption added in apps/web-next config only.
Also declare CI, DATABASE_URL, PAYLOAD_SECRET, NODE_ENV in turbo.json
globalEnv so turbo/no-undeclared-env-vars stops warning.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 10:02:33 +02:00
2c6c836206 docs(agents): write per-app AGENTS.md for cms, web-next, web-tanstack, storybook 2026-05-05 10:00:28 +02:00
a7b9890db5 test(web-tanstack): add Playwright scaffold + skipped home spec 2026-05-05 09:26:19 +02:00
106e5c2737 test(web-next): add Playwright config + smoke specs (home, about, blog 404) 2026-05-05 09:25:42 +02:00
22bee5362f feat(eslint-config): add boundaries plugin enforcing app→feature→core graph
- Install eslint-plugin-boundaries@^4.2.2 to enforce three-tag boundary model
- Configure element types: app, core-composition (core-api/core-cms), core, feature, tooling
- Enforce unidirectional dependency graph: apps→features→core, core-composition→features
- Add eslint.config.js to all 17 packages and apps (required for ESLint 9 flat config)
- Fix pre-existing linting issues to achieve clean lint pass

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 09:21:01 +02:00
acae859773 chore: delete legacy packages (api, api-client, cms-client, cms-core, core, ui) 2026-05-05 09:13:08 +02:00
f17f24e8f9 build(cms): drop legacy @repo/cms-core dep (now uses @repo/core-cms only) 2026-05-05 09:11:46 +02:00
346e77ed0c build(storybook): migrate from @repo/ui to @repo/core-ui 2026-05-05 09:11:23 +02:00
f1da728482 feat(web-tanstack): consume marketingPages.siteSettings + navigation.header via tRPC client 2026-05-05 09:02:50 +02:00
a9e64569eb build(web-tanstack): swap deps + use TanstackTrpcProvider against shared backend 2026-05-05 09:01:47 +02:00
1308fe4644 fix: enable overrideAccess=true for public Payload repository reads
All public pages (site settings, header, pages, articles) now bypass
Payload's access control checks when reading, as they should be publicly
accessible without authentication. This fixes 403 Forbidden errors on
homepage and article rendering.
2026-05-05 08:59:18 +02:00
7809f21151 feat(web-next): render /blog/[slug] article detail via blog.articleBySlug 2026-05-05 08:55:41 +02:00
293d855d06 feat(web-next): render /about marketing page via marketingPages.pageBySlug 2026-05-05 08:54:41 +02:00
5f0a66581a feat(web-next): render homepage with siteSettings + header + article list 2026-05-05 08:54:20 +02:00
8403bfee7f feat(web-next): wire tRPC route handler against core-api + new TrpcProvider 2026-05-05 08:54:04 +02:00
bd1a348340 feat(web-next): add server bindAllProduction() aggregator with idempotent guard 2026-05-05 08:53:03 +02:00
9d5f4fca33 build(web-next): swap deps to core-* + feature packages, transpile new workspaces 2026-05-05 08:52:37 +02:00
9c8ca61fc9 feat(cms): repoint @payload-config from cms-core to core-cms 2026-05-04 20:54:27 +02:00
41a35b5460 fix(cms): add Payload REST API + GraphQL route handlers, revert to inline serverFunction 2026-04-06 15:57:04 +02:00
6ded84c6de fix(cms): extract serverFunction to separate 'use server' file for Next.js 15.5 server action registration 2026-04-06 15:54:50 +02:00
a936275581 fix(cms): align layout/page/not-found with Payload 3.81 template (correct importMap path, CSS import, serverFunction) 2026-04-06 15:50:50 +02:00
bc111ce8d3 fix(cms): fix serverFunction type for Payload 3.81 compatibility 2026-04-06 15:46:06 +02:00
575770e142 fix(cms): import CSS from @payloadcms/next/css, use handleServerFunctions from layouts 2026-04-06 15:45:55 +02:00
ddd1a546f7 fix(cms): add sass dependency for Payload admin panel styles 2026-04-06 15:40:09 +02:00
3c9cd47427 fix(cms): add local payload.config.ts re-export for proper @payload-config resolution 2026-04-06 15:34:31 +02:00
0bc3b02f70 docs: extend all 18 AGENTS.md files with comprehensive context, code examples, and recipes 2026-04-06 15:31:03 +02:00
d06b900e7c refactor: remove .js extensions from all imports 2026-04-06 15:10:22 +02:00
2c110b33e9 feat: add AGENTS.md for all packages and apps (9 files) 2026-04-06 15:04:15 +02:00
f7c2ac6ffb chore: finalize Plan 5 — defer Storybook build to dev mode 2026-04-06 14:58:46 +02:00
cca8f99133 feat(storybook): add Storybook 8 with Tailwind v4 pulling stories from @repo/ui 2026-04-06 14:57:37 +02:00
3152aa670c chore: finalize Plan 4 — defer app builds to runtime, fix package build scripts 2026-04-06 14:51:49 +02:00
8836fa5333 feat(web-tanstack): add TanStack Start app shell with tRPC client 2026-04-06 14:50:16 +02:00
2b9a1adafd feat(web-next): add Next.js 15 app shell with tRPC endpoint 2026-04-06 14:49:43 +02:00
f313d6841f fix(cms): fix import paths and defer CMS build to runtime (requires database) 2026-04-06 14:44:42 +02:00
683b05dbf3 feat(cms): add thin Next.js shell for Payload admin panel 2026-04-06 14:41:51 +02:00
1cd9d6ffba feat: add placeholder apps (web-next, web-tanstack, cms, storybook) 2026-04-06 14:09:21 +02:00