7.7 KiB
7.7 KiB
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 | Mon–Fri 9am–4pm |
| 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) inglobals.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 |
✅ 2019–21 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— createslad_dbuser fromMONGO_USER/MONGO_PASSWORDenv varsdocker-compose.yml— fully rebranded (lad_db, lad-mongo-data, lad-redis-data)backend/.env.example— template for all production env varsbackend/.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.pyREPO_CONFIGon 10.4.0.205 - Create
backend/.envfrom.env.examplewith real credentials - Add Caddy entry on 10.4.0.205 for the real domain
docker compose up -ddocker 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
Documentmodel (documentTypeandisPublicdefined both inline and inschema.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 buildbefore making changes - Gitea token: embedded in remote URL
How to Resume
cd ~/websites/lad-websitegit log --oneline -3— confirm atc9e042for latercd frontend && npm run build— verify build passes- Start dev server:
npm run dev -- --hostname 0.0.0.0 - Next task: wire the 4 static pages to the backend API (see section above)