lad-website/RESUME.md

7.7 KiB
Raw Blame History

LAD Website — Session Resume Guide

Last updated: 2026-05-24 Repo: https://gitea.sigd.net/chaulmark/lad-website Local clone: /home/chaulmark/websites/lad-website Last commit: c9e042f (Update/Article models, migration script, full rebrand) Dev URL: https://lad.sigd.net → Caddy on 10.8.0.10 → 10.8.0.165:3000


Stack

Layer Technology Notes
Frontend Next.js 16, React 19.2, Tailwind CSS v4 /frontend/
Backend Express 5, TypeScript, MongoDB, Redis /backend/
CMS (source) Directus at https://db.lad1908.org Being replaced — data migrated
Infra Docker Compose + Nginx /docker-compose.yml
Git host Gitea at gitea.sigd.net user: chaulmark

Brand Reference

Item Value
Organization Louisiana Association of the Deaf (LAD)
Founded 1908
Brand color #13AE3A (green)
LAD logo https://db.lad1908.org/assets/5cdfa81d-ffc8-4cae-a178-5db3bfbaaeb8
Deaf Focus logo https://db.lad1908.org/assets/c15110fe-d25a-4863-8e9c-055bfad3c710
General contact info@lad1908.org
Deaf Focus interpreting request@deaffocus.org / (225) 319-5586 / Fax (225) 308-4025
Hours MonFri 9am4pm
Scraped content LAD_CONTENT.md in repo root

What Has Been Done

Rebrand (complete)

  • All "Olathe Club of the Deaf" / "OCD" references replaced with LAD throughout entire codebase
  • Brand color switched from blue (#1a56db) to LAD green (#13AE3A) in globals.css
  • Navigation, Footer, layout metadata all updated

Package Upgrades (complete)

  • 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
  • Breaking changes fixed: async params, broken imports, next.config.js remotePatterns

Pages (all complete)

Page File Status
Home app/page.tsx Announcement banner, real events, LAD copy
About app/about/page.tsx 201921 board, 10 affiliated orgs, history
Updates app/updates/page.tsx Static — needs wiring to backend API
Events app/events/page.tsx Static — needs wiring to backend API
Minutes app/minutes/page.tsx Static — needs wiring to backend API
Deaf Focus app/deaf-focus/page.tsx Static — needs wiring to backend API
Contact app/contact/page.tsx Real LAD contact info
Membership app/membership/page.tsx LAD copy, fees TBD (contact-us prompt)
Donate app/donate/page.tsx LAD nonprofit info

Backend Models (all complete)

Model File Notes
Event models/Event.ts + directusId, photoUrl, photoCaption
Document models/Document.ts + directusId, directusAssetId, 3 new minute types
Member models/Member.ts Unchanged
Video models/Video.ts Unchanged
Update models/Update.ts NEW — news/update posts
Article models/Article.ts NEW — Deaf Focus articles

All models have full CRUD routes at /api/{collection}.

Data Migration (complete — local only)

Migration script: backend/scripts/migrate-directus.ts Run with: npx tsx scripts/migrate-directus.ts from /backend/

Local migration results:

  • 235 updates (photos are Directus URLs — 403 protected, used as fallback)
  • 148 events (same photo situation)
  • 201 public minutes PDFs downloaded to uploads/documents/
  • 6 Deaf Focus articles
  • 230 members-only PDFs — skipped, need manual upload via admin panel
  • Full manifest in scripts/migration-report.json (gitignored, regenerated on re-run)

Infrastructure (complete)

  • mongo-init/01-init.js — creates lad_db user from MONGO_USER/MONGO_PASSWORD env vars
  • docker-compose.yml — fully rebranded (lad_db, lad-mongo-data, lad-redis-data)
  • backend/.env.example — template for all production env vars
  • backend/.gitignore — excludes uploads/ contents, .env, migration-report.json

What Still Needs To Be Done

1. Wire Frontend to Backend API (next up)

Replace static arrays in 4 page files with Next.js Server Component fetch() calls:

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 exec lad-backend npx tsx scripts/migrate-directus.ts

3. Admin Panel

  • Verify JWT login at /admin/login
  • Auth middleware: backend/src/middleware/auth.ts
  • Test CRUD for all 6 collections
  • 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

lad-website/
├── frontend/
│   └── src/app/
│       ├── page.tsx              ✅ Homepage
│       ├── about/page.tsx        ✅ Board + orgs
│       ├── updates/page.tsx      ⚡ Static → needs API wiring
│       ├── events/page.tsx       ⚡ Static → needs API wiring
│       ├── minutes/page.tsx      ⚡ Static → needs API wiring
│       ├── deaf-focus/page.tsx   ⚡ Static → needs API wiring
│       ├── contact/page.tsx      ✅ LAD contact info
│       ├── membership/page.tsx   ✅ LAD copy
│       ├── donate/page.tsx       ✅ LAD nonprofit
│       └── admin/                (full CRUD panel — needs auth verification)
├── backend/
│   ├── src/
│   │   ├── models/               (Event, Document, Member, Video, Update, Article)
│   │   ├── controllers/          (full CRUD for all 6)
│   │   ├── routes/               (REST API)
│   │   └── middleware/auth.ts    (JWT)
│   ├── scripts/
│   │   └── migrate-directus.ts  ✅ Directus→MongoDB migration
│   ├── uploads/                  (gitkeep stubs — populated by migration)
│   ├── .env.example              ✅ Production env template
│   └── .gitignore                ✅
├── mongo-init/01-init.js         ✅ Creates lad_db user
├── docker-compose.yml            ✅ lad_db, lad-mongo-data
├── LAD_CONTENT.md                (all scraped content)
└── RESUME.md                     (this file)

Environment / Shell Notes

  • 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
  • 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

How to Resume

  1. cd ~/websites/lad-website
  2. git log --oneline -3 — confirm at c9e042f or later
  3. cd frontend && npm run build — verify build passes
  4. Start dev server: npm run dev -- --hostname 0.0.0.0
  5. Next task: wire the 4 static pages to the backend API (see section above)