The @seeds/server package
Make a new packages/server folder
shmkdir -p packages/server/srcmkdir -p packages/server/tests
Move the contents of
packages/ui/src/serverinto our newsrcsubfolderpackages/ui/tests/serverinto our newtestssubfolder
shmv packages/ui/src/data packages/servermv packages/ui/src/server/* packages/server/srcmv packages/ui/tests/server/* packages/server/tests
Now we need a very basic packages/server/package.json. Let’s start with this
json"name": "@seeds/server","private": true,"version": "0.0.0","type": "module","dependencies": {"@seeds/models": "workspace:*"}
You touched dependencies, so run pnpm i.
Now, our ui pakcage has a dev-server script that seems useful. Let’s bring that over (this time as a dev script, since this package is the server). Bring the lint and test scripts as well.
json"scripts": {"dev": "tsx --watch --watch-preserve-output src/index.ts","test": "vitest run","test:watch": "vitest","test:ui": "vitest --ui","test:coverage": "vitest run --coverage","lint": "eslint ."}
Remember to change that path in the dev script — it should point to src/index.ts
Let’s also add build and dev scripts — copy these straight from the @seeds/models package.
json{"scripts": {"build": "tsc -p tsconfig.build.json","dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput"}}
Copy the tsconfig.json and tsconfig.build.json files from the @seeds/models package into the @seeds/server package.
shcp packages/models/tsconfig.json packages/server/tsconfig.jsoncp packages/models/tsconfig.build.json packages/server/tsconfig.build.json
Ok we’re not quite done. We need still need external dependencies for this package — it uses express, a logger, etc. Let’s grab anything that doesn’t seem obviously UI-related from @seeds/ui’s package.json
packages/server/package.json
json"devDependencies": {"@eslint/js": "^9.28.0","@types/cors": "^2.8.19","@types/express": "^5.0.3","@types/node": "^24.0.0","@vitest/coverage-v8": "^3.2.3","@vitest/ui": "^3.2.3","concurrently": "^9.1.2","eslint": "^9.28.0","prettier": "^3.5.3","tsx": "^4.20.0","typescript": "5.7.0","typescript-eslint": "^8.34.0","vitest": "^3.2.3","@seeds/models": "workspace:*"},"dependencies": {"cors": "^2.8.5","express": "^5.1.0","winston": "^3.17.0","yaml": "^2.8.0"}
And our ui package won’t need some of these server-related things now, so let’s slim that down (dependencies has been removed entirely)
packages/ui/package.json
json"devDependencies": {"@eslint/js": "^9.28.0","@sveltejs/vite-plugin-svelte": "^5.0.3","@tailwindcss/postcss": "^4.1.8","@testing-library/jest-dom": "^6.6.3","@testing-library/svelte": "^5.2.8","@tsconfig/svelte": "^5.0.4","@vitest/coverage-v8": "^3.2.3","@vitest/ui": "^3.2.3","autoprefixer": "^10.4.21","concurrently": "^9.1.2","daisyui": "^5.0.43","eslint": "^9.28.0","jsdom": "^26.1.0","postcss": "^8.5.4","prettier": "^3.5.3","prettier-plugin-svelte": "^3.4.0","sass-embedded": "^1.89.2","svelte": "^5.28.1","svelte-check": "^4.1.6","tailwindcss": "^4.1.8","typescript": "5.8.1","typescript-eslint": "^8.34.0","vite": "^6.3.5","vitest": "^3.2.3"}
You can also get rid of the volta object in the ui’s package.json at this time. You touched dependencies, so run pnpm i.
Now run
shpnpm check
so that you can find any module import paths that need to be fixed. Once you get it passing, you should now be able to build and test everything across the repo now.
shpnpm build && pnpm test && pnpm check
You may notice that linting doesn’t work yet. Let’s fix that next