From 1aeb56768e8cbaa319f04c16f2c19058005455c4 Mon Sep 17 00:00:00 2001 From: dhanushd-27 Date: Wed, 3 Dec 2025 19:05:31 +0530 Subject: [PATCH 01/10] Fix Tailwind CSS Issue using Cursor --- apps/landing/app/layout.tsx | 2 +- apps/landing/app/page.tsx | 5 +++-- apps/landing/app/tailwind.config.ts | 9 ++++++--- apps/landing/components/Header/Nav.tsx | 7 +++++++ 4 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 apps/landing/components/Header/Nav.tsx diff --git a/apps/landing/app/layout.tsx b/apps/landing/app/layout.tsx index 8469537..7b653f9 100644 --- a/apps/landing/app/layout.tsx +++ b/apps/landing/app/layout.tsx @@ -22,7 +22,7 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - + {children} diff --git a/apps/landing/app/page.tsx b/apps/landing/app/page.tsx index 23d4d59..0a65398 100644 --- a/apps/landing/app/page.tsx +++ b/apps/landing/app/page.tsx @@ -1,8 +1,9 @@ import React from 'react' -import "./page.module.css"; export default function App() { return ( -
Coming Soon!
+
+ +
) } diff --git a/apps/landing/app/tailwind.config.ts b/apps/landing/app/tailwind.config.ts index 357f3ec..c081153 100644 --- a/apps/landing/app/tailwind.config.ts +++ b/apps/landing/app/tailwind.config.ts @@ -1,9 +1,12 @@ -import tailwindThemeConfig from "@repo/tailwind-config/tailwind.config" import type { Config } from "tailwindcss"; +import tailwindConfig from "@repo/tailwind-config/tailwind.config"; const config: Config = { - presets: [tailwindThemeConfig], - content: ["./src/**/*.{js,ts,jsx,tsx}"], + presets: [tailwindConfig], + content: [ + "./app/**/*.{js,ts,jsx,tsx,mdx}", + "./components/**/*.{js,ts,jsx,tsx,mdx}", + ], }; export default config; \ No newline at end of file diff --git a/apps/landing/components/Header/Nav.tsx b/apps/landing/components/Header/Nav.tsx new file mode 100644 index 0000000..2f71f7d --- /dev/null +++ b/apps/landing/components/Header/Nav.tsx @@ -0,0 +1,7 @@ +import React from 'react' + +export default function Nav() { + return ( +
Nav
+ ) +} From 327a8fadf9e8784596b678e0c31b5b6869f8cfa5 Mon Sep 17 00:00:00 2001 From: dhanushd-27 Date: Wed, 3 Dec 2025 19:06:07 +0530 Subject: [PATCH 02/10] Fix Tailwind CSS Issue using Cursor 2.0 --- apps/client/src/index.css | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/client/src/index.css b/apps/client/src/index.css index da7f15a..e085a15 100644 --- a/apps/client/src/index.css +++ b/apps/client/src/index.css @@ -1,3 +1,4 @@ +@import "tailwindcss"; @import "@repo/tailwind-config/theme.css"; :root { From 17dc4f79f12d24a3c8a66e3091beeb217df7ee1e Mon Sep 17 00:00:00 2001 From: dhanushd-27 Date: Wed, 3 Dec 2025 19:26:05 +0530 Subject: [PATCH 03/10] Add a Header Desing --- apps/client/src/index.css | 57 +----- apps/landing/app/globals.css | 34 ---- apps/landing/app/page.module.css | 188 ------------------ apps/landing/app/page.tsx | 7 +- .../components/Header/HeaderDesign.tsx | 20 ++ 5 files changed, 28 insertions(+), 278 deletions(-) delete mode 100644 apps/landing/app/page.module.css create mode 100644 apps/landing/components/Header/HeaderDesign.tsx diff --git a/apps/client/src/index.css b/apps/client/src/index.css index e085a15..5e31d6c 100644 --- a/apps/client/src/index.css +++ b/apps/client/src/index.css @@ -5,67 +5,18 @@ font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; line-height: 1.5; font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - font-synthesis: none; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - body { margin: 0; - display: flex; - place-items: center; min-width: 320px; min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } + display: flex; + place-items: center; + /* Use shared Tailwind color tokens from packages/tailwind-config/theme.css */ + @apply bg-background text-text; } diff --git a/apps/landing/app/globals.css b/apps/landing/app/globals.css index 3df93cd..ed92593 100644 --- a/apps/landing/app/globals.css +++ b/apps/landing/app/globals.css @@ -1,29 +1,12 @@ @import "tailwindcss"; @import "@repo/tailwind-config/theme.css"; -:root { - --background: #ffffff; - --foreground: #171717; -} - -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } -} - html, body { max-width: 100vw; overflow-x: hidden; } -body { - color: var(--foreground); - background: var(--background); -} - * { box-sizing: border-box; padding: 0; @@ -34,20 +17,3 @@ a { color: inherit; text-decoration: none; } - -.imgDark { - display: none; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } - - .imgLight { - display: none; - } - .imgDark { - display: unset; - } -} diff --git a/apps/landing/app/page.module.css b/apps/landing/app/page.module.css deleted file mode 100644 index 3630662..0000000 --- a/apps/landing/app/page.module.css +++ /dev/null @@ -1,188 +0,0 @@ -.page { - --gray-rgb: 0, 0, 0; - --gray-alpha-200: rgba(var(--gray-rgb), 0.08); - --gray-alpha-100: rgba(var(--gray-rgb), 0.05); - - --button-primary-hover: #383838; - --button-secondary-hover: #f2f2f2; - - display: grid; - grid-template-rows: 20px 1fr 20px; - align-items: center; - justify-items: center; - min-height: 100svh; - padding: 80px; - gap: 64px; - font-synthesis: none; -} - -@media (prefers-color-scheme: dark) { - .page { - --gray-rgb: 255, 255, 255; - --gray-alpha-200: rgba(var(--gray-rgb), 0.145); - --gray-alpha-100: rgba(var(--gray-rgb), 0.06); - - --button-primary-hover: #ccc; - --button-secondary-hover: #1a1a1a; - } -} - -.main { - display: flex; - flex-direction: column; - gap: 32px; - grid-row-start: 2; -} - -.main ol { - font-family: var(--font-geist-mono); - padding-left: 0; - margin: 0; - font-size: 14px; - line-height: 24px; - letter-spacing: -0.01em; - list-style-position: inside; -} - -.main li:not(:last-of-type) { - margin-bottom: 8px; -} - -.main code { - font-family: inherit; - background: var(--gray-alpha-100); - padding: 2px 4px; - border-radius: 4px; - font-weight: 600; -} - -.ctas { - display: flex; - gap: 16px; -} - -.ctas a { - appearance: none; - border-radius: 128px; - height: 48px; - padding: 0 20px; - border: none; - font-family: var(--font-geist-sans); - border: 1px solid transparent; - transition: background 0.2s, color 0.2s, border-color 0.2s; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - font-size: 16px; - line-height: 20px; - font-weight: 500; -} - -a.primary { - background: var(--foreground); - color: var(--background); - gap: 8px; -} - -a.secondary { - border-color: var(--gray-alpha-200); - min-width: 180px; -} - -button.secondary { - appearance: none; - border-radius: 128px; - height: 48px; - padding: 0 20px; - border: none; - font-family: var(--font-geist-sans); - border: 1px solid transparent; - transition: background 0.2s, color 0.2s, border-color 0.2s; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - font-size: 16px; - line-height: 20px; - font-weight: 500; - background: transparent; - border-color: var(--gray-alpha-200); - min-width: 180px; -} - -.footer { - font-family: var(--font-geist-sans); - grid-row-start: 3; - display: flex; - gap: 24px; -} - -.footer a { - display: flex; - align-items: center; - gap: 8px; -} - -.footer img { - flex-shrink: 0; -} - -/* Enable hover only on non-touch devices */ -@media (hover: hover) and (pointer: fine) { - a.primary:hover { - background: var(--button-primary-hover); - border-color: transparent; - } - - a.secondary:hover { - background: var(--button-secondary-hover); - border-color: transparent; - } - - .footer a:hover { - text-decoration: underline; - text-underline-offset: 4px; - } -} - -@media (max-width: 600px) { - .page { - padding: 32px; - padding-bottom: 80px; - } - - .main { - align-items: center; - } - - .main ol { - text-align: center; - } - - .ctas { - flex-direction: column; - } - - .ctas a { - font-size: 14px; - height: 40px; - padding: 0 16px; - } - - a.secondary { - min-width: auto; - } - - .footer { - flex-wrap: wrap; - align-items: center; - justify-content: center; - } -} - -@media (prefers-color-scheme: dark) { - .logo { - filter: invert(); - } -} diff --git a/apps/landing/app/page.tsx b/apps/landing/app/page.tsx index 0a65398..1553b51 100644 --- a/apps/landing/app/page.tsx +++ b/apps/landing/app/page.tsx @@ -1,9 +1,10 @@ import React from 'react' +import HeaderDesign from '../components/Header/HeaderDesign' export default function App() { return ( -
- -
+
+ +
) } diff --git a/apps/landing/components/Header/HeaderDesign.tsx b/apps/landing/components/Header/HeaderDesign.tsx new file mode 100644 index 0000000..90c55d1 --- /dev/null +++ b/apps/landing/components/Header/HeaderDesign.tsx @@ -0,0 +1,20 @@ +import React from 'react' + +export default function HeaderDesign() { + return ( +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ ) +} From dfb1df9e66b1b051f78e78c67eef3d9911ab77cf Mon Sep 17 00:00:00 2001 From: dhanushd-27 Date: Thu, 4 Dec 2025 14:13:48 +0530 Subject: [PATCH 04/10] Add the Header Design Stripes --- apps/landing/app/page.tsx | 6 +- .../components/Header/DesignStripe.tsx | 7 ++ .../components/Header/HeaderDesign.tsx | 64 +++++++++++++++---- apps/landing/components/Header/Nav.tsx | 12 +++- packages/tailwind-config/theme.css | 19 +++--- 5 files changed, 82 insertions(+), 26 deletions(-) create mode 100644 apps/landing/components/Header/DesignStripe.tsx diff --git a/apps/landing/app/page.tsx b/apps/landing/app/page.tsx index 1553b51..d433108 100644 --- a/apps/landing/app/page.tsx +++ b/apps/landing/app/page.tsx @@ -1,10 +1,10 @@ import React from 'react' -import HeaderDesign from '../components/Header/HeaderDesign' +import Nav from '../components/Header/Nav' export default function App() { return ( -
- +
+
) } diff --git a/apps/landing/components/Header/DesignStripe.tsx b/apps/landing/components/Header/DesignStripe.tsx new file mode 100644 index 0000000..7eced01 --- /dev/null +++ b/apps/landing/components/Header/DesignStripe.tsx @@ -0,0 +1,7 @@ +import React from 'react' + +export default function DesignStripe({ className }: { className: string }) { + return ( +
+ ) +} diff --git a/apps/landing/components/Header/HeaderDesign.tsx b/apps/landing/components/Header/HeaderDesign.tsx index 90c55d1..35e5d17 100644 --- a/apps/landing/components/Header/HeaderDesign.tsx +++ b/apps/landing/components/Header/HeaderDesign.tsx @@ -1,20 +1,62 @@ import React from 'react' +import DesignStripe from './DesignStripe' -export default function HeaderDesign() { - return ( -
-
+type HeaderDesignProps = { + side: 'left' | 'right' + className?: string +} + +type StripeConfig = { + position: string + size: string + rotate?: string +} -
-
+// Configuration for each individual stripe on each side. +// You can tweak these class strings to fine‑tune position, size, and rotation. +const LEFT_STRIPES: StripeConfig[] = [ + { position: '-top-6 -left-8', size: 'w-4 h-[120%]', rotate: 'rotate-18' }, + { position: '-top-6 -left-4', size: 'w-4 h-[120%]', rotate: 'rotate-18' }, + { position: '-top-6 left-4', size: 'w-6 h-[110%]', rotate: 'rotate-18' }, + { position: '-top-6 left-10', size: 'w-6 h-[100%]', rotate: 'rotate-16' }, + { position: '-top-6 left-19', size: 'w-4 h-[85%]', rotate: 'rotate-18' }, + { position: '-top-6 left-22', size: 'w-5 h-[110%]', rotate: 'rotate-18' }, + { position: '-top-6 left-33', size: 'w-6 h-[100%]', rotate: 'rotate-18' }, + { position: '-top-6 left-38', size: 'w-6 h-[120%]', rotate: 'rotate-14' }, + { position: '-top-6 left-60', size: 'w-1 h-[100%]', rotate: 'rotate-24' }, + { position: '-top-6 left-68', size: 'w-1 h-[120%]', rotate: 'rotate-14' }, + { position: '-top-6 left-72', size: 'w-1 h-[100%]', rotate: 'rotate-16' }, +] -
-
+const RIGHT_STRIPES: StripeConfig[] = [ + { position: '-top-6 -right-8', size: 'w-4 h-[120%]', rotate: '-rotate-18' }, + { position: '-top-6 -right-4', size: 'w-4 h-[120%]', rotate: '-rotate-18' }, + { position: '-top-6 right-4', size: 'w-6 h-[110%]', rotate: '-rotate-18' }, + { position: '-top-6 right-10', size: 'w-6 h-[100%]', rotate: '-rotate-16' }, + { position: '-top-6 right-19', size: 'w-4 h-[85%]', rotate: '-rotate-18' }, + { position: '-top-6 right-22', size: 'w-5 h-[110%]', rotate: '-rotate-18' }, + { position: '-top-6 right-33', size: 'w-6 h-[100%]', rotate: '-rotate-18' }, + { position: '-top-6 right-38', size: 'w-6 h-[120%]', rotate: '-rotate-14' }, + { position: '-top-6 right-60', size: 'w-1 h-[100%]', rotate: '-rotate-24' }, + { position: '-top-6 right-68', size: 'w-1 h-[120%]', rotate: '-rotate-14' }, + { position: '-top-6 right-72', size: 'w-1 h-[100%]', rotate: '-rotate-16' }, +] -
-
+export default function HeaderDesign({ side, className = '' }: HeaderDesignProps) { + const isLeft = side === 'left' + + const stripes = isLeft ? LEFT_STRIPES : RIGHT_STRIPES + + return ( +
+
-
+ {stripes.map((stripe, index) => ( + + ))}
) } diff --git a/apps/landing/components/Header/Nav.tsx b/apps/landing/components/Header/Nav.tsx index 2f71f7d..dd9036a 100644 --- a/apps/landing/components/Header/Nav.tsx +++ b/apps/landing/components/Header/Nav.tsx @@ -1,7 +1,17 @@ import React from 'react' +import HeaderDesign from './HeaderDesign' export default function Nav() { return ( -
Nav
+
+ + + {/* Place your actual nav content here (logo, links, etc.) */} +
+ {/* Nav content */} +
+ + +
) } diff --git a/packages/tailwind-config/theme.css b/packages/tailwind-config/theme.css index cc47852..8521036 100644 --- a/packages/tailwind-config/theme.css +++ b/packages/tailwind-config/theme.css @@ -1,13 +1,10 @@ -@layer base { - :root { - --color-primary: #2563eb; - --color-secondary: #9333ea; - --color-background: #f9fafb; - --color-text: #1f2937; - } +@theme { + --color-primary: #2563eb; + --color-secondary: #9333ea; + --color-background: #f9fafb; + --color-text: #1f2937; +} - body { - background-color: var(--color-background); - color: var(--color-text); - } +@layer base { + } \ No newline at end of file From 05c8b3f97355457c244d0a15d30b6229a2828f12 Mon Sep 17 00:00:00 2001 From: dhanushd-27 Date: Thu, 4 Dec 2025 18:29:38 +0530 Subject: [PATCH 05/10] Add nav bar --- apps/landing/app/globals.css | 13 +--------- apps/landing/app/page.tsx | 2 +- .../components/Header/DesignStripe.tsx | 9 ++++++- .../components/Header/{Nav.tsx => Header.tsx} | 8 +++---- .../components/Header/HeaderDesign.tsx | 11 ++++++++- .../components/Header/Nav/GetStarted.tsx | 7 ++++++ apps/landing/components/Header/Nav/Logo.tsx | 7 ++++++ apps/landing/components/Header/Nav/Nav.tsx | 24 +++++++++++++++++++ apps/landing/components/Header/Nav/Option.tsx | 12 ++++++++++ apps/landing/package.json | 1 + 10 files changed, 74 insertions(+), 20 deletions(-) rename apps/landing/components/Header/{Nav.tsx => Header.tsx} (75%) create mode 100644 apps/landing/components/Header/Nav/GetStarted.tsx create mode 100644 apps/landing/components/Header/Nav/Logo.tsx create mode 100644 apps/landing/components/Header/Nav/Nav.tsx create mode 100644 apps/landing/components/Header/Nav/Option.tsx diff --git a/apps/landing/app/globals.css b/apps/landing/app/globals.css index ed92593..1f0c148 100644 --- a/apps/landing/app/globals.css +++ b/apps/landing/app/globals.css @@ -5,15 +5,4 @@ html, body { max-width: 100vw; overflow-x: hidden; -} - -* { - box-sizing: border-box; - padding: 0; - margin: 0; -} - -a { - color: inherit; - text-decoration: none; -} +} \ No newline at end of file diff --git a/apps/landing/app/page.tsx b/apps/landing/app/page.tsx index d433108..5356054 100644 --- a/apps/landing/app/page.tsx +++ b/apps/landing/app/page.tsx @@ -1,5 +1,5 @@ import React from 'react' -import Nav from '../components/Header/Nav' +import Nav from '../components/Header/Header' export default function App() { return ( diff --git a/apps/landing/components/Header/DesignStripe.tsx b/apps/landing/components/Header/DesignStripe.tsx index 7eced01..416d978 100644 --- a/apps/landing/components/Header/DesignStripe.tsx +++ b/apps/landing/components/Header/DesignStripe.tsx @@ -1,7 +1,14 @@ +'use client' import React from 'react' +import { motion } from 'motion/react' export default function DesignStripe({ className }: { className: string }) { return ( -
+ ) } diff --git a/apps/landing/components/Header/Nav.tsx b/apps/landing/components/Header/Header.tsx similarity index 75% rename from apps/landing/components/Header/Nav.tsx rename to apps/landing/components/Header/Header.tsx index dd9036a..b861842 100644 --- a/apps/landing/components/Header/Nav.tsx +++ b/apps/landing/components/Header/Header.tsx @@ -1,16 +1,14 @@ import React from 'react' import HeaderDesign from './HeaderDesign' +import Nav from './Nav/Nav' -export default function Nav() { +export default function Header() { return (
- - {/* Place your actual nav content here (logo, links, etc.) */}
- {/* Nav content */} +
-
) diff --git a/apps/landing/components/Header/HeaderDesign.tsx b/apps/landing/components/Header/HeaderDesign.tsx index 35e5d17..554d4de 100644 --- a/apps/landing/components/Header/HeaderDesign.tsx +++ b/apps/landing/components/Header/HeaderDesign.tsx @@ -1,5 +1,8 @@ +"use client" + import React from 'react' import DesignStripe from './DesignStripe' +import { motion } from 'motion/react' type HeaderDesignProps = { side: 'left' | 'right' @@ -49,7 +52,13 @@ export default function HeaderDesign({ side, className = '' }: HeaderDesignProps return (
-
+ + {stripes.map((stripe, index) => ( GetStarted
+ ) +} diff --git a/apps/landing/components/Header/Nav/Logo.tsx b/apps/landing/components/Header/Nav/Logo.tsx new file mode 100644 index 0000000..0c0e6d0 --- /dev/null +++ b/apps/landing/components/Header/Nav/Logo.tsx @@ -0,0 +1,7 @@ +import React from 'react' + +export default function Logo() { + return ( +
Logo
+ ) +} diff --git a/apps/landing/components/Header/Nav/Nav.tsx b/apps/landing/components/Header/Nav/Nav.tsx new file mode 100644 index 0000000..8e5cbd6 --- /dev/null +++ b/apps/landing/components/Header/Nav/Nav.tsx @@ -0,0 +1,24 @@ +import React from 'react' +import GetStarted from './GetStarted' +import Logo from './Logo' +import Option from './Option' + +const options = [ + { href: "/", name: "Home" }, + { href: "/about", name: "About" }, + { href: "/contact", name: "Contact" }, +] + +export default function Nav() { + return ( +
+ +
+ {options.map((option) => ( +
+ +
+ ) +} diff --git a/apps/landing/components/Header/Nav/Option.tsx b/apps/landing/components/Header/Nav/Option.tsx new file mode 100644 index 0000000..7c59387 --- /dev/null +++ b/apps/landing/components/Header/Nav/Option.tsx @@ -0,0 +1,12 @@ +import React from 'react' +import Link from 'next/link' + +export default function Option({ href, name }: { href: string, name: string }) { + return ( +
+ + { name } + +
+ ) +} diff --git a/apps/landing/package.json b/apps/landing/package.json index 9d9adae..e854e71 100644 --- a/apps/landing/package.json +++ b/apps/landing/package.json @@ -12,6 +12,7 @@ }, "dependencies": { "@repo/ui": "*", + "motion": "^12.23.25", "next": "^15.5.0", "react": "^19.1.0", "react-dom": "^19.1.0" From 8a4d44df5c31bfa77d9773e38cd5b4a388210627 Mon Sep 17 00:00:00 2001 From: dhanushd-27 Date: Thu, 4 Dec 2025 23:16:33 +0530 Subject: [PATCH 06/10] Create a package of assets and export it --- apps/client/package.json | 1 + apps/client/vite.config.ts | 6 ++++++ apps/landing/next.config.js | 2 +- apps/landing/package.json | 1 + 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/client/package.json b/apps/client/package.json index c7feea0..2fa47d2 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -11,6 +11,7 @@ "check-types": "tsc --noEmit" }, "dependencies": { + "@assets": "workspace:*", "react": "^19.1.1", "react-dom": "^19.1.1" }, diff --git a/apps/client/vite.config.ts b/apps/client/vite.config.ts index 8b0f57b..4bd471b 100644 --- a/apps/client/vite.config.ts +++ b/apps/client/vite.config.ts @@ -1,7 +1,13 @@ import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' +import path from 'node:path' // https://vite.dev/config/ export default defineConfig({ plugins: [react()], + resolve: { + alias: { + '@assets': path.resolve(__dirname, '../..', 'packages/assets'), + }, + }, }) diff --git a/apps/landing/next.config.js b/apps/landing/next.config.js index 03e59bf..2afead6 100644 --- a/apps/landing/next.config.js +++ b/apps/landing/next.config.js @@ -1,6 +1,6 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - transpilePackages: ["@repo/tailwind-theme"], + transpilePackages: ["@repo/tailwind-theme", "@assets"], }; export default nextConfig; diff --git a/apps/landing/package.json b/apps/landing/package.json index e854e71..c900639 100644 --- a/apps/landing/package.json +++ b/apps/landing/package.json @@ -12,6 +12,7 @@ }, "dependencies": { "@repo/ui": "*", + "@assets": "workspace:*", "motion": "^12.23.25", "next": "^15.5.0", "react": "^19.1.0", From 7f0d00dd6dcd589151881d5978df8df715ff1542 Mon Sep 17 00:00:00 2001 From: dhanushd-27 Date: Thu, 4 Dec 2025 23:16:48 +0530 Subject: [PATCH 07/10] Create a package of assets --- bun.lockb | Bin 232144 -> 233912 bytes packages/assets/index.ts | 3 +++ packages/assets/logo.png | Bin 0 -> 82552 bytes packages/assets/package.json | 17 +++++++++++++++++ packages/assets/public/.gitkeep | 2 ++ packages/assets/tsconfig.json | 10 ++++++++++ 6 files changed, 32 insertions(+) create mode 100644 packages/assets/index.ts create mode 100644 packages/assets/logo.png create mode 100644 packages/assets/package.json create mode 100644 packages/assets/public/.gitkeep create mode 100644 packages/assets/tsconfig.json diff --git a/bun.lockb b/bun.lockb index 0261bcb78f1c5aa8037edd489babb46a7a8ab8fa..f41d7d89590918e4b94aad875c9a565dd6dfc150 100755 GIT binary patch delta 38895 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≻weKFNWTg_`rEjIQlEVb#} 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 diff --git a/packages/assets/index.ts b/packages/assets/index.ts new file mode 100644 index 0000000..fd9ee43 --- /dev/null +++ b/packages/assets/index.ts @@ -0,0 +1,3 @@ +export { default as logo } from './logo.png'; + + diff --git a/packages/assets/logo.png b/packages/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..76cdfeaa884187372025eb9d551f2f2c638aec62 GIT binary patch literal 82552 zcmbrkbx>Ww^Cx;Q4#6FQYj6t$E)v|`-QC?aNFcboySv*ZKybHaCsfcy6>f{vQ_*8p9V zC4>PrlSIe=I*MkRQs#1U0Q!G40ssn#34s2O%D)@%(+U9dUo-$f^REQ}p!0zLN16xq z-%_Ar9`t|HfXn|V>OaZ2{R7dmQq^?Tl#>OSIM^{8nK~GoF?-rM{zn18=Lz~p+L^f; zk$KwL+Pi=}`6>QO1N4vn51WO8?7vi8ZTKlP5X!$I$=2{->X=R_6c5lD*6S3hQ5hEdP

tvfARj89X^)-82^7b^FJf~FYdok1(5hy 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 Date: Sun, 25 Jan 2026 23:54:00 +0530 Subject: [PATCH 08/10] Add .env.example variables --- apps/server/.env.example | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 apps/server/.env.example diff --git a/apps/server/.env.example b/apps/server/.env.example new file mode 100644 index 0000000..8043f37 --- /dev/null +++ b/apps/server/.env.example @@ -0,0 +1,22 @@ +GOOGLE_CLIENT_ID= +GOOGLE_CLIENT_SECRET= +GOOGLE_REDIRECT_URI= + +DATABASE_USER= +DATABASE_PASSWORD= +DATABASE_HOST= +DATABASE_PORT= +DATABASE_NAME= + +ACCESS_JWT_SECRET= +REFRESH_JWT_SECRET= + +ACCESS_TOKEN_COOKIE_NAME= +REFRESH_TOKEN_COOKIE_NAME= +ACCESS_TOKEN_EXPIRE= +REFRESH_TOKEN_EXPIRE= + +CLIENT_APP_URL= + +HASH_ALGORITHM= +HASH_SALT_ROUNDS= \ No newline at end of file From 0de4c89bf68447fc20aad2f5544cfe0f27953654 Mon Sep 17 00:00:00 2001 From: dhanushd-27 Date: Tue, 27 Jan 2026 14:18:42 +0530 Subject: [PATCH 09/10] Add types from db, update db columns, create a new make file --- Makefile | 172 +++++++++ bun.lockb | Bin 233912 -> 237408 bytes package.json | 10 +- packages/db/Makefile | 4 - packages/db/docker-compose.yml | 2 +- .../db/drizzle/0001_milky_gorilla_man.sql | 37 ++ packages/db/drizzle/meta/0001_snapshot.json | 364 ++++++++++++++++++ packages/db/drizzle/meta/_journal.json | 7 + packages/db/package.json | 8 +- packages/db/src/index.ts | 16 +- packages/db/src/schema/index.ts | 8 + packages/db/src/schema/memo.ts | 8 +- packages/db/src/schema/refreshToken.ts | 31 ++ packages/db/src/schema/slice.ts | 57 +-- packages/db/src/schema/sliceAccess.ts | 24 ++ packages/db/src/schema/user.ts | 35 +- packages/types/README.md | 36 ++ packages/types/package.json | 21 + packages/types/src/index.ts | 36 ++ packages/types/tsconfig.json | 9 + 20 files changed, 825 insertions(+), 60 deletions(-) create mode 100644 Makefile delete mode 100644 packages/db/Makefile create mode 100644 packages/db/drizzle/0001_milky_gorilla_man.sql create mode 100644 packages/db/drizzle/meta/0001_snapshot.json create mode 100644 packages/db/src/schema/index.ts create mode 100644 packages/db/src/schema/refreshToken.ts create mode 100644 packages/db/src/schema/sliceAccess.ts create mode 100644 packages/types/README.md create mode 100644 packages/types/package.json create mode 100644 packages/types/src/index.ts create mode 100644 packages/types/tsconfig.json diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ddb0c99 --- /dev/null +++ b/Makefile @@ -0,0 +1,172 @@ +.PHONY: help install dev build clean db-up db-down db-restart db-clean db-migrate db-generate db-push db-studio docker-down docker-clean dev-client dev-server dev-landing dev-all clean-deps clean-build clean-all format lint check-types + +# Default target - show help +help: + @echo "MemoBrain - Available Make Commands" + @echo "" + @echo "šŸ“¦ Installation & Setup:" + @echo " make install - Install all dependencies" + @echo "" + @echo "šŸ—„ļø Database Commands:" + @echo " make db-up - Start database container" + @echo " make db-down - Stop database container" + @echo " make db-restart - Restart database container" + @echo " make db-clean - Stop and remove database container & volumes" + @echo " make db-generate - Generate Drizzle migrations" + @echo " make db-push - Push schema changes to database" + @echo " make db-migrate - Run database migrations" + @echo " make db-studio - Open Drizzle Studio" + @echo "" + @echo "🐳 Docker Commands:" + @echo " make docker-down - Stop all Docker containers" + @echo " make docker-clean - Remove all containers, volumes, and images" + @echo "" + @echo "šŸš€ Development Commands:" + @echo " make dev - Run all apps in development mode (turbo)" + @echo " make dev-client - Run client app only" + @echo " make dev-server - Run server app only" + @echo " make dev-landing - Run landing app only" + @echo " make dev-all - Run all apps individually (parallel)" + @echo "" + @echo "šŸ—ļø Build Commands:" + @echo " make build - Build all apps" + @echo " make build-client - Build client app only" + @echo " make build-server - Build server app only" + @echo " make build-landing - Build landing app only" + @echo "" + @echo "🧹 Cleanup Commands:" + @echo " make clean-deps - Remove all node_modules" + @echo " make clean-build - Remove all build artifacts" + @echo " make clean-all - Remove all generated files (deps + builds)" + @echo " make clean - Alias for clean-all" + @echo "" + @echo "šŸ”§ Utility Commands:" + @echo " make format - Format code with Prettier" + @echo " make lint - Lint all packages" + @echo " make check-types - Type-check all packages" + @echo "" + +# Installation +install: + @echo "šŸ“¦ Installing dependencies..." + bun install + +# Database Commands +db-up: + @echo "šŸ—„ļø Starting database..." + cd packages/db && docker compose up -d + +db-down: + @echo "šŸ›‘ Stopping database..." + cd packages/db && docker compose down + +db-restart: + @echo "šŸ”„ Restarting database..." + cd packages/db && docker compose restart + +db-clean: + @echo "🧹 Cleaning database (removing containers and volumes)..." + cd packages/db && docker compose down -v + +db-generate: + @echo "šŸ”Ø Generating Drizzle migrations..." + cd packages/db && bun run drizzle:generate + +db-push: + @echo "ā¬†ļø Pushing schema to database..." + cd packages/db && bun run drizzle:push + +db-migrate: + @echo "šŸš€ Running database migrations..." + cd packages/db && bun run drizzle:migrate + +db-studio: + @echo "šŸŽØ Opening Drizzle Studio..." + cd packages/db && bun run drizzle:studio + +# Docker Commands +docker-down: + @echo "🐳 Stopping all Docker containers..." + docker compose down + +docker-clean: + @echo "🧹 Cleaning all Docker resources..." + docker compose down -v --rmi all --remove-orphans + +# Development Commands +dev: + @echo "šŸš€ Starting all apps in development mode..." + bun run dev + +dev-client: + @echo "šŸš€ Starting client app..." + cd apps/client && bun run dev + +dev-server: + @echo "šŸš€ Starting server app..." + cd apps/server && bun run dev + +dev-landing: + @echo "šŸš€ Starting landing app..." + cd apps/landing && bun run dev + +dev-all: + @echo "šŸš€ Starting all apps individually..." + @echo "Note: Run each in a separate terminal or use a process manager" + @echo "Terminal 1: make dev-client" + @echo "Terminal 2: make dev-server" + @echo "Terminal 3: make dev-landing" + +# Build Commands +build: + @echo "šŸ—ļø Building all apps..." + bun run build + +build-client: + @echo "šŸ—ļø Building client app..." + cd apps/client && bun run build + +build-server: + @echo "šŸ—ļø Building server app..." + cd apps/server && bun run build + +build-landing: + @echo "šŸ—ļø Building landing app..." + cd apps/landing && bun run build + +# Cleanup Commands +clean-deps: + @echo "🧹 Removing all node_modules..." + rm -rf node_modules + rm -rf apps/*/node_modules + rm -rf packages/*/node_modules + @echo "āœ… Dependencies cleaned!" + +clean-build: + @echo "🧹 Removing build artifacts..." + rm -rf apps/client/dist + rm -rf apps/landing/.next + rm -rf apps/server/dist + rm -rf packages/*/dist + rm -rf .turbo + @echo "āœ… Build artifacts cleaned!" + +clean-all: clean-build clean-deps + @echo "🧹 Removing all generated files..." + rm -rf bun.lockb + @echo "āœ… All cleaned! Run 'make install' to reinstall." + +clean: clean-all + +# Utility Commands +format: + @echo "✨ Formatting code..." + bun run format + +lint: + @echo "šŸ” Linting code..." + bun run lint + +check-types: + @echo "šŸ”Ž Type-checking..." + bun run check-types \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index f41d7d89590918e4b94aad875c9a565dd6dfc150..3d5dc4eaac835f44221467c492f86462491a4001 100755 GIT binary patch delta 52440 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 delta 50559 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 YBe statement-breakpoint +CREATE TABLE "refresh_tokens" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "user_id" uuid NOT NULL, + "token_hash" varchar(256) NOT NULL, + "expires_at" timestamp NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "revoked_at" timestamp +); +--> statement-breakpoint +ALTER TABLE "slices" RENAME COLUMN "title" TO "name";--> statement-breakpoint +ALTER TABLE "slices" RENAME COLUMN "author_id" TO "owner_id";--> statement-breakpoint +ALTER TABLE "users" RENAME COLUMN "password" TO "password_hash";--> statement-breakpoint +ALTER TABLE "slices" DROP CONSTRAINT "slices_author_id_users_id_fk"; +--> statement-breakpoint +ALTER TABLE "memos" ADD COLUMN "content_type" text NOT NULL;--> statement-breakpoint +ALTER TABLE "memos" ADD COLUMN "owner_id" uuid NOT NULL;--> statement-breakpoint +ALTER TABLE "users" ADD COLUMN "name" varchar(256) NOT NULL;--> statement-breakpoint +ALTER TABLE "users" ADD COLUMN "google_id" varchar(256);--> statement-breakpoint +ALTER TABLE "slice_access" ADD CONSTRAINT "slice_access_slice_id_slices_id_fk" FOREIGN KEY ("slice_id") REFERENCES "public"."slices"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "slice_access" ADD CONSTRAINT "slice_access_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "refresh_tokens" ADD CONSTRAINT "refresh_tokens_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "memos" ADD CONSTRAINT "memos_owner_id_users_id_fk" FOREIGN KEY ("owner_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "slices" ADD CONSTRAINT "slices_owner_id_users_id_fk" FOREIGN KEY ("owner_id") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "memos" DROP COLUMN "updated_at";--> statement-breakpoint +ALTER TABLE "slices" DROP COLUMN "updated_at";--> statement-breakpoint +ALTER TABLE "users" DROP COLUMN "first_name";--> statement-breakpoint +ALTER TABLE "users" DROP COLUMN "last_name";--> statement-breakpoint +ALTER TABLE "users" DROP COLUMN "updated_at";--> statement-breakpoint +ALTER TABLE "users" DROP COLUMN "refresh_token";--> statement-breakpoint +ALTER TABLE "users" ADD CONSTRAINT "users_google_id_unique" UNIQUE("google_id"); \ No newline at end of file diff --git a/packages/db/drizzle/meta/0001_snapshot.json b/packages/db/drizzle/meta/0001_snapshot.json new file mode 100644 index 0000000..d21d47f --- /dev/null +++ b/packages/db/drizzle/meta/0001_snapshot.json @@ -0,0 +1,364 @@ +{ + "id": "5cc85520-26f0-4db0-be94-22cbe6659dd2", + "prevId": "1741049b-4fbe-45ed-b4a3-ac4463ace398", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.memos": { + "name": "memos", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "content_type": { + "name": "content_type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "owner_id": { + "name": "owner_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "slice_id": { + "name": "slice_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "memos_owner_id_users_id_fk": { + "name": "memos_owner_id_users_id_fk", + "tableFrom": "memos", + "tableTo": "users", + "columnsFrom": [ + "owner_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "memos_slice_id_slices_id_fk": { + "name": "memos_slice_id_slices_id_fk", + "tableFrom": "memos", + "tableTo": "slices", + "columnsFrom": [ + "slice_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true + }, + "google_id": { + "name": "google_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "password_hash": { + "name": "password_hash", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "users_email_unique": { + "name": "users_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + }, + "users_google_id_unique": { + "name": "users_google_id_unique", + "nullsNotDistinct": false, + "columns": [ + "google_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.slices": { + "name": "slices", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "owner_id": { + "name": "owner_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "slices_owner_id_users_id_fk": { + "name": "slices_owner_id_users_id_fk", + "tableFrom": "slices", + "tableTo": "users", + "columnsFrom": [ + "owner_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.slice_access": { + "name": "slice_access", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "slice_id": { + "name": "slice_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "slice_access_slice_id_slices_id_fk": { + "name": "slice_access_slice_id_slices_id_fk", + "tableFrom": "slice_access", + "tableTo": "slices", + "columnsFrom": [ + "slice_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "slice_access_user_id_users_id_fk": { + "name": "slice_access_user_id_users_id_fk", + "tableFrom": "slice_access", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.refresh_tokens": { + "name": "refresh_tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "token_hash": { + "name": "token_hash", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "revoked_at": { + "name": "revoked_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "refresh_tokens_user_id_users_id_fk": { + "name": "refresh_tokens_user_id_users_id_fk", + "tableFrom": "refresh_tokens", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/packages/db/drizzle/meta/_journal.json b/packages/db/drizzle/meta/_journal.json index ccebc75..1d7b042 100644 --- a/packages/db/drizzle/meta/_journal.json +++ b/packages/db/drizzle/meta/_journal.json @@ -8,6 +8,13 @@ "when": 1760458602500, "tag": "0000_swift_quasimodo", "breakpoints": true + }, + { + "idx": 1, + "version": "7", + "when": 1769503693113, + "tag": "0001_milky_gorilla_man", + "breakpoints": true } ] } \ No newline at end of file diff --git a/packages/db/package.json b/packages/db/package.json index 0372bd2..cfd268b 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -1,12 +1,16 @@ { - "name": "db", - "module": ".src/index.ts", + "name": "@repo/db", + "module": "./src/index.ts", "scripts": { "drizzle:generate": "drizzle-kit generate", "drizzle:push": "drizzle-kit push", "drizzle:studio": "drizzle-kit studio", "drizzle:migrate": "drizzle-kit migrate" }, + "exports": { + ".": "./src/index.ts" + }, + "types": "./src/index.ts", "type": "module", "devDependencies": { "@types/bun": "latest", diff --git a/packages/db/src/index.ts b/packages/db/src/index.ts index 6db665d..663ffaa 100644 --- a/packages/db/src/index.ts +++ b/packages/db/src/index.ts @@ -1,6 +1,14 @@ -// Make sure to install the 'pg' package -import { drizzle } from 'drizzle-orm/node-postgres'; +import { drizzle } from "drizzle-orm/node-postgres"; +import * as schema from "./schema"; -const db = drizzle(process.env.DATABASE_URL as string); +const db = drizzle(process.env.DATABASE_URL as string, { schema }); -export { db } \ No newline at end of file +export { db, schema }; +export * from "./schema"; + +// Explicit exports for better TypeScript resolution +export { users, userRelations } from "./schema/user"; +export { slices, sliceRelations } from "./schema/slice"; +export { sliceAccess, sliceAccessRelations } from "./schema/sliceAccess"; +export { memos, memoRelations } from "./schema/memo"; +export { refreshTokens, refreshTokenRelations } from "./schema/refreshToken"; diff --git a/packages/db/src/schema/index.ts b/packages/db/src/schema/index.ts new file mode 100644 index 0000000..6250c26 --- /dev/null +++ b/packages/db/src/schema/index.ts @@ -0,0 +1,8 @@ +export * from "./user"; +export * from "./slice"; +export * from "./sliceAccess"; +export * from "./memo"; +export * from "./refreshToken"; + +// Since brain and memo are the same per user requirement +export { memos as brains, memoRelations as brainRelations } from "./memo"; diff --git a/packages/db/src/schema/memo.ts b/packages/db/src/schema/memo.ts index 7dfb252..8444a34 100644 --- a/packages/db/src/schema/memo.ts +++ b/packages/db/src/schema/memo.ts @@ -1,15 +1,17 @@ import { pgTable, uuid, text, timestamp, primaryKey } from "drizzle-orm/pg-core" import { relations, sql } from "drizzle-orm" import { slices } from "./slice" +import { users } from "./user" export const memos = pgTable('memos', { id: uuid('id').primaryKey().default(sql`gen_random_uuid()`).notNull(), title: text('title').notNull(), description: text('description').notNull(), + contentType: text('content_type').notNull(), // "text" | "url" | "image" | "video" | "file" content: text('content').notNull(), + ownerId: uuid('owner_id').references(() => users.id).notNull(), sliceId: uuid('slice_id').references(() => slices.id).notNull(), createdAt: timestamp("created_at").default(sql`now()`).notNull(), - updatedAt: timestamp("updated_at").default(sql`now()`).notNull(), }) export const memoRelations = relations(memos, ({ one }) => ( @@ -17,6 +19,10 @@ export const memoRelations = relations(memos, ({ one }) => ( slice: one(slices, { fields: [memos.sliceId], references: [slices.id], + }), + owner: one(users, { + fields: [memos.ownerId], + references: [users.id], }) } )) \ No newline at end of file diff --git a/packages/db/src/schema/refreshToken.ts b/packages/db/src/schema/refreshToken.ts new file mode 100644 index 0000000..3ca0e34 --- /dev/null +++ b/packages/db/src/schema/refreshToken.ts @@ -0,0 +1,31 @@ +import { + pgTable, + uuid, + varchar, + timestamp, +} from "drizzle-orm/pg-core"; +import { relations, sql } from "drizzle-orm"; +import { users } from "./user"; + +export const refreshTokens = pgTable("refresh_tokens", { + id: uuid("id") + .primaryKey() + .default(sql`gen_random_uuid()`) + .notNull(), + userId: uuid("user_id") + .references(() => users.id) + .notNull(), + tokenHash: varchar("token_hash", { length: 256 }).notNull(), + expiresAt: timestamp("expires_at").notNull(), + createdAt: timestamp("created_at") + .default(sql`now()`) + .notNull(), + revokedAt: timestamp("revoked_at"), +}); + +export const refreshTokenRelations = relations(refreshTokens, ({ one }) => ({ + user: one(users, { + fields: [refreshTokens.userId], + references: [users.id], + }), +})); diff --git a/packages/db/src/schema/slice.ts b/packages/db/src/schema/slice.ts index b952d5d..ce2e782 100644 --- a/packages/db/src/schema/slice.ts +++ b/packages/db/src/schema/slice.ts @@ -1,28 +1,33 @@ -import { pgTable, uuid, text, timestamp, primaryKey } from "drizzle-orm/pg-core" -import { relations, sql } from "drizzle-orm" -import { users } from "./user" -import { memos } from "./memo" +import { + pgTable, + uuid, + text, + timestamp, + primaryKey, +} from "drizzle-orm/pg-core"; +import { relations, sql } from "drizzle-orm"; +import { users } from "./user"; +import { memos } from "./memo"; -export const slices = pgTable('slices', { - id: uuid('id').primaryKey().default(sql`gen_random_uuid()`).notNull(), - title: text('title').notNull(), - description: text('description').notNull(), - authorId: uuid('author_id').references(() => users.id).notNull(), - createdAt: timestamp("created_at").default(sql`now()`).notNull(), - updatedAt: timestamp("updated_at").default(sql`now()`).notNull(), -}) +export const slices = pgTable("slices", { + id: uuid("id") + .primaryKey() + .default(sql`gen_random_uuid()`) + .notNull(), + name: text("name").notNull(), + description: text("description").notNull(), + ownerId: uuid("owner_id") + .references(() => users.id) + .notNull(), + createdAt: timestamp("created_at") + .default(sql`now()`) + .notNull(), +}); -export const userSlices = relations(slices, ({ one }) => ( - { - author: one(users, { - fields: [slices.authorId], - references: [users.id], - }) - } -)) - -export const sliceMemos = relations(slices, ({ many }) => ( - { - memos: many(memos), - } -)) \ No newline at end of file +export const sliceRelations = relations(slices, ({ one, many }) => ({ + owner: one(users, { + fields: [slices.ownerId], + references: [users.id], + }), + memos: many(memos), +})); diff --git a/packages/db/src/schema/sliceAccess.ts b/packages/db/src/schema/sliceAccess.ts new file mode 100644 index 0000000..2299566 --- /dev/null +++ b/packages/db/src/schema/sliceAccess.ts @@ -0,0 +1,24 @@ +import { pgTable, uuid, text, primaryKey } from "drizzle-orm/pg-core" +import { relations, sql } from "drizzle-orm" +import { users } from "./user" +import { slices } from "./slice" + +export const sliceAccess = pgTable('slice_access', { + id: uuid('id').default(sql`gen_random_uuid()`).primaryKey().notNull(), + sliceId: uuid('slice_id').references(() => slices.id).notNull(), + userId: uuid('user_id').references(() => users.id).notNull(), + role: text('role').notNull(), // "viewer" | "editor" +}) + +export const sliceAccessRelations = relations(sliceAccess, ({ one }) => ( + { + slice: one(slices, { + fields: [sliceAccess.sliceId], + references: [slices.id], + }), + user: one(users, { + fields: [sliceAccess.userId], + references: [users.id], + }) + } +)) diff --git a/packages/db/src/schema/user.ts b/packages/db/src/schema/user.ts index 4e25369..b76babb 100644 --- a/packages/db/src/schema/user.ts +++ b/packages/db/src/schema/user.ts @@ -1,20 +1,21 @@ -import { pgTable, varchar, uuid, timestamp, index } from "drizzle-orm/pg-core" -import { relations, sql } from "drizzle-orm" -import { slices } from "./slice" +import { pgTable, varchar, uuid, timestamp, index } from "drizzle-orm/pg-core"; +import { relations, sql } from "drizzle-orm"; +import { slices } from "./slice"; -export const users = pgTable('users', { - id: uuid('id').primaryKey().default(sql`gen_random_uuid()`).notNull(), - firstName: varchar("first_name", { length: 256 }).notNull(), - lastName: varchar("last_name", { length: 256 }).notNull(), +export const users = pgTable("users", { + id: uuid("id") + .primaryKey() + .default(sql`gen_random_uuid()`) + .notNull(), + name: varchar("name", { length: 256 }).notNull(), email: varchar("email", { length: 256 }).notNull().unique(), - password: varchar("password", { length: 256 }).notNull(), - createdAt: timestamp("created_at").default(sql`now()`).notNull(), - updatedAt: timestamp("updated_at").default(sql`now()`).notNull(), - refreshToken: varchar("refresh_token", { length: 256 }).notNull(), -}) + googleId: varchar("google_id", { length: 256 }).unique(), + passwordHash: varchar("password_hash", { length: 256 }), + createdAt: timestamp("created_at") + .default(sql`now()`) + .notNull(), +}); -export const userSlices = relations(users, ({ many }) => ( - { - slices: many(slices), - } -)) \ No newline at end of file +export const userRelations = relations(users, ({ many }) => ({ + slices: many(slices), +})); diff --git a/packages/types/README.md b/packages/types/README.md new file mode 100644 index 0000000..d4ce042 --- /dev/null +++ b/packages/types/README.md @@ -0,0 +1,36 @@ +# @packages/types + +TypeScript type definitions generated from database schemas. + +## Usage + +```typescript +import type { User, NewUser, Slice, Memo, RefreshToken } from 'types'; + +// Use the types in your application +const user: User = { + id: '...', + name: 'John Doe', + email: 'john@example.com', + // ... +}; +``` + +## Available Types + +### Database Models + +- `User` / `NewUser` - User table types +- `Slice` / `NewSlice` - Slice table types +- `SliceAccess` / `NewSliceAccess` - Slice access control types +- `Memo` / `NewMemo` - Memo table types +- `RefreshToken` / `NewRefreshToken` - Refresh token types + +### Enums + +- `ContentType` - "text" | "url" | "image" | "video" | "file" +- `SliceAccessRole` - "viewer" | "editor" + +## Notes + +Types are automatically inferred from the database schema using Drizzle ORM's `InferSelectModel` and `InferInsertModel` utilities. diff --git a/packages/types/package.json b/packages/types/package.json new file mode 100644 index 0000000..6b01507 --- /dev/null +++ b/packages/types/package.json @@ -0,0 +1,21 @@ +{ + "name": "@repo/types", + "version": "0.0.0", + "private": true, + "main": "./src/index.ts", + "types": "./src/index.ts", + "exports": { + ".": "./src/index.ts" + }, + "scripts": { + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "@types/node": "^20.0.0", + "typescript": "^5.0.0" + }, + "dependencies": { + "@repo/db": "workspace:*", + "drizzle-orm": "^0.44.6" + } +} diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts new file mode 100644 index 0000000..96fe994 --- /dev/null +++ b/packages/types/src/index.ts @@ -0,0 +1,36 @@ +import type { InferSelectModel, InferInsertModel } from 'drizzle-orm'; +import { + users, + slices, + sliceAccess, + memos, + refreshTokens +} from '@repo/db'; + +// User types +export type User = InferSelectModel; +export type NewUser = InferInsertModel; + +// Slice types +export type Slice = InferSelectModel; +export type NewSlice = InferInsertModel; + +// SliceAccess types +export type SliceAccess = InferSelectModel; +export type NewSliceAccess = InferInsertModel; + +// Memo / Brain types +export type Memo = InferSelectModel; +export type NewMemo = InferInsertModel; +export type Brain = Memo; +export type NewBrain = NewMemo; + +// RefreshToken types +export type RefreshToken = InferSelectModel; +export type NewRefreshToken = InferInsertModel; + +// Content type enum +export type ContentType = "text" | "url" | "image" | "video" | "file"; + +// SliceAccess role enum +export type SliceAccessRole = "viewer" | "editor"; diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json new file mode 100644 index 0000000..4657fd5 --- /dev/null +++ b/packages/types/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../typescript-config/base.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} From 7b2df0ff99044a1de304bc82731510acba04a226 Mon Sep 17 00:00:00 2001 From: dhanushd-27 Date: Tue, 27 Jan 2026 14:28:36 +0530 Subject: [PATCH 10/10] Add images type in assets --- packages/assets/images.d.ts | 29 +++++++++++++++++++++++++++++ packages/assets/tsconfig.json | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 packages/assets/images.d.ts diff --git a/packages/assets/images.d.ts b/packages/assets/images.d.ts new file mode 100644 index 0000000..c43d4d5 --- /dev/null +++ b/packages/assets/images.d.ts @@ -0,0 +1,29 @@ +declare module "*.png" { + const value: string; + export default value; +} + +declare module "*.jpg" { + const value: string; + export default value; +} + +declare module "*.jpeg" { + const value: string; + export default value; +} + +declare module "*.gif" { + const value: string; + export default value; +} + +declare module "*.svg" { + const value: string; + export default value; +} + +declare module "*.webp" { + const value: string; + export default value; +} diff --git a/packages/assets/tsconfig.json b/packages/assets/tsconfig.json index 2ae0fb8..a0c62fb 100644 --- a/packages/assets/tsconfig.json +++ b/packages/assets/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "outDir": "dist" }, - "include": ["index.ts"], + "include": ["index.ts", "images.d.ts"], "exclude": ["node_modules", "dist"] }