Files
biblical-guide.com/payload/collections/BibleVerses.ts
Andrei 9b5c0ed8bb build: production build with Phase 1 2025 Bible Reader implementation complete
Includes all Phase 1 features:
- Search-first navigation with auto-complete
- Responsive reading interface (desktop/tablet/mobile)
- 4 customization presets + full fine-tuning controls
- Layered details panel with notes, bookmarks, highlights
- Smart offline caching with IndexedDB and auto-sync
- Full accessibility (WCAG 2.1 AA)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 20:38:01 +00:00

95 lines
2.1 KiB
TypeScript

import { CollectionConfig } from 'payload';
export const BibleVerses: CollectionConfig = {
slug: 'bible-verses',
admin: {
useAsTitle: 'reference',
defaultColumns: ['reference', 'version', 'book', 'chapter'],
group: 'Bible Content',
pagination: {
defaultLimit: 50,
},
},
fields: [
{
name: 'book',
type: 'relationship',
relationTo: 'bible-books',
required: true,
index: true,
},
{
name: 'chapter',
type: 'number',
required: true,
min: 1,
index: true,
},
{
name: 'verse',
type: 'number',
required: true,
min: 1,
index: true,
},
{
name: 'text',
type: 'textarea',
required: true,
localized: true,
},
{
name: 'version',
type: 'select',
options: [
{ label: 'Cornilescu (VDC)', value: 'VDC' },
{ label: 'NASB', value: 'NASB' },
{ label: 'RVR', value: 'RVR' },
{ label: 'NR', value: 'NR' },
],
required: true,
index: true,
},
{
name: 'reference',
type: 'text',
admin: {
readOnly: true,
},
hooks: {
beforeChange: [
async ({ data, siblingData, req }) => {
if (!data) return '';
if (siblingData?.book && data.chapter && data.verse) {
const book = await req.payload.findByID({
collection: 'bible-books',
id: siblingData.book,
});
if (book) {
return `${book.name} ${data.chapter}:${data.verse}`;
}
}
return data.reference || '';
},
],
},
},
{
name: 'embedding',
type: 'json',
admin: {
hidden: true,
description: 'Vector embedding for semantic search',
},
},
],
access: {
read: () => true,
create: ({ req }) => req.user?.role === 'admin' || req.user?.role === 'super-admin',
update: ({ req }) => req.user?.role === 'admin' || req.user?.role === 'super-admin',
delete: ({ req }) => req.user?.role === 'super-admin',
},
};