Tech Stack
api.myeasyguide.com (Express REST API)
| Category | Technology |
|---|---|
| Runtime | Node.js 20+ |
| Language | TypeScript 5.9 |
| Package Manager | pnpm 10 |
| Framework | Express 5 |
| Database ORM | Prisma 7.1 + @prisma/adapter-pg |
| Database | PostgreSQL 15+ |
| Validation | Zod |
| Auth | JWT (jsonwebtoken), bcrypt, cookie-parser |
| Payments | Stripe SDK 18 |
| Resend | |
| AI | Anthropic Claude SDK |
| Search | Typesense (configured but currently disabled) |
| Recommendations | Recombee (recombee-api-client) |
| Image Processing | Sharp |
| Image Delivery | Cloudflare Images |
| File Upload | Multer (memory storage, 10MB limit) |
| Export | xlsx (Excel), csv-parser |
| API Documentation | swagger-jsdoc + swagger-ui-express |
| Security | helmet, cors, express-rate-limit |
| Logging | Winston, Morgan |
| Error Tracking | Sentry |
| Cron | node-cron |
| Development | ts-node-dev, ESLint (typescript-eslint), Husky |
Key packages
json
{
"express": "^5.0.0",
"@prisma/client": "^7.1.0",
"stripe": "^18.0.0",
"@anthropic-ai/sdk": "^0.39.0",
"recombee-api-client": "^4.3.0",
"sharp": "^0.34.0",
"resend": "^4.0.0"
}cms-myeasyguide (Next.js CMS)
| Category | Technology |
|---|---|
| Runtime | Node.js 20+ |
| Language | TypeScript 5 |
| Package Manager | pnpm 10 |
| Framework | Next.js 16.2.6 (App Router) |
| Database ORM | Prisma 7.8 |
| Database | PostgreSQL 15+ |
| Auth | JWT (jose library), cookies |
| AI | Anthropic Claude SDK (batch API) |
| Rich Text Editor | Lexical 0.29 |
| UI Components | Radix UI, shadcn/ui |
| Icons | Tabler Icons, Lucide React |
| Forms | react-hook-form + @hookform/resolvers + Zod |
| State | Zustand |
| Data Fetching | TanStack React Query |
| Tables | TanStack React Table |
| Styling | Tailwind CSS 4, class-variance-authority, clsx, tailwind-merge |
| Notifications | Sonner (toasts) |
| Scheduling | node-cron (publish scheduled posts) |
| Development | ESLint 9, Husky |
Key packages
json
{
"next": "^16.2.6",
"@prisma/client": "^7.8.0",
"@anthropic-ai/sdk": "^0.39.0",
"lexical": "^0.29.0",
"@tanstack/react-query": "^5.0.0",
"@tanstack/react-table": "^8.0.0",
"zustand": "^5.0.0",
"react-hook-form": "^7.0.0"
}myeasyguide.com (Public Frontend)
| Category | Technology |
|---|---|
| Runtime | Node.js 20+ |
| Language | TypeScript 5 |
| Package Manager | pnpm 10 |
| Framework | Next.js 15.5.9 (App Router, Turbopack) |
| Database ORM | Prisma 6.18 (client only) |
| Rich Text Rendering | Lexical 0.39, Quill |
| UI Components | Radix UI, shadcn/ui |
| Icons | Tabler Icons, Lucide React |
| Forms | react-hook-form + @hookform/resolvers + Zod |
| State | Zustand |
| Data Fetching | TanStack React Query + DevTools |
| Tables | TanStack React Table |
| Styling | Tailwind CSS 4, SCSS/Sass, tw-animate-css |
| Animations | Framer Motion |
| Drag & Drop | @dnd-kit |
| Charts | Recharts |
| Dates | date-fns, react-day-picker |
| Sharing | react-share |
| SEO | next-sitemap |
| Themes | next-themes |
| Utilities | lodash, use-debounce, jwt-decode |
| Development | ESLint 9, Husky |
Key packages
json
{
"next": "^15.5.9",
"@prisma/client": "^6.18.0",
"lexical": "^0.39.0",
"@tanstack/react-query": "^5.0.0",
"@tanstack/react-table": "^8.0.0",
"framer-motion": "^12.0.0",
"recharts": "^2.0.0",
"@dnd-kit/core": "^6.0.0",
"next-sitemap": "^4.0.0",
"react-share": "^5.0.0"
}Third-Party Services
| Service | Purpose | Used By |
|---|---|---|
| Stripe | Payment processing (Checkout Sessions, webhooks) | API |
| Cloudflare Images | Image hosting and CDN delivery | API, Frontend |
| Resend | Transactional emails (verification, password reset, newsletter) | API |
| Anthropic Claude | AI blog post generation | CMS (batch API), API (legacy) |
| Recombee | ML recommendations ("You may also like") | API |
| Typesense | Full-text search (currently disabled) | API |
| Sentry | Error tracking and performance monitoring | API |
| ImageKit | Image optimization (configured as Next.js remote pattern) | Frontend |