# raviteja-me/groovinto architecture

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

- Interactive diagram: https://gitdiagram.com/raviteja-me/groovinto
- Repository: https://github.com/raviteja-me/groovinto

## Overview

Groovinto is a creative studio website showcasing its services and portfolio, with contact/newsletter capture, an AI video course registration and payment flow, and an admin view of leads and payments. The clearest source-backed runtime path is server-side order creation, payment verification, then registration persistence; a Razorpay webhook provides a separate payment-event path. The tree also indicates public showcase, 3D and motion features, though their wiring was not sampled. Evidence is limited for page composition and the registration form’s client-side orchestration.

Main entry points: [`lib/razorpay.ts`](https://github.com/raviteja-me/groovinto/blob/main/lib/razorpay.ts) (Razorpay services), [`lib/store.ts`](https://github.com/raviteja-me/groovinto/blob/main/lib/store.ts) (Persistent store), [`app/api/verify-payment/route.ts`](https://github.com/raviteja-me/groovinto/blob/main/app/api/verify-payment/route.ts) (Verify payment), [`app/api/razorpay-webhook/route.ts`](https://github.com/raviteja-me/groovinto/blob/main/app/api/razorpay-webhook/route.ts) (Payment webhook)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_showcase["Studio showcase"]
  node_home["Home page<br/>[page.tsx]"]
  node_servicespage["Services page<br/>[page.tsx]"]
  node_portfolio["Portfolio page<br/>[page.tsx]"]
  node_workgrid["Work grid<br/>[WorkGrid.tsx]"]
  node_scenelayer["3D visuals<br/>[Scene.tsx]"]
end

subgraph group_course["Course enrollment"]
  node_registerpage["Registration page<br/>[page.tsx]"]
  node_registerform["Registration form<br/>[RegisterForm.tsx]"]
  node_courseinfo["Course content<br/>[CourseDetails.tsx]"]
  node_createorder["Create order<br/>[route.ts]"]
  node_verify["Verify payment<br/>[route.ts]"]
  node_webhook["Payment webhook<br/>[route.ts]"]
  node_checkoutclient["Checkout loader<br/>[razorpay-client.ts]"]
end

subgraph group_leads["Leads and admin"]
  node_contactpage["Contact page<br/>[page.tsx]"]
  node_contactform["Contact form<br/>[ContactForm.tsx]"]
  node_contactapi["Contact intake<br/>[route.ts]"]
  node_subscribeapi["Newsletter intake<br/>[route.ts]"]
  node_adminpage["Admin page<br/>[page.tsx]"]
  node_admindashboard["Admin dashboard<br/>[AdminDashboard.tsx]"]
  node_adminlogin["Admin login<br/>[route.ts]"]
  node_admindata["Admin data<br/>[route.ts]"]
end

subgraph group_services["Shared services"]
  node_razorpaylib["Razorpay services<br/>[razorpay.ts]"]
  node_store[("Persistent store<br/>[store.ts]")]
end

node_visitor(("Visitor"))
node_razorpay["Razorpay"]

node_visitor -->|"opens"| node_home
node_visitor -->|"explores"| node_servicespage
node_visitor -->|"views work"| node_portfolio
node_visitor -->|"registers"| node_registerpage
node_visitor -->|"contacts"| node_contactpage
node_portfolio -->|"renders"| node_workgrid
node_registerform -->|"requests order"| node_createorder
node_createorder -->|"creates order"| node_razorpaylib
node_razorpaylib -->|"calls API"| node_razorpay
node_checkoutclient -->|"loads checkout"| node_razorpay
node_registerform -->|"submits payment"| node_verify
node_verify -->|"checks payment"| node_razorpaylib
node_verify -->|"saves registration"| node_store
node_razorpay -.->|"sends events"| node_webhook
node_webhook -->|"checks signature"| node_razorpaylib
node_webhook -->|"saves events"| node_store
node_contactform -->|"submits enquiry"| node_contactapi
node_contactapi -->|"saves enquiry"| node_store
node_subscribeapi -->|"saves subscriber"| node_store
node_adminpage -->|"renders"| node_admindashboard
node_admindashboard -->|"authenticates"| node_adminlogin
node_admindashboard -->|"requests data"| node_admindata
node_admindata -->|"reads records"| node_store
node_admindata -->|"lists payments"| node_razorpaylib

click node_home "https://github.com/raviteja-me/groovinto/blob/main/app/page.tsx"
click node_servicespage "https://github.com/raviteja-me/groovinto/blob/main/app/services/page.tsx"
click node_portfolio "https://github.com/raviteja-me/groovinto/blob/main/app/portfolio/page.tsx"
click node_workgrid "https://github.com/raviteja-me/groovinto/blob/main/components/work/WorkGrid.tsx"
click node_scenelayer "https://github.com/raviteja-me/groovinto/blob/main/components/three/Scene.tsx"
click node_registerpage "https://github.com/raviteja-me/groovinto/blob/main/app/register/page.tsx"
click node_registerform "https://github.com/raviteja-me/groovinto/blob/main/components/course/RegisterForm.tsx"
click node_courseinfo "https://github.com/raviteja-me/groovinto/blob/main/components/course/CourseDetails.tsx"
click node_createorder "https://github.com/raviteja-me/groovinto/blob/main/app/api/create-order/route.ts"
click node_verify "https://github.com/raviteja-me/groovinto/blob/main/app/api/verify-payment/route.ts"
click node_webhook "https://github.com/raviteja-me/groovinto/blob/main/app/api/razorpay-webhook/route.ts"
click node_checkoutclient "https://github.com/raviteja-me/groovinto/blob/main/components/course/razorpay-client.ts"
click node_razorpaylib "https://github.com/raviteja-me/groovinto/blob/main/lib/razorpay.ts"
click node_contactpage "https://github.com/raviteja-me/groovinto/blob/main/app/contact/page.tsx"
click node_contactform "https://github.com/raviteja-me/groovinto/blob/main/components/contact/ContactForm.tsx"
click node_contactapi "https://github.com/raviteja-me/groovinto/blob/main/app/api/contact/route.ts"
click node_subscribeapi "https://github.com/raviteja-me/groovinto/blob/main/app/api/subscribe/route.ts"
click node_adminpage "https://github.com/raviteja-me/groovinto/blob/main/app/admin/page.tsx"
click node_admindashboard "https://github.com/raviteja-me/groovinto/blob/main/components/admin/AdminDashboard.tsx"
click node_adminlogin "https://github.com/raviteja-me/groovinto/blob/main/app/api/admin/login/route.ts"
click node_admindata "https://github.com/raviteja-me/groovinto/blob/main/app/api/admin/data/route.ts"
click node_store "https://github.com/raviteja-me/groovinto/blob/main/lib/store.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_home,node_servicespage,node_portfolio,node_workgrid,node_scenelayer toneBlue
class node_registerpage,node_registerform,node_courseinfo,node_createorder,node_verify,node_webhook,node_checkoutclient toneAmber
class node_contactpage,node_contactform,node_contactapi,node_subscribeapi,node_adminpage,node_admindashboard,node_adminlogin,node_admindata toneMint
class node_razorpaylib,node_store toneRose
class node_visitor,node_razorpay toneIndigo
```

## Components

### Studio showcase

- [Home page](https://github.com/raviteja-me/groovinto/blob/main/app/page.tsx): `app/page.tsx`
- [Services page](https://github.com/raviteja-me/groovinto/blob/main/app/services/page.tsx): `app/services/page.tsx`
- [Portfolio page](https://github.com/raviteja-me/groovinto/blob/main/app/portfolio/page.tsx): `app/portfolio/page.tsx`
- [Work grid](https://github.com/raviteja-me/groovinto/blob/main/components/work/WorkGrid.tsx): `components/work/WorkGrid.tsx`
- [3D visuals](https://github.com/raviteja-me/groovinto/blob/main/components/three/Scene.tsx): `components/three/Scene.tsx`

### Course enrollment

- [Registration page](https://github.com/raviteja-me/groovinto/blob/main/app/register/page.tsx): `app/register/page.tsx`
- [Registration form](https://github.com/raviteja-me/groovinto/blob/main/components/course/RegisterForm.tsx): `components/course/RegisterForm.tsx`
- [Course content](https://github.com/raviteja-me/groovinto/blob/main/components/course/CourseDetails.tsx): `components/course/CourseDetails.tsx`
- [Create order](https://github.com/raviteja-me/groovinto/blob/main/app/api/create-order/route.ts): `app/api/create-order/route.ts`
- [Verify payment](https://github.com/raviteja-me/groovinto/blob/main/app/api/verify-payment/route.ts): `app/api/verify-payment/route.ts`
- [Payment webhook](https://github.com/raviteja-me/groovinto/blob/main/app/api/razorpay-webhook/route.ts): `app/api/razorpay-webhook/route.ts`
- [Checkout loader](https://github.com/raviteja-me/groovinto/blob/main/components/course/razorpay-client.ts): `components/course/razorpay-client.ts`

### Leads and admin

- [Contact page](https://github.com/raviteja-me/groovinto/blob/main/app/contact/page.tsx): `app/contact/page.tsx`
- [Contact form](https://github.com/raviteja-me/groovinto/blob/main/components/contact/ContactForm.tsx): `components/contact/ContactForm.tsx`
- [Contact intake](https://github.com/raviteja-me/groovinto/blob/main/app/api/contact/route.ts): `app/api/contact/route.ts`
- [Newsletter intake](https://github.com/raviteja-me/groovinto/blob/main/app/api/subscribe/route.ts): `app/api/subscribe/route.ts`
- [Admin page](https://github.com/raviteja-me/groovinto/blob/main/app/admin/page.tsx): `app/admin/page.tsx`
- [Admin dashboard](https://github.com/raviteja-me/groovinto/blob/main/components/admin/AdminDashboard.tsx): `components/admin/AdminDashboard.tsx`
- [Admin login](https://github.com/raviteja-me/groovinto/blob/main/app/api/admin/login/route.ts): `app/api/admin/login/route.ts`
- [Admin data](https://github.com/raviteja-me/groovinto/blob/main/app/api/admin/data/route.ts): `app/api/admin/data/route.ts`

### Shared services

- [Razorpay services](https://github.com/raviteja-me/groovinto/blob/main/lib/razorpay.ts): `lib/razorpay.ts`
- [Persistent store](https://github.com/raviteja-me/groovinto/blob/main/lib/store.ts): `lib/store.ts`

### Other components

- **Visitor**
- **Razorpay**

## Connections

- Visitor → Home page: opens
- Visitor → Services page: explores
- Visitor → Portfolio page: views work
- Visitor → Registration page: registers
- Visitor → Contact page: contacts
- Portfolio page → Work grid: renders
- Registration form → Create order: requests order
- Create order → Razorpay services: creates order
- Razorpay services → Razorpay: calls API
- Checkout loader → Razorpay: loads checkout
- Registration form → Verify payment: submits payment
- Verify payment → Razorpay services: checks payment
- Verify payment → Persistent store: saves registration
- Razorpay → Payment webhook: sends events
- Payment webhook → Razorpay services: checks signature
- Payment webhook → Persistent store: saves events
- Contact form → Contact intake: submits enquiry
- Contact intake → Persistent store: saves enquiry
- Newsletter intake → Persistent store: saves subscriber
- Admin page → Admin dashboard: renders
- Admin dashboard → Admin login: authenticates
- Admin dashboard → Admin data: requests data
- Admin data → Persistent store: reads records
- Admin data → Razorpay services: lists payments
