├── .npmrc
├── vercel.json
├── pnpm-workspace.yaml
├── apps
├── ws-backend
│ ├── tsconfig.tsbuildinfo
│ ├── turbo.json
│ ├── tsconfig.json
│ ├── package.json
│ └── src
│ │ └── index.ts
├── http-backend
│ ├── tsconfig.tsbuildinfo
│ ├── turbo.json
│ ├── tsconfig.json
│ ├── package.json
│ └── src
│ │ ├── middleware.ts
│ │ └── index.ts
└── coscribe-frontend
│ ├── public
│ ├── logo.png
│ ├── final.mp4
│ ├── abstract-logo.png
│ ├── eraser-cursor.png
│ ├── window.svg
│ └── next.svg
│ ├── config.ts
│ ├── app
│ ├── (auth)
│ │ ├── signin
│ │ │ └── page.tsx
│ │ └── signup
│ │ │ └── page.tsx
│ ├── page.tsx
│ ├── dashboard
│ │ └── page.tsx
│ ├── canvas
│ │ └── [roomId]
│ │ │ └── page.tsx
│ ├── globals.css
│ └── layout.tsx
│ ├── postcss.config.mjs
│ ├── next.config.ts
│ ├── lib
│ └── react-query.tsx
│ ├── eslint.config.mjs
│ ├── components
│ ├── ProtectedRoutes
│ │ ├── ProtectedRoute.tsx
│ │ └── CanvasProtectedRoute.tsx
│ ├── LandingPage
│ │ ├── Landing.tsx
│ │ ├── CTA.tsx
│ │ ├── HeroSection.tsx
│ │ ├── VideoSection.tsx
│ │ ├── Features.tsx
│ │ ├── Footer.tsx
│ │ └── Navbar.tsx
│ ├── Canvas
│ │ ├── RoomCanvas.tsx
│ │ └── Canvas.tsx
│ ├── dialogbox
│ │ ├── confirmation.tsx
│ │ ├── JoinRoom.tsx
│ │ └── CreateRoom.tsx
│ ├── Auth
│ │ ├── Signin.tsx
│ │ └── Signup.tsx
│ ├── Toolbars
│ │ ├── SideToolbar.tsx
│ │ ├── ColorSelector.tsx
│ │ └── Toolbar.tsx
│ └── Dashboard
│ │ └── Dashboard.tsx
│ ├── .gitignore
│ ├── tailwind.config.ts
│ ├── tsconfig.json
│ ├── draw
│ ├── http.ts
│ ├── eraser.ts
│ ├── SelectionManager.ts
│ └── draw.ts
│ ├── package.json
│ ├── api
│ ├── auth.ts
│ └── room.ts
│ └── README.md
├── packages
├── common
│ ├── tsconfig.tsbuildinfo
│ ├── turbo.json
│ ├── tsconfig.json
│ ├── package.json
│ └── src
│ │ └── types.ts
├── ui
│ ├── src
│ │ ├── index.css
│ │ ├── code.tsx
│ │ ├── button.tsx
│ │ ├── card.tsx
│ │ └── input.tsx
│ ├── eslint.config.mjs
│ ├── tsconfig.json
│ ├── turbo
│ │ └── generators
│ │ │ ├── templates
│ │ │ └── component.hbs
│ │ │ └── config.ts
│ ├── package.json
│ └── tailwind.config.ts
├── eslint-config
│ ├── README.md
│ ├── package.json
│ ├── base.js
│ ├── react-internal.js
│ └── next.js
├── db
│ ├── prisma
│ │ ├── migrations
│ │ │ ├── 20250221055846_removed_unique_slug
│ │ │ │ └── migration.sql
│ │ │ ├── migration_lock.toml
│ │ │ ├── 20250209055528_added_optional
│ │ │ │ └── migration.sql
│ │ │ ├── 20250209163559_unique
│ │ │ │ └── migration.sql
│ │ │ ├── 20250215193156_message_id_chat_schema
│ │ │ │ └── migration.sql
│ │ │ ├── 20250208045612_init
│ │ │ │ └── migration.sql
│ │ │ ├── 20250215193742_removed_message_id
│ │ │ │ └── migration.sql
│ │ │ ├── 20250219191655_added_users_array_to_rooms
│ │ │ │ └── migration.sql
│ │ │ ├── 20250308174257_room_id_string
│ │ │ │ └── migration.sql
│ │ │ └── 20250208180508_added_further_models
│ │ │ │ └── migration.sql
│ │ └── schema.prisma
│ ├── src
│ │ └── index.ts
│ ├── tsconfig.json
│ └── package.json
└── typescript-config
│ ├── react-library.json
│ ├── package.json
│ ├── nextjs.json
│ └── base.json
├── .vscode
└── settings.json
├── README.md
├── package.json
├── turbo.json
├── .gitignore
└── LICENSE
/.npmrc:
--------------------------------------------------------------------------------
1 | registry=https://registry.npmjs.org/
2 |
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "buildCommand": "pnpm run build"
3 | }
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | packages:
2 | - "apps/*"
3 | - "packages/*"
4 |
--------------------------------------------------------------------------------
/apps/ws-backend/tsconfig.tsbuildinfo:
--------------------------------------------------------------------------------
1 | {"root":["./src/index.ts"],"version":"5.7.3"}
--------------------------------------------------------------------------------
/packages/common/tsconfig.tsbuildinfo:
--------------------------------------------------------------------------------
1 | {"root":["./src/types.ts"],"version":"5.7.3"}
--------------------------------------------------------------------------------
/packages/ui/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
--------------------------------------------------------------------------------
/apps/http-backend/tsconfig.tsbuildinfo:
--------------------------------------------------------------------------------
1 | {"root":["./src/index.ts","./src/middleware.ts"],"version":"5.7.3"}
--------------------------------------------------------------------------------
/packages/eslint-config/README.md:
--------------------------------------------------------------------------------
1 | # `@turbo/eslint-config`
2 |
3 | Collection of internal eslint configurations.
4 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "eslint.workingDirectories": [
3 | {
4 | "mode": "auto"
5 | }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/packages/db/prisma/migrations/20250221055846_removed_unique_slug/migration.sql:
--------------------------------------------------------------------------------
1 | -- DropIndex
2 | DROP INDEX "Room_slug_key";
3 |
--------------------------------------------------------------------------------
/apps/coscribe-frontend/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Devansh-Sabharwal/CoScribe/HEAD/apps/coscribe-frontend/public/logo.png
--------------------------------------------------------------------------------
/apps/coscribe-frontend/public/final.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Devansh-Sabharwal/CoScribe/HEAD/apps/coscribe-frontend/public/final.mp4
--------------------------------------------------------------------------------
/apps/coscribe-frontend/config.ts:
--------------------------------------------------------------------------------
1 | export const HTTP_URL = process.env.NEXT_PUBLIC_HTTP_URL
2 | export const WSS_URL = process.env.NEXT_PUBLIC_WSS_URL
--------------------------------------------------------------------------------
/packages/db/src/index.ts:
--------------------------------------------------------------------------------
1 | import { PrismaClient } from "@prisma/client";
2 | const prismaClient = new PrismaClient();
3 | export default prismaClient
--------------------------------------------------------------------------------
/apps/coscribe-frontend/public/abstract-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Devansh-Sabharwal/CoScribe/HEAD/apps/coscribe-frontend/public/abstract-logo.png
--------------------------------------------------------------------------------
/apps/coscribe-frontend/public/eraser-cursor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Devansh-Sabharwal/CoScribe/HEAD/apps/coscribe-frontend/public/eraser-cursor.png
--------------------------------------------------------------------------------
/apps/http-backend/turbo.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["//"],
3 | "tasks": {
4 | "build": {
5 | "outputs": ["dist/**"]
6 | }
7 | }
8 | }
--------------------------------------------------------------------------------
/apps/ws-backend/turbo.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends":["//"],
3 | "tasks":{
4 | "build":{
5 | "outputs":["dist/**"]
6 | }
7 | }
8 | }
--------------------------------------------------------------------------------
/packages/common/turbo.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["//"],
3 | "tasks": {
4 | "build": {
5 | "outputs": ["dist/**"]
6 | }
7 | }
8 | }
--------------------------------------------------------------------------------
/apps/coscribe-frontend/app/(auth)/signin/page.tsx:
--------------------------------------------------------------------------------
1 | import { AuthPage } from "@/components/Auth/Signin";
2 |
3 | export default function Signin(){
4 | return
{children};
11 | }
12 |
--------------------------------------------------------------------------------
/packages/db/prisma/migrations/20250209163559_unique/migration.sql:
--------------------------------------------------------------------------------
1 | /*
2 | Warnings:
3 |
4 | - A unique constraint covering the columns `[email]` on the table `User` will be added. If there are existing duplicate values, this will fail.
5 |
6 | */
7 | -- CreateIndex
8 | CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
9 |
--------------------------------------------------------------------------------
/packages/db/prisma/migrations/20250215193156_message_id_chat_schema/migration.sql:
--------------------------------------------------------------------------------
1 | /*
2 | Warnings:
3 |
4 | - Added the required column `messageId` to the `Chat` table without a default value. This is not possible if the table is not empty.
5 |
6 | */
7 | -- AlterTable
8 | ALTER TABLE "Chat" ADD COLUMN "messageId" TEXT NOT NULL;
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | CoScribe is an intuitive online platform designed for seamless collaborative drawing and annotation. Whether you're brainstorming ideas, sketching diagrams, or annotating images in real time, CoScribe provides a smooth and interactive experience.
2 |
3 | Deployed at https://coscribe.onrender.com
4 |
5 | Tech Stack- Nextjs TailwindCSS Websockets & Express
6 |
--------------------------------------------------------------------------------
/packages/db/prisma/migrations/20250208045612_init/migration.sql:
--------------------------------------------------------------------------------
1 | -- CreateTable
2 | CREATE TABLE "User" (
3 | "id" SERIAL NOT NULL,
4 | "username" TEXT NOT NULL,
5 | "password" TEXT NOT NULL,
6 |
7 | CONSTRAINT "User_pkey" PRIMARY KEY ("id")
8 | );
9 |
10 | -- CreateIndex
11 | CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
12 |
--------------------------------------------------------------------------------
/packages/typescript-config/nextjs.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json.schemastore.org/tsconfig",
3 | "extends": "./base.json",
4 | "compilerOptions": {
5 | "plugins": [{ "name": "next" }],
6 | "module": "ESNext",
7 | "moduleResolution": "Bundler",
8 | "allowJs": true,
9 | "jsx": "preserve",
10 | "noEmit": true
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apps/coscribe-frontend/app/canvas/[roomId]/page.tsx:
--------------------------------------------------------------------------------
1 | import { RoomCanvas } from "@/components/Canvas/RoomCanvas";
2 |
3 | export type paramsType = Promise<{ roomId: string }>;
4 |
5 | export default async function CanvasPage(props: { params: paramsType }){
6 | const { roomId } = await props.params;
7 |
8 | return (
9 | {children}
25 | 26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /apps/coscribe-frontend/components/LandingPage/Landing.tsx: -------------------------------------------------------------------------------- 1 | import { Navbar } from "./Navbar"; 2 | import { Features } from "./Features"; 3 | import Footer from "./Footer"; 4 | import VideoSection from "./VideoSection"; 5 | import { HeroSection } from "./HeroSection"; 6 | import { Footer1 } from "./CTA"; 7 | 8 | export default function Landing() { 9 | return ( 10 |Join thousands of teams who trust DrawFlow for their visual collaboration needs.
8 | 9 | Get Started for Free 10 | 11 |{message}
48 |40 | Sign in to sketch ideas together on CoScribe. 41 |
42 |79 | Create an account?{" "} 80 | 81 | Sign up 82 | 83 |
84 |56 | Sign up to start using CoScribe 57 |
58 |110 | Already have an account?{" "} 111 | 112 | Sign in 113 | 114 |
115 |Start a new collaborative drawing session
124 |Enter a room code to collaborate
135 |