# MakLinkApp — Go-Live Checklist
### Trade Finance Solution Bangladesh (TFSBD) · maklinkapp.tfsbd.com

---

## Phase 1 — Local Development ✅

- [ ] Extract `MakLinkApp_TFSBD_v2.0.zip` to your project folder
- [ ] Copy `.env.example` → `.env` and fill all values
- [ ] Run: `docker compose up -d`
- [ ] Open: `http://localhost` → Login page should appear
- [ ] Test: Register a user, log in, navigate Dashboard
- [ ] Run DB setup:
  ```bash
  docker exec -i maklinkapp-db mysql -u maklinkapp_user -p maklinkapp < database/schema.sql
  docker exec -i maklinkapp-db mysql -u maklinkapp_user -p maklinkapp < database/seed.sql
  ```
- [ ] Verify health: `curl http://localhost/health`

---

## Phase 2 — Server Provisioning

### 2a. Minimum VPS specs
| Item       | Minimum          | Recommended       |
|------------|------------------|-------------------|
| OS         | Ubuntu 22.04 LTS | Ubuntu 24.04 LTS  |
| RAM        | 1 GB             | 2 GB              |
| CPU        | 1 vCPU           | 2 vCPU            |
| Disk       | 20 GB SSD        | 40 GB SSD         |
| Bandwidth  | 1 TB/mo          | Unlimited         |

> Suitable providers: DigitalOcean, Hostinger VPS, Vultr, Contabo

### 2b. Run setup script (once, as root)
```bash
wget https://raw.githubusercontent.com/tfsbd/maklinkapp/main/server-setup/setup.sh
chmod +x setup.sh && bash setup.sh
```

This installs: Docker, Docker Compose, deploy user, UFW firewall, Fail2ban, log rotation.

---

## Phase 3 — SSL Certificate

```bash
# Stop any process using port 80 first
certbot certonly --standalone -d maklinkapp.tfsbd.com

# Copy certs to app directory
cp /etc/letsencrypt/live/maklinkapp.tfsbd.com/fullchain.pem /opt/maklinkapp/ssl/
cp /etc/letsencrypt/live/maklinkapp.tfsbd.com/privkey.pem   /opt/maklinkapp/ssl/

# Auto-renew cron (add to root crontab)
0 3 * * 0 certbot renew --quiet && docker exec maklinkapp nginx -s reload
```

---

## Phase 4 — DNS Configuration

Log in to your domain registrar (e.g. Namecheap, GoDaddy, or local BD registrar):

| Type  | Host              | Value           | TTL  |
|-------|-------------------|-----------------|------|
| A     | maklinkapp.tfsbd.com | YOUR_SERVER_IP | 300  |
| CNAME | www.maklinkapp.tfsbd.com | maklinkapp.tfsbd.com | 3600 |

> DNS propagation: 5 minutes to 24 hours depending on registrar.

---

## Phase 5 — GitHub Repository Setup

```bash
# On your local machine
cd maklinkapp/
git init
git add .
git commit -m "feat: initial MakLinkApp TFSBD platform deployment"
git branch -M main
git remote add origin https://github.com/YOUR_USERNAME/maklinkapp.git
git push -u origin main
```

### GitHub Secrets to add (Settings → Secrets → Actions):

| Secret Name      | Value                                        |
|------------------|----------------------------------------------|
| `SSH_HOST`       | Your server IP (e.g. `103.x.x.x`)           |
| `SSH_USER`       | `deploy`                                     |
| `SSH_PRIVATE_KEY`| Contents of your `~/.ssh/id_rsa` private key |
| `SSH_PORT`       | `22`                                         |
| `DB_PASS`        | Your MySQL app password                      |
| `DB_ROOT_PASS`   | Your MySQL root password                     |
| `JWT_SECRET`     | Generate: `openssl rand -hex 32`             |
| `REDIS_PASS`     | Your Redis password                          |
| `MAIL_HOST`      | `mail.tfsbd.com`                             |
| `MAIL_USER`      | `noreply@tfsbd.com`                          |
| `MAIL_PASS`      | Your mail password                           |

---

## Phase 6 — First Deployment

```bash
# On your server, as deploy user
cd /opt/maklinkapp
git clone https://github.com/YOUR_USERNAME/maklinkapp.git .
cp .env.example .env
nano .env   # fill all secrets

docker compose up -d
docker compose ps   # all should show "Up"
curl https://maklinkapp.tfsbd.com/health
```

Expected response:
```json
{"status":"ok","service":"maklinkapp","platform":"tfsbd"}
```

---

## Phase 7 — Post-Launch Verification

- [ ] `https://maklinkapp.tfsbd.com` loads login page with TFSBD branding
- [ ] SSL padlock visible — certificate valid
- [ ] Admin login works: `a.karim@tfsbd.com`
- [ ] MFA OTP email received
- [ ] Dashboard launchpad renders all 12 app tiles
- [ ] All nav pages load: Apps, Analytics, Security
- [ ] Search finds apps by name and Bangla name
- [ ] Settings: dark mode toggle, profile save
- [ ] Health endpoint: `/health` returns 200 OK
- [ ] Push a commit to `main` → GitHub Actions CI/CD fires
- [ ] Deployment completes and new version live

---

## Phase 8 — Adding New App Modules

```bash
# 1. Create the app folder
mkdir apps/my-new-app
# Add: index.html, styles/, scripts/

# 2. Add to docker-compose.yml
# (uncomment and copy the sample app block)

# 3. Add to nginx.conf
location /apps/my-new-app/ {
    alias /usr/share/nginx/html/apps/my-new-app/;
    try_files $uri $uri/ /apps/my-new-app/index.html;
}

# 4. Register in database
INSERT INTO apps (slug, name, name_bn, category, status, url)
VALUES ('my-new-app', 'My New App', 'আমার নতুন অ্যাপ', 'Utility', 'development', '/apps/my-new-app/');

# 5. Add to APPS array in frontend/scripts/app.js
```

---

## Useful Docker Commands

```bash
# View running containers
docker compose ps

# View logs
docker compose logs -f app
docker compose logs -f db

# Restart a service
docker compose restart app

# Stop everything
docker compose down

# Full rebuild
docker compose down && docker compose up -d --build

# Enter container shell
docker exec -it maklinkapp sh

# Backup database
docker exec maklinkapp-db mysqldump -u root -p maklinkapp > backup_$(date +%Y%m%d).sql
```

---

## Support & Contact

**Trade Finance Solution Bangladesh (TFSBD)**  
Hadi Mansion, 687 E/2, Pranhoridas Road, Pahartoli, Chittagong-4219  
📞 +880312772319 · +8801721117665  
📧 a.karim@tfsbd.com  
🌐 www.tfsbd.com | maklinkapp.tfsbd.com

---
*MakLinkApp v2.0 · Go-Live Checklist · May 2026*
