diff --git a/.devcontainer/docker-compose.yaml b/.devcontainer/docker-compose.yaml index 67d9260..bb46f81 100644 --- a/.devcontainer/docker-compose.yaml +++ b/.devcontainer/docker-compose.yaml @@ -17,7 +17,6 @@ services: - "3000:3000" - "4000:4000" - "5555:5555" - - "8969:8969" - "9323:9323" - "51204:51204" command: sleep infinity diff --git a/.devcontainer/setup-env.sh b/.devcontainer/setup-env.sh index c88888c..81112bf 100755 --- a/.devcontainer/setup-env.sh +++ b/.devcontainer/setup-env.sh @@ -14,5 +14,4 @@ BETTER_AUTH_URL=http://localhost:3000 GITHUB_CLIENT_ID= GITHUB_CLIENT_SECRET= DATABASE_URL=postgresql://skeleton:skeleton@localhost:5432/skeleton -SENTRY_SPOTLIGHT=1 EOF diff --git a/.github/workflows/dependency-review.yaml b/.github/workflows/dependency-review.yaml index 0b113ad..8c16cac 100644 --- a/.github/workflows/dependency-review.yaml +++ b/.github/workflows/dependency-review.yaml @@ -35,9 +35,6 @@ jobs: MPL-2.0, Python-2.0, Unlicense - # @sentry/cli ships under FSL-1.1-MIT (source-available, converts to MIT - # after 2 years). Scope-allowed because we depend on Sentry. # split@0.2.x has no license field but the upstream repo is MIT. allow-dependencies-licenses: >- - pkg:npm/%40sentry/cli, pkg:npm/split diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fcf866b..cf24529 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,7 +19,7 @@ Quick reference: ```bash pnpm install -pnpm dev # start web + API + Prisma Studio + Spotlight +pnpm dev # start web + API + Prisma Studio pnpm format:check # prettier pnpm lint # eslint across the workspace pnpm test # vitest with coverage diff --git a/README.md b/README.md index a18cacf..a3efc37 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,6 @@ Open http://localhost:3000 to access the app. The other services are available f - **API Docs** at http://localhost:4000/docs - **DB Studio** at http://localhost:5555 -- **Sentry Spotlight** at http://localhost:8969 ### Promote yourself to admin @@ -92,21 +91,20 @@ docker exec $(docker ps -q --filter ancestor=postgres:17-alpine) \ - **API Docs** (`/api-docs`) -- Swagger UI for the Hono API - **DB Studio** (`/db-studio`) -- Prisma Studio for database inspection -- **Spotlight** (`/spotlight`) -- Sentry Spotlight for local error and trace inspection - **Impersonate** (`/impersonate`) -- View the app as another user. Select any user from the list or create a test user on the fly. Your admin session is preserved (tracked via the `impersonatedBy` field on the session), and an amber banner appears in the header with a "Stop Impersonating" button to end the session. Nested impersonation is not allowed. ## Scripts -| Command | Description | -| ------------------------------------ | ----------------------------------------------------------------- | -| `pnpm dev` | Start all services (web + API + Prisma Studio + Sentry Spotlight) | -| `pnpm build` | Build all packages and apps | -| `pnpm lint` | Lint all packages | -| `pnpm test` | Run tests with coverage | -| `pnpm clean` | Remove node_modules, .turbo, .next, and .pnpm-store | -| `pnpm --filter @skeleton/db db:push` | Push Prisma schema to database | -| `pnpm --filter @skeleton/db studio` | Open Prisma Studio standalone | -| `pnpm codegen:openapi` | Generate OpenAPI spec from Hono routes | +| Command | Description | +| ------------------------------------ | --------------------------------------------------- | +| `pnpm dev` | Start all services (web + API + Prisma Studio) | +| `pnpm build` | Build all packages and apps | +| `pnpm lint` | Lint all packages | +| `pnpm test` | Run tests with coverage | +| `pnpm clean` | Remove node_modules, .turbo, .next, and .pnpm-store | +| `pnpm --filter @skeleton/db db:push` | Push Prisma schema to database | +| `pnpm --filter @skeleton/db studio` | Open Prisma Studio standalone | +| `pnpm codegen:openapi` | Generate OpenAPI spec from Hono routes | ## License diff --git a/apps/api/package.json b/apps/api/package.json index ef853b5..525abcb 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -16,7 +16,6 @@ "@hono/swagger-ui": "^0.6.1", "@hono/zod-openapi": "^1.3.0", "@prisma/client": "^7.8.0", - "@sentry/node": "^10.52.0", "@skeleton/auth": "workspace:*", "@skeleton/db": "workspace:*", "@skeleton/shared": "workspace:*", diff --git a/apps/api/src/app.ts b/apps/api/src/app.ts index 42e7395..fc8956d 100644 --- a/apps/api/src/app.ts +++ b/apps/api/src/app.ts @@ -1,4 +1,3 @@ -import * as Sentry from "@sentry/node"; import { OpenAPIHono } from "@hono/zod-openapi"; import { swaggerUI } from "@hono/swagger-ui"; import { cors } from "hono/cors"; @@ -20,11 +19,6 @@ app.use( }), ); -app.onError((err) => { - Sentry.captureException(err); - throw err; -}); - // Auth routes (public — these ARE the auth endpoints) app.route("/api/auth", authRoutes); diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index a9c9c28..458e032 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -1,12 +1,3 @@ -import * as Sentry from "@sentry/node"; - -Sentry.init({ - dsn: "https://spotlight@local/0", - tracesSampleRate: 1.0, - enableLogs: true, - spotlight: process.env.SENTRY_SPOTLIGHT === "1", -}); - import { serve } from "@hono/node-server"; import { app } from "./app.js"; diff --git a/apps/web/instrumentation.ts b/apps/web/instrumentation.ts deleted file mode 100644 index 4e8d39e..0000000 --- a/apps/web/instrumentation.ts +++ /dev/null @@ -1,12 +0,0 @@ -import * as Sentry from "@sentry/nextjs"; - -export async function register() { - if (process.env.NEXT_RUNTIME === "nodejs") { - await import("./sentry.server.config"); - } - if (process.env.NEXT_RUNTIME === "edge") { - await import("./sentry.edge.config"); - } -} - -export const onRequestError = Sentry.captureRequestError; diff --git a/apps/web/next.config.ts b/apps/web/next.config.ts index f573365..4da4876 100644 --- a/apps/web/next.config.ts +++ b/apps/web/next.config.ts @@ -1,4 +1,3 @@ -import { withSentryConfig } from "@sentry/nextjs"; import type { NextConfig } from "next"; const nextConfig: NextConfig = { @@ -12,6 +11,4 @@ const nextConfig: NextConfig = { }, }; -export default withSentryConfig(nextConfig, { - silent: true, -}); +export default nextConfig; diff --git a/apps/web/package.json b/apps/web/package.json index 326aada..a9d0dee 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -17,7 +17,6 @@ "@dnd-kit/modifiers": "^9.0.0", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", - "@sentry/nextjs": "^10.52.0", "@skeleton/api-client": "workspace:*", "@skeleton/auth": "workspace:*", "@skeleton/shared": "workspace:*", diff --git a/apps/web/sentry.client.config.ts b/apps/web/sentry.client.config.ts deleted file mode 100644 index 5cdffe6..0000000 --- a/apps/web/sentry.client.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import * as Sentry from "@sentry/nextjs"; - -Sentry.init({ - dsn: "https://spotlight@local/0", - tracesSampleRate: 1.0, - enableLogs: true, - spotlight: true, -}); diff --git a/apps/web/sentry.edge.config.ts b/apps/web/sentry.edge.config.ts deleted file mode 100644 index d307f1d..0000000 --- a/apps/web/sentry.edge.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import * as Sentry from "@sentry/nextjs"; - -Sentry.init({ - dsn: "https://spotlight@local/0", - tracesSampleRate: 1.0, - enableLogs: true, - spotlight: process.env.SENTRY_SPOTLIGHT === "1", -}); diff --git a/apps/web/sentry.server.config.ts b/apps/web/sentry.server.config.ts deleted file mode 100644 index d307f1d..0000000 --- a/apps/web/sentry.server.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import * as Sentry from "@sentry/nextjs"; - -Sentry.init({ - dsn: "https://spotlight@local/0", - tracesSampleRate: 1.0, - enableLogs: true, - spotlight: process.env.SENTRY_SPOTLIGHT === "1", -}); diff --git a/apps/web/src/app/(shell)/(admin)/spotlight/page.tsx b/apps/web/src/app/(shell)/(admin)/spotlight/page.tsx deleted file mode 100644 index 66aa460..0000000 --- a/apps/web/src/app/(shell)/(admin)/spotlight/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -export default function SpotlightPage() { - return ( -