# deepali-shrivastav/the_letter_ink_ecommerce architecture

> Architecture diagram of the GitHub repository deepali-shrivastav/the_letter_ink_ecommerce, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/deepali-shrivastav/the_letter_ink_ecommerce
- Repository: https://github.com/deepali-shrivastav/the_letter_ink_ecommerce

## Overview

The Letter Ink is an e-commerce platform with a Next.js storefront and a Medusa backend. The principal customer journey is browsing products, managing a cart, entering checkout details, and completing payment through Razorpay; the README documents signature verification, Medusa cart completion, and the resulting order. Other product branches cover product customization, campaigns, workshops, and editorial content, with backend admin routes for managing several of them. Source excerpts show backend route-to-service calls and the storefront search page's component relationships. Many storefront-to-backend connections and unsampled subsystem internals are not shown, so those links are omitted.

Main entry points: [`yournextstore/app/search/page.tsx`](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/search/page.tsx) (Product Search), [`yournextstore/app/api/checkout/razorpay/verify/route.ts`](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/api/checkout/razorpay/verify/route.ts) (Verify Payment), [`yournextstore/lib/medusa.ts`](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/lib/medusa.ts) (Medusa Commerce), [`yournextstore/app/checkout/checkout-form.tsx`](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/checkout/checkout-form.tsx) (Checkout Form)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_storefront["Storefront"]
  node_catalog["Product Catalog<br/>[page.tsx]"]
  node_product["Product Detail<br/>[page.tsx]"]
  node_search["Product Search<br/>[page.tsx]"]
  node_search_controls["Search Controls"]
  node_search_pagination["Search Pagination"]
  node_cart["Cart<br/>[cart-context.tsx]"]
  node_campaigns["Campaigns<br/>[page.tsx]"]
end

subgraph group_checkout["Checkout"]
  node_checkout_form["Checkout Form<br/>[checkout-form.tsx]"]
  node_razor_create["Create Payment Order<br/>[route.ts]"]
  node_razor_verify["Verify Payment<br/>[route.ts]"]
  node_razor_callback["Payment Callback<br/>[route.ts]"]
  node_success["Order Success<br/>[page.tsx]"]
end

subgraph group_commerce["Commerce Backend"]
  node_medusa["Medusa Commerce<br/>[medusa.ts]"]
  node_commerce_client["Commerce Client<br/>[commerce.ts]"]
  node_customization_api["Customization API<br/>[route.ts]"]
  node_customization_service["Customization Service<br/>[service.ts]"]
end

subgraph group_content["Content and Events"]
  node_blog_store["Blog and Videos<br/>[route.ts]"]
  node_blog_service["Blog Service<br/>[service.ts]"]
  node_workshops_store["Workshop Listings<br/>[route.ts]"]
  node_workshop_service["Workshop Service<br/>[service.ts]"]
end

subgraph group_operations["Store Operations"]
  node_customization_admin["Customization Admin"]
  node_blog_admin["Blog Admin<br/>[route.ts]"]
  node_workshop_admin["Workshop Admin<br/>[route.ts]"]
end

node_customer(("Customer"))
node_razorpay["Razorpay"]
node_admin_user(("Store Admin"))
node_postgres[("PostgreSQL")]

node_customer -->|"browses"| node_catalog
node_customer -->|"searches"| node_search
node_search -->|"renders"| node_search_controls
node_search -->|"renders"| node_search_pagination
node_customer -->|"views"| node_product
node_customer -->|"manages"| node_cart
node_customer -->|"enters details"| node_checkout_form
node_checkout_form -->|"creates order"| node_razor_create
node_razor_create -->|"requests payment"| node_razorpay
node_razorpay -.->|"returns callback"| node_razor_callback
node_razorpay -->|"provides signature"| node_razor_verify
node_razor_verify -->|"completes cart"| node_medusa
node_razor_verify -->|"stores order for"| node_success
node_commerce_client -->|"uses"| node_medusa
node_customization_admin -.->|"manages options"| node_customization_service
node_customization_api -.->|"reads options"| node_customization_service
node_blog_admin -->|"creates and lists"| node_blog_service
node_blog_store -->|"lists posts"| node_blog_service
node_workshop_admin -->|"manages workshops"| node_workshop_service
node_workshops_store -.->|"lists workshops"| node_workshop_service
node_admin_user -.->|"manages content"| node_blog_admin
node_admin_user -.->|"manages events"| node_workshop_admin
node_admin_user -.->|"configures options"| node_customization_admin
node_customer -.->|"views offers"| node_campaigns
node_medusa -.->|"persists commerce data"| node_postgres

