chore: Updated branch to 0.4.0 eb1c9537
Steve Simkins · 2025-07-21 19:22 5 file(s) · +195 −83
.gitignore +1 −0
39 39
40 40
# Bun
41 41
bun.lockb
42 +
.turbo
README.md +32 −17
2 2
3 3
![cover](https://cdn.stevedylan.dev/ipfs/bafybeievx27ar5qfqyqyud7kemnb5n2p4rzt2matogi6qttwkpxonqhra4)
4 4
5 -
A full-stack TypeScript monorepo starter with shared types, using Bun, Hono, Vite, and React
5 +
A full-stack TypeScript monorepo starter with shared types, using Bun, Hono, Vite, and React.
6 6
7 7
## Why bhvr?
8 8
9 -
While there are plenty of existing app building stacks out there, many of them are either bloated, outdated, or have too much of a vendor lock-in. bhvr is built with the opinion that you should be able to deploy your client or server in any environment while also keeping type saftey.
9 +
While there are plenty of existing app building stacks out there, many of them are either bloated, outdated, or have too much of a vendor lock-in. bhvr is built with the opinion that you should be able to deploy your client or server in any environment while also keeping type safety.
10 10
11 11
## Features
12 12
13 13
- **Full-Stack TypeScript**: End-to-end type safety between client and server
14 14
- **Shared Types**: Common type definitions shared between client and server
15 -
- **Monorepo Structure**: Organized as a workspaces-based monorepo
15 +
- **Monorepo Structure**: Organized as a workspaces-based monorepo with Turbo for build orchestration
16 16
- **Modern Stack**:
17 -
  - [Bun](https://bun.sh) as the JavaScript runtime
17 +
  - [Bun](https://bun.sh) as the JavaScript runtime and package manager
18 18
  - [Hono](https://hono.dev) as the backend framework
19 19
  - [Vite](https://vitejs.dev) for frontend bundling
20 20
  - [React](https://react.dev) for the frontend UI
21 +
  - [Turbo](https://turbo.build) for monorepo build orchestration and caching
21 22
22 23
## Project Structure
23 24
27 28
├── server/               # Hono backend
28 29
├── shared/               # Shared TypeScript definitions
29 30
│   └── src/types/        # Type definitions used by both client and server
30 -
└── package.json          # Root package.json with workspaces
31 +
├── package.json          # Root package.json with workspaces
32 +
└── turbo.json            # Turbo configuration for build orchestration
31 33
```
32 34
33 35
### Server
34 36
35 -
bhvr uses Hono as a backend API for it's simplicity and massive ecosystem of plugins. If you have ever used Express then it might feel familiar. Declaring routes and returning data is easy.
37 +
bhvr uses Hono as a backend API for its simplicity and massive ecosystem of plugins. If you have ever used Express then it might feel familiar. Declaring routes and returning data is easy.
36 38
37 39
```
38 40
server
153 155
154 156
### Shared
155 157
156 -
The Shared package is used for anything you want to share between the Server and Client. This could be types or libraries that you use in both the enviorments.
158 +
The Shared package is used for anything you want to share between the Server and Client. This could be types or libraries that you use in both environments.
157 159
158 160
```
159 161
shared
165 167
└── tsconfig.json
166 168
```
167 169
168 -
Inside the `src/index.ts` we export any of our code from the folders so it's usabe in other parts of the monorepo
170 +
Inside the `src/index.ts` we export any of our code from the folders so it's usable in other parts of the monorepo
169 171
170 172
```typescript
171 173
export * from "./types"
197 199
### Development
198 200
199 201
```bash
200 -
# Run shared types in watch mode, server, and client all at once
202 +
# Run all workspaces in development mode with Turbo
201 203
bun run dev
202 204
203 -
# Or run individual parts
204 -
bun run dev:shared  # Watch and compile shared types
205 -
bun run dev:server  # Run the Hono backend
206 -
bun run dev:client  # Run the Vite dev server for React
205 +
# Or run individual workspaces directly
206 +
bun run dev:client    # Run the Vite dev server for React
207 +
bun run dev:server    # Run the Hono backend
207 208
```
208 209
209 210
### Building
210 211
211 212
```bash
212 -
# Build everything
213 +
# Build all workspaces with Turbo
213 214
bun run build
214 215
215 -
# Or build individual parts
216 -
bun run build:shared  # Build the shared types package
216 +
# Or build individual workspaces directly
217 217
bun run build:client  # Build the React frontend
218 +
bun run build:server  # Build the Hono backend
219 +
```
220 +
221 +
### Additional Commands
222 +
223 +
```bash
224 +
# Lint all workspaces
225 +
bun run lint
226 +
227 +
# Type check all workspaces
228 +
bun run type-check
229 +
230 +
# Run tests across all workspaces
231 +
bun run test
218 232
```
219 233
220 234
### Deployment
237 251
Types are automatically shared between the client and server thanks to the shared package and TypeScript path aliases. You can import them in your code using:
238 252
239 253
```typescript
240 -
import { ApiResponse } from '@shared/types';
254 +
import { ApiResponse } from 'shared/types';
241 255
```
242 256
243 257
## Learn More
246 260
- [Vite Documentation](https://vitejs.dev/guide/)
247 261
- [React Documentation](https://react.dev/learn)
248 262
- [Hono Documentation](https://hono.dev/docs)
263 +
- [Turbo Documentation](https://turbo.build/docs)
249 264
- [TypeScript Documentation](https://www.typescriptlang.org/docs/)
bun.lock +16 −40
5 5
      "name": "bhvr",
6 6
      "devDependencies": {
7 7
        "bun-types": "latest",
8 -
        "concurrently": "^9.1.2",
8 +
        "turbo": "^2.5.5",
9 9
      },
10 10
      "peerDependencies": {
11 11
        "typescript": "^5.7.3",
52 52
      "name": "shared",
53 53
      "version": "0.0.1",
54 54
      "devDependencies": {
55 -
        "typescript": "^5.2.2",
55 +
        "typescript": "^5.8.3",
56 56
      },
57 57
    },
58 58
  },
309 309
310 310
    "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="],
311 311
312 -
    "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
313 -
314 312
    "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
315 313
316 314
    "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
334 332
    "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="],
335 333
336 334
    "client": ["client@workspace:client"],
337 -
338 -
    "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="],
339 335
340 336
    "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
341 337
343 339
344 340
    "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="],
345 341
346 -
    "concurrently": ["concurrently@9.1.2", "", { "dependencies": { "chalk": "^4.1.2", "lodash": "^4.17.21", "rxjs": "^7.8.1", "shell-quote": "^1.8.1", "supports-color": "^8.1.1", "tree-kill": "^1.2.2", "yargs": "^17.7.2" }, "bin": { "concurrently": "dist/bin/concurrently.js", "conc": "dist/bin/concurrently.js" } }, "sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ=="],
347 -
348 342
    "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="],
349 343
350 344
    "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
358 352
    "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="],
359 353
360 354
    "electron-to-chromium": ["electron-to-chromium@1.5.149", "", {}, "sha512-UyiO82eb9dVOx8YO3ajDf9jz2kKyt98DEITRdeLPstOEuTlLzDA4Gyq5K9he71TQziU5jUVu2OAu5N48HmQiyQ=="],
361 -
362 -
    "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
363 355
364 356
    "enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="],
365 357
414 406
    "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
415 407
416 408
    "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="],
417 -
418 -
    "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="],
419 409
420 410
    "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="],
421 411
437 427
438 428
    "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
439 429
440 -
    "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
441 -
442 430
    "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
443 431
444 432
    "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
488 476
    "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.1", "", { "os": "win32", "cpu": "x64" }, "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg=="],
489 477
490 478
    "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="],
491 -
492 -
    "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="],
493 479
494 480
    "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="],
495 481
547 533
548 534
    "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="],
549 535
550 -
    "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="],
551 -
552 536
    "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="],
553 537
554 538
    "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
557 541
558 542
    "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
559 543
560 -
    "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="],
561 -
562 544
    "scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="],
563 545
564 546
    "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
571 553
572 554
    "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
573 555
574 -
    "shell-quote": ["shell-quote@1.8.2", "", {}, "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA=="],
575 -
576 556
    "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
577 -
578 -
    "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
579 -
580 -
    "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
581 557
582 558
    "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="],
583 559
584 -
    "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="],
560 +
    "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
585 561
586 562
    "tailwindcss": ["tailwindcss@4.1.10", "", {}, "sha512-P3nr6WkvKV/ONsTzj6Gb57sWPMX29EPNPopo7+FcpkQaNsrNpZ1pv8QmrYI2RqEKD7mlGqLnGovlcYnBK0IqUA=="],
587 563
593 569
594 570
    "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
595 571
596 -
    "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="],
572 +
    "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="],
573 +
574 +
    "turbo": ["turbo@2.5.5", "", { "optionalDependencies": { "turbo-darwin-64": "2.5.5", "turbo-darwin-arm64": "2.5.5", "turbo-linux-64": "2.5.5", "turbo-linux-arm64": "2.5.5", "turbo-windows-64": "2.5.5", "turbo-windows-arm64": "2.5.5" }, "bin": { "turbo": "bin/turbo" } }, "sha512-eZ7wI6KjtT1eBqCnh2JPXWNUAxtoxxfi6VdBdZFvil0ychCOTxbm7YLRBi1JSt7U3c+u3CLxpoPxLdvr/Npr3A=="],
575 +
576 +
    "turbo-darwin-64": ["turbo-darwin-64@2.5.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-RYnTz49u4F5tDD2SUwwtlynABNBAfbyT2uU/brJcyh5k6lDLyNfYKdKmqd3K2ls4AaiALWrFKVSBsiVwhdFNzQ=="],
597 577
598 -
    "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="],
578 +
    "turbo-darwin-arm64": ["turbo-darwin-arm64@2.5.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Tk+ZeSNdBobZiMw9aFypQt0DlLsWSFWu1ymqsAdJLuPoAH05qCfYtRxE1pJuYHcJB5pqI+/HOxtJoQ40726Btw=="],
599 579
600 -
    "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
580 +
    "turbo-linux-64": ["turbo-linux-64@2.5.5", "", { "os": "linux", "cpu": "x64" }, "sha512-2/XvMGykD7VgsvWesZZYIIVXMlgBcQy+ZAryjugoTcvJv8TZzSU/B1nShcA7IAjZ0q7OsZ45uP2cOb8EgKT30w=="],
581 +
582 +
    "turbo-linux-arm64": ["turbo-linux-arm64@2.5.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-DW+8CjCjybu0d7TFm9dovTTVg1VRnlkZ1rceO4zqsaLrit3DgHnN4to4uwyuf9s2V/BwS3IYcRy+HG9BL596Iw=="],
583 +
584 +
    "turbo-windows-64": ["turbo-windows-64@2.5.5", "", { "os": "win32", "cpu": "x64" }, "sha512-q5p1BOy8ChtSZfULuF1BhFMYIx6bevXu4fJ+TE/hyNfyHJIfjl90Z6jWdqAlyaFLmn99X/uw+7d6T/Y/dr5JwQ=="],
585 +
586 +
    "turbo-windows-arm64": ["turbo-windows-arm64@2.5.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-AXbF1KmpHUq3PKQwddMGoKMYhHsy5t1YBQO8HZ04HLMR0rWv9adYlQ8kaeQJTko1Ay1anOBFTqaxfVOOsu7+1Q=="],
601 587
602 588
    "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="],
603 589
617 603
618 604
    "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="],
619 605
620 -
    "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="],
621 -
622 -
    "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="],
623 -
624 606
    "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="],
625 -
626 -
    "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="],
627 -
628 -
    "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="],
629 607
630 608
    "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="],
631 609
674 652
    "@typescript-eslint/typescript-estree/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="],
675 653
676 654
    "bun-types/@types/node": ["@types/node@22.15.3", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw=="],
677 -
678 -
    "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
679 655
680 656
    "client/typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="],
681 657
package.json +39 −26
1 1
{
2 -
	"name": "bhvr",
3 -
	"version": "0.3.1",
4 -
	"description": "A monorepo template built with Bun, Hono, Vite, and React",
5 -
	"author": "Steve Simkins",
6 -
	"license": "MIT",
7 -
	"homepage": "https://github.com/stevedylandev/bhvr",
8 -
	"workspaces": ["./server", "./client", "./shared"],
9 -
	"scripts": {
10 -
		"dev:client": "cd client && bun run dev",
11 -
		"dev:server": "cd server && bun run dev",
12 -
		"dev:shared": "cd shared && bun run dev",
13 -
		"dev": "concurrently \"bun run dev:shared\" \"bun run dev:server\" \"bun run dev:client\"",
14 -
		"build:client": "cd client && bun run build",
15 -
		"build:shared": "cd shared && bun run build",
16 -
		"build:server": "cd server && bun run build",
17 -
		"build": "bun run build:shared && bun run build:server && bun run build:client",
18 -
		"postinstall": "bun run build:shared && bun run build:server"
19 -
	},
20 -
	"keywords": ["bun", "hono", "react", "vite", "monorepo"],
21 -
	"devDependencies": {
22 -
		"bun-types": "latest",
23 -
		"concurrently": "^9.1.2"
24 -
	},
25 -
	"peerDependencies": {
26 -
		"typescript": "^5.7.3"
27 -
	}
2 +
  "name": "bhvr",
3 +
  "version": "0.4.0",
4 +
  "description": "A monorepo template built with Bun, Hono, Vite, and React",
5 +
  "author": "Steve Simkins",
6 +
  "license": "MIT",
7 +
  "homepage": "https://github.com/stevedylandev/bhvr",
8 +
  "packageManager": "bun@1.2.4",
9 +
  "workspaces": [
10 +
    "./server",
11 +
    "./client",
12 +
    "./shared"
13 +
  ],
14 +
  "scripts": {
15 +
    "dev": "turbo dev",
16 +
    "dev:client": "turbo dev --filter=client",
17 +
    "dev:server": "turbo dev --filter=server",
18 +
    "build": "turbo build",
19 +
    "build:client": "turbo build --filter=client",
20 +
    "build:server": "turbo build --filter=server",
21 +
    "lint": "turbo lint",
22 +
    "type-check": "turbo type-check",
23 +
    "test": "turbo test",
24 +
    "postinstall": "turbo build --filter=shared --filter=server"
25 +
  },
26 +
  "keywords": [
27 +
    "bun",
28 +
    "hono",
29 +
    "react",
30 +
    "vite",
31 +
    "monorepo",
32 +
    "turbo"
33 +
  ],
34 +
  "devDependencies": {
35 +
    "bun-types": "latest",
36 +
    "turbo": "^2.5.5"
37 +
  },
38 +
  "peerDependencies": {
39 +
    "typescript": "^5.7.3"
40 +
  }
28 41
}
turbo.json (added) +107 −0
1 +
{
2 +
  "$schema": "https://turbo.build/schema.json",
3 +
  "ui": "tui",
4 +
  "tasks": {
5 +
    "build": {
6 +
      "dependsOn": ["^build"],
7 +
      "inputs": [
8 +
        "src/**/*.ts",
9 +
        "src/**/*.tsx",
10 +
        "src/**/*.js",
11 +
        "src/**/*.jsx",
12 +
        "src/**/*.json",
13 +
        "tsconfig.json",
14 +
        "tsconfig.*.json",
15 +
        "vite.config.ts",
16 +
        "package.json",
17 +
        "bun.lock",
18 +
        "eslint.config.js",
19 +
        "index.html"
20 +
      ],
21 +
      "outputs": ["dist/**", "build/**", ".turbo/**"],
22 +
      "env": ["NODE_ENV", "VITE_*"]
23 +
    },
24 +
    "dev": {
25 +
      "cache": false,
26 +
      "persistent": true,
27 +
      "inputs": [
28 +
        "src/**/*.ts",
29 +
        "src/**/*.tsx",
30 +
        "src/**/*.js",
31 +
        "src/**/*.jsx",
32 +
        "tsconfig.json",
33 +
        "tsconfig.*.json",
34 +
        "vite.config.ts",
35 +
        "package.json"
36 +
      ],
37 +
      "env": ["NODE_ENV", "PORT", "VITE_*"]
38 +
    },
39 +
    "lint": {
40 +
      "dependsOn": ["^build"],
41 +
      "inputs": [
42 +
        "src/**/*.ts",
43 +
        "src/**/*.tsx",
44 +
        "src/**/*.js",
45 +
        "src/**/*.jsx",
46 +
        "eslint.config.js",
47 +
        ".eslintrc*",
48 +
        "package.json",
49 +
        "tsconfig.json",
50 +
        "tsconfig.*.json"
51 +
      ],
52 +
      "outputs": [".eslintcache"],
53 +
      "env": ["NODE_ENV"]
54 +
    },
55 +
    "type-check": {
56 +
      "dependsOn": ["^build"],
57 +
      "inputs": [
58 +
        "src/**/*.ts",
59 +
        "src/**/*.tsx",
60 +
        "src/**/*.d.ts",
61 +
        "tsconfig.json",
62 +
        "tsconfig.*.json",
63 +
        "package.json"
64 +
      ],
65 +
      "outputs": ["dist/**/*.d.ts", ".tsbuildinfo"],
66 +
      "env": ["NODE_ENV"]
67 +
    },
68 +
    "test": {
69 +
      "dependsOn": ["^build"],
70 +
      "inputs": [
71 +
        "src/**/*.ts",
72 +
        "src/**/*.tsx",
73 +
        "src/**/*.js",
74 +
        "src/**/*.jsx",
75 +
        "test/**/*.ts",
76 +
        "test/**/*.tsx",
77 +
        "test/**/*.js",
78 +
        "test/**/*.jsx",
79 +
        "__tests__/**/*.ts",
80 +
        "__tests__/**/*.tsx",
81 +
        "**/*.test.ts",
82 +
        "**/*.test.tsx",
83 +
        "**/*.spec.ts",
84 +
        "**/*.spec.tsx",
85 +
        "jest.config.*",
86 +
        "vitest.config.*",
87 +
        "package.json",
88 +
        "tsconfig.json",
89 +
        "tsconfig.*.json"
90 +
      ],
91 +
      "outputs": ["coverage/**", ".nyc_output/**", "test-results/**"],
92 +
      "env": ["NODE_ENV", "CI"]
93 +
    }
94 +
  },
95 +
  "globalDependencies": [
96 +
    "**/.env",
97 +
    "**/.env.*",
98 +
    "**/.env.local",
99 +
    "**/.env.*.local",
100 +
    ".gitignore",
101 +
    "turbo.json",
102 +
    "package.json",
103 +
    "bun.lock",
104 +
    "tsconfig.json"
105 +
  ],
106 +
  "globalEnv": ["NODE_ENV", "CI", "TURBO_TOKEN", "TURBO_TEAM", "TURBO_REMOTE_ONLY"]
107 +
}