Update RESUME.md with 2026-05-25 session state
This commit is contained in:
parent
82e17d3aa9
commit
50a54255a8
1 changed files with 40 additions and 51 deletions
91
RESUME.md
91
RESUME.md
|
|
@ -1,9 +1,9 @@
|
||||||
# LAD Website — Session Resume Guide
|
# LAD Website — Session Resume Guide
|
||||||
|
|
||||||
**Last updated:** 2026-05-24
|
**Last updated:** 2026-05-25
|
||||||
**Repo:** `https://gitea.sigd.net/chaulmark/lad-website`
|
**Repo:** `https://gitea.sigd.net/chaulmark/lad-website`
|
||||||
**Local clone:** `/home/chaulmark/websites/lad-website`
|
**Local clone:** `/home/chaulmark/websites/lad-website`
|
||||||
**Last commit:** `c9e042f` (Update/Article models, migration script, full rebrand)
|
**Last commit:** `82e17d3` (Fix PDF download links — route through Next.js /api/uploads proxy)
|
||||||
**Dev URL:** `https://lad.sigd.net` → Caddy on 10.8.0.10 → 10.8.0.165:3000
|
**Dev URL:** `https://lad.sigd.net` → Caddy on 10.8.0.10 → 10.8.0.165:3000
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -39,14 +39,13 @@
|
||||||
## What Has Been Done
|
## What Has Been Done
|
||||||
|
|
||||||
### Rebrand (complete)
|
### Rebrand (complete)
|
||||||
- All "Olathe Club of the Deaf" / "OCD" references replaced with LAD throughout entire codebase
|
- All "Olathe Club of the Deaf" / "OCD" references replaced with LAD throughout
|
||||||
- Brand color switched from blue (`#1a56db`) to LAD green (`#13AE3A`) in `globals.css`
|
- Brand color switched from blue to LAD green (`#13AE3A`) in `globals.css`
|
||||||
- Navigation, Footer, layout metadata all updated
|
- Navigation, Footer, layout metadata all updated
|
||||||
|
|
||||||
### Package Upgrades (complete)
|
### Package Upgrades (complete)
|
||||||
- Frontend: Next.js 15→16, React 18→19.2, axios added
|
- Frontend: Next.js 15→16, React 18→19.2, axios added
|
||||||
- Backend: Express 4→5, Mongoose 8→9, bcrypt 5→6, helmet 7→8, Zod 3→4
|
- Backend: Express 4→5, Mongoose 8→9, bcrypt 5→6, helmet 7→8, Zod 3→4
|
||||||
- Breaking changes fixed: async params, broken imports, next.config.js remotePatterns
|
|
||||||
|
|
||||||
### Pages (all complete)
|
### Pages (all complete)
|
||||||
|
|
||||||
|
|
@ -54,10 +53,10 @@
|
||||||
|------|------|--------|
|
|------|------|--------|
|
||||||
| Home | `app/page.tsx` | ✅ Announcement banner, real events, LAD copy |
|
| Home | `app/page.tsx` | ✅ Announcement banner, real events, LAD copy |
|
||||||
| About | `app/about/page.tsx` | ✅ 2019–21 board, 10 affiliated orgs, history |
|
| About | `app/about/page.tsx` | ✅ 2019–21 board, 10 affiliated orgs, history |
|
||||||
| Updates | `app/updates/page.tsx` | ✅ Static — needs wiring to backend API |
|
| Updates | `app/updates/page.tsx` | ✅ Wired to `GET /api/updates?status=published` |
|
||||||
| Events | `app/events/page.tsx` | ✅ Static — needs wiring to backend API |
|
| Events | `app/events/page.tsx` | ✅ Wired to `GET /api/events?status=published` |
|
||||||
| Minutes | `app/minutes/page.tsx` | ✅ Static — needs wiring to backend API |
|
| Minutes | `app/minutes/page.tsx` | ✅ Wired to `GET /api/documents`, PDF proxy links |
|
||||||
| Deaf Focus | `app/deaf-focus/page.tsx` | ✅ Static — needs wiring to backend API |
|
| Deaf Focus | `app/deaf-focus/page.tsx` | ✅ Wired to `GET /api/articles?status=published` |
|
||||||
| Contact | `app/contact/page.tsx` | ✅ Real LAD contact info |
|
| Contact | `app/contact/page.tsx` | ✅ Real LAD contact info |
|
||||||
| Membership | `app/membership/page.tsx` | ✅ LAD copy, fees TBD (contact-us prompt) |
|
| Membership | `app/membership/page.tsx` | ✅ LAD copy, fees TBD (contact-us prompt) |
|
||||||
| Donate | `app/donate/page.tsx` | ✅ LAD nonprofit info |
|
| Donate | `app/donate/page.tsx` | ✅ LAD nonprofit info |
|
||||||
|
|
@ -68,10 +67,10 @@
|
||||||
|-------|------|-------|
|
|-------|------|-------|
|
||||||
| Event | `models/Event.ts` | + directusId, photoUrl, photoCaption |
|
| Event | `models/Event.ts` | + directusId, photoUrl, photoCaption |
|
||||||
| Document | `models/Document.ts` | + directusId, directusAssetId, 3 new minute types |
|
| Document | `models/Document.ts` | + directusId, directusAssetId, 3 new minute types |
|
||||||
| Member | `models/Member.ts` | Unchanged |
|
| Member | `models/Member.ts` | Duplicate index warning fixed |
|
||||||
| Video | `models/Video.ts` | Unchanged |
|
| Video | `models/Video.ts` | Unchanged |
|
||||||
| **Update** | `models/Update.ts` | NEW — news/update posts |
|
| Update | `models/Update.ts` | News/update posts |
|
||||||
| **Article** | `models/Article.ts` | NEW — Deaf Focus articles |
|
| Article | `models/Article.ts` | Deaf Focus articles |
|
||||||
|
|
||||||
All models have full CRUD routes at `/api/{collection}`.
|
All models have full CRUD routes at `/api/{collection}`.
|
||||||
|
|
||||||
|
|
@ -81,55 +80,45 @@ Migration script: `backend/scripts/migrate-directus.ts`
|
||||||
Run with: `npx tsx scripts/migrate-directus.ts` from `/backend/`
|
Run with: `npx tsx scripts/migrate-directus.ts` from `/backend/`
|
||||||
|
|
||||||
**Local migration results:**
|
**Local migration results:**
|
||||||
- 235 updates ✅ (photos are Directus URLs — 403 protected, used as fallback)
|
- 233 updates ✅
|
||||||
- 148 events ✅ (same photo situation)
|
- 148 events ✅
|
||||||
- 201 public minutes PDFs downloaded to `uploads/documents/` ✅
|
- 201 public minutes PDFs downloaded to `uploads/documents/` ✅
|
||||||
- 6 Deaf Focus articles ✅
|
- 6 Deaf Focus articles ✅
|
||||||
- **230 members-only PDFs** — skipped, need manual upload via admin panel
|
- **230 members-only PDFs** — skipped, need manual upload via admin panel
|
||||||
- Full manifest in `scripts/migration-report.json` (gitignored, regenerated on re-run)
|
|
||||||
|
### Frontend API Wiring (complete)
|
||||||
|
- All 4 dynamic pages fetch from Express backend via async Server Components
|
||||||
|
- 1-hour revalidation cache (`{ next: { revalidate: 3600 } }`)
|
||||||
|
- Graceful empty-state fallback if backend is unreachable
|
||||||
|
- PDF downloads use Next.js proxy route `/api/uploads/[...path]` — reads from `../backend/uploads/` on filesystem, works through Caddy without exposing backend port
|
||||||
|
- `frontend/.env.local` (gitignored): `BACKEND_URL=http://localhost:4000`
|
||||||
|
- `frontend/.env.example`: documents env vars for production
|
||||||
|
|
||||||
### Infrastructure (complete)
|
### Infrastructure (complete)
|
||||||
- `mongo-init/01-init.js` — creates `lad_db` user from `MONGO_USER`/`MONGO_PASSWORD` env vars
|
- `mongo-init/01-init.js` — creates `lad_db` user from env vars
|
||||||
- `docker-compose.yml` — fully rebranded (lad_db, lad-mongo-data, lad-redis-data)
|
- `docker-compose.yml` — fully rebranded
|
||||||
- `backend/.env.example` — template for all production env vars
|
- `backend/.env.example` — template for all production env vars
|
||||||
- `backend/.gitignore` — excludes uploads/ contents, .env, migration-report.json
|
- `backend/src/index.ts` — serves `/uploads` as static files
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## What Still Needs To Be Done
|
## What Still Needs To Be Done
|
||||||
|
|
||||||
### 1. Wire Frontend to Backend API (next up)
|
### 1. Production Deploy on 10.4.0.205
|
||||||
|
|
||||||
Replace static arrays in 4 page files with Next.js Server Component `fetch()` calls:
|
- Create `backend/.env` on server from `.env.example` with real credentials
|
||||||
|
- Add Caddy entry on 10.4.0.205 for `lad1908.org`
|
||||||
| Page | API endpoint |
|
|
||||||
|------|-------------|
|
|
||||||
| `app/updates/page.tsx` | `GET /api/updates?status=published` |
|
|
||||||
| `app/events/page.tsx` | `GET /api/events?status=published` |
|
|
||||||
| `app/minutes/page.tsx` | `GET /api/documents` (isPublic split) |
|
|
||||||
| `app/deaf-focus/page.tsx` | `GET /api/articles?status=published` |
|
|
||||||
|
|
||||||
Recommendation: use Next.js Server Components with `{ next: { revalidate: 3600 } }` for caching.
|
|
||||||
|
|
||||||
### 2. Production Deploy on 10.4.0.205
|
|
||||||
|
|
||||||
- Add LAD to `webhook-listener/server.py` `REPO_CONFIG` on 10.4.0.205
|
|
||||||
- Create `backend/.env` from `.env.example` with real credentials
|
|
||||||
- Add Caddy entry on 10.4.0.205 for the real domain
|
|
||||||
- `docker compose up -d`
|
- `docker compose up -d`
|
||||||
- `docker exec lad-backend npx tsx scripts/migrate-directus.ts`
|
- Run migration: `docker exec lad-backend npx tsx scripts/migrate-directus.ts`
|
||||||
|
- Set `NEXT_PUBLIC_BACKEND_URL` in `frontend/.env` to public-facing backend URL
|
||||||
|
|
||||||
### 3. Admin Panel
|
### 2. Admin Panel
|
||||||
|
|
||||||
- Verify JWT login at `/admin/login`
|
- Verify JWT login at `/admin/login`
|
||||||
- Auth middleware: `backend/src/middleware/auth.ts`
|
- Auth middleware: `backend/src/middleware/auth.ts`
|
||||||
- Test CRUD for all 6 collections
|
- Test CRUD for all 6 collections
|
||||||
- Upload the 230 members-only PDFs via `/admin/documents`
|
- Upload the 230 members-only PDFs via `/admin/documents`
|
||||||
|
|
||||||
### 4. Minor Cleanup
|
|
||||||
|
|
||||||
- Fix duplicate Mongoose index warnings in `Document` model (`documentType` and `isPublic` defined both inline and in `schema.index()`)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## File Structure Reference
|
## File Structure Reference
|
||||||
|
|
@ -140,13 +129,14 @@ lad-website/
|
||||||
│ └── src/app/
|
│ └── src/app/
|
||||||
│ ├── page.tsx ✅ Homepage
|
│ ├── page.tsx ✅ Homepage
|
||||||
│ ├── about/page.tsx ✅ Board + orgs
|
│ ├── about/page.tsx ✅ Board + orgs
|
||||||
│ ├── updates/page.tsx ⚡ Static → needs API wiring
|
│ ├── updates/page.tsx ✅ API wired
|
||||||
│ ├── events/page.tsx ⚡ Static → needs API wiring
|
│ ├── events/page.tsx ✅ API wired
|
||||||
│ ├── minutes/page.tsx ⚡ Static → needs API wiring
|
│ ├── minutes/page.tsx ✅ API wired + PDF proxy
|
||||||
│ ├── deaf-focus/page.tsx ⚡ Static → needs API wiring
|
│ ├── deaf-focus/page.tsx ✅ API wired
|
||||||
│ ├── contact/page.tsx ✅ LAD contact info
|
│ ├── contact/page.tsx ✅ LAD contact info
|
||||||
│ ├── membership/page.tsx ✅ LAD copy
|
│ ├── membership/page.tsx ✅ LAD copy
|
||||||
│ ├── donate/page.tsx ✅ LAD nonprofit
|
│ ├── donate/page.tsx ✅ LAD nonprofit
|
||||||
|
│ ├── api/uploads/[...path] ✅ PDF proxy (reads ../backend/uploads/)
|
||||||
│ └── admin/ (full CRUD panel — needs auth verification)
|
│ └── admin/ (full CRUD panel — needs auth verification)
|
||||||
├── backend/
|
├── backend/
|
||||||
│ ├── src/
|
│ ├── src/
|
||||||
|
|
@ -156,7 +146,7 @@ lad-website/
|
||||||
│ │ └── middleware/auth.ts (JWT)
|
│ │ └── middleware/auth.ts (JWT)
|
||||||
│ ├── scripts/
|
│ ├── scripts/
|
||||||
│ │ └── migrate-directus.ts ✅ Directus→MongoDB migration
|
│ │ └── migrate-directus.ts ✅ Directus→MongoDB migration
|
||||||
│ ├── uploads/ (gitkeep stubs — populated by migration)
|
│ ├── uploads/ (populated by migration — gitignored contents)
|
||||||
│ ├── .env.example ✅ Production env template
|
│ ├── .env.example ✅ Production env template
|
||||||
│ └── .gitignore ✅
|
│ └── .gitignore ✅
|
||||||
├── mongo-init/01-init.js ✅ Creates lad_db user
|
├── mongo-init/01-init.js ✅ Creates lad_db user
|
||||||
|
|
@ -171,8 +161,8 @@ lad-website/
|
||||||
|
|
||||||
- **EDQUOT issue:** Shell has had recurring disk quota problems from Chrome cache. If bash commands fail silently (exit code 1, no output), check `~/.npm/_cacache`, `~/.cache/tracker3`, `~/.config/chrome-cdp-profile`
|
- **EDQUOT issue:** Shell has had recurring disk quota problems from Chrome cache. If bash commands fail silently (exit code 1, no output), check `~/.npm/_cacache`, `~/.cache/tracker3`, `~/.config/chrome-cdp-profile`
|
||||||
- **Dev server:** `cd ~/websites/lad-website/frontend && npm run dev -- --hostname 0.0.0.0`
|
- **Dev server:** `cd ~/websites/lad-website/frontend && npm run dev -- --hostname 0.0.0.0`
|
||||||
|
- **Backend dev:** `cd ~/websites/lad-website/backend && npm run dev`
|
||||||
- **MongoDB (local dev):** `sudo mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb/mongod.log --fork`
|
- **MongoDB (local dev):** `sudo mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb/mongod.log --fork`
|
||||||
- **Always run build first:** `cd frontend && npm run build` before making changes
|
|
||||||
- **Gitea token:** embedded in remote URL
|
- **Gitea token:** embedded in remote URL
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -180,7 +170,6 @@ lad-website/
|
||||||
## How to Resume
|
## How to Resume
|
||||||
|
|
||||||
1. `cd ~/websites/lad-website`
|
1. `cd ~/websites/lad-website`
|
||||||
2. `git log --oneline -3` — confirm at `c9e042f` or later
|
2. `git log --oneline -3` — confirm at `82e17d3` or later
|
||||||
3. `cd frontend && npm run build` — verify build passes
|
3. Verify MongoDB is running: `curl -s http://localhost:4000/health` (start backend if needed)
|
||||||
4. Start dev server: `npm run dev -- --hostname 0.0.0.0`
|
4. Next task: production deploy on 10.4.0.205, then admin panel verification
|
||||||
5. Next task: wire the 4 static pages to the backend API (see section above)
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue