القصصغرفة الأخبارنبذة
حجز مكالمةلنتحدث

الموقع

  • الرئيسية
  • القصص
  • غرفة الأخبار
  • الأسعار
  • التوثيق
  • خريطة الموقع

تواصل

  • حجز مكالمة

قانوني

  • الخصوصية
  • شروط الاستخدام

جميع الحقوق محفوظة © 2026 جاجان مالك.

الخصوصية|شروط الاستخدام|خريطة الموقع
Introduction

Site

  • Contact and Booking

Technical

  • Tech Stack
  • Design System
  • UI Components
  1. Home
  2. Documentation

Documentation

Technical reference — tech stack, design system, and UI components.

Contact and Booking

Last updated: 2026-02-22

Book a call

To book a call with Gagan, use the Book a call link in the navigation bar or footer. The link opens his Google Calendar scheduling page, where you can pick a time that works for you.

The Book a call button appears in:

  • Navigation — Desktop: outline button next to "Let's Talk"; Mobile: in the hamburger menu
  • Footer — Under the "Connect" section, as the first link

Other ways to connect

  • Ask Gagan — Use the Ask page to ask questions about his work, case studies, and writing. The AI assistant can answer from his knowledge base.
  • LinkedIn — Get in touch via LinkedIn for general inquiries.
  • Pricing — View pricing plans and book consultations via the Pricing page.

Tech Stack

Last updated: 2026-02-21

Framework

  • Next.js 16 — App Router, server components, static/dynamic rendering
  • React 19 — Latest React with concurrent features

UI

  • shadcn/ui — Radix Maia theme (style: "radix-maia" in components.json)
  • Tailwind CSS v4 — Utility-first styling via @tailwindcss/postcss
  • Radix UI — Accessible primitives (Select, Tooltip, Slot, etc.)
  • Lucide React — Icon library
  • class-variance-authority (cva) — Variant styling for components
  • tailwind-merge — Merge Tailwind classes without conflicts

Data

  • Neon — Serverless Postgres (@neondatabase/serverless)
  • Drizzle ORM — Type-safe queries and migrations
  • pgvector — Vector embeddings for RAG (Ask page)

AI

  • Vercel AI SDK — ai and @ai-sdk/react for streaming chat
  • OpenAI — Embeddings and chat completions (via API key or Vercel AI Gateway)

Feature Flags

  • lib/feature-flags.ts — getFeatureFlag(name) reads NEXT_PUBLIC_FEATURE_<NAME>=true
  • middleware.ts — Optional headers for RSC (e.g. x-feature-hero-variant)
  • See FEATURE_FLAGS.md for usage

Internationalization

  • next-intl — Locale-based routing, messages, getTranslations/useTranslations, Link/usePathname/useRouter from @/i18n/navigation
  • Locales: en (default), localePrefix: 'always' → /en/about, etc.
  • Messages: messages/en.json with namespaces (Common, HomePage, StoriesPage, etc.)
  • RAG/Ask: English-only per plan; no i18n extraction for Ask page strings

Key Libraries

CategoryPackagePurpose
Markdown@mdx-js/mdx, react-markdown, remark-gfm, rehype-highlight, rehype-slugMDX and Markdown rendering
Searchfuse.jsClient-side fuzzy search
Command palettecmdkCommand menu (⌘K)
Carouselembla-carousel-reactImage/content carousels
Forms & validationzodSchema validation
Analytics@vercel/analytics, @vercel/speed-insightsVercel analytics and Core Web Vitals
PaymentsstripeCheckout and webhooks
Themingnext-themesDark/light mode
ToastssonnerToast notifications

Design System — shadcn UI Consistency

Source of truth: components.json with style: "radix-maia"
Last updated: 2026-02-16

Native Maia theme (enforced)

Use native shadcn Maia theme components only. Do not add custom style overrides that deviate from the theme.

  • All UI components (Select, Button, Dialog, etc.) must come from the shadcn registry.
  • No className overrides for radius, background, or border on shadcn primitives. If something looks wrong, fix the component file or theme, not the usage.
  • Add or update components with:
    Code
    npx shadcn@latest add <component> --overwrite
    
  • Do not change style or baseColor in components.json unless intentionally switching themes.

Design tokens

  • Radius: Defined in app/globals.css via @theme inline and :root.
  • Muted (light mode): --muted: oklch(0.92 0 0) — tuned for perceptible ghost-button hover contrast against --background (WCAG 2.1 non-text contrast).
  • --radius: 1rem (large). Derived: --radius-sm through --radius-4xl.
  • Use the same radius token for related elements (e.g. trigger and dropdown).

Dropdowns and popovers

  • Corner radius: Dropdowns/popovers that attach to triggers must use the same corner radius as the trigger.
    • Example: Select trigger uses rounded-4xl (pill) → SelectContent uses rounded-4xl.
  • Positioning: For attached dropdowns that should overlap the trigger (shadcn Maia style), use:
    Code
    sideOffset={-4}
    
    instead of a positive gap (e.g. sideOffset={8}).

Component-specific notes

ComponentTrigger radiusContent radiusItem radiussideOffset
Selectrounded-4xlrounded-4xlfirst:rounded-t-4xl last:rounded-b-4xl first:last:rounded-4xl-4

UI Components

Source: components/ui — shadcn registry (radix-maia theme)
Last updated: 2026-02-21

shadcn components

All components are from the shadcn registry unless noted. Add or update with:

Code
npx shadcn@latest add <component> --overwrite
ComponentFileDescription
Badgebadge.tsxStatus labels, tags
Breadcrumbbreadcrumb.tsxNavigation breadcrumbs
Buttonbutton.tsxPrimary actions, variants (default, outline, ghost, etc.)
Cardcard.tsxCard container with header, content, footer
Carouselcarousel.tsxImage/content carousel (embla-carousel)
Commandcommand.tsxCommand palette (⌘K)
Dialogdialog.tsxModal dialogs
Dropdown Menudropdown-menu.tsxContext menus, dropdown actions
Hover Cardhover-card.tsxHover-triggered popover
Inputinput.tsxText input field
Input Groupinput-group.tsxInput with addons (prefix/suffix)
Paginationpagination.tsxPage navigation
Popoverpopover.tsxFloating popover content
Selectselect.tsxDropdown select
Separatorseparator.tsxVisual divider
Sheetsheet.tsxSlide-out panel
Sidebarsidebar.tsxCollapsible sidebar layout
Skeletonskeleton.tsxLoading placeholder
Sonnersonner.tsxToast notifications
Tabletable.tsxData tables
Textareatextarea.tsxMulti-line text input
Tooltiptooltip.tsxHover tooltips

Custom components (in components/ui)

ComponentFileDescription
Tracked Linktracked-link.tsxLink wrapper with analytics (trackEvent)

On this page

  • Book a call
  • Other ways to connect
  • Framework
  • UI
  • Data
  • AI
  • Feature Flags
  • Internationalization
  • Key Libraries
  • Native Maia theme (enforced)
  • Design tokens
  • Dropdowns and popovers
  • Component-specific notes
  • shadcn components
  • Custom components (in `components/ui`)