Project: "Where Has Benny Been?" - Mad Monkey Marketing Campaign
Short URL Domain: mmlnk.us
www subdomain: www.mmlnk.us (redirects to apex)
Admin Interface: admin.mmlnk.us (IP-restricted to 10.0.0.157)
Main Website: mad-monkey-creations.com
www subdomain: www.mad-monkey-creations.com
n8n Instance: n8n.janness.com
Traefik Dashboard: traefik.janness.com
Listmonk: list.mad-monkey-creations.com
n8n Webhooks: hooks.mad-monkey-creations.com
Old Email App: list.mmc.fit
Old Landing Page: benny.mmc.fit
Reason: Changed to mmlnk.us and mad-monkey-creations.com subpaths
All services run on: 10.0.0.250 (bennybeen)
External IP: 76.150.65.61 (DYNAMIC - can change)
DNS Update Process: See DNS-UPDATE-PROCESS.md when external IP changes
| Service | Port | Domain | Status |
|---|---|---|---|
| PostgreSQL | 5432 | Internal only | Planned |
| n8n | 5678 | n8n.janness.com | Planned |
| Shlink | 8081 | mmlnk.us, admin.mmlnk.us | Planned |
| Traefik Dashboard | 8080 | traefik.janness.com | Planned |
| Listmonk | 9000 | list.mad-monkey-creations.com | Planned |
| HTTP | 80 | All domains | Active |
| HTTPS | 443 | All domains | Active |
Server Hostname: bennybeen
Internal IP: 10.0.0.250
External IP: 76.150.65.61 (dynamic)
SSH User: bennybeen
Project Path: /home/bennybeen/mad-monkey/
Admin Whitelist IP: 10.0.0.157
Purpose: SMTP relay and email delivery
Status: ACTIVE
SMTP Server: smtp.forwardemail.net
Port: 587
From Email: hello@mad-monkey-creations.com
Why ForwardMail.net: Better deliverability, PostgreSQL integration, webhooks, API access, no vendor lock-in
| Port | Service | Status | Notes |
|---|---|---|---|
| 25 | SMTP | FILTERED | Blocked by Comcast ISP |
| 465 | SMTPS | OPEN | Secure SMTP |
| 587 | Submission | OPEN | Mail submission |
| 993 | IMAPS | OPEN | Secure IMAP |
| 110 | POP3 | CLOSED | - |
| 143 | IMAP | CLOSED | - |
| 995 | POP3S | CLOSED | - |
Host: 10.0.0.250
Port: 5432
Database: madmonkey
Username: mm_user
Password: YOUR_STRONG_PASS (placeholder)
Connection String: postgresql://mm_user:PASSWORD@10.0.0.250:5432/madmonkey
Env Variables:
POSTGRES_PASSWORD="YOUR_STRONG_PASS"
POSTGRES_USER="mm_user"
POSTGRES_DB="madmonkey"
DB_HOST="10.0.0.250"
DB_DRIVER="postgres"
Schema: listmonk
Note: Separate from app database, managed by Listmonk installer
Note: Uses same PostgreSQL instance with separate schema
MM_SENDER_EMAIL="hello@mad-monkey-creations.com"
MM_LANDING_BASE="https://www.mad-monkey-creations.com"
MM_REWARD_URL="https://www.mad-monkey-creations.com/reward"
MM_DISCOUNT_CODE="BANANAS10"
LISTMONK_URL="<listmonk-instance-url>"
LISTMONK_LIST_ID="<list-id>"
N8N_WEBHOOK_SECRET="********"
N8N_ENCRYPTION_KEY="<encryption-key>"
DEFAULT_DOMAIN="mmlnk.us"
ETSY_API_KEY="********"
| Service | Purpose | Access Level |
|---|---|---|
| Etsy API | Product linking | Read-only |
| TeePublic | Merchandise fulfillment | - |
| Printify API | Print-on-demand fulfillment | Order creation |
| Shlink REST API | URL shortening | Full access |
| Listmonk API | Email list management | Full access |
| ipapi.co | Geolocation services | Optional |
| ipinfo | IP geolocation (alternative) | Optional |
| Cloudflare Turnstile | Bot protection/CAPTCHA | - |
| hCaptcha | Bot protection (alternative) | - |
Container: n8n
IP: 10.0.0.198
Status: Active
Container: Traefik
Purpose: Reverse proxy with Let's Encrypt SSL
Status: Active
postgres:
image: postgres:16
ports: 5432
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: YOUR_STRONG_PASS
POSTGRES_DB: app
listmonk:
image: listmonk/listmonk:latest
ports: 9000
shlink:
image: shlinkio/shlink:stable
ports: 8080
environment:
DEFAULT_DOMAIN: mmlnk.us
Version: v24.12.0
Binary Location: /usr/local/bin/node
NVM Path: /home/bennybeen/.nvm/versions/node/v24.12.0/
Accessible by: bennybeen user
Version: 9.2.0
Binary Location: /usr/bin/npm
Version: 2.0.76
Binary Location: /usr/local/bin/claude
Purpose: AI assistant for automation
******** should be replaced with actual secure values