lad-website/RESUME.md

10 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: 523e812 (TODO.md added)


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 Read-only reference
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
Primary contact request@deaffocus.org / (225) 319-5586
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 in:
    • frontend/src/app/layout.tsx — metadata, OpenGraph, Twitter card, metadataBase
    • frontend/src/components/organisms/Navigation.tsx — org name, logo, nav links
    • frontend/src/components/organisms/Footer.tsx — org name, tagline, copyright
    • frontend/src/app/about/page.tsx — full about page copy
  • frontend/src/app/globals.css — brand color switched from blue (#1a56db) to LAD green (#13AE3A) throughout: primary vars, gradients, CTA section, button shadows, dark theme, badge shadows

Package Upgrades (complete)

  • Frontend: Next.js 15→16, React 18→19.2.6, eslint-config-next updated, axios added
  • Backend: Express 4→5, Mongoose 8→9, bcrypt 5→6, helmet 7→8, Zod 3→4
  • Breaking change fixed: frontend/src/app/api/uploads/[...path]/route.ts — async params (Next.js 16 requirement)
  • Bug fixed: frontend/src/components/video/VideoPlayer.tsx — broken absolute import path
  • Config fixed: frontend/next.config.js — removed experimental.serverActions, added db.lad1908.org to remotePatterns, switched images.domains to images.remotePatterns

New Pages (complete)

These pages were added and did not exist in the OCD template:

  • frontend/src/app/updates/page.tsx
  • frontend/src/app/minutes/page.tsx
  • frontend/src/app/deaf-focus/page.tsx

Content (complete — static)

All pages below have real LAD content hardcoded as static data. Content source: LAD_CONTENT.md.

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 13 real updates (20142022)
Events app/events/page.tsx 12 real events, 2 featured
Minutes app/minutes/page.tsx Public/members-only split, type badges
Deaf Focus app/deaf-focus/page.tsx All 6 articles + logo
Contact app/contact/page.tsx ⚠️ Still says "Olathe" — needs LAD info
Membership app/membership/page.tsx ⚠️ Still says "Olathe" — needs LAD info
Donate app/donate/page.tsx ⚠️ Still says "Olathe" — needs LAD info

What Still Needs To Be Done

1. Fix Remaining OCD-branded Pages (quick — ~30 min)

Three pages still have "Olathe Club of the Deaf" content. Just rebrand and fill with LAD info:

app/contact/page.tsx

  • Replace metadata title/description
  • Add real contact info:
    • LAD general: info@lad1908.org (or use Deaf Focus contact below if LAD doesn't have a separate one)
    • Deaf Focus interpreting: request@deaffocus.org
    • Phone: (225) 319-5586
    • Fax: (225) 308-4025
    • Hours: MF 9am4pm
    • Mailing address (unknown — not in scraped content)
  • The ContactForm component already exists at components/molecules/ContactForm.tsx

app/membership/page.tsx

  • Replace "Olathe" with LAD throughout
  • LAD membership info (from scraped content): LAD is a nonprofit statewide org; membership gives voting rights, event access, advocacy support
  • Membership fees/tiers unknown — not in scraped content; may need to ask client

app/donate/page.tsx

  • Replace "Olathe" with LAD throughout
  • LAD is a 501(c) nonprofit — donations are tax-deductible
  • No specific donation platform/link found in scraped content; may need to ask client

2. Verify Build (critical — do this first in new session)

The build has never been run since the upgrades. Do this before anything else:

cd /home/chaulmark/websites/lad-website/frontend
npm run build

Known potential issues:

  • TypeScript errors in admin pages (they use useParams() hook which should be fine, but worth checking)
  • Any remaining OCD strings that TypeScript or ESLint might catch
  • The lint script was changed from next lint to eslint . — make sure ESLint config is correct

3. Wire Dynamic Content (medium effort — decision required)

Currently Updates, Events, Minutes, and Deaf Focus are static arrays in the page files. There are two options:

Option A: Pull from Directus API directly (simpler)

  • https://db.lad1908.org/items/updates — 69 items
  • https://db.lad1908.org/items/events — 78 items
  • https://db.lad1908.org/items/minutes — 101 items
  • https://db.lad1908.org/items/deaffocus — 6 items
  • Use fetch() in Next.js Server Components with revalidate for caching
  • Pro: No backend setup needed, always live data
  • Con: Dependent on client's Directus instance staying up

Option B: Import into local MongoDB backend (more control)

  • The backend already has models for Events, Documents (Minutes), Videos, Members
  • Would need a one-time import script to seed MongoDB from Directus
  • Admin panel can then manage content going forward
  • Pro: Self-contained, admin panel works
  • Con: More setup, data gets out of sync if client updates Directus

Recommendation: Option A for now (Directus is already live and maintained by client), Option B later once the admin panel is configured.

4. Admin Panel (medium effort)

The admin panel exists at /admin with full CRUD for:

  • Members (/admin/members)
  • Documents (/admin/documents) — this maps to Minutes
  • Videos (/admin/videos) — relevant for Deaf Focus
  • Events (/admin/events)

What needs doing:

  • Verify admin login works (backend auth middleware is in backend/src/middleware/auth.ts)
  • Set up initial admin credentials (JWT-based auth — check backend/src/middleware/auth.ts)
  • Test document/event upload flows with LAD content
  • The backend connects to MongoDB — needs a running MongoDB instance (handled by Docker Compose)

5. Deploy to Production

When ready, deploy to production server at 10.4.0.205:

  • The Gitea webhook + friday-bot pipeline is already wired for other sites
  • LAD website is not yet added to webhook-listener/server.py's REPO_CONFIG
  • Will need: domain name, Caddy reverse proxy entry on 10.4.0.205, Docker Compose up

File Structure Reference

lad-website/
├── frontend/
│   ├── src/
│   │   ├── app/
│   │   │   ├── layout.tsx          ✅ LAD metadata
│   │   │   ├── page.tsx            ✅ Homepage
│   │   │   ├── globals.css         ✅ Green theme
│   │   │   ├── about/page.tsx      ✅ Board + orgs
│   │   │   ├── updates/page.tsx    ✅ 13 updates
│   │   │   ├── events/page.tsx     ✅ 12 events
│   │   │   ├── minutes/page.tsx    ✅ Public/members split
│   │   │   ├── deaf-focus/page.tsx ✅ 6 articles
│   │   │   ├── contact/page.tsx    ⚠️ Needs LAD info
│   │   │   ├── membership/page.tsx ⚠️ Needs LAD info
│   │   │   ├── donate/page.tsx     ⚠️ Needs LAD info
│   │   │   └── admin/              (full CRUD panel)
│   │   └── components/
│   │       ├── organisms/Navigation.tsx  ✅ Logo + nav
│   │       ├── organisms/Footer.tsx      ✅ LAD footer
│   │       ├── molecules/Hero.tsx
│   │       ├── molecules/ContactForm.tsx
│   │       └── video/VideoPlayer.tsx     ✅ Fixed import
│   ├── next.config.js              ✅ remotePatterns updated
│   └── package.json                ✅ Next.js 16, React 19.2
├── backend/
│   ├── src/
│   │   ├── models/                 (Member, Event, Document, Video)
│   │   ├── controllers/            (full CRUD)
│   │   ├── routes/                 (REST API)
│   │   └── middleware/auth.ts      (JWT)
│   └── package.json                ✅ Express 5, Mongoose 9
├── LAD_CONTENT.md                  ✅ All scraped content
├── TODO.md                         ✅ Summary task list
└── RESUME.md                       ✅ This file

Environment / Shell Notes

  • EDQUOT issue: The shell has had recurring disk quota problems from Chrome cache in previous sessions. If bash commands fail silently (exit code 1 with no output), disk quota is likely the cause.
  • Workaround used: Route all command output to files (cmd > ~/output.txt 2>&1) then read the file. This bypasses the broken stdout pipe.
  • Root cause: ~/old-hermes.tar.bz2 was a 1.3GB archive that was truncated to free space. If quota hits again, check ~/.npm/_cacache, ~/.cache/tracker3, and ~/.config/chrome-cdp-profile for large files.
  • Gitea token: fe17b49600550ff548627e133155ed29b2dcec77 (embedded in remote URL)

How to Resume

  1. Open a fresh terminal (clears the EDQUOT shell state)
  2. cd ~/websites/lad-website
  3. git log --oneline -5 — confirm you're at 523e812 or later
  4. cd frontend && npm run build — verify build passes
  5. Fix contact/membership/donate pages (see section above)
  6. Decide on Directus vs MongoDB for dynamic content