FRONTEND
javascript_shop_node_kamatera_react_next_js/
├─ .gitignore
├─ node_modules/
├─ .next/ (Next build output)
├─ package-lock.json
├─ package.json (root scripts: `next dev|build|start`)
├─ README.md
├─ next.config.js (CommonJS Next config)
├─ next.config.mjs (ESM Next config)
├─ pages/
│ ├─ `_app.js` (App wrapper)
│ ├─ `_document.js` (Custom HTML document)
│ ├─ `index.js` (Home page → `/`)
│ └─ api/
│ ├─ `hello.js` (example API → `/api/hello`)
│ └─ `products.js` (proxy API → `/api/products`)
├─ public/
│ ├─ `favicon.ico`
│ ├─ `.htaccess.txt`
│ ├─ `file.svg`
│ ├─ `globe.svg`
│ └─ `next.svg` (static assets)
└─ styles/
├─ `globals.css`
└─ `Home.module.css`
BACKEND
SYSTEM: root@super (185.247.116.51)
│
├── NGINX PROXY (/etc/nginx/)
│ ├── nginx.conf (main config)
│ ├── fastcgi.conf
│ ├── sites-available/
│ │ └── justinw.uk
│ │ └── location /shop-api/products
│ │ └── proxy_pass http://185.247.116.51:3001/api/products;
│ ├── sites-enabled/
│ │ └── justinw.uk → ../sites-available/justinw.uk
│ └── snippets/
│ ├── fastcgi-php.conf
│ └── snakeoil.conf
│
├── NODE.JS BACKEND (/var/www/shop-api/)
│ ├── package.json
│ ├── package-lock.json
│ ├── public/
│ │ ├── index.html
│ │ ├── shop.css
│ │ └── Untitled-1.js
│ ├── src/
│ │ ├── server.js (Express server)
│ │ │ ├── const app = express()
│ │ │ ├── app.get('/api/products', ...)
│ │ │ └── app.listen(3001)
│ │ └── db.js (MySQL connection)
│ │ ├── mysql.createPool()
│ │ └── Database credentials/config
│ └── node_modules/ (500+ packages, hidden)
│
└── MYSQL DATABASE
├── Version: 8.0.44-0ubuntu0.22.04.1
├── Port: 3306
└── Database: [unknown_name]
└── products table
├── id
├── name
├── date
├── timestamp
├── price
├── brand
├── image
└── created_at