# WonderKids — cPanel ডিপ্লয়মেন্ট গাইড

cPanel-এর **Setup Node.js App** (Phusion Passenger) দিয়ে WonderKids চালানোর
ধাপে ধাপে নির্দেশনা।

> প্রয়োজন: cPanel-এ "Setup Node.js App" ফিচার থাকতে হবে (Node ১৮+ সাপোর্ট)।
> এই অ্যাপে server-side API + SQLite লাগে, তাই static/PHP-only hosting-এ চলবে না
> (নিচের "Node.js না থাকলে" অংশ দেখো)।

---

## ধাপ ১ — কোড আপলোড

1. প্রজেক্টটা `node_modules` আর `.next` **বাদ দিয়ে** zip করো।
2. cPanel → **File Manager** → `wonderkids` নামে একটা ফোল্ডার বানিয়ে সেখানে
   zip আপলোড ও extract করো (যেমন `/home/<cpaneluser>/wonderkids`)।

## ধাপ ২ — ডেটাবেজ persistent পাথ

রিডিপ্লয়ে যেন DB না মোছে, তাই অ্যাপ ফোল্ডারের বাইরে একটা ফোল্ডার বানাও:

```
/home/<cpaneluser>/wonderkids-data
```

পরে env-এ `DATABASE_PATH` এই ফোল্ডারের ভেতর সেট করবে (ধাপ ৪)।

## ধাপ ৩ — Node.js App তৈরি

cPanel → **Setup Node.js App** → **Create Application**:

| ফিল্ড | ভ্যালু |
|---|---|
| Node.js version | 18.x বা 20.x (LTS) |
| Application mode | Production |
| Application root | `wonderkids` |
| Application URL | তোমার ডোমেইন/সাবডোমেইন |
| Application startup file | `node_modules/.bin/next` *(নিচে দেখো)* |

> Passenger সরাসরি `next start` চালায় না। সবচেয়ে সহজ উপায়: startup file হিসেবে
> একটা ছোট `server.js` ব্যবহার করা (ধাপ ৫)।

## ধাপ ৪ — Environment Variables

cPanel-এর Node.js App স্ক্রিনে **Environment variables** সেকশনে যোগ করো:

```
NODE_ENV = production
DEMO_MODE = false
BDAPPS_APP_ID = APP_XXXXXX
BDAPPS_PASSWORD = your_real_password
BDAPPS_BASE_URL = https://developer.bdapps.com
AI_API_KEY = sk-...
AI_PROVIDER = anthropic
SESSION_SECRET = <লম্বা random string>
DATABASE_PATH = /home/<cpaneluser>/wonderkids-data/wonderkids.db
```

(প্রথমে টেস্টের জন্য `DEMO_MODE = true` রাখতে পারো, সব ঠিক থাকলে `false` করো।)

## ধাপ ৫ — startup file (`server.js`)

অ্যাপ রুটে `server.js` নামে একটা ফাইল বানাও (Passenger এটা চালাবে):

```js
const { createServer } = require('http');
const next = require('next');

const port = process.env.PORT || 3000;
const app = next({ dev: false });
const handle = app.getRequestHandler();

app.prepare().then(() => {
  createServer((req, res) => handle(req, res)).listen(port);
});
```

Setup Node.js App-এ **Application startup file** = `server.js` দাও।

## ধাপ ৬ — Install ও Build

Node.js App স্ক্রিনে **Run NPM Install** চাপো, অথবা টার্মিনালে (App-এর
virtualenv activate করার কমান্ড cPanel দেখায়):

```bash
cd ~/wonderkids
npm install
npm run build          # next build
npm run migrate        # DB তৈরি/মাইগ্রেট (ঐচ্ছিক, অ্যাপ নিজেও করে নেয়)
npm run seed           # AI দিয়ে কনটেন্ট জেনারেট (ঐচ্ছিক)
```

## ধাপ ৭ — Restart

cPanel → Setup Node.js App → **Restart** চাপো (Passenger রিস্টার্ট হবে)।
টার্মিনাল থেকে চাইলে:

```bash
touch ~/wonderkids/tmp/restart.txt
```

(`tmp/restart.txt` স্পর্শ করলে Passenger অ্যাপ রিলোড করে।)

## ধাপ ৮ — bdapps webhook

bdapps ড্যাশবোর্ডে notify URL সেট করো:

```
https://<your-domain>/api/bdapps/notify
```

এতে bdapps পোর্টাল/USSD দিয়ে কেউ আনসাবস্ক্রাইব করলেও লোকাল DB আপডেট হবে।

---

## রিডিপ্লয় করার সময়

1. নতুন কোড আপলোড করো (`data/` আর `.env.local` overwrite করো না)।
2. `npm install && npm run build`।
3. Restart (ধাপ ৭)।

`DATABASE_PATH` অ্যাপ ফোল্ডারের বাইরে থাকায় DB অক্ষত থাকে।

---

## cPanel-এ Node.js না থাকলে

কিছু shared hosting-এ শুধু static/PHP সাপোর্ট থাকে। WonderKids-এর server-side
API ও SQLite দরকার, তাই সেখানে `next export` দিয়ে static হোস্টিং **সম্ভব নয়**।
বিকল্প: একটা Node-সাপোর্টেড VPS, অথবা Render/Railway/Fly.io জাতীয় হোস্টে
`npm run build && npm start` চালাও (persistent disk-এ `DATABASE_PATH` রেখে)।
