├── .dockerignore ├── .eslintrc.json ├── .firebase ├── hosting.Lm5leHQvc3RhdGlj.cache └── hosting.b3V0.cache ├── .firebaserc ├── .github ├── ISSUE_TEMPLATE │ ├── PULL_REQUEST_TEMPLATE.md │ ├── bug.md │ └── feature_request.md └── workflows │ ├── firebase-hosting-merge.yml │ └── firebase-hosting-pull-request.yml ├── .gitignore ├── .vercelignore ├── .vscode └── settings.json ├── Changelog.md ├── Contributing.md ├── Dockerfile ├── LICENSE ├── README.md ├── components.json ├── firebase.json ├── functions ├── .eslintrc.js ├── .gitignore ├── package-lock.json ├── package.json ├── src │ └── index.ts ├── tsconfig.dev.json └── tsconfig.json ├── next.config.mjs ├── package-lock.json ├── package.json ├── postcss.config.mjs ├── public ├── favicon │ ├── apple-touch-icon.png │ ├── favicon-48x48.png │ ├── favicon.ico │ ├── favicon.svg │ ├── icon-16x16.png │ ├── icon-180x180.png │ ├── icon-192x192.png │ ├── icon-48x48.png │ └── icon-512x512.png ├── images │ ├── cover-dark.png │ ├── cover.png │ ├── frame.png │ ├── gemini.png │ ├── local.png │ ├── logo.png │ └── preview.png ├── manifest.json ├── next.svg ├── sw.js ├── vercel.svg ├── workbox-7144475a.js └── workbox-7144475a.js.map ├── src ├── app │ ├── (main) │ │ ├── _components │ │ │ ├── CodeHighlight.tsx │ │ │ ├── CopyIcon.tsx │ │ │ ├── DatePicker.tsx │ │ │ ├── Dialog │ │ │ │ ├── Changelog.tsx │ │ │ │ ├── Delete.tsx │ │ │ │ ├── GeminiDialog.tsx │ │ │ │ ├── Import.tsx │ │ │ │ ├── SearchDialog.tsx │ │ │ │ └── Share.tsx │ │ │ ├── Dropdown.tsx │ │ │ ├── Editor.tsx │ │ │ ├── GeminiIcon.tsx │ │ │ ├── GradientText.tsx │ │ │ ├── IconButton.tsx │ │ │ ├── LoginMenu.tsx │ │ │ ├── MDPreview.tsx │ │ │ ├── Navigation.tsx │ │ │ ├── PSAccordian.tsx │ │ │ ├── PSBanner.tsx │ │ │ ├── PSInput.tsx │ │ │ ├── PSNavbar.tsx │ │ │ ├── Pastelog.tsx │ │ │ ├── PreviewAction.tsx │ │ │ ├── PreviewPage.tsx │ │ │ ├── RouteClient.tsx │ │ │ ├── ShortCutWrapper.tsx │ │ │ ├── ShortcutsGuide.tsx │ │ │ ├── SideBarItem.tsx │ │ │ ├── Sidebar.tsx │ │ │ ├── TermsAndPrivacy.tsx │ │ │ ├── ThemeProvider.tsx │ │ │ ├── ThemeSwitcher.tsx │ │ │ ├── ToastProvider.tsx │ │ │ ├── Welcome.tsx │ │ │ ├── accordion.tsx │ │ │ ├── button.tsx │ │ │ ├── calendar.tsx │ │ │ ├── completion.tsx │ │ │ ├── dialog.tsx │ │ │ ├── dropdown-menu.tsx │ │ │ ├── features │ │ │ │ ├── BeautifulMarkdown.tsx │ │ │ │ ├── CreateAndShare.tsx │ │ │ │ ├── DarkMode.tsx │ │ │ │ ├── GeminiPowered.tsx │ │ │ │ ├── Introduction.tsx │ │ │ │ ├── KeyboardShortcuts.tsx │ │ │ │ └── SaveLocally.tsx │ │ │ ├── hover-card.tsx │ │ │ ├── popover.tsx │ │ │ └── select.tsx │ │ ├── _hooks │ │ │ ├── outsideclick.ts │ │ │ ├── useSettings.ts │ │ │ ├── useSidebar.ts │ │ │ └── useSmallScreen.ts │ │ ├── _services │ │ │ ├── Analytics.ts │ │ │ ├── AuthService.ts │ │ │ ├── BannerState.ts │ │ │ ├── EditorState.ts │ │ │ ├── MDFormatter.ts │ │ │ ├── UserService.ts │ │ │ ├── feature.ts │ │ │ └── logService.ts │ │ └── logs │ │ │ ├── [id] │ │ │ └── page.tsx │ │ │ ├── app_layout.tsx │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ ├── (policies) │ │ └── policies │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ ├── (publish) │ │ ├── layout.tsx │ │ └── logs │ │ │ └── publish │ │ │ └── [id] │ │ │ └── page.tsx │ ├── config.js │ ├── constants.ts │ ├── globals.css │ ├── icon.ico │ ├── layout.tsx │ ├── markdown.css │ ├── page.tsx │ ├── providers.tsx │ └── style.css ├── lib │ ├── Context │ │ └── PSNavbarProvider.tsx │ ├── features │ │ └── menus │ │ │ ├── authSlice.ts │ │ │ ├── editorSlice.ts │ │ │ ├── menuSlice.ts │ │ │ └── sidebarSlice.ts │ ├── store.ts │ └── utils.ts └── utils │ ├── DateUtils.ts │ ├── firebase.ts │ ├── toast_utils.tsx │ └── utils.ts ├── tailwind.config.ts ├── tree.md └── tsconfig.json /.dockerignore: -------------------------------------------------------------------------------- 1 | .env 2 | .env.local 3 | node_modules -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /.firebase/hosting.Lm5leHQvc3RhdGlj.cache: -------------------------------------------------------------------------------- 1 | EY8konJMwavGWJ4iIv4QF/_ssgManifest.js,1718806270868,8c469cd29c6a706334d3b9ec2e526bdbdac460bef3b3d364fdc528bcd7d19e67 2 | EY8konJMwavGWJ4iIv4QF/_buildManifest.js,1718806231253,0474c56df53665d9f0c84e3ed67dea5b38f6e7ff31a982c3bbb5904e4771ee4b 3 | chunks/296-816d237730189113.js,1718806231231,5a5ee862caddf24820030d5069fbbeb5f542d916bd70bb5a3b4133ff1b3ebb45 4 | chunks/231-f6dae81872c7d78b.js,1718806231243,e53a101025c5e29c2f792e2d421777b817a833f7830ca05a2e001bf4dd4a2509 5 | chunks/159-3903c4f71d267b37.js,1718806231201,6318c1ddc3ed2e0fb7ac3306152f5d365bbaa59b1368f3ec86f8829735eddca6 6 | chunks/743-b35eb48c8eda0aac.js,1718806231245,113b5d8c92e6912268722c37a82b883d7085df2582cfc16afbfbd0acccadc446 7 | chunks/763-4b36ebca252e1b62.js,1718806231246,ad9e8385afbe6406c0f7713c66f20fa3f0ce943f011c7de2e1373c2eab10ace0 8 | chunks/956-de831295c52cc99e.js,1718806231241,23cdbb898ed477f8e3c166630bb39dd6319f52375331dcde705a4a10f1555e17 9 | chunks/main-app-f4cb664fb5ef45a9.js,1718806231176,444f3726d23518f83e426e713d90ecb74177af13b53abfa809d63c95ac2ab195 10 | chunks/app/layout-cb8df515adb5d8a5.js,1718806231175,a58fad8eab75a8a00018becc5ce3bfebdbacaead5da60b3576e318e01ceecb26 11 | chunks/app/page-7acb3d503e4e035b.js,1718806231174,44cf23a1f453bd5296d00d6a47df8982f5f898a51ae5f0015f9dc6e78cab238f 12 | chunks/app/(main)/logs/[id]/page-c09c015404a75874.js,1718806231203,6d3f9dd1843e8b972b78470017cac897b0c3a4c1dc7c21a95291a7828c575ccd 13 | chunks/app/(publish)/layout-aad6176b770bad03.js,1718806231198,eb0aed9db09a3fa95d035bc58aabcec1ad67a78d0dcd048b09076fbb4b8fdc3f 14 | chunks/app/(policies)/policies/page-158323feb7a169fc.js,1718806231180,0b66ead6527b8353a68a5fca95d776790a8519ad88b1a58a3186b1151cbfbe06 15 | chunks/app/(main)/logs/page-c6b685aadee43392.js,1718806231200,467b5b7cb924df36a08bfcf7afacea89cf3ae1dfad836ef1a14e8809bfdd58fb 16 | chunks/app/_not-found/page-c37604c0fee25ed4.js,1718806231183,9ca424689608f02ed6af05d422b7d999ef39e4d4b12d658b81967e5d47b15379 17 | chunks/app/(publish)/logs/publish/[id]/page-80583e0b57a961de.js,1718806231216,d5312a1b696d66589a6eeeef15f3244e2058b1bb500990d0904d4fffbb066541 18 | chunks/pages/_error-6ae619510b1539d6.js,1718806231173,e73729a247fbd5cf1acddc0c6f67271a511c97ca0b0068e42447d5f5e996ecf7 19 | chunks/pages/_app-037b5d058bd9a820.js,1718806231174,06e750a0ef670f4de0c1bd480b5011b19558d8742f9b03ec7109bdceae9c7931 20 | css/2f71e0d51b6954c9.css,1718806231261,dfc9deaaf139e09d08338e38db4e3a51eb2bd33a06eaaa9ff82df253e8e7153c 21 | media/05a31a2ca4975f99-s.woff2,1718806231172,6efe3c10c8cf8d8db389af700f8e6dd56ef3734c59159ae26bea5e9f3b05d919 22 | chunks/webpack-495241f564b871a1.js,1718806231192,e883eda1102d858623f1bc77c7c87b0205b3a60729fd2e03dcc09f4df2b9cd0c 23 | css/ba45e92c03b1843b.css,1718806231261,586b688c280cff086052c930645ca3e4766a47c7f3edb67f317c3c0648751205 24 | chunks/app/(main)/logs/layout-503a0fefe97f90ae.js,1718806231199,159837e4ef1712cedf9eadf280f89d095bbc0880c2ff752bae04be9a7248be1f 25 | media/fd4db3eb5472fc27-s.woff2,1718806231174,b62a5c48aa2a5c1f795d9f0e040eb59387eb7527523ebf1a2a37a0b80ed8afda 26 | media/513657b02c5c193f-s.woff2,1718806231178,12fead7b73c8d1e6d927c1558658f895e2bc585abb9fa0787fd3a18ab6de0229 27 | media/ec159349637c90ad-s.woff2,1718806231174,72adc3dde09d31fedb2a4472cd9ac9ae14108ee045cbe7de2afc351c6761e047 28 | media/51ed15f9841b9f9d-s.woff2,1718806231175,1858da22f630427753e92d04720084a47e27d78af30e9bcfe21f1514a014b67f 29 | chunks/152-9ec55e4056236625.js,1718806231201,1577936183300f13d67c9ae56b00fd4f63fa25759ee8f1d8f4e384bb62524308 30 | chunks/523-e3c888c0f967560a.js,1718806231234,d1db6adbeb6ba1a727d4cb1f5ea0f1ea9d45137029760fe78b4a440cdfc074db 31 | chunks/387-e2f45577f77adde7.js,1718806231200,5662c49b44374109e1e5d3eb9783645569fd5e276bb6268d173564ad3f97018e 32 | chunks/23-1808afd62972ec90.js,1718806231245,f79d32ad86c7bc93b615355c2947bce161f7ebdd9c040185b54f583f57198425 33 | chunks/f8e4659f-fbca1f7b2b1ed97c.js,1718806231193,4cc0c82692f75f39397e3fef12c5b3c8c03400b382ec6a3e0253fd033c09e422 34 | chunks/main-03244eb4fff4e901.js,1718806231173,47ecf915042407e600b846c38f5328fbbd1b469369510a8a692d0b1c5a8fb475 35 | media/c9a5bc6a7c948fb0-s.p.woff2,1718806231174,37d0358a532a69cb27ae70525b099439dc7139875db00f29a2a103bf24e7f54f 36 | chunks/polyfills-78c92fac7aa8fdd8.js,1718806231245,a5b39edcc77b6069d442b5dbeb8091cf27ac47ac7a1a99cfc325213bdaae2fb5 37 | chunks/131-b236aadf3b763336.js,1718806231231,9cb1b69c149b534dd17e1a47c2bd03a9d149db30e250cd0ed0d3e4b0e0991337 38 | chunks/669.4db2b53eca70cd2d.js,1718806231260,1d668bd5f1d53748693aa182015ebb2ef29de6de76a2989201af511b20ef9958 39 | chunks/781-df2db01f32f9186c.js,1718806231199,2d5c5094f45cafda68353b3b2e4109b3f80afa1c5a90a84bcbd951a3c5e4fdf5 40 | chunks/framework-00a8ba1a63cfdc9e.js,1718806231192,c2012692d29b99c17d95c52f9e0f321c0aa21c7e8bc5db5fae470ad7eda00549 41 | css/1fe258efd1e443f0.css,1718806231261,b24588de3897028db953fbddb658915ea6ab570218519006012f22fd0d3a61fb 42 | media/d6b16ce4a6175f26-s.woff2,1718806231173,b4d117b2e85e547b1698898d382cc41f3f9b9f2549a7590657b4b4ad8071987b 43 | chunks/fd9d1056-19d730fc2f8f727f.js,1718806231195,25f5dce45252959ff01f83f2f702c7bc14ffac84dcf3e1efbb080e0a12474250 44 | chunks/bc9e92e6-133eb1bf9a3a2089.js,1718806231192,639a88dcf9c6bda9ebfe6449fbdb39de11f0b117907bf6925b0f324bc2bc3e1b 45 | chunks/627-eaafaafe15b52f68.js,1718806231244,a3b08bd0ea52d337671d978b76cfd280266f0e984773cf5eb5edb916b60f1ff3 46 | chunks/ad2866b8-abe348347acfde4a.js,1718806231192,5188ffc434157965e6b1db58cfc463c20a0e656764cc778c7971dfd95742cfa5 47 | chunks/465-5326a950a770e88d.js,1718806231233,6f2a8ee24c9df75d2fc6f62fd98e80d3093564b2f16124965a5afdae1b501a3e 48 | -------------------------------------------------------------------------------- /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "pastelog-id" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | _Replace this paragraph with a description of what this PR is changing or adding, and why. Consider including before/after screenshots._ 2 | 3 | _List which issues are fixed by this PR. You must list at least one issue._ 4 | 5 | ## Pre-launch Checklist 6 | 7 | - [ ] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. 8 | - [ ] I listed at least one issue that this PR fixes in the description above. 9 | - [ ] I updated/added relevant documentation (doc comments with `///`). 10 | 11 | If you need help, consider pinging the maintainer @maheshmnj 12 | 13 | 14 | 15 | [Contributor Guide]: https://github.com/maheshmnj/searchfield/blob/master/CONTRIBUTING.md 16 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Found a bug? Report and help us fix it. 4 | title: "" 5 | labels: "" 6 | assignees: "" 7 | --- 8 | 9 | **Describe the bug** 10 | A clear and concise description of what the bug is. 11 | 12 | **To Reproduce** 13 | Steps to reproduce the behavior: 14 | 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Actual behavior** 24 | What you actually saw instead of the expected behavior. 25 | 26 | **Screenshots** 27 | If applicable, add screenshots to help explain your problem. 28 | 29 | **Additional context** 30 | Add any other context about the problem here. 31 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: "Have an Idea ? Propose your request " 4 | title: "" 5 | labels: "" 6 | assignees: "" 7 | --- 8 | 9 | **Is your feature request related to a problem? Please describe.** 10 | A clear and concise description of what the feature is. Ex. I'm always frustrated when [...] 11 | 12 | **Describe the solution you'd like** 13 | A clear and concise description of what you want to happen. 14 | 15 | **Describe alternatives you've considered** 16 | A clear and concise description of any alternative solutions or features you've considered. 17 | 18 | **Additional context** 19 | Add any other context or screenshots about the feature request here. 20 | -------------------------------------------------------------------------------- /.github/workflows/firebase-hosting-merge.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to Firebase Hosting on merge 2 | on: 3 | push: 4 | branches: 5 | - main 6 | 7 | jobs: 8 | build_and_deploy: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | 13 | # Generate the .env file with required environment variables 14 | - name: Create .env file 15 | run: echo "${{ secrets.PASTELOG_ENV }}" > .env 16 | 17 | # Install dependencies and build the project 18 | - run: npm ci && npm run build 19 | 20 | # # Deploy to Firebase Hosting 21 | # - uses: FirebaseExtended/action-hosting-deploy@v0 22 | # with: 23 | # repoToken: "${{ secrets.GITHUB_TOKEN }}" 24 | # firebaseServiceAccount: "${{ secrets.FIREBASE_SERVICE_ACCOUNT_PASTELOG_ID }}" 25 | # channelId: live 26 | # projectId: pastelog-id 27 | # env: 28 | # FIREBASE_CLI_PREVIEWS: hostingchannels 29 | -------------------------------------------------------------------------------- /.github/workflows/firebase-hosting-pull-request.yml: -------------------------------------------------------------------------------- 1 | # This file was auto-generated by the Firebase CLI 2 | # https://github.com/firebase/firebase-tools 3 | 4 | name: Build on PR 5 | "on": pull_request 6 | jobs: 7 | build_and_preview: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v2 11 | 12 | # Generate the .env file with required environment variables 13 | - name: Create .env file 14 | run: echo "${{ secrets.PASTELOG_ENV }}" > .env 15 | 16 | # Install dependencies and build the project 17 | - run: npm ci && npm run build 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | public/sw.js.map 20 | # misc 21 | .DS_Store 22 | *.pem 23 | .env 24 | 25 | # debug 26 | npm-debug.log* 27 | yarn-debug.log* 28 | yarn-error.log* 29 | 30 | # local env files 31 | .env*.local 32 | 33 | # vercel 34 | .vercel 35 | 36 | # typescript 37 | *.tsbuildinfo 38 | next-env.d.ts 39 | build.md 40 | react-ghost-text/ -------------------------------------------------------------------------------- /.vercelignore: -------------------------------------------------------------------------------- 1 | functions -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.autoSaveDelay": 3000, 3 | "editor.formatOnSave": true, 4 | "dart.flutterSdkPath": "/Users/mahesh/Documents/flutter", 5 | "dart.debugExternalLibraries": true, 6 | "editor.codeActionsOnSave": { 7 | "source.organizeImports": "always", 8 | "source.fixAll": "explicit", 9 | "source.addMissingImports.ts": "explicit" 10 | }, 11 | "editor.defaultFormatter": "esbenp.prettier-vscode", 12 | "eslint.validate": [ 13 | "javascript", 14 | "typescript" 15 | ], 16 | // shows error in entire project 17 | "typescript.tsserver.experimental.enableProjectDiagnostics": true, 18 | "typescript.tsdk": "functions/node_modules/typescript/lib", 19 | "eslint.workingDirectories": [ 20 | { 21 | "mode": "auto" 22 | }, 23 | { 24 | "pattern": "functions/" 25 | } 26 | ], 27 | "java.configuration.updateBuildConfiguration": "interactive" 28 | } -------------------------------------------------------------------------------- /Changelog.md: -------------------------------------------------------------------------------- 1 | ### [0.6.3] - Apr 26, 2025 2 | 3 | - Sort by last modified date [Issue #43](https://github.com/maheshj01/pastelog/issues/43) 4 | - Load log from local storage first to improve loading time 5 | - Add copy icon to tooltip for links 6 | 7 | ### [0.6.2] - Mar 07, 2025 8 | 9 | - Improved app loading time by 50% 10 | - Eliminate Context API and Migrate to Redux 11 | 12 | ### [0.6.1] - October 06, 2024 13 | 14 | - Show title in Navbar on overscroll 15 | - reset scroll when a new slog is selected 16 | 17 | ### [0.6.0] - October 06, 2024 18 | 19 | - Add Google Sign In Authentication 20 | - Save guest notes in local storage 21 | - Add more options for notes 22 | - Integrate Gemini to summarize and rename the log 23 | - Add PWA Support 24 | - Improve Responsiveness of the app 25 | - And lots of minor fixes and improvements 26 | 27 | ### [0.5.4] - July 31, 2024 28 | 29 | - Add Edit feature 30 | 31 | ### [0.5.3] - July 13, 2024 32 | 33 | - Adds Authentication [Issue #37](https://github.com/maheshmnj/pastelog/issues/37) With Cloud Sync 34 | - Add `new log` and `toggle theme` keyboard shortcut 35 | 36 | ### [0.5.2] - July 12, 2024 37 | 38 | Adds Following Shortcuts 39 | 40 | - Shift + Tab in a code block for selected text should remove tabs 41 | - Return Key continues ordered/unordered list from previous line 42 | - Toggle Sidebar ctrl + m 43 | - Add Keyboard Shortcuts Guide in Sidebar 44 | 45 | ### [0.5.1] - July 02, 2024 46 | 47 | - Apply text formatting to trimmed text on keyboard shortcuts 48 | - add tooltip to gemini icon 49 | - fix share dialog UI 50 | - add import icon 51 | - fix policies text color 52 | - Summary is local Only 53 | - fix: horizontal line was not visible 54 | - update summary prompt 55 | - Fix undo redo of the Editor 56 | 57 | ### [0.5.0] - Jun 29, 2024 58 | 59 | - Summarize log using Gemini 60 | 61 | ### [0.4.1] - Jun 27, 2024 62 | 63 | - Fix line breaks in the log 64 | - Improve the landingpage UI 65 | - Added a new Logo 66 | 67 | ### [0.4.0] - Jun 26, 2024 68 | 69 | - Feat: Import log from a link [Issue #20](https://github.com/maheshmnj/pastelog/issues/20) 70 | - Feat: Integrate Firebase Analytics [Issue #18](https://github.com/maheshmnj/pastelog/issues/18) 71 | 72 | ### [0.3.0] - Jun 25, 2024 73 | 74 | - Adds Keyboard Shortcuts 75 | - Add a realtime banner to show info/warning/success 76 | - Add a toast for success/error 77 | - Fix inline code showing single backtick 78 | - Add a option to Republish 79 | 80 | ### [0.2.0] - Jun 22, 2024 81 | 82 | - Remove Delete from firestore 83 | - Add a delete confirmation Dialog 84 | - improve the DatePicker UI 85 | - Stick the navbar at top 86 | 87 | ### [0.1.0] - Jun 20, 2024 88 | 89 | - Initial release ported to NextJS 14 90 | -------------------------------------------------------------------------------- /Contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | ### Contributor 4 | 5 | Thanks for taking you time to contribute to this repo. Before you start contributing please go through the following guidelines which we consider are important to maintain this repository and can help new contributers to open source. 6 | 7 | - Before you submit a Pull request ensure a issue exist describing the issue / feature request. If it doesn't please file an issue so that we could discuss about the issue before the actual PR is submitted. 8 | 9 | - The issue should be sufficient enough to explain the bug/feature request and a possible solution/ proposal 10 | 11 | - We appreciate any contribution, from fixing a grammar mistake in a comment, improving code snippets to fixing a bug or making a feature requests and writing proper tests are also highly welcome. 12 | 13 | - Follow the best practices to maintain the quality of code. 14 | 15 | (Optional) 16 | 17 | - Additional changes for publishing a release. Update the version in readme, pubspec.yaml, and update the changelog. Make sure the documentation is updated as per the changes. Make sure existing and new tests are passing. Make sure the code is well formatted. Ensure the linter warnigs are zero. 18 | 19 | ### Contributing 20 | 21 | 1. Fork This repo 22 | 2. Create a new branch 23 | 3. Commit a Fix 24 | 4. Add appropriate tests(recommended) 25 | 5. Submit a PR referencing the issue 26 | 6. Request a review 27 | 7. wait for LGTM 🚀 comment 28 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Use the official Node.js 18 image as a parent image 2 | FROM node:18-alpine 3 | 4 | # Set the working directory 5 | WORKDIR /app 6 | 7 | # Copy package.json and package-lock.json 8 | COPY package*.json ./ 9 | 10 | # Install dependencies 11 | RUN npm ci 12 | 13 | # Copy the rest of your app's source code 14 | COPY . . 15 | 16 | # Build your Next.js app 17 | RUN npm run build 18 | 19 | # Expose the port your app runs on 20 | EXPOSE 3000 21 | 22 | # Start the app 23 | CMD ["npm", "start"] -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Mahesh Jamdade 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Banner (1)](https://github.com/maheshmnj/pastelog/assets/31410839/34127d75-f01d-47df-a223-033f1ed5379a) 2 | 3 | # Pastelog 4 | 5 | Create Stunning AI Powered Rich notes with markdown Support and Code Highlighting and share it with a unique URL. The logs are publicly accessible and auto expire after the specified date. Powered By Next.js, Firebase and Gemini API. 6 | 7 | Pastelog - Create stunning rich text notes in minutes | Product Hunt 8 | 9 | Screenshot 2025-04-07 at 14 15 41 10 | 11 | 12 | ### Features 13 | 14 | 15 | - The logs are publicly accessible, no SignIn required 16 | - The logs auto expire after the specified date 17 | - Stores logs locally for quick access 18 | - Supports rich text content with github falvoured markdown and code highlighting 19 | - Export logs as image and plain text 20 | - Import logs from Github gist or from Pastelog Url 21 | - Intelligent editor with Markdown Keyboard shortcuts support to help you write faster 22 | - Supports Darkmode for better readability 23 | - Share logs with a unique URL 24 | - Summarize logs using the Google Gemini API (Uses Ephemeral API key storage) 25 | 26 | ### Building the project 27 | 28 | 1. Clone the repository 29 | 30 | ```bash 31 | git clone 32 | ``` 33 | 34 | 2. Install the dependencies 35 | 36 | ```bash 37 | 38 | npm install 39 | ``` 40 | 41 | 3. Add the .env in the root with the following keys 42 | 43 | ```bash 44 | NEXT_PUBLIC_FIREBASE_API_KEY= 45 | NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN= 46 | NEXT_PUBLIC_FIREBASE_PROJECT_ID= 47 | NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET= 48 | NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID= 49 | NEXT_PUBLIC_FIREBASE_APP_ID= 50 | NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID= 51 | NEXT_PUBLIC_FIREBASE_COLLECTION= 52 | NEXT_PUBLIC_FIREBASE_CONFIG_COLLECTION= 53 | NEXT_PUBLIC_FIREBASE_FEATURE_BANNER= 54 | NEXT_PUBLIC_NEW_USER_VISITED= 55 | NEXT_PUBLIC_CONTACT_EMAIL= 56 | NEXT_PUBLIC_GITHUB_REPO=https://github.com/maheshmnj/pastelog 57 | NEXT_PUBLIC_PRIVACY_POLICY=/logs/publish/1R5Kx9fQRBHe85SUOG89 58 | NEXT_PUBLIC_BASE_URL=https://pastelog.vercel.app 59 | NEXT_PUBLIC_GITHUB_LOGO=https://upload.wikimedia.org/wikipedia/commons/thumb/c/c2/GitHub_Invertocat_Logo.svg/1200px-GitHub_Invertocat_Logo.svg.png 60 | NEXT_PUBLIC_GITHUB_GIST_API=https://api.github.com/gists 61 | ``` 62 | 63 | 3. Run the project 64 | 65 | ```bash 66 | npm run dev 67 | ``` 68 | 69 | ### Folder Structure 70 | 71 | 72 | 73 | ``` 74 | root / 75 | ├──src 76 | │ ├── app / 77 | │ │ ├── (main)/ 78 | │ │ │ │ ├── Log.ts 79 | │ │ │ ├── \_services/ 80 | │ │ │ │ ├── LogService.ts 81 | │ │ │ ├── \_components/ 82 | │ │ │ ├ ├──├── \_Dialog/ 83 | │ │ │ ├ |──── └── SearchDialog.tsx 84 | │ │ │ │ ├── Sidebar.tsx 85 | │ │ │ │ ├── Navbar.tsx 86 | │ │ │ │ ├── MainContent.tsx 87 | │ │ │ │ │ 88 | │ │ │ ├── logs / 89 | │ │ │ │ ├──[id] 90 | │ │ │ │ │ └── page.tsx 91 | │ │ │ │ └── layout.tsx 92 | │ │ │ │ └── app_layout.tsx 93 | │ │ │ │ └── page.tsx 94 | │ │ ├── (publish)/ 95 | │ │ │ ├── logs / 96 | │ │ │ │ ├── publish / 97 | │ │ │ │ │ ├──[id]/ 98 | │ │ │ │ │ └── page.tsx 99 | │ │ │ └── layout.tsx 100 | │ │ │ 101 | │ │ └── layout.tsx 102 | │ │ └── global.css 103 | │ │ └── page.tsx 104 | ``` 105 | 106 | ### Summarize Logs with Gemini 107 | 108 |