chore: update project context
This commit is contained in:
+147
-2
@@ -64,7 +64,12 @@ knowledgebase/
|
||||
│ ├── disciples/ → 4,747 initiated disciples directory
|
||||
│ │ ├── page.tsx → Disciples browser (letter nav, suffix filter, search, sort, pagination)
|
||||
│ │ └── disciples-browser.tsx → Client component
|
||||
│ ├── transcriptions/page.tsx → Coming Soon page
|
||||
│ ├── transcriptions/ → 3,787 transcriptions (lectures, conversations, philosophy, dictations)
|
||||
│ │ ├── page.tsx → Browse by year / place / type (3 views)
|
||||
│ │ ├── year/[year]/page.tsx → Year listing, grouped by month
|
||||
│ │ ├── place/[place]/page.tsx → Place listing
|
||||
│ │ ├── type/[type]/page.tsx → Type listing (lecture/conversation), year sidebar
|
||||
│ │ └── [slug]/page.tsx → Individual transcription reading page
|
||||
│ └── api/
|
||||
│ ├── og/route.tsx → Dynamic OG image generator (Noto Sans, Prabhupāda image)
|
||||
│ ├── books/ → Book/verse API routes
|
||||
@@ -83,6 +88,11 @@ knowledgebase/
|
||||
│ ├── reading-settings.tsx → Theme/font/size/justify accessibility panel
|
||||
│ ├── mobile-nav.tsx → Left-slide drawer for mobile sidebar navigation
|
||||
│ ├── site-footer.tsx → Global footer (About + Home links)
|
||||
│ ├── audio-player/ → Site-wide floating audio player
|
||||
│ │ ├── audio-context.tsx → React context + provider, manages <audio> element
|
||||
│ │ ├── floating-player.tsx → Floating player UI (desktop bar / mobile pill)
|
||||
│ │ ├── audio-wave.tsx → Reusable animated audio wave bars
|
||||
│ │ └── index.ts → Barrel exports
|
||||
│ ├── logo.tsx → Theme-aware logo component
|
||||
│ └── theme-provider.tsx → next-themes wrapper
|
||||
├── lib/
|
||||
@@ -94,6 +104,7 @@ knowledgebase/
|
||||
│ ├── source-reference.ts → Source reference from URL (for copy attribution)
|
||||
│ ├── disciples.ts → Disciples data access (by letter, place, year, search)
|
||||
│ ├── letters.ts → Letters data access (by year, recipient, location)
|
||||
│ ├── transcriptions.ts → Transcriptions data access (reads from Prisma/MongoDB)
|
||||
│ ├── utils.ts → cn() helper
|
||||
│ ├── [book].ts → Per-book data access layers (nod, tlc, iso, noi, ej, ek, etc.)
|
||||
│ ├── other-documents.ts → Other Documents data access
|
||||
@@ -313,6 +324,39 @@ model Disciple {
|
||||
@@index([tags])
|
||||
@@map("disciples")
|
||||
}
|
||||
|
||||
type ContentBlock {
|
||||
text String
|
||||
format String @default("paragraph")
|
||||
alignment String @default("left")
|
||||
speaker String?
|
||||
}
|
||||
|
||||
model Transcription {
|
||||
id String @id @default(auto()) @map("_id") @db.ObjectId
|
||||
slug String @unique
|
||||
name String
|
||||
type String // "lecture" | "conversation"
|
||||
date String?
|
||||
year Int?
|
||||
month Int?
|
||||
day Int?
|
||||
place String?
|
||||
context String?
|
||||
reference String?
|
||||
summary String?
|
||||
content ContentBlock[]
|
||||
tags String[]
|
||||
participants String[]
|
||||
language String @default("en")
|
||||
source String?
|
||||
durationMinutes Int?
|
||||
audioUrl String?
|
||||
isPublished Boolean @default(false)
|
||||
notes String?
|
||||
|
||||
@@map("transcriptions")
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
@@ -463,11 +507,27 @@ Seed script: `npx tsx scripts/seed-disciples.ts`
|
||||
- Multi-recipient groups are split by `,`, `;`, ` and `, ` & `
|
||||
- Trailing punctuation (`:`, `,`, `.`) cleaned from names
|
||||
|
||||
### Transcriptions (stored in `transcriptions` collection)
|
||||
|
||||
3,787 transcriptions of Śrīla Prabhupāda's lectures and conversations (1966–1977), plus 59 philosophy discussions and 12 SB dictations.
|
||||
|
||||
- **Lectures** (2,179): Bhagavad-gītā, Śrīmad-Bhāgavatam, Caitanya-caritāmṛta, Nectar of Devotion, Īśopaniṣad, Brahma-saṁhitā, and general lectures
|
||||
- **Conversations** (1,537): Morning walks, room conversations, interviews, press conferences, initiations
|
||||
- **Philosophy Discussions** (59): Western philosophers discussed with Śyāmasundara and Hayagrīva
|
||||
- **SB Dictations** (12): Śrīmad-Bhāgavatam 3rd Canto translation/purport dictations
|
||||
- **Audio**: 99.1% have linked audio recordings from Cloudflare R2 (`audioUrl` field)
|
||||
- **Empty content**: 30 transcriptions (Hindi/Bengali lectures) have no English text but may have audio
|
||||
|
||||
Data layer: `lib/transcriptions.ts` (reads from Prisma/MongoDB, NOT local JSON files)
|
||||
|
||||
Seed script: `cd knowledgebase && npx tsx scripts/seed-transcriptions.ts`
|
||||
|
||||
### Other
|
||||
|
||||
| Content | Collection |
|
||||
|---------|-----------|
|
||||
| Glossary (2,749 entries) | `glossary` |
|
||||
| Transcriptions (3,787 entries) | `transcriptions` collection |
|
||||
|
||||
---
|
||||
|
||||
@@ -582,6 +642,27 @@ IAST transliteration → Devanagari via `indic-transliteration` library. Key fix
|
||||
| `/letters/location/Los%20Angeles` | All letters from a specific location |
|
||||
| `/letters/[slug]` | Individual letter reader with prev/next navigation |
|
||||
|
||||
### Transcriptions
|
||||
|
||||
```
|
||||
/transcriptions → Browse by year / place / type
|
||||
/transcriptions?view=year → Year grid view
|
||||
/transcriptions?view=place → Place grid view
|
||||
/transcriptions?view=type → Lecture vs Conversation cards
|
||||
/transcriptions/year/[year] → Year listing, grouped by month
|
||||
/transcriptions/place/[place] → Place listing
|
||||
/transcriptions/type/[type] → Type listing (lecture/conversation), year sidebar
|
||||
/transcriptions/[slug] → Individual transcription reading page
|
||||
```
|
||||
|
||||
Each transcription page shows:
|
||||
- Title, type badge (Lecture/Conversation), date, place, reference, duration
|
||||
- Participants list
|
||||
- Play Audio button (links to Cloudflare R2 mp3)
|
||||
- Content blocks: paragraphs with speaker labels, verses (centered italic), quotes (border-left), notes
|
||||
- Prev/next navigation within same year
|
||||
- `?hl=` text highlight sharing support with OG image
|
||||
|
||||
### Other routes
|
||||
|
||||
| Route | Content |
|
||||
@@ -685,6 +766,28 @@ SSR and DS have parent chapters with sub-chapters stored as individual `prose_ch
|
||||
- All 104 content pages have `generateMetadata` with contextual fallback descriptions
|
||||
- When `?hl=` is present, the actual selected text is extracted from DB content for the OG quote
|
||||
|
||||
### Audio Player
|
||||
|
||||
A site-wide floating audio player for transcription recordings (and future music library). Built with framer-motion for animations.
|
||||
|
||||
- **Desktop**: Centered floating bar (max-width 680px) with cover image, track info, transport controls (prev/play/next), volume slider, source link, close button
|
||||
- **Mobile**: Auto-minimizes to a floating pill (cover image with circular progress ring and audio wave animation) after 8 seconds of inactivity. Tap to expand. Full player shows two rows: track info row + centered transport controls
|
||||
- **Z-index**: `z-40` — below text selection toolbar (z-80), drawers (z-90), modals (z-100)
|
||||
- **Hidden when selection toolbar is active** on mobile to avoid overlap
|
||||
- **Forced dark surface** (`bg-[#1c1c1e]`) for accessibility contrast regardless of theme
|
||||
- **Keyboard shortcuts**: Space (play/pause), ←/→ (seek ±10s), ↑/↓ (volume), M (mute), Esc (close)
|
||||
- **Progress seeker**: 8px tall bar at top of player, click/drag to seek
|
||||
- **Volume**: Persisted to localStorage. Mobile relies on hardware volume buttons
|
||||
- **framer-motion**: Spring animations for enter/exit, AnimatePresence for minimize/expand transitions, motion.div for audio wave bars
|
||||
|
||||
Components:
|
||||
- `components/audio-player/audio-context.tsx` — React context + provider, manages `<audio>` element
|
||||
- `components/audio-player/floating-player.tsx` — Floating player UI
|
||||
- `components/audio-player/audio-wave.tsx` — Reusable animated audio wave bars
|
||||
- `components/audio-player/index.ts` — Barrel exports
|
||||
|
||||
The `AudioPlayerProvider` wraps the entire app in `layout.tsx`. The `FloatingPlayer` is rendered before `SiteFooter`.
|
||||
|
||||
### Site Footer
|
||||
- Global footer on every page with © year, About link, Home link
|
||||
|
||||
@@ -803,6 +906,42 @@ make run # Build + start Go API on :8080
|
||||
|
||||
Glossary is browsed via `/glossary/{letter}` routes (A-Z). Each letter page shows terms grouped by base letter (diacritical variants mapped: Ā→A, Ś→S, Ṛ→R, etc.). Single entry view with prev/next navigation.
|
||||
|
||||
## Transcription JSON Schema
|
||||
|
||||
```json
|
||||
{
|
||||
"slug": "720911sb-los-angeles",
|
||||
"name": "Śrīmad-Bhāgavatam 1.2.6",
|
||||
"type": "lecture",
|
||||
"date": "September 11, 1972",
|
||||
"year": 1972,
|
||||
"month": 9,
|
||||
"day": 11,
|
||||
"place": "Los Angeles",
|
||||
"context": null,
|
||||
"reference": "SB 1.2.6",
|
||||
"durationMinutes": 45,
|
||||
"participants": ["Prabhupāda", "Devotees"],
|
||||
"audioUrl": "https://s3.prabhupadasays.com/sp-audio/...",
|
||||
"content": [
|
||||
{
|
||||
"text": "So Kṛṣṇa consciousness movement...",
|
||||
"format": "paragraph",
|
||||
"alignment": "left",
|
||||
"speaker": "Prabhupāda"
|
||||
},
|
||||
{
|
||||
"text": "<i>oṁ namo bhagavate...</i>",
|
||||
"format": "verse",
|
||||
"alignment": "center",
|
||||
"speaker": null
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Content block formats: `"paragraph"` (body text), `"verse"` (centered italic), `"quote"` (translation/purport), `"heading"` (TEXT/TRANSLATION/PURPORT labels), `"note"` (editorial notes).
|
||||
|
||||
---
|
||||
|
||||
## Known Issues
|
||||
@@ -817,4 +956,10 @@ Glossary is browsed via `/glossary/{letter}` routes (A-Z). Each letter page show
|
||||
|
||||
5. **CSS zoom for font scaling**: `zoom` property works in Chrome/Safari/Edge but may not work in older Firefox (< 126). A `transform: scale()` fallback is provided via `@supports not (zoom: 1.1)`.
|
||||
|
||||
6. **Password protection requires ACCESS_KEY at runtime**: The `PasswordGate` component checks the server at runtime via `/api/verify-access`. The env var must be available when the server is running, not just at build time.
|
||||
6. **Password protection requires ACCESS_KEY at runtime**: The `PasswordGate` component checks the server at runtime via `/api/verify-access`. The env var must be available when the server is running, not just at build time.
|
||||
|
||||
7. **Transcription BSON fallback** — 1 document stores content as `contentJson` string due to BSON wire protocol limits; `getTranscription()` transparently parses it
|
||||
|
||||
8. **Empty transcriptions** — 30 entries have no English text content (Hindi/Bengali recordings); the UI shows "No transcription available" with the audio player still accessible
|
||||
|
||||
9. **Audio player z-index** — Player is hidden when text selection toolbar is active on mobile to avoid overlap
|
||||
Reference in New Issue
Block a user