├── supabase
├── seed.sql
├── .gitignore
└── templates
│ ├── magic_link.html
│ ├── confirmation.html
│ ├── recovery.html
│ ├── email_change.html
│ └── invite.html
├── docker-compose.yaml
├── public
├── bloomicon.jpg
├── favicon.ico
├── auth_banner.jpg
├── favicon-16x16.png
├── favicon-32x32.png
├── mstile-150x150.png
├── preview_large.jpg
├── preview_small.jpg
├── apple-touch-icon.png
├── bloom_icon_large.jpg
├── opengraph-image.jpg
├── android-chrome-192x192.png
├── apple-touch-icon-precomposed.png
├── browserconfig.xml
├── site.webmanifest
├── vercel.svg
├── usericon.svg
├── safari-pinned-tab.svg
├── next.svg
├── bloom2x1.svg
└── bloom2x1dark.svg
├── assets
└── ToM Chain Flow.png
├── postcss.config.js
├── .dockerignore
├── fonts
└── DepartureMono-Regular.woff2
├── .cursor
└── rules
│ └── pnpm.mdc
├── utils
├── fonts.ts
├── unstableCache.ts
├── ai
│ ├── stream.ts
│ ├── types.ts
│ ├── validation.ts
│ ├── summary.ts
│ └── conversation.ts
├── honcho.ts
├── supabase
│ ├── server.ts
│ ├── client.ts
│ ├── actions.ts
│ ├── queries.ts
│ └── middleware.ts
├── prompts
│ ├── name.ts
│ ├── summary.ts
│ └── pdf.ts
├── swrCache.ts
├── types.ts
├── parseFiles.ts
├── parsePdf.ts
├── pdfChat.ts
├── retryUtils.ts
└── helpers.ts
├── components
├── auth
│ ├── index.ts
│ ├── discord.tsx
│ ├── google.tsx
│ ├── forgot.tsx
│ ├── reset.tsx
│ └── signIn.tsx
├── loading.tsx
├── settings
│ ├── SecuritySettings.tsx
│ ├── AccountSettings.tsx
│ ├── SupportSettings.tsx
│ └── SubscriptionSettings.tsx
├── ui
│ ├── sonner.tsx
│ ├── label.tsx
│ ├── textarea.tsx
│ ├── input.tsx
│ ├── scroll-area.tsx
│ ├── button.tsx
│ ├── card.tsx
│ ├── resizable.tsx
│ ├── tooltip.tsx
│ ├── tabs.tsx
│ ├── alert-dialog.tsx
│ ├── dialog.tsx
│ ├── file-upload.tsx
│ └── prompt-input.tsx
├── bloomlogo.tsx
├── spinner.tsx
├── messages
│ ├── UserMessage.tsx
│ └── AIMessage.tsx
├── FileUpload.tsx
├── thoughts.tsx
├── PriceCard.tsx
├── header.tsx
├── MessageList.tsx
├── cookieConsentBanner.tsx
├── markdownWrapper.tsx
└── conversationtab.tsx
├── CLAUDE.md
├── app
├── global-error.tsx
├── settings
│ ├── page.tsx
│ └── SettingsLayout.tsx
├── api
│ ├── chat
│ │ ├── name
│ │ │ └── route.ts
│ │ └── route.ts
│ └── webhook
│ │ └── route.ts
├── auth
│ ├── confirm
│ │ └── route.ts
│ ├── callback
│ │ └── route.ts
│ ├── actions.ts
│ ├── reset
│ │ └── page.tsx
│ └── page.tsx
├── page.tsx
├── providers.tsx
├── layout.tsx
└── actions
│ └── conversations.ts
├── tests
├── setup.ts
└── arcjet
│ └── README.md
├── components.json
├── instrumentation.ts
├── vitest.config.ts
├── tsconfig.json
├── .env.template
├── eslint.config.mjs
├── sentry.server.config.ts
├── sentry.edge.config.ts
├── hooks
├── autoscroll.ts
├── useReactions.ts
└── useThoughts.ts
├── .gitignore
├── sentry.client.config.ts
├── Dockerfile
├── middleware.ts
├── CHANGELOG.md
├── package.json
└── scripts
├── export-users.js
└── stripeSync.mjs
/supabase/seed.sql:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docker-compose.yaml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/supabase/.gitignore:
--------------------------------------------------------------------------------
1 | # Supabase
2 | .branches
3 | .temp
4 | .env
5 |
--------------------------------------------------------------------------------
/public/bloomicon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/public/bloomicon.jpg
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/public/auth_banner.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/public/auth_banner.jpg
--------------------------------------------------------------------------------
/assets/ToM Chain Flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/assets/ToM Chain Flow.png
--------------------------------------------------------------------------------
/public/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/public/favicon-16x16.png
--------------------------------------------------------------------------------
/public/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/public/favicon-32x32.png
--------------------------------------------------------------------------------
/public/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/public/mstile-150x150.png
--------------------------------------------------------------------------------
/public/preview_large.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/public/preview_large.jpg
--------------------------------------------------------------------------------
/public/preview_small.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/public/preview_small.jpg
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | '@tailwindcss/postcss': {},
4 | },
5 | };
6 |
--------------------------------------------------------------------------------
/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/public/bloom_icon_large.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/public/bloom_icon_large.jpg
--------------------------------------------------------------------------------
/public/opengraph-image.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/public/opengraph-image.jpg
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | Dockerfile
2 | .dockerignore
3 | node_modules
4 | npm-debug.log
5 | README.md
6 | .next
7 | .git
8 |
--------------------------------------------------------------------------------
/fonts/DepartureMono-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/fonts/DepartureMono-Regular.woff2
--------------------------------------------------------------------------------
/public/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/public/android-chrome-192x192.png
--------------------------------------------------------------------------------
/public/apple-touch-icon-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/plastic-labs/tutor-gpt/HEAD/public/apple-touch-icon-precomposed.png
--------------------------------------------------------------------------------
/.cursor/rules/pnpm.mdc:
--------------------------------------------------------------------------------
1 | ---
2 | description: for installing any packages: USE PNPM.
3 | globs:
4 | alwaysApply: false
5 | ---
6 | Use pnpm for manipulating packages
--------------------------------------------------------------------------------
/utils/fonts.ts:
--------------------------------------------------------------------------------
1 | import localFont from 'next/font/local';
2 |
3 | export const departureMono = localFont({
4 | src: '../fonts/DepartureMono-Regular.woff2',
5 | });
6 |
--------------------------------------------------------------------------------
/components/auth/index.ts:
--------------------------------------------------------------------------------
1 | export { default as SignUp } from './signUp';
2 | export { default as SignIn } from './signIn';
3 | export { default as Forgot } from './forgot';
4 | export { default as Reset } from './reset';
5 |
--------------------------------------------------------------------------------
/supabase/templates/magic_link.html:
--------------------------------------------------------------------------------
1 |
Magic Link
2 |
3 | Follow this link to login:
4 |
5 | Log In
9 |
10 |
--------------------------------------------------------------------------------
/supabase/templates/confirmation.html:
--------------------------------------------------------------------------------
1 | Confirm your signup
2 |
3 | Follow this link to confirm your user:
4 |
5 | Confirm your email
8 |
9 |
--------------------------------------------------------------------------------
/supabase/templates/recovery.html:
--------------------------------------------------------------------------------
1 | Reset Password
2 |
3 | Follow this link to reset the password for your user:
4 |
5 | Reset Password
9 |
10 |
--------------------------------------------------------------------------------
/CLAUDE.md:
--------------------------------------------------------------------------------
1 | # Package Management
2 |
3 | Use `pnpm` for all package management operations:
4 | - Installing dependencies: `pnpm install`
5 | - Adding packages: `pnpm add `
6 | - Removing packages: `pnpm remove `
7 |
8 | This project uses pnpm for faster installs and better dependency management.
9 |
--------------------------------------------------------------------------------
/public/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #da532c
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/public/site.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Bloombot.ai",
3 | "short_name": "Bloombot",
4 | "icons": [
5 | {
6 | "src": "/android-chrome-192x192.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | }
10 | ],
11 | "theme_color": "#ffffff",
12 | "background_color": "#ffffff",
13 | "display": "standalone"
14 | }
15 |
--------------------------------------------------------------------------------
/supabase/templates/email_change.html:
--------------------------------------------------------------------------------
1 | Confirm Change of Email
2 |
3 |
4 | Follow this link to confirm the update of your email from {{ .Email }} to {{
5 | .NewEmail }}:
6 |
7 |
8 |
11 | Change Email
12 |
13 |
14 |
--------------------------------------------------------------------------------
/components/loading.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const Loading = () => {
4 | return (
5 |
8 | );
9 | };
10 |
11 | export default Loading;
12 |
--------------------------------------------------------------------------------
/supabase/templates/invite.html:
--------------------------------------------------------------------------------
1 | You have been invited
2 |
3 |
4 | You have been invited to create a user on {{ .SiteURL }}. Follow this link to
5 | accept the invite:
6 |
7 |
8 | Accept the invite
12 |
13 |
--------------------------------------------------------------------------------
/app/global-error.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 |
3 | import * as Sentry from '@sentry/nextjs';
4 | import Error from 'next/error';
5 | import { useEffect } from 'react';
6 |
7 | export default function GlobalError({ error }: { error: Error }) {
8 | useEffect(() => {
9 | Sentry.captureException(error);
10 | }, [error]);
11 |
12 | return (
13 |
14 | {/* Your Error component here... */}
15 |
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/utils/unstableCache.ts:
--------------------------------------------------------------------------------
1 | import { cache } from 'react';
2 | import { unstable_cache as next_unstable_cache } from 'next/cache';
3 |
4 | export const unstable_cache = (
5 | callback: (...args: Args) => Promise