click node_catalog "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/products/page.tsx"
click node_product "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/product/%5Bslug%5D/page.tsx"
click node_search "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/search/page.tsx"
click node_search_controls "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/search/search-controls.tsx"
click node_search_pagination "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/search/search-pagination.tsx"
click node_cart "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/cart/cart-context.tsx"
click node_checkout_form "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/checkout/checkout-form.tsx"
click node_razor_create "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/api/checkout/razorpay/create-order/route.ts"
click node_razor_verify "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/api/checkout/razorpay/verify/route.ts"
click node_razor_callback "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/api/checkout/razorpay/callback/route.ts"
click node_success "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/order/success/%5Bid%5D/page.tsx"
click node_medusa "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/lib/medusa.ts"
click node_commerce_client "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/lib/commerce.ts"
click node_customization_api "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/api/store/products/%5Bid%5D/customizations/route.ts"
click node_customization_admin "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/tree/main/letter-ink-backend/apps/backend/src/api/admin/customizations"
click node_customization_service "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/modules/customizations/service.ts"
click node_campaigns "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/campaigns/page.tsx"
click node_blog_store "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/api/store/blog-videos/route.ts"
click node_blog_admin "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/api/admin/blogs/route.ts"
click node_blog_service "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/modules/blog/service.ts"
click node_workshops_store "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/api/store/workshops/route.ts"
click node_workshop_admin "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/api/admin/workshops/route.ts"
click node_workshop_service "https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/modules/workshop/service.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_catalog,node_product,node_search,node_search_controls,node_search_pagination,node_cart,node_campaigns toneBlue
class node_checkout_form,node_razor_create,node_razor_verify,node_razor_callback,node_success,node_postgres toneAmber
class node_medusa,node_commerce_client,node_customization_api,node_customization_service toneMint
class node_blog_store,node_blog_service,node_workshops_store,node_workshop_service toneRose
class node_customization_admin,node_blog_admin,node_workshop_admin,node_customer,node_razorpay,node_admin_user toneIndigo
```

## Components

### Storefront

- [Product Catalog](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/products/page.tsx): `yournextstore/app/products/page.tsx`
- [Product Detail](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/product/%5Bslug%5D/page.tsx): `yournextstore/app/product/[slug]/page.tsx`
- [Product Search](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/search/page.tsx): `yournextstore/app/search/page.tsx`
- [Search Controls](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/search/search-controls.tsx): `yournextstore/app/search/search-controls.tsx`
- [Search Pagination](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/search/search-pagination.tsx): `yournextstore/app/search/search-pagination.tsx`
- [Cart](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/cart/cart-context.tsx): `yournextstore/app/cart/cart-context.tsx`
- [Campaigns](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/campaigns/page.tsx): `yournextstore/app/campaigns/page.tsx`

### Checkout

- [Checkout Form](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/checkout/checkout-form.tsx): `yournextstore/app/checkout/checkout-form.tsx`
- [Create Payment Order](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/api/checkout/razorpay/create-order/route.ts): `yournextstore/app/api/checkout/razorpay/create-order/route.ts`
- [Verify Payment](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/api/checkout/razorpay/verify/route.ts): `yournextstore/app/api/checkout/razorpay/verify/route.ts`
- [Payment Callback](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/api/checkout/razorpay/callback/route.ts): `yournextstore/app/api/checkout/razorpay/callback/route.ts`
- [Order Success](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/app/order/success/%5Bid%5D/page.tsx): `yournextstore/app/order/success/[id]/page.tsx`

### Commerce Backend

- [Medusa Commerce](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/lib/medusa.ts): `yournextstore/lib/medusa.ts`
- [Commerce Client](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/yournextstore/lib/commerce.ts): `yournextstore/lib/commerce.ts`
- [Customization API](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/api/store/products/%5Bid%5D/customizations/route.ts): `letter-ink-backend/apps/backend/src/api/store/products/[id]/customizations/route.ts`
- [Customization Service](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/modules/customizations/service.ts): `letter-ink-backend/apps/backend/src/modules/customizations/service.ts`

### Content and Events

- [Blog and Videos](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/api/store/blog-videos/route.ts): `letter-ink-backend/apps/backend/src/api/store/blog-videos/route.ts`
- [Blog Service](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/modules/blog/service.ts): `letter-ink-backend/apps/backend/src/modules/blog/service.ts`
- [Workshop Listings](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/api/store/workshops/route.ts): `letter-ink-backend/apps/backend/src/api/store/workshops/route.ts`
- [Workshop Service](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/modules/workshop/service.ts): `letter-ink-backend/apps/backend/src/modules/workshop/service.ts`

### Store Operations

- [Customization Admin](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/tree/main/letter-ink-backend/apps/backend/src/api/admin/customizations): `letter-ink-backend/apps/backend/src/api/admin/customizations`
- [Blog Admin](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/api/admin/blogs/route.ts): `letter-ink-backend/apps/backend/src/api/admin/blogs/route.ts`
- [Workshop Admin](https://github.com/deepali-shrivastav/the_letter_ink_ecommerce/blob/main/letter-ink-backend/apps/backend/src/api/admin/workshops/route.ts): `letter-ink-backend/apps/backend/src/api/admin/workshops/route.ts`

### Other components

- **Customer**
- **Razorpay**
- **Store Admin**
- **PostgreSQL**

## Connections

- Customer → Product Catalog: browses (evidence: `README.md`)
- Customer → Product Search: searches (evidence: `yournextstore/app/search/page.tsx`)
- Product Search → Search Controls: renders (evidence: `yournextstore/app/search/page.tsx`)
- Product Search → Search Pagination: renders (evidence: `yournextstore/app/search/page.tsx`)
- Customer → Product Detail: views (evidence: `README.md`)
- Customer → Cart: manages (evidence: `README.md`)
- Customer → Checkout Form: enters details (evidence: `README.md`)
- Checkout Form → Create Payment Order: creates order (evidence: `README.md`)
- Create Payment Order → Razorpay: requests payment (evidence: `README.md`)
- Razorpay → Payment Callback: returns callback
- Razorpay → Verify Payment: provides signature (evidence: `README.md`)
- Verify Payment → Medusa Commerce: completes cart (evidence: `README.md`)
- Verify Payment → Order Success: stores order for (evidence: `README.md`)
- Commerce Client → Medusa Commerce: uses (evidence: `yournextstore/lib/commerce.ts`)
- Customization Admin → Customization Service: manages options
- Customization API → Customization Service: reads options
- Blog Admin → Blog Service: creates and lists (evidence: `letter-ink-backend/apps/backend/src/api/admin/blogs/route.ts`)
- Blog and Videos → Blog Service: lists posts (evidence: `letter-ink-backend/apps/backend/src/api/store/blog-videos/route.ts`)
- Workshop Admin → Workshop Service: manages workshops (evidence: `letter-ink-backend/apps/backend/src/api/admin/workshops/route.ts`)
- Workshop Listings → Workshop Service: lists workshops
- Store Admin → Blog Admin: manages content
- Store Admin → Workshop Admin: manages events
- Store Admin → Customization Admin: configures options
- Customer → Campaigns: views offers
- Medusa Commerce → PostgreSQL: persists commerce data
