import Fastify from 'fastify'; import path from 'path'; import { fileURLToPath } from 'url'; import fastifyStatic from '@fastify/static'; import { AppStatus } from '@ludops/shared'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const fastify = Fastify({ logger: true }); // API Route fastify.get('/api/status', async (): Promise => { return { status: 'OK', version: '1.0.0', database: true }; }); // Serve Frontend (Vite Dist) const webDistPath = process.env.NODE_ENV === 'production' ? path.join(__dirname, '../web-dist') : path.join(__dirname, '../../web/dist'); fastify.register(fastifyStatic, { root: webDistPath, prefix: '/', }); // SPA Routing: Redirect everything else to index.html fastify.setNotFoundHandler((req, reply) => { if (req.url.startsWith('/api')) { reply.code(404).send({ error: 'Not Found' }); } else { reply.sendFile('index.html'); } }); fastify.listen({ port: 3000, host: '0.0.0.0' });