├── .eslintrc.json ├── public ├── empty.png ├── error.png ├── reading.png ├── documents.png ├── empty-dark.png ├── error-dark.png ├── reading-dark.png ├── documents-dark.png ├── vercel.svg ├── logo.svg ├── logo-dark.svg └── next.svg ├── postcss.config.js ├── convex ├── auth.config.js ├── _generated │ ├── api.js │ ├── api.d.ts │ ├── dataModel.d.ts │ ├── server.js │ └── server.d.ts ├── schema.ts ├── tsconfig.json ├── README.md └── documents.ts ├── lib ├── utils.ts └── edgestore.ts ├── next.config.js ├── app ├── (public) │ ├── layout.tsx │ └── (routes) │ │ └── preview │ │ └── [documentId] │ │ └── page.tsx ├── (marketing) │ ├── layout.tsx │ ├── page.tsx │ └── _components │ │ ├── footer.tsx │ │ ├── logo.tsx │ │ ├── heroes.tsx │ │ ├── heading.tsx │ │ └── navbar.tsx ├── api │ └── edgestore │ │ └── [...edgestore] │ │ └── route.ts ├── error.tsx ├── (main) │ ├── layout.tsx │ ├── (routes) │ │ └── documents │ │ │ ├── page.tsx │ │ │ └── [documentId] │ │ │ └── page.tsx │ └── _components │ │ ├── navbar.tsx │ │ ├── banner.tsx │ │ ├── menu.tsx │ │ ├── user-item.tsx │ │ ├── title.tsx │ │ ├── document-list.tsx │ │ ├── trash-box.tsx │ │ ├── publish.tsx │ │ ├── item.tsx │ │ └── navigation.tsx ├── layout.tsx └── globals.css ├── components ├── ui │ ├── skeleton.tsx │ ├── label.tsx │ ├── input.tsx │ ├── popover.tsx │ ├── avatar.tsx │ ├── button.tsx │ ├── dialog.tsx │ ├── alert-dialog.tsx │ ├── command.tsx │ └── dropdown-menu.tsx ├── providers │ ├── theme-provider.tsx │ ├── modal-provider.tsx │ └── convex-provider.tsx ├── spinner.tsx ├── modals │ ├── settings-modal.tsx │ ├── confirm-modal.tsx │ └── cover-image-modal.tsx ├── icon-picker.tsx ├── mode-toggle.tsx ├── editor.tsx ├── cover.tsx ├── search-command.tsx ├── toolbar.tsx └── single-image-dropzone.tsx ├── hooks ├── use-settings.tsx ├── use-origin.tsx ├── use-search.tsx ├── use-cover-image.tsx └── use-scroll-top.tsx ├── components.json ├── .gitignore ├── tsconfig.json ├── LICENSE ├── README.md ├── package.json └── tailwind.config.ts /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /public/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Davronov-Alimardon/notion-clone/HEAD/public/empty.png -------------------------------------------------------------------------------- /public/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Davronov-Alimardon/notion-clone/HEAD/public/error.png -------------------------------------------------------------------------------- /public/reading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Davronov-Alimardon/notion-clone/HEAD/public/reading.png -------------------------------------------------------------------------------- /public/documents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Davronov-Alimardon/notion-clone/HEAD/public/documents.png -------------------------------------------------------------------------------- /public/empty-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Davronov-Alimardon/notion-clone/HEAD/public/empty-dark.png -------------------------------------------------------------------------------- /public/error-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Davronov-Alimardon/notion-clone/HEAD/public/error-dark.png -------------------------------------------------------------------------------- /public/reading-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Davronov-Alimardon/notion-clone/HEAD/public/reading-dark.png -------------------------------------------------------------------------------- /public/documents-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Davronov-Alimardon/notion-clone/HEAD/public/documents-dark.png -------------------------------------------------------------------------------- /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://brief-bream-40.clerk.accounts.dev", 5 | applicationID: "convex", 6 | }, 7 | ], 8 | }; 9 | -------------------------------------------------------------------------------- /lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { type ClassValue, clsx } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | images: { 4 | domains: [ 5 | "files.edgestore.dev" 6 | ] 7 | } 8 | } 9 | 10 | module.exports = nextConfig 11 | -------------------------------------------------------------------------------- /app/(public)/layout.tsx: -------------------------------------------------------------------------------- 1 | const PublicLayout = ({ 2 | children 3 | }: { 4 | children: React.ReactNode; 5 | }) => { 6 | return ( 7 |
29 | Jotion 30 |
31 |49 | This page is in the Trash. 50 |
51 | 59 |45 | {user?.emailAddresses[0].emailAddress} 46 |
47 |55 | {user?.fullName}'s Jotion 56 |
57 |{initialData.icon}
} 59 | {isEditing ? ( 60 | 69 | ) : ( 70 | 80 | )} 81 |72 | {document.icon} 73 |
74 | ) : ( 75 |69 | No pages inside 70 |
71 | {documents.map((document) => ( 72 |83 | No documents found. 84 |
85 | {filteredDocuments?.map((document) => ( 86 |81 | {initialData.icon} 82 |
83 |96 | {initialData.icon} 97 |
98 | )} 99 |97 | This note is live on web. 98 |
99 |133 | Publish this note 134 |
135 | 136 | Share your work with others. 137 | 138 | 146 |