├── .eslintrc.json ├── postcss.config.js ├── convex ├── auth.config.js ├── _generated │ ├── api.js │ ├── api.d.ts │ ├── dataModel.d.ts │ ├── server.js │ └── server.d.ts ├── tsconfig.json ├── schema.ts ├── boards.ts ├── README.md └── board.ts ├── app ├── (dashboard) │ ├── _components │ │ ├── board-card │ │ │ ├── overlay.tsx │ │ │ ├── footer.tsx │ │ │ └── index.tsx │ │ ├── sidebar │ │ │ ├── index.tsx │ │ │ ├── list.tsx │ │ │ ├── new-button.tsx │ │ │ └── item.tsx │ │ ├── empty-search.tsx │ │ ├── empty-favorites.tsx │ │ ├── invite-button.tsx │ │ ├── empty-org.tsx │ │ ├── search-input.tsx │ │ ├── navbar.tsx │ │ ├── new-board-button.tsx │ │ ├── empty-boards.tsx │ │ ├── board-list.tsx │ │ └── org-sidebar.tsx │ ├── page.tsx │ └── layout.tsx ├── board │ └── [boardId] │ │ ├── page.tsx │ │ └── _components │ │ ├── loading.tsx │ │ ├── user-avatar.tsx │ │ ├── tool-button.tsx │ │ ├── rectangle.tsx │ │ ├── ellipse.tsx │ │ ├── path.tsx │ │ ├── cursor.tsx │ │ ├── cursors-presence.tsx │ │ ├── color-picker.tsx │ │ ├── participants.tsx │ │ ├── text.tsx │ │ ├── note.tsx │ │ ├── layer-preview.tsx │ │ ├── info.tsx │ │ ├── selection-tools.tsx │ │ ├── toolbar.tsx │ │ └── selection-box.tsx ├── layout.tsx ├── api │ └── liveblocks-auth │ │ └── route.ts └── globals.css ├── next.config.mjs ├── components ├── ui │ ├── skeleton.tsx │ ├── input.tsx │ ├── sonner.tsx │ ├── tooltip.tsx │ ├── avatar.tsx │ ├── button.tsx │ ├── dialog.tsx │ ├── alert-dialog.tsx │ └── dropdown-menu.tsx ├── auth │ └── loading.tsx ├── room.tsx ├── hint.tsx ├── confirm-modal.tsx ├── modals │ └── rename-modal.tsx └── actions.tsx ├── hooks ├── use-disable-scroll-bounce.ts ├── use-api-mutation.ts ├── use-delete-layers.ts └── use-selection-bounds.ts ├── components.json ├── middleware.ts ├── .gitignore ├── public ├── vercel.svg ├── next.svg ├── logo.svg └── placeholders │ ├── 6.svg │ ├── 7.svg │ ├── 3.svg │ ├── 4.svg │ ├── 2.svg │ ├── 5.svg │ └── 9.svg ├── store └── use-rename-modal.ts ├── tsconfig.json ├── providers ├── modal-provider.tsx └── convex-client-provider.tsx ├── package.json ├── tailwind.config.ts ├── types └── canvas.ts ├── README.md ├── liveblocks.config.ts └── lib └── utils.ts /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /convex/auth.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | providers: [ 3 | { 4 | domain: "https://quiet-llama-40.clerk.accounts.dev", 5 | applicationID: "convex", 6 | }, 7 | ], 8 | }; 9 | -------------------------------------------------------------------------------- /app/(dashboard)/_components/board-card/overlay.tsx: -------------------------------------------------------------------------------- 1 | export const Overlay = () => { 2 | return ( 3 |
4 | ); 5 | }; 6 | -------------------------------------------------------------------------------- /next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | images: { 4 | remotePatterns: [{ protocol: "https", hostname: "img.clerk.com" }], 5 | }, 6 | }; 7 | 8 | export default nextConfig; 9 | -------------------------------------------------------------------------------- /components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes9 | Try searching for something else 10 |
11 |9 | Try favoriting a board 10 |
11 |{label}
37 |12 | Create an organization to get started 13 |
14 |{title}
30 |31 | {authorLabel}, {createdAtLabel} 32 |
33 | 45 |34 | Start by creating a board for your organization 35 |
36 |