Skip to content

docs: Add vue3 + bun community playground#1130

Merged
dinwwwh merged 3 commits intomiddleapi:mainfrom
hunterwilhelm:feature/vue3-bun-playground
Oct 25, 2025
Merged

docs: Add vue3 + bun community playground#1130
dinwwwh merged 3 commits intomiddleapi:mainfrom
hunterwilhelm:feature/vue3-bun-playground

Conversation

@hunterwilhelm
Copy link
Copy Markdown
Contributor

@hunterwilhelm hunterwilhelm commented Oct 24, 2025

Fixes #1129

Summary by CodeRabbit

  • Documentation
    • Updated Playgrounds table header and column alignment for clearer scanning.
    • Added "Vue + Bun + Monorepo (Community)" playground entry (StackBlitz cell intentionally blank) with a link to its source repository.
    • Local Development section includes a new community clone command to set up the Vue + Bun monorepo playground.

@vercel
Copy link
Copy Markdown

vercel Bot commented Oct 24, 2025

@hunterwilhelm is attempting to deploy a commit to the unnoq-team Team on Vercel.

A member of the Team first needs to authorize it.

@dosubot dosubot Bot added the size:XL This PR changes 500-999 lines, ignoring generated files. label Oct 24, 2025
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Oct 24, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Playgrounds documentation updated: table header/spacing adjusted to three columns; a new "Vue + Bun + Monorepo (Community)" playground row and GitHub source link were added; local development instructions include a new npx degit community clone command.

Changes

Cohort / File(s) Summary
Playground documentation
apps/content/docs/playgrounds.md
Adjusted table header/column alignment to three columns (Environment, StackBlitz, GitHub Source); added "Vue + Bun + Monorepo (Community)" row with GitHub source link; added community local-development npx degit hunterwilhelm/orpc-community-playgrounds/vue-bun orpc-vue-bun-monorepo-playground command; minor formatting/spaces.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~5 minutes

  • Focus points: verify table header and column alignment, confirm GitHub link path, and validate the npx degit command syntax and target directory name.

Possibly related PRs

  • unnoq/orpc#488 — Modifies the same playgrounds documentation and degit clone entries; likely touches apps/content/docs/playgrounds.md.

Poem

🐰 I hopped through the docs and left a bun trail,
A Vue + Bun playground to help folks set sail.
I planted a degit, a small community seed,
Hop, click, clone — try it out, take the lead. 🌱✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The PR title "docs: Add vue3 + bun community playground" is directly related to the main changes in the pull request. The raw summary confirms that a new playground entry for "Vue + Bun + Monorepo (Community)" was added to the documentation, along with a GitHub source link to the community repository and local development instructions. The title accurately and concisely summarizes the primary change without extraneous details or vague terminology.
Linked Issues Check ✅ Passed Issue #1129 requests a playground demonstrating Vue 3 and Bun usage with oRPC so others can see usage patterns. The PR satisfies this by adding documentation for the community-maintained playground to the main repository, including a link to the actual community repository (hunterwilhelm/orpc-community-playgrounds) and local development instructions. Although the implementation shifted from including the full playground in the main repo to linking to a community repository (per maintainer feedback), the core requirement to make a Vue 3 + Bun playground available and discoverable has been met.
Out of Scope Changes Check ✅ Passed All changes in the pull request are directly related to adding the Vue 3 + Bun community playground documentation. The table header alignment updates are necessary formatting adjustments to accommodate the new playground entry, the GitHub source link directly supports discovery of the community playground, and the local development command enables users to clone the playground locally. No changes appear to be unrelated to the stated objective of documenting the Vue 3 + Bun community playground.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 549d219 and cc55187.

