---
name: "3M OMG Portal"
client: 3M
status: active
tech: [Node.js, Vanilla JS, HTML/CSS, One2Edit API]
local_path: /Users/ai_leed/Documents/Projects/Oliver/3m-portal
deploy: npm start / node server.js
url: http://localhost:3000
tags: [3m, one2edit, translation, proxy, nodejs]
created: 2026-04-14
last_commit: 2026-03-11
commits: 7
---

## Overview
Lightweight portal wrapping the One2Edit API for 3M translation job management. Node.js acts as a CORS proxy to `https://oliver.one2edit.com/v3/Api.php`.

**Page flow:**
1. `login.html` — Two-step auth: username→userId, then externSessionId
2. `dashboard.html` — Fetch jobs (STARTED/RUNNING), render progress, PDF export
3. `editor.html` — Embed One2Edit JS SDK with externSessionId

**Two auth modes:**
- Credential-based: portal service account (`portal@oliver.agency`) for job listing
- Session-based: `externSessionId` for embedded editor

## Tech Stack
- **Frontend:** Vanilla JS + HTML/CSS (no transpilation, no build step)
- **Backend:** Node.js (`server.js`) — static files + `/api` CORS proxy
- **API:** One2Edit v3 (`oliver.one2edit.com/v3/Api.php`)
- **Session:** `sessionStorage` (cleared on browser close)
- **Infrastructure:** No Docker

## Architecture
```
Browser → localhost:3000 (static files)
Browser → localhost:3000/api → oliver.one2edit.com/v3/Api.php (CORS proxy)
```
**server.js proxy behavior:**
- Strips/rewrites Location headers on 301/302 → returns 401 (prevents auth redirect loops)
- Injects CORS headers on all /api responses
- Masks passwords in logs

## Dev Commands
```bash
npm start        # or: node server.js → http://localhost:3000
# No build step, no test suite
```

## Key Files
| File | Purpose |
|------|---------|
| `server.js` | HTTP server: static + /api proxy |
| `auth.js` | Login logic (Oliver + 3M auth buttons) |
| `dashboard.js` | Job list, filtering, PDF export |
| `editor.html` | One2Edit SDK wrapper |

## Deployment
- **Run:** `node server.js` → http://localhost:3000
- **Local path:** `/Users/ai_leed/Documents/Projects/Oliver/3m-portal`

## Timeline / Git History
| Date | Change |
|------|--------|
| 2026-03-11 | Add missing image assets (3M_Splash.jpg, login_logo.png) |

## Sessions
### 2026-04-14 – Project catalogued
**Done:** Added to Obsidian second brain with full details.

---
## Change Log
| Date | Requested | Changed | Files |
|------|-----------|---------|-------|
| 2026-03-11 | Missing images | Add 3M_Splash.jpg, login_logo.png | assets/ |

## Related
- [[hm-o2e-tool/HM O2E Tool]] (same One2Edit platform)
