diff options
| author | Alex Pooley (@zuedev) <zuedev@gmail.com> | 2026-05-12 22:08:30 +0100 |
|---|---|---|
| committer | Alex Pooley (@zuedev) <zuedev@gmail.com> | 2026-05-12 22:08:30 +0100 |
| commit | 0f0b8ed3191210707965cc78ae626023c3b922f0 (patch) | |
| tree | 4bea7a6cb53ba174876a4e4e1096a0c7f8122e2f | |
| parent | c1ca45a0ba712de6fe222d4599fe12792c2271e0 (diff) | |
| download | unnamed-group-0f0b8ed3191210707965cc78ae626023c3b922f0.tar unnamed-group-0f0b8ed3191210707965cc78ae626023c3b922f0.tar.gz unnamed-group-0f0b8ed3191210707965cc78ae626023c3b922f0.tar.bz2 unnamed-group-0f0b8ed3191210707965cc78ae626023c3b922f0.tar.xz unnamed-group-0f0b8ed3191210707965cc78ae626023c3b922f0.zip | |
add clerk auth
6 files changed, 189 insertions, 3 deletions
diff --git a/communities/red-right-hand/174bg.net/package-lock.json b/communities/red-right-hand/174bg.net/package-lock.json index dd5990c..d8125a2 100644 --- a/communities/red-right-hand/174bg.net/package-lock.json +++ b/communities/red-right-hand/174bg.net/package-lock.json @@ -8,6 +8,7 @@ "name": "174gb.net", "version": "0.1.0", "dependencies": { + "@clerk/nextjs": "^7.3.3", "@heroicons/react": "^2.2.0", "next": "16.2.6", "react": "19.2.4", @@ -275,6 +276,87 @@ "node": ">=6.9.0" } }, + "node_modules/@clerk/backend": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/@clerk/backend/-/backend-3.4.7.tgz", + "integrity": "sha512-zAELfaYtrlxlxxB6PT3EHPsHck6IPuyTQSKm7hWQqXp9GoFOM6wKOflFZgI0Q2M1C5SgrkDcrMNchkWXRwbsQw==", + "license": "MIT", + "dependencies": { + "@clerk/shared": "^4.10.2", + "standardwebhooks": "^1.0.0", + "tslib": "2.8.1" + }, + "engines": { + "node": ">=20.9.0" + } + }, + "node_modules/@clerk/nextjs": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@clerk/nextjs/-/nextjs-7.3.3.tgz", + "integrity": "sha512-MvDczhXM5v9H/a6qd7O52Ydj6CNtgSSPBrpC6HzlfB+nkP8GrsRl/sH+jFrGmRnLsT7Q7A9TESXkrbuHoeGAeQ==", + "license": "MIT", + "dependencies": { + "@clerk/backend": "^3.4.7", + "@clerk/react": "^6.6.2", + "@clerk/shared": "^4.10.2", + "server-only": "0.0.1", + "tslib": "2.8.1" + }, + "engines": { + "node": ">=20.9.0" + }, + "peerDependencies": { + "next": "^15.2.8 || ^15.3.8 || ^15.4.10 || ^15.5.9 || ^15.6.0-0 || ^16.0.10 || ^16.1.0-0", + "react": "^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0", + "react-dom": "^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0" + } + }, + "node_modules/@clerk/react": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/@clerk/react/-/react-6.6.2.tgz", + "integrity": "sha512-eLev3C21yh2vqyvEBfXpc1QHa4q+wxbtRdTtBG0fCI+tMQUim8TIS300AJAciM6ox8tgInTWwIeIxr5jiYsvtw==", + "license": "MIT", + "dependencies": { + "@clerk/shared": "^4.10.2", + "tslib": "2.8.1" + }, + "engines": { + "node": ">=20.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0", + "react-dom": "^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0" + } + }, + "node_modules/@clerk/shared": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/@clerk/shared/-/shared-4.10.2.tgz", + "integrity": "sha512-2RXGaCV94U2wYWaMQZA/AhVkqjcSx8f+oVjh6wgr4yXDmZ24BQRjPJ+K4L6IHiB/agoaXtKWJ0GI8InRZjo9/g==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "^5.100.6", + "dequal": "2.0.3", + "glob-to-regexp": "0.4.1", + "js-cookie": "3.0.5", + "std-env": "^3.9.0" + }, + "engines": { + "node": ">=20.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0", + "react-dom": "^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/@emnapi/core": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", @@ -1255,6 +1337,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@stablelib/base64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/base64/-/base64-1.0.1.tgz", + "integrity": "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==", + "license": "MIT" + }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -1535,6 +1623,16 @@ "tailwindcss": "4.3.0" } }, + "node_modules/@tanstack/query-core": { + "version": "5.100.10", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.100.10.tgz", + "integrity": "sha512-8UR0yJR+GiQ40m3lPhUr0xbfAupe6GSQiksSBSa9SM2NjezFyxXCIA69/lz8cSoNKZLrw1/PktIyQBJcVeMi3w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@tybys/wasm-util": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", @@ -2782,6 +2880,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -3507,6 +3614,12 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-sha256": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-sha256/-/fast-sha256-1.3.0.tgz", + "integrity": "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==", + "license": "Unlicense" + }, "node_modules/fastq": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", @@ -3741,6 +3854,12 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, "node_modules/globals": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", @@ -4411,6 +4530,15 @@ "jiti": "lib/jiti-cli.mjs" } }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5633,6 +5761,12 @@ "semver": "bin/semver.js" } }, + "node_modules/server-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", + "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==", + "license": "MIT" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -5855,6 +5989,22 @@ "dev": true, "license": "MIT" }, + "node_modules/standardwebhooks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/standardwebhooks/-/standardwebhooks-1.0.0.tgz", + "integrity": "sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg==", + "license": "MIT", + "dependencies": { + "@stablelib/base64": "^1.0.0", + "fast-sha256": "^1.3.0" + } + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "license": "MIT" + }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", diff --git a/communities/red-right-hand/174bg.net/package.json b/communities/red-right-hand/174bg.net/package.json index ca4b930..988f26c 100644 --- a/communities/red-right-hand/174bg.net/package.json +++ b/communities/red-right-hand/174bg.net/package.json @@ -9,6 +9,7 @@ "lint": "eslint" }, "dependencies": { + "@clerk/nextjs": "^7.3.3", "@heroicons/react": "^2.2.0", "next": "16.2.6", "react": "19.2.4", diff --git a/communities/red-right-hand/174bg.net/production/docker-compose.yaml b/communities/red-right-hand/174bg.net/production/docker-compose.yaml index 901cf5c..b5d38b3 100644 --- a/communities/red-right-hand/174bg.net/production/docker-compose.yaml +++ b/communities/red-right-hand/174bg.net/production/docker-compose.yaml @@ -5,3 +5,4 @@ services: ports: - "3000:3000/tcp" - "3000:3000/udp" + env_file: 174bg-net.env # we don't include this file for obvious reasons, but it should contain the necessary environment variables for the application to run diff --git a/communities/red-right-hand/174bg.net/src/app/layout.js b/communities/red-right-hand/174bg.net/src/app/layout.js index ce97609..32d23f4 100644 --- a/communities/red-right-hand/174bg.net/src/app/layout.js +++ b/communities/red-right-hand/174bg.net/src/app/layout.js @@ -1,3 +1,10 @@ +import { + ClerkProvider, + Show, + SignInButton, + SignUpButton, + UserButton, +} from "@clerk/nextjs"; import { Inter, Fira_Code } from "next/font/google"; import "./globals.css"; import TerminalOverlay from "@/components/TerminalOverlay"; @@ -27,8 +34,23 @@ export default function RootLayout({ children }) { className={`${inter.variable} ${firaCode.variable} h-full antialiased`} > <body className="min-h-full flex flex-col"> - <TerminalOverlay /> - {children} + <ClerkProvider> + <header className="flex justify-end items-center p-4 gap-4 h-16"> + <Show when="signed-out"> + <SignInButton /> + <SignUpButton> + <button className="bg-purple-700 text-white rounded-full font-medium text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 cursor-pointer"> + Sign Up + </button> + </SignUpButton> + </Show> + <Show when="signed-in"> + <UserButton /> + </Show> + </header> + <TerminalOverlay /> + {children} + </ClerkProvider> </body> </html> ); diff --git a/communities/red-right-hand/174bg.net/src/components/TerminalOverlay/index.js b/communities/red-right-hand/174bg.net/src/components/TerminalOverlay/index.js index 6053949..2d7c5da 100644 --- a/communities/red-right-hand/174bg.net/src/components/TerminalOverlay/index.js +++ b/communities/red-right-hand/174bg.net/src/components/TerminalOverlay/index.js @@ -10,7 +10,7 @@ export default function TerminalOverlay() { <> <button onClick={() => setOpen(true)} - className="fixed top-4 right-4 bg-gray-800 text-white p-3 rounded-full shadow-lg hover:bg-gray-700 transition-colors z-50" + className="fixed bottom-4 right-4 bg-gray-800 text-white p-3 rounded-full shadow-lg hover:bg-gray-700 transition-colors z-50" title="Access the web terminal" > <CommandLineIcon className="h-5 w-5" /> diff --git a/communities/red-right-hand/174bg.net/src/proxy.js b/communities/red-right-hand/174bg.net/src/proxy.js new file mode 100644 index 0000000..21b699f --- /dev/null +++ b/communities/red-right-hand/174bg.net/src/proxy.js @@ -0,0 +1,12 @@ +import { clerkMiddleware } from "@clerk/nextjs/server"; + +export default clerkMiddleware(); + +export const config = { + matcher: [ + // Skip Next.js internals and all static files, unless found in search params + "/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)", + // Always run for API routes + "/(api|trpc)(.*)", + ], +}; |