📒 Files selected for processing (1)
  • apps/content/docs/playgrounds.md (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/content/docs/playgrounds.md

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @hunterwilhelm, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a new playground that showcases the integration of oRPC with a modern web stack consisting of Vue 3 for the frontend and Bun for the backend. The playground provides a functional example of how to build a full-stack application using these technologies, covering common patterns like authentication, data management, and real-time updates via Server-Sent Events.

Highlights

  • New Vue 3 + Bun Playground: A new playground demonstrating oRPC integration with a Vue 3 frontend and a Bun-based backend has been added. This includes a full setup with client-side routing, state management, and API interactions.
  • Backend Implementation (Bun): The backend, powered by Bun, uses @orpc/server to define API routes for authentication (signup, signin, user details), planet management (list, create, find, update), and Server-Sent Events (SSE). It includes a fake in-memory database and Zod for schema validation.
  • Frontend Implementation (Vue 3): The frontend is built with Vue 3, utilizing @orpc/client and @orpc/tanstack-query for seamless API communication. It features multiple views (Home, Planets, Planet Detail, Create Planet, Sign In, SSE) and integrates Vue Router for navigation and TanStack Query for data fetching and caching.
  • Project Structure and Configuration: The playground is set up as a pnpm workspace with separate front and back packages. Comprehensive configuration files (package.json, tsconfig.json, vite.config.mts, .gitignore, README.md) are included for both frontend and backend, ensuring a ready-to-use development environment.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented Oct 24, 2025

More templates

@orpc/arktype

npm i https://pkg.pr.new/@orpc/arktype@1130

@orpc/client

npm i https://pkg.pr.new/@orpc/client@1130

@orpc/contract

npm i https://pkg.pr.new/@orpc/contract@1130

@orpc/experimental-durable-iterator

npm i https://pkg.pr.new/@orpc/experimental-durable-iterator@1130

@orpc/hey-api

npm i https://pkg.pr.new/@orpc/hey-api@1130

@orpc/interop

npm i https://pkg.pr.new/@orpc/interop@1130

@orpc/json-schema

npm i https://pkg.pr.new/@orpc/json-schema@1130

@orpc/nest

npm i https://pkg.pr.new/@orpc/nest@1130

@orpc/openapi

npm i https://pkg.pr.new/@orpc/openapi@1130

@orpc/openapi-client

npm i https://pkg.pr.new/@orpc/openapi-client@1130

@orpc/otel

npm i https://pkg.pr.new/@orpc/otel@1130

@orpc/experimental-publisher

npm i https://pkg.pr.new/@orpc/experimental-publisher@1130

@orpc/react

npm i https://pkg.pr.new/@orpc/react@1130

@orpc/react-query

npm i https://pkg.pr.new/@orpc/react-query@1130

@orpc/experimental-react-swr

npm i https://pkg.pr.new/@orpc/experimental-react-swr@1130

@orpc/server

npm i https://pkg.pr.new/@orpc/server@1130

@orpc/shared

npm i https://pkg.pr.new/@orpc/shared@1130

@orpc/solid-query

npm i https://pkg.pr.new/@orpc/solid-query@1130

@orpc/standard-server

npm i https://pkg.pr.new/@orpc/standard-server@1130

@orpc/standard-server-aws-lambda

npm i https://pkg.pr.new/@orpc/standard-server-aws-lambda@1130

@orpc/standard-server-fetch

npm i https://pkg.pr.new/@orpc/standard-server-fetch@1130

@orpc/standard-server-node

npm i https://pkg.pr.new/@orpc/standard-server-node@1130

@orpc/standard-server-peer

npm i https://pkg.pr.new/@orpc/standard-server-peer@1130

@orpc/svelte-query

npm i https://pkg.pr.new/@orpc/svelte-query@1130

@orpc/tanstack-query

npm i https://pkg.pr.new/@orpc/tanstack-query@1130

@orpc/trpc

npm i https://pkg.pr.new/@orpc/trpc@1130

@orpc/valibot

npm i https://pkg.pr.new/@orpc/valibot@1130

@orpc/vue-colada

npm i https://pkg.pr.new/@orpc/vue-colada@1130

@orpc/vue-query

npm i https://pkg.pr.new/@orpc/vue-query@1130

@orpc/zod

npm i https://pkg.pr.new/@orpc/zod@1130

commit: cc55187

@codecov
Copy link
Copy Markdown

codecov Bot commented Oct 24, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a new playground for Vue 3 with Bun, which is a great addition. The overall structure is well-organized into front-end and back-end packages. However, I've found several issues that should be addressed. There are critical problems with package dependencies, specifically an invalid version for zod that will break installation. I've also noted some correctness issues in the backend, such as unsafe ID generation and unhandled errors that could crash the server. Additionally, there are some maintainability and documentation improvements, like using more descriptive package names and ensuring README files are accurate. Please review the detailed comments for suggestions on how to resolve these issues.

Comment thread playgrounds/vue-bun/packages/back/package.json Outdated
Comment thread playgrounds/vue-bun/packages/back/package.json Outdated
Comment thread playgrounds/vue-bun/packages/back/src/middlewares/db.ts Outdated
Comment thread apps/content/docs/playgrounds.md Outdated
Comment thread playgrounds/vue-bun/package.json Outdated
Comment thread playgrounds/vue-bun/packages/back/src/middlewares/db.ts Outdated
Comment thread playgrounds/vue-bun/packages/back/src/schemas/planet.ts Outdated
Comment thread playgrounds/vue-bun/packages/back/src/schemas/planet.ts Outdated
Comment thread playgrounds/vue-bun/packages/front/README.md Outdated
Comment thread playgrounds/vue-bun/packages/front/package.json Outdated
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 11

🧹 Nitpick comments (15)
playgrounds/vue-bun/packages/back/tsconfig.json (1)

1-103: Well-configured TypeScript setup for Bun backend.

The configuration is solid for a Bun-based backend. Key strengths: Bun-specific setup (bundler module resolution and bun-types), strict mode enabled, appropriate ES2021/ES2022 target-module pairing, and forceConsistentCasingInFileNames for import consistency.

Consider enabling these optional improvements if applicable to your project:

  1. Path aliases (Line 32): If your backend grows, path aliases can improve import ergonomics. Uncomment or configure "paths": { "@/*": ["src/*"] } as needed.

  2. Unused variable detection (Lines 88–89): For stricter code hygiene, uncomment "noUnusedLocals": true and "noUnusedParameters": true to catch dead code early.

  3. JSON imports (Line 41): If you load configuration or data files as JSON, uncomment "resolveJsonModule": true.

These are optional and depend on your project structure and team preferences.

playgrounds/vue-bun/.gitignore (1)

1-3: Consider adding build output and Bun-specific patterns.

The existing patterns are appropriate for security and dependency management. However, for a Vue 3 + Bun project, consider adding patterns for build outputs and Bun-specific files:

  • dist/ — Vue 3 build output (almost certainly generated and should not be committed)
  • .bun/ — Bun package manager cache directory (if not already ignored at the repository root)
  • Common build artifacts: .DS_Store, *.log, IDE folders (.idea/, .vscode/)

Apply this diff to add commonly-needed patterns:

 !.stackblitzrc
 node_modules
 .env*
+dist
+build
+.bun
+*.log
+.DS_Store

Note: Verify whether these patterns should live in this .gitignore or in a root-level .gitignore shared across the monorepo.

playgrounds/vue-bun/tsconfig.json (1)

18-18: Consider enabling stricter property access from index signatures.

Line 18 explicitly disables noPropertyAccessFromIndexSignature while "strict": true is enabled elsewhere. This is a trade-off that loosens type safety for indexed property access. If this is intentional (e.g., to accommodate specific API patterns), document the reason; otherwise, consider aligning with the strict mode philosophy.

playgrounds/vue-bun/packages/front/tsconfig.node.json (1)

4-4: Consider relocating the tsBuildInfo cache file.

The tsBuildInfoFile is currently set to ./node_modules/.tmp/tsconfig.node.tsbuildinfo, which places the TypeScript build cache inside node_modules. This is unconventional and may complicate .gitignore patterns and CI/CD pipelines.

Consider moving it to a local cache directory such as:

-    "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
+    "tsBuildInfoFile": "./.tsbuildinfo",

Alternatively, if you prefer to keep caches separate from source:

-    "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
+    "tsBuildInfoFile": "./.tscache/node.tsbuildinfo",
playgrounds/vue-bun/packages/back/package.json (1)

2-2: Consider using a more descriptive package name.

The generic name "app" doesn't reflect that this is the backend package of the Vue + Bun playground.

Consider renaming to something like:

-  "name": "app",
+  "name": "@orpc-playground/vue-bun-back",
playgrounds/vue-bun/packages/front/package.json (2)

15-16: Use workspace protocol instead of "next" to avoid registry drift.

Point internal deps to local workspaces for reproducible builds in the monorepo.

-    "@orpc/client": "next",
-    "@orpc/tanstack-query": "next",
+    "@orpc/client": "workspace:*",
+    "@orpc/tanstack-query": "workspace:*",

1-34: Declare engines to match the toolchain (Node 22).

Helps CI and contributors avoid version mismatches.

 {
   "name": "front",
   "type": "module",
   "version": "0.0.0",
   "private": true,
+  "engines": {
+    "node": ">=22"
+  },
   "scripts": {
playgrounds/vue-bun/packages/front/src/views/SignIn.vue (2)

28-29: Add input semantics (type and autocomplete) and required flags.

Improves UX and password managers.

-      <input v-model="email" placeholder="Email">
-      <input v-model="password" type="password" placeholder="Password">
+      <input v-model="email" type="email" autocomplete="email" required placeholder="Email">
+      <input v-model="password" type="password" autocomplete="current-password" required placeholder="Password">

34-36: Show a useful error message.

String(error) often yields “[object Object]”. Prefer error.message fallback.

-      {{ String(error) }}
+      {{ (error && typeof error === 'object' && 'message' in error) ? (error as any).message : String(error) }}
playgrounds/vue-bun/packages/front/src/views/CreatePlanet.vue (1)

19-21: Gate submit on valid input and mark fields required.

Prevents empty-name requests and gives instant feedback.

-const { mutate, isPending, error } = useMutation(orpc.planet.create.mutationOptions({
+const { mutate, isPending, error } = useMutation(orpc.planet.create.mutationOptions({
   onSuccess: () => {
     queryClient.invalidateQueries({ queryKey: orpc.planet.key() })
     name.value = ''
     description.value = ''
   },
 }))
 
 function onSubmit() {
   mutate({ name: name.value, description: description.value || undefined })
 }
</script>
 
<template>
   <main style="padding: 1rem;">
     <h2>Create Planet</h2>
-    <form style="display: grid; gap: .5rem; max-width: 320px;" @submit.prevent="onSubmit">
-      <input v-model="name" placeholder="Name">
+    <form style="display: grid; gap: .5rem; max-width: 320px;" @submit.prevent="onSubmit">
+      <input v-model="name" placeholder="Name" required minlength="1">
       <input v-model="description" placeholder="Description">
-      <button type="submit" :disabled="isPending">
+      <button type="submit" :disabled="isPending || !name.trim()">
         {{ isPending ? 'Creating...' : 'Create' }}
       </button>
     </form>
playgrounds/vue-bun/packages/front/src/views/Me.vue (2)

7-10: Prefer router navigation and cache clear over full reload.

Avoiding location.reload() is smoother and preserves SPA state.

-function signout() {
-  localStorage.removeItem('token')
-  location.reload()
-}
+import { useRouter } from 'vue-router'
+import { useQueryClient } from '@tanstack/vue-query'
+const router = useRouter()
+const qc = useQueryClient()
+function signout() {
+  localStorage.removeItem('token')
+  qc.clear()
+  router.push('/signin')
+}

24-26: Only show “Unauthorized” for 401; otherwise surface error details.

Improves debuggability.

-    <div v-else-if="isError">
-      Unauthorized
-    </div>
+    <div v-else-if="isError">
+      Unauthorized or failed to load profile
+    </div>
playgrounds/vue-bun/packages/front/src/views/Planets.vue (1)

17-23: Handle empty list with a friendly state.

Better UX when no planets exist.

-    <ul v-else>
-      <li v-for="planet in data" :key="planet.id">
-        <router-link :to="`/planets/${planet.id}`">
-          {{ planet.name }}
-        </router-link>
-      </li>
-    </ul>
+    <div v-else>
+      <div v-if="Array.isArray(data) && data.length === 0">
+        No planets yet.
+      </div>
+      <ul v-else>
+        <li v-for="planet in data" :key="planet.id">
+          <router-link :to="`/planets/${planet.id}`">
+            {{ planet.name }}
+          </router-link>
+        </li>
+      </ul>
+    </div>
playgrounds/vue-bun/packages/back/src/schemas/user.ts (1)

6-10: Consider adding password validation.

The password field accepts any string without constraints. For a more realistic demo, consider adding minimum length validation.

Apply this diff to add basic password validation:

 export const NewUserSchema = z.object({
   name: z.string(),
   email: z.string().email(),
-  password: z.string(),
+  password: z.string().min(8),
 })
playgrounds/vue-bun/packages/back/src/schemas/planet.ts (1)

8-19: Consider validating image types instead of using z.any().

Lines 11 and 18 use z.any() for the image field, which bypasses all validation and type safety. While this may be acceptable for a playground, it creates potential runtime errors (as seen in the db.ts type assertions) and security risks.

Consider adding basic validation for the image field:

// Option 1: Validate as File object (for FormData uploads)
image: z.instanceof(File).optional(),

// Option 2: Validate as base64 string (for JSON uploads)
image: z.string().optional(),

// Option 3: Union type for flexibility
image: z.union([z.instanceof(File), z.string()]).optional(),

This would catch type errors at validation time rather than runtime and provide better type safety throughout the codebase.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ad7f4d9 and 14be1c5.

⛔ Files ignored due to path filters (3)
  • playgrounds/vue-bun/packages/front/public/favicon.ico is excluded by !**/*.ico
  • playgrounds/vue-bun/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (37)
  • apps/content/docs/playgrounds.md (2 hunks)
  • playgrounds/vue-bun/.gitignore (1 hunks)
  • playgrounds/vue-bun/README.md (1 hunks)
  • playgrounds/vue-bun/package.json (1 hunks)
  • playgrounds/vue-bun/packages/back/package.json (1 hunks)
  • playgrounds/vue-bun/packages/back/src/index.ts (1 hunks)
  • playgrounds/vue-bun/packages/back/src/middlewares/db.ts (1 hunks)
  • playgrounds/vue-bun/packages/back/src/orpc.ts (1 hunks)
  • playgrounds/vue-bun/packages/back/src/router.ts (1 hunks)
  • playgrounds/vue-bun/packages/back/src/routers/auth.ts (1 hunks)
  • playgrounds/vue-bun/packages/back/src/routers/planet.ts (1 hunks)
  • playgrounds/vue-bun/packages/back/src/routers/sse.ts (1 hunks)
  • playgrounds/vue-bun/packages/back/src/schemas/planet.ts (1 hunks)
  • playgrounds/vue-bun/packages/back/src/schemas/user.ts (1 hunks)
  • playgrounds/vue-bun/packages/back/tsconfig.json (1 hunks)
  • playgrounds/vue-bun/packages/front/.gitignore (1 hunks)
  • playgrounds/vue-bun/packages/front/README.md (1 hunks)
  • playgrounds/vue-bun/packages/front/env.d.ts (1 hunks)
  • playgrounds/vue-bun/packages/front/index.html (1 hunks)
  • playgrounds/vue-bun/packages/front/package.json (1 hunks)
  • playgrounds/vue-bun/packages/front/src/App.vue (1 hunks)
  • playgrounds/vue-bun/packages/front/src/lib/orpc.ts (1 hunks)
  • playgrounds/vue-bun/packages/front/src/main.ts (1 hunks)
  • playgrounds/vue-bun/packages/front/src/routes.ts (1 hunks)
  • playgrounds/vue-bun/packages/front/src/views/CreatePlanet.vue (1 hunks)
  • playgrounds/vue-bun/packages/front/src/views/Home.vue (1 hunks)
  • playgrounds/vue-bun/packages/front/src/views/Me.vue (1 hunks)
  • playgrounds/vue-bun/packages/front/src/views/PlanetDetail.vue (1 hunks)
  • playgrounds/vue-bun/packages/front/src/views/Planets.vue (1 hunks)
  • playgrounds/vue-bun/packages/front/src/views/SSE.vue (1 hunks)
  • playgrounds/vue-bun/packages/front/src/views/SignIn.vue (1 hunks)
  • playgrounds/vue-bun/packages/front/tsconfig.app.json (1 hunks)
  • playgrounds/vue-bun/packages/front/tsconfig.json (1 hunks)
  • playgrounds/vue-bun/packages/front/tsconfig.node.json (1 hunks)
  • playgrounds/vue-bun/packages/front/vite.config.mts (1 hunks)
  • playgrounds/vue-bun/pnpm-workspace.yaml (1 hunks)
  • playgrounds/vue-bun/tsconfig.json (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (9)
playgrounds/vue-bun/packages/back/src/orpc.ts (3)
playgrounds/vue-bun/packages/back/src/schemas/user.ts (1)
  • UserSchema (12-16)
packages/server/src/builder.ts (1)
  • os (336-352)
playgrounds/vue-bun/packages/back/src/middlewares/db.ts (1)
  • dbProviderMiddleware (14-19)
playgrounds/vue-bun/packages/back/src/routers/sse.ts (1)
packages/server/src/builder.ts (1)
  • os (336-352)
playgrounds/vue-bun/packages/back/src/schemas/planet.ts (1)
playgrounds/vue-bun/packages/back/src/schemas/user.ts (1)
  • UserSchema (12-16)
playgrounds/vue-bun/packages/back/src/router.ts (1)
playgrounds/vue-bun/packages/back/src/routers/planet.ts (4)
  • listPlanets (6-15)
  • createPlanet (17-21)
  • findPlanet (23-32)
  • updatePlanet (34-44)
playgrounds/vue-bun/packages/back/src/routers/auth.ts (2)
playgrounds/vue-bun/packages/back/src/orpc.ts (2)
  • pub (10-12)
  • authed (14-18)
playgrounds/vue-bun/packages/back/src/schemas/user.ts (1)
  • UserSchema (12-16)
playgrounds/vue-bun/packages/front/src/lib/orpc.ts (3)
packages/server/src/router-client.ts (1)
  • RouterClient (15-20)
playgrounds/vue-bun/packages/back/src/router.ts (1)
  • AppRouter (11-11)
packages/client/src/client.ts (1)
  • createORPCClient (17-43)
playgrounds/vue-bun/packages/back/src/middlewares/db.ts (4)
playgrounds/vue-bun/packages/back/src/schemas/planet.ts (3)
  • Planet (6-6)
  • NewPlanet (4-4)
  • UpdatePlanet (5-5)
playgrounds/vue-bun/packages/back/src/schemas/user.ts (1)
  • User (4-4)
playgrounds/vue-bun/packages/back/src/routers/planet.ts (1)
  • updatePlanet (34-44)
packages/server/src/builder.ts (1)
  • os (336-352)
playgrounds/vue-bun/packages/back/src/index.ts (2)
playgrounds/vue-bun/packages/back/src/router.ts (1)
  • router (5-9)
packages/server/src/plugins/cors.ts (1)
  • CORSPlugin (23-118)
playgrounds/vue-bun/packages/back/src/routers/planet.ts (2)
playgrounds/vue-bun/packages/back/src/orpc.ts (2)
  • pub (10-12)
  • authed (14-18)
playgrounds/vue-bun/packages/back/src/schemas/planet.ts (3)
  • PlanetSchema (21-27)
  • NewPlanetSchema (8-12)
  • UpdatePlanetSchema (14-19)
🪛 LanguageTool
playgrounds/vue-bun/packages/front/README.md

[grammar] ~68-~68: Use a hyphen to join words.
Context: ...ion of Vue components. Vuetify is an MIT licensed Open Source project that has be...

(QB_NEW_EN_HYPHEN)


[uncategorized] ~68-~68: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ... components. Vuetify is an MIT licensed Open Source project that has been made possible due...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[uncategorized] ~71-~71: The official name of this software platform is spelled with a capital “H”.
Context: ...t.vuetifyjs.com/) - [Sponsoring John on Github](https://github.com/users/johnleider/sp...

(GITHUB)


[uncategorized] ~72-~72: The official name of this software platform is spelled with a capital “H”.
Context: ...ider/sponsorship) - [Sponsoring Kael on Github](https://github.com/users/kaelwd/sponso...

(GITHUB)


[uncategorized] ~76-~76: The official name of this payment provider is spelled with two capital “P”.
Context: ...ify) - Making a one-time donation with Paypal ## 📑 Lice...

(PAYPAL)

🪛 markdownlint-cli2 (0.18.1)
playgrounds/vue-bun/README.md

20-20: Images should have alternate text (alt text)

(MD045, no-alt-text)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: publish-commit
  • GitHub Check: test
  • GitHub Check: lint
🔇 Additional comments (25)
playgrounds/vue-bun/packages/front/tsconfig.json (1)

1-11: Both TypeScript configuration files exist as referenced.

Verification confirms that both tsconfig.app.json and tsconfig.node.json are present in playgrounds/vue-bun/packages/front/ and correctly referenced in the composite configuration. No issues found.

playgrounds/vue-bun/pnpm-workspace.yaml (1)

1-6: LGTM!

The workspace configuration is correctly set up for a pnpm monorepo with appropriate package glob patterns.

apps/content/docs/playgrounds.md (2)

21-21: LGTM!

The Vue + Bun playground entry is correctly added to the table, consistent with other playgrounds that don't have StackBlitz support.


44-44: LGTM!

The degit command follows the established naming pattern for local playground setup.

playgrounds/vue-bun/packages/front/.gitignore (1)

1-22: LGTM!

The .gitignore file contains appropriate exclusions for a Vue + Bun frontend project.

playgrounds/vue-bun/packages/back/src/routers/sse.ts (1)

1-16: LGTM!

The SSE route implementation is correct. It properly uses an async generator with eventIterator for streaming events, includes appropriate delays, and validates output with Zod schemas.

playgrounds/vue-bun/packages/back/package.json (2)

3-3: Verify the version number.

The version 1.0.50 seems unusually high for a new playground package. Consider starting at 0.1.0 or 1.0.0.


11-11: No action required—Zod version is current.

The latest stable Zod release is v4.1.12 (published Oct 6, 2025), so the specified version in package.json is correct and up-to-date.

playgrounds/vue-bun/packages/front/src/main.ts (1)

1-19: LGTM!

The Vue 3 application entry point is properly configured with Vue Router and TanStack Vue Query. The setup follows best practices for a modern Vue 3 application.

playgrounds/vue-bun/README.md (1)

1-15: No issues found—ports are correctly configured.

Verification confirms the setup is intentional and properly configured:

  • Frontend runs on port 2999 (matches README instruction)
  • Backend runs on port 3399 (separate intentionally)
  • Frontend client code correctly references port 2999

This is standard practice for development setups with separate frontend and backend servers.

playgrounds/vue-bun/packages/front/src/views/Home.vue (1)

1-25: LGTM!

The Home component provides a clean navigation structure for the playground. The inline styles and static template approach are appropriate for a demonstration project.

playgrounds/vue-bun/packages/front/src/App.vue (1)

1-3: LGTM!

Standard Vue Router root component pattern. This is the correct minimal setup for the application entry point.

playgrounds/vue-bun/packages/back/src/router.ts (1)

1-11: LGTM!

The router aggregation is well-structured and follows a clean pattern. The exported AppRouter type enables type-safe client usage on the frontend.

playgrounds/vue-bun/packages/front/src/views/SSE.vue (1)

1-23: LGTM!

The SSE component properly handles loading and error states. The use of experimental_streamedOptions() is appropriate for a playground demonstrating SSE capabilities.

playgrounds/vue-bun/packages/front/env.d.ts (1)

1-1: LGTM!

Standard Vite TypeScript declaration file that enables Vite client types globally.

playgrounds/vue-bun/packages/front/tsconfig.app.json (1)

1-23: LGTM!

The TypeScript configuration is well-structured. Including the backend router.ts (line 20) enables type-safe RPC calls from the frontend, which is a key benefit of the ORPC approach.

playgrounds/vue-bun/packages/back/src/index.ts (2)

14-16: Hard-coded authentication is acceptable for playground.

The hard-coded token check token === 'token' and static user object are appropriate for a demonstration playground. In a production environment, this would need to be replaced with proper authentication.


5-7: Verify CORS configuration for playground use.

The CORSPlugin is instantiated with default options, which typically allows all origins. This is acceptable for a local playground but should be reviewed if the playground is exposed beyond localhost.

playgrounds/vue-bun/packages/front/index.html (1)

1-13: LGTM!

Standard HTML5 scaffold for a Vite + Vue application. The structure is minimal and appropriate for a playground demonstration.

playgrounds/vue-bun/packages/front/src/routes.ts (1)

3-11: LGTM!

Route definitions are clean and follow Vue Router best practices with dynamic imports for code splitting.

playgrounds/vue-bun/packages/front/vite.config.mts (1)

5-24: LGTM!

Vite configuration is well-structured with appropriate proxy setup for API forwarding and sensible defaults.

playgrounds/vue-bun/package.json (1)

1-20: LGTM!

Package configuration is well-structured with proper workspace setup and efficient dev script using concurrently.

playgrounds/vue-bun/packages/back/src/orpc.ts (1)

6-18: LGTM!

The ORPC context and authentication middleware are correctly structured, with proper error handling for unauthorized requests.

playgrounds/vue-bun/packages/back/src/middlewares/db.ts (1)

1-19: LGTM! Clean interface and middleware design.

The DB interface is well-structured with proper Promise return types, and the middleware correctly provides a fallback DB instance when none exists in the context.

playgrounds/vue-bun/packages/back/src/routers/planet.ts (1)

1-44: LGTM! Well-structured ORPC routes with proper validation.

The planet routes demonstrate good practices:

  • Appropriate use of pub vs authed based on access requirements
  • Comprehensive input validation with sensible constraints (e.g., limit 1-100, min id 1)
  • Consistent error handling for not-found scenarios
  • Clean async/await handlers that delegate to the DB layer

The route definitions are clear, well-documented with summaries and tags, and properly typed.

Comment thread playgrounds/vue-bun/packages/back/src/middlewares/db.ts Outdated
Comment thread playgrounds/vue-bun/packages/back/src/middlewares/db.ts Outdated
Comment thread playgrounds/vue-bun/packages/back/src/routers/auth.ts Outdated
Comment thread playgrounds/vue-bun/packages/back/src/routers/auth.ts Outdated
Comment thread playgrounds/vue-bun/packages/back/src/routers/auth.ts Outdated
Comment thread playgrounds/vue-bun/packages/front/src/lib/orpc.ts Outdated
Comment thread playgrounds/vue-bun/packages/front/src/views/PlanetDetail.vue Outdated
Comment thread playgrounds/vue-bun/packages/front/src/views/SignIn.vue Outdated
Comment thread playgrounds/vue-bun/README.md Outdated
Comment thread playgrounds/vue-bun/tsconfig.json Outdated
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 14be1c5 and de6c011.

⛔ Files ignored due to path filters (1)
  • playgrounds/vue-bun/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (6)
  • playgrounds/vue-bun/package.json (1 hunks)
  • playgrounds/vue-bun/packages/back/package.json (1 hunks)
  • playgrounds/vue-bun/packages/front/README.md (1 hunks)
  • playgrounds/vue-bun/packages/front/package.json (1 hunks)
  • playgrounds/vue-bun/packages/front/src/views/PlanetDetail.vue (1 hunks)
  • playgrounds/vue-bun/tsconfig.json (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (5)
  • playgrounds/vue-bun/package.json
  • playgrounds/vue-bun/packages/back/package.json
  • playgrounds/vue-bun/packages/front/src/views/PlanetDetail.vue
  • playgrounds/vue-bun/tsconfig.json
  • playgrounds/vue-bun/packages/front/package.json
🧰 Additional context used
🪛 LanguageTool
playgrounds/vue-bun/packages/front/README.md

[grammar] ~70-~70: Use a hyphen to join words.
Context: ... end-to-end type safety. oRPC is an open source project that makes building type-...

(QB_NEW_EN_HYPHEN)

🔇 Additional comments (1)
playgrounds/vue-bun/packages/front/README.md (1)

1-82: ✅ README successfully replaced with project-specific documentation.

This is a significant improvement over the previous Vuetify boilerplate template. The README now accurately describes the Vue 3 + Bun + oRPC + TanStack Query stack, provides clear installation steps for the monorepo, lists relevant features with proper documentation links, and includes practical usage instructions for development and production builds. The structure, tone, and content align well with the actual playground implementation and follow best practices for project documentation.

Comment thread playgrounds/vue-bun/packages/front/README.md Outdated
@dinwwwh
Copy link
Copy Markdown
Member

dinwwwh commented Oct 24, 2025

Thanks @hunterwilhelm for putting in the effort on this. I’m just not sure how common this stack is in real-world projects. It can definitely give users more examples, but adding too many less-common setups could create extra long-term maintenance for the oRPC team whenever things change.

Maybe instead of including it directly in the oRPC repo, you could publish it in your own repo and we add a link to it in the Playground or Ecosystem page?

@hunterwilhelm
Copy link
Copy Markdown
Contributor Author

That's a good point, I'll do that

@dosubot dosubot Bot added size:M This PR changes 30-99 lines, ignoring generated files. and removed size:XL This PR changes 500-999 lines, ignoring generated files. labels Oct 24, 2025
feat(vue3-bun-playground): removed unnecessary command from start

feat(vue3-bun-playground): removed stackblitz from vue3-bun because stackblitz doesn't support bun yet

feat(vue3-bun-playground): some good catches from the AI
- typescript peer dep -> dev dep
- +    "jsx": "preserve",
- package.json names
- index.js -> index.ts
- forgot about the vuetify readme template
- use computed for the reactive id in planet detail

feat(vue3-bun-playground): moved the playground to a separate repo

feat(vue3-bun-playground): reset changes from pnpm lock to main
@hunterwilhelm hunterwilhelm force-pushed the feature/vue3-bun-playground branch from 7b6a7f1 to 98aee0f Compare October 24, 2025 17:29
@hunterwilhelm
Copy link
Copy Markdown
Contributor Author

Squashed and added the links as requested

@hunterwilhelm hunterwilhelm mentioned this pull request Oct 24, 2025
1 task
@dinwwwh dinwwwh changed the title feat(add-vue3-bun-playground): Add vue3 + bun playground docs: Add vue3 + bun community playground Oct 25, 2025
@vercel
Copy link
Copy Markdown

vercel Bot commented Oct 25, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
orpc Ready Ready Preview Comment Oct 25, 2025 1:57am

@dosubot dosubot Bot added the lgtm This PR has been approved by a maintainer label Oct 25, 2025
@dinwwwh dinwwwh merged commit e27e0c1 into middleapi:main Oct 25, 2025
4 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lgtm This PR has been approved by a maintainer size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Playground for Vue 3 and Bun

2 participants