chore: Updated branch to 0.4.0 63b338bd
Steve Simkins · 2025-07-21 19:24 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",
58 58
      "name": "shared",
59 59
      "version": "0.0.1",
60 60
      "devDependencies": {
61 -
        "typescript": "^5.2.2",
61 +
        "typescript": "^5.8.3",
62 62
      },
63 63
    },
64 64
  },
319 319
320 320
    "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=="],
321 321
322 -
    "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
323 -
324 322
    "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
325 323
326 324
    "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
347 345
348 346
    "client": ["client@workspace:client"],
349 347
350 -
    "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=="],
351 -
352 348
    "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="],
353 349
354 350
    "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
357 353
358 354
    "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="],
359 355
360 -
    "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=="],
361 -
362 356
    "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="],
363 357
364 358
    "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
372 366
    "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="],
373 367
374 368
    "electron-to-chromium": ["electron-to-chromium@1.5.149", "", {}, "sha512-UyiO82eb9dVOx8YO3ajDf9jz2kKyt98DEITRdeLPstOEuTlLzDA4Gyq5K9he71TQziU5jUVu2OAu5N48HmQiyQ=="],
375 -
376 -
    "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
377 369
378 370
    "enhanced-resolve": ["enhanced-resolve@5.18.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="],
379 371
428 420
    "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
429 421
430 422
    "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="],
431 -
432 -
    "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="],
433 423
434 424
    "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="],
435 425
451 441
452 442
    "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
453 443
454 -
    "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
455 -
456 444
    "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
457 445
458 446
    "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
502 490
    "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.1", "", { "os": "win32", "cpu": "x64" }, "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg=="],
503 491
504 492
    "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="],
505 -
506 -
    "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="],
507 493
508 494
    "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="],
509 495
563 549
564 550
    "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="],
565 551
566 -
    "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="],
567 -
568 552
    "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="],
569 553
570 554
    "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
573 557
574 558
    "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
575 559
576 -
    "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="],
577 -
578 560
    "scheduler": ["scheduler@0.26.0", "", {}, "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="],
579 561
580 562
    "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
587 569
588 570
    "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
589 571
590 -
    "shell-quote": ["shell-quote@1.8.2", "", {}, "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA=="],
591 -
592 572
    "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
593 -
594 -
    "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=="],
595 -
596 -
    "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
597 573
598 574
    "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="],
599 575
600 -
    "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="],
576 +
    "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
601 577
602 578
    "tailwind-merge": ["tailwind-merge@3.3.1", "", {}, "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g=="],
603 579
611 587
612 588
    "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
613 589
614 -
    "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="],
615 -
616 590
    "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="],
617 591
618 -
    "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
592 +
    "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=="],
593 +
594 +
    "turbo-darwin-64": ["turbo-darwin-64@2.5.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-RYnTz49u4F5tDD2SUwwtlynABNBAfbyT2uU/brJcyh5k6lDLyNfYKdKmqd3K2ls4AaiALWrFKVSBsiVwhdFNzQ=="],
595 +
596 +
    "turbo-darwin-arm64": ["turbo-darwin-arm64@2.5.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Tk+ZeSNdBobZiMw9aFypQt0DlLsWSFWu1ymqsAdJLuPoAH05qCfYtRxE1pJuYHcJB5pqI+/HOxtJoQ40726Btw=="],
597 +
598 +
    "turbo-linux-64": ["turbo-linux-64@2.5.5", "", { "os": "linux", "cpu": "x64" }, "sha512-2/XvMGykD7VgsvWesZZYIIVXMlgBcQy+ZAryjugoTcvJv8TZzSU/B1nShcA7IAjZ0q7OsZ45uP2cOb8EgKT30w=="],
599 +
600 +
    "turbo-linux-arm64": ["turbo-linux-arm64@2.5.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-DW+8CjCjybu0d7TFm9dovTTVg1VRnlkZ1rceO4zqsaLrit3DgHnN4to4uwyuf9s2V/BwS3IYcRy+HG9BL596Iw=="],
601 +
602 +
    "turbo-windows-64": ["turbo-windows-64@2.5.5", "", { "os": "win32", "cpu": "x64" }, "sha512-q5p1BOy8ChtSZfULuF1BhFMYIx6bevXu4fJ+TE/hyNfyHJIfjl90Z6jWdqAlyaFLmn99X/uw+7d6T/Y/dr5JwQ=="],
603 +
604 +
    "turbo-windows-arm64": ["turbo-windows-arm64@2.5.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-AXbF1KmpHUq3PKQwddMGoKMYhHsy5t1YBQO8HZ04HLMR0rWv9adYlQ8kaeQJTko1Ay1anOBFTqaxfVOOsu7+1Q=="],
619 605
620 606
    "tw-animate-css": ["tw-animate-css@1.3.4", "", {}, "sha512-dd1Ht6/YQHcNbq0znIT6dG8uhO7Ce+VIIhZUhjsryXsMPJQz3bZg7Q2eNzLwipb25bRZslGb2myio5mScd1TFg=="],
621 607
637 623
638 624
    "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="],
639 625
640 -
    "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=="],
641 -
642 -
    "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="],
643 -
644 626
    "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="],
645 -
646 -
    "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=="],
647 -
648 -
    "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="],
649 627
650 628
    "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="],
651 629
694 672
    "@typescript-eslint/typescript-estree/semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="],
695 673
696 674
    "bun-types/@types/node": ["@types/node@22.15.3", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw=="],
697 -
698 -
    "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
699 675
700 676
    "client/typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="],
701 677
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 +
}