{"id":15118447,"url":"https://github.com/Kriebel-LLC/taxonomy-edge","last_synced_at":"2025-09-28T00:32:43.539Z","repository":{"id":180007180,"uuid":"664177985","full_name":"Kriebel-LLC/taxonomy-edge","owner":"Kriebel-LLC","description":"taxonomy starter app at the edge","archived":false,"fork":false,"pushed_at":"2024-06-23T16:44:54.000Z","size":2730,"stargazers_count":9,"open_issues_count":0,"forks_count":5,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-01-18T06:32:41.334Z","etag":null,"topics":["cloudflare","cloudflare-pages","drizzle","edge","firebase-auth","next-firebase-auth-edge","nextjs","planetscale","shadcn-taxonomy","shadcn-ui","tailwindcss","taxonomy","typescript"],"latest_commit_sha":null,"homepage":"https://tx.kriebel.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Kriebel-LLC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-09T06:25:07.000Z","updated_at":"2024-12-24T09:45:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"e09e209a-9a8a-4f84-befc-746d4ea66aa7","html_url":"https://github.com/Kriebel-LLC/taxonomy-edge","commit_stats":{"total_commits":5,"total_committers":1,"mean_commits":5.0,"dds":0.0,"last_synced_commit":"d38a13c91c005ace702b21ff9c110800fd1a0054"},"previous_names":["kriebel-llc/taxonomy-edge"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Kriebel-LLC/taxonomy-edge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kriebel-LLC%2Ftaxonomy-edge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kriebel-LLC%2Ftaxonomy-edge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kriebel-LLC%2Ftaxonomy-edge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kriebel-LLC%2Ftaxonomy-edge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kriebel-LLC","download_url":"https://codeload.github.com/Kriebel-LLC/taxonomy-edge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kriebel-LLC%2Ftaxonomy-edge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277311261,"owners_count":25796890,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-27T02:00:08.978Z","response_time":73,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudflare","cloudflare-pages","drizzle","edge","firebase-auth","next-firebase-auth-edge","nextjs","planetscale","shadcn-taxonomy","shadcn-ui","tailwindcss","taxonomy","typescript"],"created_at":"2024-09-26T01:46:16.208Z","updated_at":"2025-09-28T00:32:43.105Z","avatar_url":"https://github.com/Kriebel-LLC.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","Boilerplates \u0026 Starters"],"sub_categories":[],"readme":"# Taxonomy at the Edge\n\nA version of [shadcn's taxonomy](https://github.com/shadcn/taxonomy) starter application optimized to run in the [Edge Runtime](https://edge-runtime.vercel.app/).\n\n\u003e **Warning**\n\u003e This app is an experimental application, primarily meant as a starting point, and may have bugs.\n\u003e This is a fork of [taxonomy](https://github.com/shadcn/taxonomy), and has diverged. \n\n## Why?\nTo deploy a pre-built, state-of-the-art Next.js application on Cloudflare Pages, which [requires the edge runtime](https://developers.cloudflare.com/pages/framework-guides/deploy-a-nextjs-site/#use-the-edge-runtime), though this repo can be deployed where edge runtime is supported.\n\nEdge applications are often deployed more broadly, to \"edge\" servers close to users, and supports 0ms cold starts, unlike regular serverless applications. Because of this, performance may increase. Read more [here](https://workers.cloudflare.com/).\n\n## Features\n\nChanges to the original taxonomy repo are ~~struckthrough~~\n\n- New `/app` dir\n- Routing, Layouts, Nested Layouts and Layout Groups\n- Data Fetching, Caching and Mutation\n- Loading UI\n- Route handlers\n- Metadata files\n- Server and Client Components\n- API Routes and Middlewares\n- Authentication using ~~NextAuth.js~~ **Firebase Auth** with [`next-firebase-auth-edge`](https://github.com/awinogrodzki/next-firebase-auth-edge)\n- - Why? The `next-auth` package is [currently incompatible](https://github.com/nextauthjs/next-auth/discussions/5855#discussioncomment-4564329) with the edge runtime. \n- - `next-firebase-auth-edge` allows easy use of cookies, to seamlessly power auth in server components, rather than send JWTs manually every request\n- ORM using ~~Prisma~~ **Drizzle**\n- - Prisma is [not currently compatible](https://github.com/prisma/prisma/issues/19500) with edge runtime\n- Database on ~~**PlanetScale** using the [Serverless Driver](https://github.com/planetscale/database-js)~~\n- - On April 8th, 2024, Planetscale's free tier is going away. DB has moved to Cloudflare D1!\n- UI Components built using **Radix UI**\n- Documentation and blog using **MDX** ~~and Contentlayer~~ and `next/mdx`\n- - Contentlayer seems to generate code that is evaluated during runtime. This evaluation uses [edge runtime-incompatible APIs](https://github.com/contentlayerdev/contentlayer/blob/main/packages/next-contentlayer/src/hooks/useMDXComponent.ts#L24).\n- Subscriptions using **Stripe**, [adapted](https://blog.cloudflare.com/announcing-stripe-support-in-workers/) to work in edge runtime\n- Styled using **Tailwind CSS**\n- Validations using **Zod**\n- Written in **TypeScript**\n\n## What's different?\n\nCompared to the [taxonomy repo](https://github.com/shadcn/taxonomy) repo, the following has changed:\n\n1. All routes, including server-rendered pages, include `export const runtime = \"edge\";` to opt into edge runtime.\n2. Auth has moved to Firebase Auth, using `next-firebase-auth-edge` since NextAuth is incompatible with edge runtime.\n3. Prisma has been replaced with [Drizzle](https://github.com/drizzle-team/drizzle-orm), which is edge runtime-compatible.\n4. Stripe has been modified to use Web Crypto, `constructEventAsync`, and `createFetchHttpClient` to add edge compatibility.\n5. Contentlayer has been replaced with `next/mdx` and manually routed pages since next-contentlayer uses incompatible APIs. \n6. Usage of `next/image` has been replaced since it's [currently unsupported by Cloudflare Pages](https://developers.cloudflare.com/pages/framework-guides/deploy-a-nextjs-site/#statically-imported-images-on-pages).\n7. Use of `vercel/og` is disabled since it's [currently broken](https://github.com/cloudflare/next-on-pages/issues/39) in Next.js on Cloudflare Pages.\n8. Use of `EditorJS` is disabled since it seems to import wasm, causing next-on-pages builds to fail. See [this issue](https://github.com/cloudflare/next-on-pages/issues/344) for more details.\n9.  Yarn: [shadcn/ui](https://github.com/shadcn/ui), the component library for this project, is in a separate package named `components`, while the Next.js app is in another. This repo uses yarn workspaces to link them. \n10. Planetscale database has been replaced with Cloudflare D1. You can launch taxonomy-edge with a database of your choice by replacing usages of D1 with your database.\n\n## Running Locally\n\n1. Install dependencies using pnpm:\n\n```sh\nyarn\n```\n\n2. Copy `.env.example` to `.env.local` and add your own variables. \n\n```sh\ncp packages/web/.env.example packages/web/.env.local\n```\n\n3. Start the development server:\n\n```sh\nyarn run web\n```\n\n## Deploying on Cloudflare Pages\n1. [Push](https://developers.cloudflare.com/pages/framework-guides/deploy-a-nextjs-site/#create-a-github-repository) this into a Github repo.\n2. Follow [Cloudflare's instructions here](https://developers.cloudflare.com/pages/framework-guides/deploy-a-nextjs-site/#3-deploy-your-application-to-cloudflare-pages)\n3. Once on the \"Set up builds and deployments\" step, for configuration options, set:\n   1. `Build command` to `yarn \u0026\u0026 cd packages/web \u0026\u0026 npx @cloudflare/next-on-pages`\n   2. `Build output directory` to `/packages/web/.vercel/output/static`\n4. Complete the Cloudflare instructions set above\n5. Make sure you set all environment variables, or your build will fail!\n   - Don't forget the `NODE_VERSION` env var that the instructions above mention! Node 18.19.1 is the minimum supported Node version.\n   - Note: your `FIREBASE_PRIVATE_KEY` env var must be stripped of all `\\n`. Cloudflare environment variables do not seem to escape/unescape these properly, at least when entered from the dashboard.\n\n## Managing the DB\nIn the `./packages/web` directory, you can:\n- run `yarn run db:migrate-gen` to create a migration based on the state of your `./db/schema.ts` file\n- run `yarn run db:migrate-list` to list any unapplied migration files. Options: `--local` for local DB, `--preview` for preview environment DB, and no flag for main/production DB.\n- run `yarn run db:migrate-prod` to apply any migrations against your remote, production database\n- - run `yarn run db:migrate-local` to apply migrations against your local db\n- - run `yarn run db:migrate-preview` to apply migrations against your remote, preview db (as defined by preview_database_id in `wrangler.toml`)\n\nAll operations are run against the database named `taxonomy-edge` locally to start.\n\n## Known Issues/TODO's\n- Table of contents in certain MDX pages is disabled for now\n\n## License\n\nLicensed under the [MIT license](https://github.com/shadcn/taxonomy/blob/main/LICENSE.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKriebel-LLC%2Ftaxonomy-edge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FKriebel-LLC%2Ftaxonomy-edge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKriebel-LLC%2Ftaxonomy-edge/lists"}