Add RESUME.md with detailed session context for resuming work
This commit is contained in:
parent
523e812e9e
commit
c8a76c7763
1 changed files with 219 additions and 0 deletions
219
RESUME.md
Normal file
219
RESUME.md
Normal file
|
|
@ -0,0 +1,219 @@
|
||||||
|
# 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` | ✅ 2019–21 board, 10 affiliated orgs, history |
|
||||||
|
| Updates | `app/updates/page.tsx` | ✅ 13 real updates (2014–2022) |
|
||||||
|
| 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: M–F 9am–4pm
|
||||||
|
- 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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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
|
||||||
Loading…
Add table
Reference in a new issue