├── .nvmrc ├── .node-version ├── .husky └── pre-commit ├── public ├── favicon.ico └── logo │ ├── logo-dark.svg │ └── logo-light.svg ├── src ├── actions │ ├── tools │ │ ├── index.ts │ │ └── delete.ts │ ├── permissions │ │ ├── index.ts │ │ └── delete.ts │ ├── roles │ │ ├── index.ts │ │ ├── delete.ts │ │ ├── remove-user.ts │ │ ├── remove-permission.ts │ │ ├── add-users.ts │ │ └── add-tools.ts │ ├── users │ │ ├── get-current-user.ts │ │ ├── delete-user.ts │ │ ├── remove-role.ts │ │ ├── delete-account.ts │ │ └── update-tool-favorite.ts │ ├── auth │ │ ├── confirm-email.ts │ │ └── change-email.ts │ └── feedback.ts ├── app │ ├── (tools) │ │ ├── tools │ │ │ ├── blog │ │ │ │ ├── page.tsx │ │ │ │ └── layout.tsx │ │ │ ├── feedbacks │ │ │ │ ├── layout.tsx │ │ │ │ ├── _components │ │ │ │ │ ├── empty-state.tsx │ │ │ │ │ ├── data-table-column-header.tsx │ │ │ │ │ ├── feedbacks-table.tsx │ │ │ │ │ └── data-table-utils-ssr.tsx │ │ │ │ └── page.tsx │ │ │ ├── _components │ │ │ │ ├── tool-empty-state.tsx │ │ │ │ ├── add-tool-button.tsx │ │ │ │ ├── tools-section.tsx │ │ │ │ └── card-skeleton.tsx │ │ │ └── page.tsx │ │ └── layout.tsx │ ├── api │ │ ├── auth │ │ │ ├── [...nextauth] │ │ │ │ └── route.ts │ │ │ ├── reset-password │ │ │ │ ├── route.ts │ │ │ │ └── [token] │ │ │ │ │ └── route.ts │ │ │ ├── confirm │ │ │ │ └── route.ts │ │ │ └── register │ │ │ │ └── route.ts │ │ ├── openapi │ │ │ └── route.ts │ │ ├── docs │ │ │ └── page.tsx │ │ ├── tools │ │ │ └── route.ts │ │ └── permissions │ │ │ └── options │ │ │ └── route.ts │ ├── (admin) │ │ ├── admin │ │ │ ├── roles │ │ │ │ ├── [roleId] │ │ │ │ │ ├── loading.tsx │ │ │ │ │ ├── (routes) │ │ │ │ │ │ ├── tools │ │ │ │ │ │ │ ├── loading.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── users │ │ │ │ │ │ │ ├── _components │ │ │ │ │ │ │ │ ├── users-empty-state-table.tsx │ │ │ │ │ │ │ │ ├── add-user-button.tsx │ │ │ │ │ │ │ │ └── columns.tsx │ │ │ │ │ │ │ ├── add │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── permissions │ │ │ │ │ │ │ ├── _components │ │ │ │ │ │ │ ├── permissions-empty-state-table.tsx │ │ │ │ │ │ │ └── add-permission-button.tsx │ │ │ │ │ │ │ ├── add │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── _components │ │ │ │ │ │ └── delete-role-button.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── not-found.tsx │ │ │ │ ├── loading.tsx │ │ │ │ ├── _components │ │ │ │ │ ├── roles-empty-state-table.tsx │ │ │ │ │ ├── roles-table.tsx │ │ │ │ │ └── create-role-button.tsx │ │ │ │ ├── new │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── loading.tsx │ │ │ │ └── page.tsx │ │ │ ├── users │ │ │ │ ├── [userId] │ │ │ │ │ ├── loading.tsx │ │ │ │ │ ├── (routes) │ │ │ │ │ │ ├── roles │ │ │ │ │ │ │ ├── _components │ │ │ │ │ │ │ │ ├── roles-empty-state-table.tsx │ │ │ │ │ │ │ │ ├── add-role-button.tsx │ │ │ │ │ │ │ │ └── columns.tsx │ │ │ │ │ │ │ ├── add │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── logs │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── actions │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── metadata │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── profile │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── _components │ │ │ │ │ │ └── delete-user-button.tsx │ │ │ │ ├── not-found.tsx │ │ │ │ ├── loading.tsx │ │ │ │ ├── _components │ │ │ │ │ ├── users-empty-state-table.tsx │ │ │ │ │ └── create-user-button.tsx │ │ │ │ ├── new │ │ │ │ │ └── page.tsx │ │ │ │ └── page.tsx │ │ │ ├── tools │ │ │ │ ├── [toolId] │ │ │ │ │ ├── not-found.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── loading.tsx │ │ │ │ ├── _components │ │ │ │ │ ├── tools-empty-state-table.tsx │ │ │ │ │ ├── tools-table.tsx │ │ │ │ │ ├── create-tool-button.tsx │ │ │ │ │ └── delete-tool-button.tsx │ │ │ │ ├── new │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── loading.tsx │ │ │ │ └── page.tsx │ │ │ ├── permissions │ │ │ │ ├── [permissionId] │ │ │ │ │ ├── not-found.tsx │ │ │ │ │ ├── loading.tsx │ │ │ │ │ ├── _components │ │ │ │ │ │ └── delete-permission-button.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── loading.tsx │ │ │ │ ├── _components │ │ │ │ │ ├── permissions-empty-state-table.tsx │ │ │ │ │ ├── permissions-table.tsx │ │ │ │ │ └── create-permission-button.tsx │ │ │ │ ├── new │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── loading.tsx │ │ │ │ └── page.tsx │ │ │ ├── tokens │ │ │ │ ├── _components │ │ │ │ │ ├── tokens-empty-state-table.tsx │ │ │ │ │ ├── create-token-button.tsx │ │ │ │ │ ├── copy-button.tsx │ │ │ │ │ └── token-display.tsx │ │ │ │ └── page.tsx │ │ │ ├── _components │ │ │ │ ├── card-kpi-loading.tsx │ │ │ │ └── card-kpi.tsx │ │ │ └── page.tsx │ │ └── layout.tsx │ ├── (root) │ │ ├── about │ │ │ └── page.tsx │ │ ├── profile │ │ │ └── page.tsx │ │ ├── settings │ │ │ ├── layout.tsx │ │ │ ├── loading.tsx │ │ │ └── page.tsx │ │ └── layout.tsx │ ├── (auth) │ │ └── auth │ │ │ ├── confirm │ │ │ └── [token] │ │ │ │ ├── page.tsx │ │ │ │ └── loading.tsx │ │ │ ├── change-email │ │ │ └── [token] │ │ │ │ ├── page.tsx │ │ │ │ └── loading.tsx │ │ │ └── logout │ │ │ ├── logout.tsx │ │ │ └── page.tsx │ ├── (home) │ │ └── layout.tsx │ ├── not-found.tsx │ ├── (healthcheck) │ │ └── healthcheck │ │ │ └── page.tsx │ └── layout.tsx ├── lib │ ├── auth │ │ ├── index.ts │ │ ├── hash-token.ts │ │ └── create-token-api.ts │ ├── api │ │ ├── index.ts │ │ ├── api-error.ts │ │ ├── parse-request-body.ts │ │ ├── get-pagination.ts │ │ └── get-id-input-or-throw.ts │ ├── activity.ts │ ├── swr │ │ ├── use-tools.ts │ │ └── fetcher.ts │ ├── hooks │ │ ├── use-debounce.ts │ │ ├── use-copy-to-clipboard.tsx │ │ ├── use-operating-system.tsx │ │ ├── use-media-query.tsx │ │ └── use-url-params.ts │ ├── prismadb.ts │ ├── openapi │ │ ├── roles │ │ │ ├── index.ts │ │ │ ├── list-roles.ts │ │ │ └── read-role.ts │ │ ├── users │ │ │ ├── index.ts │ │ │ ├── list-users.ts │ │ │ └── delete-user.ts │ │ ├── tokens │ │ │ ├── index.ts │ │ │ └── list-tokens.ts │ │ ├── permissions │ │ │ ├── index.ts │ │ │ └── list-permissions.ts │ │ └── responses.ts │ ├── validate-schema-action.ts │ ├── jwt.ts │ ├── mail.ts │ └── zod │ │ └── utils.ts ├── components │ ├── admin │ │ ├── table-loading.tsx │ │ ├── section-loading.tsx │ │ └── sidebar-nav.tsx │ ├── ui │ │ ├── skeleton.tsx │ │ ├── sonner.tsx │ │ ├── label.tsx │ │ ├── data-tables │ │ │ ├── server-side │ │ │ │ └── data-table-search.tsx │ │ │ ├── data-table-fallback.tsx │ │ │ ├── empty-state.tsx │ │ │ ├── data-table-filters.tsx │ │ │ └── data-table-view-options.tsx │ │ ├── separator.tsx │ │ ├── textarea.tsx │ │ ├── input.tsx │ │ ├── switch.tsx │ │ ├── avatar.tsx │ │ ├── checkbox.tsx │ │ ├── radio-group.tsx │ │ ├── hover-card.tsx │ │ └── toggle.tsx │ ├── max-width-wrapper.tsx │ ├── navbar │ │ ├── login-button.tsx │ │ ├── user-avatar.tsx │ │ └── navbar.tsx │ ├── back-link-button.tsx │ ├── providers.tsx │ ├── health-status-button.tsx │ ├── auth │ │ └── auth-template.tsx │ ├── copy-clipboard-dropdown-menu-item.tsx │ ├── site-footer.tsx │ ├── 404.tsx │ └── copy-clipboard-button.tsx ├── schemas │ ├── feedbacks.ts │ ├── tools.ts │ └── activity-logs.ts ├── data │ ├── tools.ts │ ├── feedback.ts │ └── permission.ts ├── types │ ├── types.ts │ ├── next-auth.d.ts │ └── token.ts ├── middleware.ts └── emails │ ├── reset-email.tsx │ ├── confirm-email.tsx │ └── update-email.tsx ├── .prettierignore ├── postcss.config.mjs ├── prisma ├── migrations │ └── migration_lock.toml ├── schema.prisma ├── models │ ├── activity.prisma │ ├── feedback.prisma │ ├── tokenPermission.prisma │ ├── permission.prisma │ ├── token.prisma │ └── tool.prisma └── seed.ts ├── .editorconfig ├── next.config.ts ├── components.json ├── .vscode ├── settings.json └── extensions.json ├── .gitignore ├── .env.example ├── tsconfig.json ├── .prettierrc ├── compose.yaml ├── eslint.config.mjs └── README.md /.nvmrc: -------------------------------------------------------------------------------- 1 | 22.12.0 -------------------------------------------------------------------------------- /.node-version: -------------------------------------------------------------------------------- 1 | 22.12.0 -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npx lint-staged -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ezeparziale/quark/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /src/actions/tools/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./create" 2 | export * from "./delete" 3 | export * from "./update" 4 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | .next 4 | build 5 | src/components/ui/* 6 | !src/components/ui/data-tables/ -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | const config = { 2 | plugins: ["@tailwindcss/postcss"], 3 | } 4 | 5 | export default config 6 | -------------------------------------------------------------------------------- /src/actions/permissions/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./create" 2 | export * from "./delete" 3 | export * from "./update" 4 | -------------------------------------------------------------------------------- /src/app/(tools)/tools/blog/page.tsx: -------------------------------------------------------------------------------- 1 | export default function BlogPage() { 2 | return
Add new tool
18 |Create role
22 |{description}
23 |Create permission
22 |Add users
22 |{extra}
29 |Add permissions
22 |Create user
26 |{description}
25 |Add roles
26 |Create tool
27 |Create token
32 |Delete tool
33 |Delete role
33 |Delete user
36 |Delete permission
33 |