Skip to content

Monorepo: move the web app into apps/web - #544

Merged
oleksandr-blip merged 1 commit into
mainfrom
chore/monorepo-web-to-apps
Oct 5, 2026
Merged

oleksandr-blip merged 1 commit into
mainfrom
chore/monorepo-web-to-apps

Conversation

@oleksandr-blip

@oleksandr-blip oleksandr-blip commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Change-Set: chore-monorepo-web-to-apps

Follow-up to #543. The web app moves under apps/ next to the desktop and mobile shells.

Layout

  • apps/web is self-contained, like the shells: its own package.json, lockfile, node_modules, .npmrc and lint/format/ignore configs.
  • No npm workspaces and no root package.json. Hoisting would move node_modules to the root and break three things anchored on it: the Tailwind content glob, the CLAUDE.md token-rules import, and standalone output tracing.
  • The root keeps only repo-wide files: .github, .husky, renovate.json, .trivyignore, docs/ (the hub's doc pipeline writes there), README/CONTRIBUTING/LICENSE/SECURITY.

Changes beyond the renames

Git detects 2,362 files as renames; git log --follow keeps their history.

  • Husky: .husky stays at the root because git runs hooks there. prepare installs it with cd ../.. && husky, and the hook works inside apps/web with --relative diffs.
  • test.yml / release.yml: both build the image with -f apps/web/Dockerfile apps/web, and the lint job runs in apps/web. release.yml now ignores only apps/desktop/** and apps/mobile/**; the old apps/** would have skipped the web itself.
  • Shells: both build-web.sh scripts and the desktop-release.yml npm cache point at apps/web.
  • .gitignore: split into a repo-wide root file and apps/web/.gitignore.
  • VS Code: typescript.tsdk and eslint.workingDirectories point at apps/web.
  • CLAUDE.md: the root file is now the repository layout and imports apps/web/CLAUDE.md. README and CONTRIBUTING commands say cd apps/web.

After merging

  • Locally: delete the root node_modules, .next, dist, next-env.d.ts and tsconfig.tsbuildinfo left over from the old layout, then run cd apps/web && npm ci. That reinstalls the hooks.
  • Open PRs need a rebase across the move; git's rename detection carries most of them.

Verification

  • Locally, in apps/web:
    • tsc, lint:ci and Prettier pass.
    • The standalone npm run build succeeds, with server.js at the root of dist/standalone, the layout the Dockerfile copies.
  • Shells: apps/desktop npm run build:web produces the 107-page export from apps/web.
  • Hook and linters: the rewritten pre-commit hook passed on this commit, and actionlint and shellcheck are clean.
  • Not verified locally: the Docker image build, since there is no Docker on this machine. "Test Frontend" on this PR is its first run.

🤖 Generated with Claude Code

Change set flamingo-stack/chore-monorepo-web-to-apps: this pull request is the only one in it so far. Another pull request joins by naming this one in a Depends-On line, or by carrying the same Change-Set line.

Linked by the Depends-On / Change-Set lines in these descriptions; this block is maintained by the hub.

The web app joins the shells under apps/, self-contained like them: its own
package.json, lockfile, node_modules, .npmrc and lint/format/ignore configs.
No npm workspaces and no root package.json: hoisting would move node_modules
to the root and break the paths anchored on it (tailwind content glob, the
CLAUDE.md token-rules import, standalone output tracing).

- Root keeps repo-wide files only: .github, .husky, renovate.json, .trivyignore,
  docs/ (the hub's doc pipeline writes there), README/CONTRIBUTING/LICENSE/SECURITY.
- .husky stays at the root (git runs hooks there); `prepare` installs it with
  `cd ../.. && husky`, and the hook works inside apps/web with --relative diffs.
- test.yml / release.yml build the image from apps/web; release.yml now ignores
  only apps/desktop and apps/mobile.
- The shells' build-web.sh and desktop-release's npm cache point at apps/web.
- .gitignore splits into a repo-wide root file and apps/web's own.
- VS Code: tsdk and ESLint working directory point at apps/web.
- CLAUDE.md: the root file is the repository layout and imports apps/web/CLAUDE.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@oleksandr-blip
oleksandr-blip requested review from a team as code owners October 5, 2026 09:29
@github-actions

github-actions Bot commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

🦩 Flamingo Code Review

Not reviewed yet. Reviews start when you ask, so the reviewer reads this pull request when it is ready, not when it is opened.

When it is ready:

  • Review this pull request

Or comment @flamingo-review. Add the flamingo-review-always label to review every push.

Updated 2026-10-05 09:30 UTC · workflow run

@oleksandr-blip
oleksandr-blip merged commit 26098f8 into main Oct 5, 2026
21 checks passed
@oleksandr-blip
oleksandr-blip deleted the chore/monorepo-web-to-apps branch October 5, 2026 09:38
pavlo-flamingo added a commit that referenced this pull request Oct 5, 2026
main moved the web app into apps/web (#544) while this branch had
regrouped billing-usage into subfolders, so git saw every billing file
as renamed two ways. Resolved by replaying the branch in the new layout
and merging there: every path only one side changed is taken verbatim
from that side, and the one file both changed, schema.graphql, is main's
SDL with this branch's additions spliced in.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants