Carlos Eduardo Gatti Ferreira

Tech Stack

This document describes the technologies used in this monorepo, why they were chosen, and trade-offs considered.

Core Framework

Next.js 13.2.4

Why Next.js?

Trade-offs:

Usage:


Language & Type Safety

TypeScript 5.0.2

Why TypeScript?

Configuration:


Styling

Tailwind CSS 3.2.7

Why Tailwind?

Plugins Used:

Custom Configuration:

Trade-offs:


UI Components

Headless UI 1.7.13

Why Headless UI?

Usage: Modal dialogs, dropdowns, accessibility primitives

Radix UI 1.0.1

Why Radix UI?

Usage: Advanced UI components (limited usage)


State Management

React Context API

Why Context API?

Usage:

React Query (@tanstack/react-query) 5.90.11

Why React Query?

Usage:

Trade-offs:


Data Fetching

Fetch API (Native)

Why Fetch?

Usage:

Trade-offs:


GraphQL

Custom GraphQL Client

Why Custom Client?

Implementation: src/lib/api/core/graphqlClient.ts

Features:

Trade-offs:


Image Processing

Canvas API (Browser Native)

Why Canvas API?

Implementation: src/lib/image/processImage.ts

Usage:

Trade-offs:


QR Code Generation

qrcode 1.5.4 & qrcode.react 4.2.0

Why These Libraries?

Usage: QRACK container QR code generation

html5-qrcode 2.3.8

Why html5-qrcode?

Usage: QRACK scanner page


Forms & Validation

Native HTML5 Validation

Why Native?

Future Consideration: Form libraries (React Hook Form, Formik) if forms become complex


Markdown & Content

MDX (@mdx-js/loader 2.3.0)

Why MDX?

Usage: Blog posts (/pages/blogs)

remark-gfm 3.0.1

Why GFM?

rehype-prism (@mapbox/rehype-prism 0.8.0)

Why Prism?


Date Handling

date-fns 4.1.0

Why date-fns?

Why Not Moment.js?


PDF Generation

@react-pdf/renderer 4.3.1

Why React PDF?

Usage: Resume PDF generation (/pages/api/generate-resume.ts)


Email

nodemailer 6.9.16

Why Nodemailer?

Usage: Contact form email sending (/pages/api/send-email.tsx)


Animation

framer-motion 10.6.0

Why Framer Motion?

Usage: Page transitions, hero animations (limited usage)

Trade-offs:


Notifications

sonner 2.0.7

Why Sonner?

Usage: Toast notifications (success, error messages)


Utilities

clsx 1.2.1 & tailwind-merge 1.10.0

Why These?

Usage: Dynamic styling in components


Development Tools

ESLint

Why ESLint?


Build & Deployment

Next.js Built-in

Why Next.js Build?

Deployment: Vercel (recommended) or any Node.js host


Future Considerations

Potential Additions

  1. Testing
    • Vitest or Jest for unit tests
    • React Testing Library for components
    • Playwright for E2E tests
  2. State Management
    • Zustand (if Context becomes unwieldy)
    • Jotai (atomic state)
  3. Forms
    • React Hook Form (if forms become complex)
    • Zod (schema validation)
  4. Monitoring
    • Sentry (error tracking)
    • Analytics (Plausible, Vercel Analytics)

Bundle Size Considerations

Current Strategy:

Monitoring: