# ছায়েদুল হক–ছালেহা খাতুন ফাউন্ডেশন
## cPanel-এ ইনস্টল ও চালুর ধাপে ধাপে নির্দেশনা

> এই প্যাকেজটি একটি React + Express + Drizzle ভিত্তিক UI-first MVP। Login portal, member/admin dashboard, বাংলা branding, Excel থেকে নেওয়া প্রাথমিক ৩৩ সদস্যের seed data এবং dashboard workflow UI আছে। তবে live member ledger, approval persistence, PDF receipt, WhatsApp delivery এবং production financial calculation চালুর আগে server/database module সম্পূর্ণ করতে হবে।

## ১. ZIP আপলোড

১. cPanel-এ লগইন করুন।
২. **File Manager → public_html** খুলুন।
৩. ZIP ফাইলটি Upload করুন।
৪. ZIP-এর ওপর Right click করে **Extract** করুন।
৫. Extract হওয়ার পর যদি `shfoundation` নামে আলাদা folder তৈরি হয়, folder-এর ভেতরের সব ফাইল `public_html`-এ Move করুন অথবা cPanel Node.js App-এ সেই folder-টিকেই Application Root দিন।
৬. `.env` বা secret key কখনো ZIP-এর মধ্যে পাবলিকভাবে রাখবেন না।

## ২. Node.js App তৈরি

cPanel থেকে **Software → Setup Node.js App** খুলুন।

এই values দিন:

- **Node.js version:** 20 অথবা hosting provider-এর সর্বশেষ LTS
- **Application mode:** Production
- **Application root:** `public_html` অথবা ZIP যেখানে extract করেছেন সেই folder
- **Application URL:** আপনার domain, যেমন `https://example.com`
- **Application startup file:** `dist/index.js`
- **Passenger log file:** hosting provider-এর নিয়ম অনুযায়ী রাখুন

Save করার পর cPanel যে **Application URL**, **port**, এবং environment section দেখাবে তা সংরক্ষণ করুন। App-কে নিজের মতো করে কোনো port hard-code করবেন না; cPanel/Passenger-এর দেওয়া `PORT` ব্যবহার করা হবে।

## ৩. Database তৈরি

cPanel → **Databases → MySQL Database Wizard** খুলুন।

১. একটি database তৈরি করুন, যেমন `foundation_db`।
২. একটি আলাদা database user তৈরি করুন।
৩. user-কে database-এ **ALL PRIVILEGES** দিন।
৪. Database host সাধারণত `localhost` হয়; hosting provider ভিন্ন host দিলে সেটি ব্যবহার করুন।
৫. Password নিরাপদে লিখে রাখুন।

সাধারণ MySQL connection string:

```text
mysql://CPANEL_DB_USER:DB_PASSWORD@localhost/CPANEL_DB_NAME
```

যদি username বা database name-এ cPanel prefix থাকে, সম্পূর্ণ নাম ব্যবহার করবেন। Password-এ special character থাকলে provider-এর নিয়ম অনুযায়ী URL-encode করতে হবে।

## ৪. Environment Variables সেট করুন

Setup Node.js App-এর **Environment variables** অংশে নিচেরগুলো যোগ করুন। Secret value কারও সঙ্গে শেয়ার করবেন না।

```text
NODE_ENV=production
PORT=<cPanel app যে PORT দিয়েছে>
DATABASE_URL=mysql://USER:PASSWORD@localhost/DATABASE_NAME
MANUS_PROJECT_ID=<আপনার Manus project/application ID>
MANUS_JWT_SECRET=<দীর্ঘ random secret>
MANUS_OAUTH_API_URL=<আপনার OAuth provider-এর callback/API URL>
OWNER_OPEN_ID=<super admin owner ID>
MANUS_API_URL=<যদি Manus service ব্যবহার করেন>
MANUS_API_KEY=<যদি Manus service ব্যবহার করেন>
```

`MANUS_*` authentication values না থাকলে এই starter-এর Manus login production cPanel-এ কাজ করবে না। সেক্ষেত্রে standalone email/password login এবং user/member database mapping আলাদাভাবে implement করতে হবে।

## ৫. SSH/Terminal দিয়ে dependency install

cPanel → **Advanced → Terminal** অথবা SSH ব্যবহার করুন। Project folder-এ গিয়ে:

```bash
cd ~/public_html
npm install -g pnpm@10.18.0
pnpm install --prod=false
```

যদি hosting provider global pnpm install বন্ধ রাখে, ব্যবহার করুন:

```bash
corepack enable
corepack prepare pnpm@10.18.0 --activate
pnpm install --prod=false
```

## ৬. Database migration চালান

প্রথমে environment variable ঠিক আছে কি না যাচাই করে:

```bash
cd ~/public_html
pnpm db:migrate
```

Migration সফল হলে অন্তত `users` table এবং role enum (`user`, `admin`, `super_admin`) তৈরি হবে। phpMyAdmin-এ database নির্বাচন করে tables দেখা যাবে।

> এই ZIP-এর বর্তমান schema-তে member, deposit, welfare, income, expense, investment, approval, distribution, complaint এবং receipt-এর production tables এখনো নেই। Live হিসাব চালুর আগে এগুলো তৈরি করতে হবে।

## ৭. Production build তৈরি করুন

```bash
cd ~/public_html
pnpm check
pnpm build
```

Build সফল হলে নিচেরগুলো তৈরি হবে:

- `dist/public/` — frontend assets
- `dist/index.js` — production server

## ৮. Node.js App restart করুন

cPanel → **Setup Node.js App** → আপনার application → **Restart** চাপুন।

তারপর browser-এ domain খুলুন:

```text
https://your-domain.com
```

যদি 503/500 আসে, cPanel-এর application log দেখুন এবং নিচেরগুলো যাচাই করুন:

- startup file `dist/index.js` কি না
- `DATABASE_URL` ঠিক কি না
- Node version 20 LTS কি না
- SSL active কি না
- `pnpm build` সফল হয়েছে কি না
- `PORT` cPanel-এর দেওয়া port-এর সঙ্গে conflict করছে কি না

## ৯. SSL ও domain

cPanel → **Security → SSL/TLS Status** থেকে AutoSSL চালু করুন। Login/cookie ব্যবহারের জন্য HTTPS আবশ্যক। Domain-এর DNS ঠিকভাবে hosting server-এ point না করলে application দেখা যাবে না।

## ১০. নিরাপত্তা checklist

- Database password, JWT secret, API key Git বা public_html-এর public file-এ রাখবেন না।
- cPanel **Directory Privacy**, **Two-Factor Authentication**, **ModSecurity** এবং backup চালু রাখুন।
- phpMyAdmin-এ নিয়মিত database backup নিন।
- production-এ test member data রেখে live financial entry শুরু করবেন না।
- member NID, mobile, nominee এবং financial record encrypted/role-protected না হওয়া পর্যন্ত public sharing করবেন না।
- Super Admin approval server-side enforce না হওয়া পর্যন্ত dashboard-কে হিসাবের চূড়ান্ত record হিসেবে ব্যবহার করবেন না।

## ১১. বর্তমান ZIP-এ কী আছে

- বাংলা foundation login portal
- supplied foundation logo
- member/admin dashboard UI
- role values: `user`, `admin`, `super_admin`
- Excel থেকে নেওয়া ৩৩ সদস্যের initial seed data
- member detail modal
- income/expense/investment input UI
- approval ও distribution workflow UI
- complaint/পরামর্শ UI
- print action
- Drizzle migrations
- TypeScript, build ও project configuration

## ১২. পরবর্তী production development order

১. Member ও profile table তৈরি
২. Deposit/welfare monthly ledger তৈরি
৩. Income/expense/investment ledger তৈরি
৪. Admin submission ও Super Admin approval server-side করা
৫. Balance database calculation করা
৬. Six-month distribution calculation ও immutable record করা
৭. PDF receipt তৈরি ও storage-এ রাখা
৮. WhatsApp provider integration করা
৯. Audit log ও role-based server authorization যোগ করা
১০. Existing Excel data import করে duplicate/mobile conflicts যাচাই করা

## দরকারি command সংক্ষেপে

```bash
pnpm install --prod=false
pnpm db:migrate
pnpm check
pnpm build
# cPanel restart করার পর application চালু হবে
```
