- React + TipTap editor with formatting toolbar (bold, italic, underline, strikethrough, alignment, highlight, scene breaks) - Custom image node view with resize and alignment controls; server-side WebP conversion via sharp - Express + SQLite backend with JWT auth and admin user management - Export to PDF, EPUB, and ODT - Five themes (Midnight, Gothic Night, Enchanted Forest, Aged Manuscript, Neon Noir); Lora body font for readability - Writing streak, daily word goal, milestones, and Ollama writing prompts - Docker Compose setup for self-hosted deployment behind NPMplus Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
23 lines
771 B
JavaScript
23 lines
771 B
JavaScript
import express from 'express'
|
|
import path from 'path'
|
|
import { fileURLToPath } from 'url'
|
|
import authRoutes from './routes/auth.js'
|
|
import storiesRoutes from './routes/stories.js'
|
|
import imagesRoutes from './routes/images.js'
|
|
import adminRoutes from './routes/admin.js'
|
|
import promptsRoutes from './routes/prompts.js'
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
|
const app = express()
|
|
|
|
app.use(express.json({ limit: '1mb' }))
|
|
app.use('/uploads', express.static(path.join(__dirname, 'uploads')))
|
|
|
|
app.use('/api/auth', authRoutes)
|
|
app.use('/api/stories', storiesRoutes)
|
|
app.use('/api/images', imagesRoutes)
|
|
app.use('/api/admin', adminRoutes)
|
|
app.use('/api/prompts', promptsRoutes)
|
|
|
|
app.listen(3000, () => console.log('Server ready on :3000'))
|