Initial commit: Maria Malejka memorial website

Next.js 14 + node:sqlite memorial site with:
- Hero section, photo slideshow & gallery
- Memory/thoughts editor (admin)
- Music player with upload
- Video gallery
- Docker Compose deployment
- Responsive warm earth tone design
This commit is contained in:
denshooter
2026-02-16 01:26:37 +01:00
commit bdcfa8f3c5
29 changed files with 3779 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
import { NextRequest, NextResponse } from 'next/server'
import { getDb } from '@/lib/db'
import { cookies } from 'next/headers'
import { createHash } from 'crypto'
function isAdmin() {
const token = cookies().get('admin_auth')?.value
const expected = createHash('sha256')
.update(process.env.ADMIN_PASSWORD || 'change-me')
.digest('hex')
return token === expected
}
export async function GET() {
const db = getDb()
const memories = db
.prepare('SELECT * FROM memories ORDER BY created_at DESC')
.all()
return NextResponse.json(memories)
}
export async function POST(req: NextRequest) {
if (!isAdmin()) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
const { title, content } = await req.json()
if (!title?.trim() || !content?.trim()) {
return NextResponse.json(
{ error: 'Titel und Inhalt sind erforderlich' },
{ status: 400 }
)
}
const db = getDb()
const result = db
.prepare('INSERT INTO memories (title, content) VALUES (?, ?)')
.run(title.trim(), content.trim())
const memory = db
.prepare('SELECT * FROM memories WHERE id = ?')
.get(result.lastInsertRowid)
return NextResponse.json(memory, { status: 201 })
}