42 | {guide.title} 43 |
44 | {guide.description && ( 45 |{guide.description}
46 | )} 47 |50 | {formatDate(guide.date)} 51 |
52 | )} 53 |├── .nvmrc
├── .prettierignore
├── public
├── og.jpg
├── favicon.ico
├── images
│ ├── hero.png
│ ├── avatars
│ │ └── shadcn.png
│ └── blog
│ │ ├── blog-post-1.jpg
│ │ ├── blog-post-2.jpg
│ │ ├── blog-post-3.jpg
│ │ └── blog-post-4.jpg
├── favicon-16x16.png
├── favicon-32x32.png
├── apple-touch-icon.png
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── site.webmanifest
└── vercel.svg
├── .commitlintrc.json
├── app
├── opengraph-image.jpg
├── api
│ ├── auth
│ │ └── [...nextauth]
│ │ │ └── _route.ts
│ ├── users
│ │ ├── [userId]
│ │ │ └── route.ts
│ │ └── stripe
│ │ │ └── route.ts
│ ├── webhooks
│ │ └── stripe
│ │ │ └── route.ts
│ └── posts
│ │ ├── route.ts
│ │ └── [postId]
│ │ └── route.ts
├── (auth)
│ ├── layout.tsx
│ ├── login
│ │ └── page.tsx
│ └── register
│ │ └── page.tsx
├── robots.ts
├── (docs)
│ ├── guides
│ │ ├── layout.tsx
│ │ ├── page.tsx
│ │ └── [...slug]
│ │ │ └── page.tsx
│ ├── docs
│ │ ├── layout.tsx
│ │ └── [[...slug]]
│ │ │ └── page.tsx
│ └── layout.tsx
├── (editor)
│ └── editor
│ │ ├── layout.tsx
│ │ └── [postId]
│ │ ├── loading.tsx
│ │ ├── not-found.tsx
│ │ └── page.tsx
├── (dashboard)
│ └── dashboard
│ │ ├── billing
│ │ ├── loading.tsx
│ │ └── page.tsx
│ │ ├── settings
│ │ ├── loading.tsx
│ │ └── page.tsx
│ │ ├── loading.tsx
│ │ ├── layout.tsx
│ │ └── page.tsx
├── (marketing)
│ ├── layout.tsx
│ ├── blog
│ │ └── page.tsx
│ ├── [...slug]
│ │ └── page.tsx
│ └── pricing
│ │ └── page.tsx
└── layout.tsx
├── assets
└── fonts
│ ├── Inter-Bold.ttf
│ ├── Inter-Regular.ttf
│ ├── CalSans-SemiBold.ttf
│ ├── CalSans-SemiBold.woff
│ └── CalSans-SemiBold.woff2
├── .husky
├── commit-msg
└── pre-commit
├── content
├── authors
│ └── shadcn.mdx
├── docs
│ ├── in-progress.mdx
│ ├── index.mdx
│ └── documentation
│ │ ├── index.mdx
│ │ ├── code-blocks.mdx
│ │ └── components.mdx
└── pages
│ ├── privacy.mdx
│ └── terms.mdx
├── postcss.config.js
├── lib
├── validations
│ ├── auth.ts
│ ├── user.ts
│ ├── og.ts
│ └── post.ts
├── exceptions.ts
├── stripe.ts
├── session.ts
├── db.ts
├── utils.ts
├── subscription.ts
└── auth.ts
├── prisma
├── migrations
│ ├── migration_lock.toml
│ ├── 20221118173244_add_stripe_columns
│ │ └── migration.sql
│ └── 20221021182747_init
│ │ └── migration.sql
└── schema.prisma
├── pages
└── api
│ └── auth
│ └── [...nextauth].ts
├── components
├── analytics.tsx
├── ui
│ ├── aspect-ratio.tsx
│ ├── skeleton.tsx
│ ├── collapsible.tsx
│ ├── label.tsx
│ ├── textarea.tsx
│ ├── separator.tsx
│ ├── input.tsx
│ ├── progress.tsx
│ ├── toaster.tsx
│ ├── sonner.tsx
│ ├── checkbox.tsx
│ ├── slider.tsx
│ ├── tooltip.tsx
│ ├── switch.tsx
│ ├── badge.tsx
│ ├── hover-card.tsx
│ ├── popover.tsx
│ ├── toggle.tsx
│ ├── avatar.tsx
│ ├── radio-group.tsx
│ ├── alert.tsx
│ ├── scroll-area.tsx
│ ├── resizable.tsx
│ ├── toggle-group.tsx
│ ├── button.tsx
│ ├── tabs.tsx
│ ├── card.tsx
│ ├── input-otp.tsx
│ ├── accordion.tsx
│ ├── calendar.tsx
│ ├── breadcrumb.tsx
│ ├── pagination.tsx
│ ├── table.tsx
│ └── drawer.tsx
├── theme-provider.tsx
├── shell.tsx
├── card-skeleton.tsx
├── header.tsx
├── page-header.tsx
├── callout.tsx
├── tailwind-indicator.tsx
├── user-avatar.tsx
├── mdx-card.tsx
├── search.tsx
├── post-item.tsx
├── nav.tsx
├── mode-toggle.tsx
├── mobile-nav.tsx
├── pager.tsx
├── sidebar-nav.tsx
├── site-footer.tsx
├── main-nav.tsx
├── empty-placeholder.tsx
├── post-create-button.tsx
├── user-account-nav.tsx
├── icons.tsx
├── billing-form.tsx
├── toc.tsx
└── user-name-form.tsx
├── .editorconfig
├── hooks
├── use-mounted.ts
└── use-lock-body.ts
├── types
├── next-auth.d.ts
└── index.d.ts
├── components.json
├── config
├── marketing.ts
├── site.ts
├── subscriptions.ts
├── dashboard.ts
└── docs.ts
├── next.config.mjs
├── .gitignore
├── .eslintrc.json
├── tsconfig.json
├── prettier.config.js
├── styles
├── mdx.css
├── editor.css
└── globals.css
├── LICENSE.md
├── middleware.ts
├── .env.example
├── env.mjs
├── tailwind.config.ts
├── README.md
└── velite.config.ts
/.nvmrc:
--------------------------------------------------------------------------------
1 | v16.18.0
2 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | dist
2 | node_modules
3 | .next
4 | build
5 | .contentlayer
--------------------------------------------------------------------------------
/public/og.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/public/og.jpg
--------------------------------------------------------------------------------
/.commitlintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["@commitlint/config-conventional"]
3 | }
4 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/public/images/hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/public/images/hero.png
--------------------------------------------------------------------------------
/app/opengraph-image.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/app/opengraph-image.jpg
--------------------------------------------------------------------------------
/public/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/public/favicon-16x16.png
--------------------------------------------------------------------------------
/public/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/public/favicon-32x32.png
--------------------------------------------------------------------------------
/assets/fonts/Inter-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/assets/fonts/Inter-Bold.ttf
--------------------------------------------------------------------------------
/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/assets/fonts/Inter-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/assets/fonts/Inter-Regular.ttf
--------------------------------------------------------------------------------
/.husky/commit-msg:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | . "$(dirname -- "$0")/_/husky.sh"
3 |
4 | npx commitlint --edit $1
5 |
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | . "$(dirname -- "$0")/_/husky.sh"
3 |
4 | npx pretty-quick --staged
5 |
--------------------------------------------------------------------------------
/public/images/avatars/shadcn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/public/images/avatars/shadcn.png
--------------------------------------------------------------------------------
/assets/fonts/CalSans-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/assets/fonts/CalSans-SemiBold.ttf
--------------------------------------------------------------------------------
/assets/fonts/CalSans-SemiBold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/assets/fonts/CalSans-SemiBold.woff
--------------------------------------------------------------------------------
/assets/fonts/CalSans-SemiBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/assets/fonts/CalSans-SemiBold.woff2
--------------------------------------------------------------------------------
/public/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/public/android-chrome-192x192.png
--------------------------------------------------------------------------------
/public/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/public/android-chrome-512x512.png
--------------------------------------------------------------------------------
/public/images/blog/blog-post-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/public/images/blog/blog-post-1.jpg
--------------------------------------------------------------------------------
/public/images/blog/blog-post-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/public/images/blog/blog-post-2.jpg
--------------------------------------------------------------------------------
/public/images/blog/blog-post-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/public/images/blog/blog-post-3.jpg
--------------------------------------------------------------------------------
/public/images/blog/blog-post-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zce/taxonomy/HEAD/public/images/blog/blog-post-4.jpg
--------------------------------------------------------------------------------
/content/authors/shadcn.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: shadcn
3 | avatar: /images/avatars/shadcn.png
4 | twitter: shadcn
5 | ---
6 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/lib/validations/auth.ts:
--------------------------------------------------------------------------------
1 | import * as z from "zod"
2 |
3 | export const userAuthSchema = z.object({
4 | email: z.string().email(),
5 | })
6 |
--------------------------------------------------------------------------------
/lib/validations/user.ts:
--------------------------------------------------------------------------------
1 | import * as z from "zod"
2 |
3 | export const userNameSchema = z.object({
4 | name: z.string().min(3).max(32),
5 | })
6 |
--------------------------------------------------------------------------------
/prisma/migrations/migration_lock.toml:
--------------------------------------------------------------------------------
1 | # Please do not edit this file manually
2 | # It should be added in your version-control system (i.e. Git)
3 | provider = "mysql"
--------------------------------------------------------------------------------
/lib/exceptions.ts:
--------------------------------------------------------------------------------
1 | export class RequiresProPlanError extends Error {
2 | constructor(message = "This action requires a pro plan") {
3 | super(message)
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/lib/stripe.ts:
--------------------------------------------------------------------------------
1 | import Stripe from "stripe"
2 |
3 | import { env } from "@/env.mjs"
4 |
5 | export const stripe = new Stripe(env.STRIPE_API_KEY, {
6 | typescript: true,
7 | })
8 |
--------------------------------------------------------------------------------
/pages/api/auth/[...nextauth].ts:
--------------------------------------------------------------------------------
1 | import NextAuth from "next-auth"
2 |
3 | import { authOptions } from "@/lib/auth"
4 |
5 | // @see ./lib/auth
6 | export default NextAuth(authOptions)
7 |
--------------------------------------------------------------------------------
/components/analytics.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import { Analytics as VercelAnalytics } from "@vercel/analytics/react"
4 |
5 | export function Analytics() {
6 | return
{text}
} 17 |{text}
} 21 |24 | {formatDate(post.createdAt?.toDateString())} 25 |
26 |37 | Enter your email to sign in to your account 38 |
39 |42 | 46 | Don't have an account? Sign Up 47 | 48 |
49 |34 | Enter your email below to create your account 35 |
36 |39 | By clicking continue, you agree to our{" "} 40 | 44 | Terms of Service 45 | {" "} 46 | and{" "} 47 | 51 | Privacy Policy 52 | 53 | . 54 |
55 |{user.name}
} 33 | {user.email && ( 34 |35 | {user.email} 36 |
37 | )} 38 |{guide.description}
46 | )} 47 |50 | {formatDate(guide.date)} 51 |
52 | )} 53 |No guides published.
62 | )} 63 |27 | A blog built using Contentlayer. Posts are written in MDX. 28 |
29 |{post.description}
52 | )} 53 | {post.date && ( 54 |55 | {formatDate(post.date)} 56 |
57 | )} 58 | 59 | View Article 60 | 61 |No posts published.
66 | )} 67 |{page.description}
93 | )} 94 |19 | Unlock all features including unlimited posts for your blog. 20 |
21 |53 | Billed Monthly 54 |
55 |63 | Taxonomy is a demo app.{" "} 64 | You can test the upgrade and won't be charged. 65 |
66 |On This Page
36 |This text will be red.
144 | ``` 145 | 146 | Make sure you have configured the path to your content in your `tailwind.config.js` file: 147 | 148 | ```js title="tailwind.config.js" {6} 149 | /** @type {import('tailwindcss').Config} */ 150 | module.exports = { 151 | content: [ 152 | "./app/**/*.{ts,tsx}", 153 | "./components/**/*.{ts,tsx}", 154 | "./content/**/*.{md,mdx}", 155 | ], 156 | } 157 | ``` 158 | --------------------------------------------------------------------------------