Custom app launcher, browser home page, and service monitor. cute.haus
homelab react typescript
0

Configure Feed

Select the types of activity you want to include in your feed.

bundle assets by default

Aly Raffauf (May 15, 2026, 6:18 AM EDT) 230bffab 18efa027

+2 -13
-1
Containerfile
··· 3 3 COPY package.json bun.lock ./ 4 4 RUN bun install --frozen-lockfile 5 5 COPY . . 6 - RUN bun run build 7 6 ENV NODE_ENV=production 8 7 EXPOSE 3000 9 8 CMD ["bun", "run", "src/index.ts"]
+2 -12
src/index.ts
··· 1 1 import { serve } from "bun"; 2 - import { join } from "path"; 2 + import index from "./index.html"; 3 3 import { privateApps } from "./data/privateApps"; 4 4 import { websites } from "./data/websites"; 5 - 6 - const distDir = join(import.meta.dir, "..", "dist"); 7 5 8 6 let hnCache: { stories: any[]; fetchedAt: number } | null = null; 9 7 let lobstersCache: { stories: any[]; fetchedAt: number } | null = null; ··· 116 114 hostname: "0.0.0.0", 117 115 port: 3000, 118 116 routes: { 119 - // Serve static assets from dist/, with index.html fallback for SPA routes. 120 - "/*": async (req) => { 121 - const url = new URL(req.url); 122 - const candidate = Bun.file( 123 - join(distDir, url.pathname === "/" ? "index.html" : url.pathname), 124 - ); 125 - if (await candidate.exists()) return new Response(candidate); 126 - return new Response(Bun.file(join(distDir, "index.html"))); 127 - }, 117 + "/": index, 128 118 129 119 "/api/check": { 130 120 async POST(req) {