import { LabService } from "@/types/index"; export const LAB_SERVICES: LabService[] = [ { id: "observatory", name: "The Observatory", description: "Astronomical API orchestration and orbital visualization. Built to track ISS transits and lunar phases over Copenhagen.", stack: ["Next.js", "Node", "SQLite"], visibility: "public", url: "https://observatory.georgew.dev", gitUrl: "https://git.georgew.dev/georgew/mission-control", image: "/lab/observatory.jpg", uptimeId: 12, }, { id: "dino-tracker", name: "GW Paleo", description: "A digital field journal and taxonomic registry for Dinosauria. Designed with a 'Museum Archive' aesthetic, this specimen tracker syncs with the Paleobiology Database (PBDB) to catalog thousands of validated species and genera.", stack: ["Next.js", "Prisma", "SQLite", "Tailwind CSS"], visibility: "public", url: "https://dinos.georgew.dev", gitUrl: "https://git.georgew.dev/georgew/dino-tracker", image: "/lab/dino-tracker.jpg", uptimeId: 16, }, { id: "surf-hub", name: "Surf Sentinel", description: "Custom telemetry dashboard for Llangennith Bay, Wales. Pulling real-time buoy data and wave height predictions to find the perfect window for a session.", stack: ["Grafana", "Influx DB", "Node"], visibility: "public", url: "https://surf.georgew.dev/d/adrx6b4/llangennith-beach-surf-data?orgId=1&from=now-24h&to=now&timezone=browser&refresh=1h&theme=dark&kiosk=true", image: "/lab/surf-hub.jpg", gitUrl: "https://git.georgew.dev/georgew/surf-hub", uptimeId: 13, }, { id: "audiobookshelf", name: "The Archive", description: "Dedicated audiobook server for the household. Primarily used for our Brandon Sanderson, Patrick Rothfuss, and Dungeon Crawler Carl marathons.", stack: ["Docker", "Compose", "Tailscale", "rclone"], visibility: "tailscale", image: "/lab/audiobookshelf.jpg", gitUrl: "https://git.georgew.dev/georgew/audiobookshelf", uptimeId: 6, }, { id: "yamtrack", name: "Yamtrack", description: "A specialized tracker for our anime watch-lists! Features custom metadata hooks to keep our seasonal progress in sync.", stack: ["Docker", "Redis", "Tailscale"], visibility: "tailscale", image: "/lab/yamtrack.jpg", gitUrl: "https://git.georgew.dev/georgew/yamtrack", uptimeId: 11, }, { id: "paperless", name: "Paperless-ngx", description: "Personal document management system with OCR and automated tagging. Digitizing our physical mail and records into a searchable, versioned archive.", stack: ["Docker", "Redis", "PostgreSQL"], visibility: "tailscale", image: "/lab/paperless.jpg", gitUrl: "https://git.georgew.dev/georgew/paperless-ngx", uptimeId: 14, }, { id: "change-detection", name: "Signal Watcher", description: "Automated monitoring for the essentials: NASA news updates, hobby stock alerts, and Telegram pings the second a new episode of 'The Traitors' drops.", stack: ["Telegram API", "Webhooks"], visibility: "tailscale", image: "/lab/change-detection.jpg", gitUrl: "https://git.georgew.dev/georgew/change-detection", uptimeId: 15, }, { id: "ops-suite", name: "System Operations", description: "The 'Engine Room.' Utilizing Portainer for orchestration, Dozzle for log streaming, and Watchtower for automated container lifecycle management across the Hetzner node.", stack: ["Portainer", "Dozzle", "Watchtower"], visibility: "tailscale", image: "/lab/portainer.jpg", }, { id: "wikijs", name: "System Wiki", description: "The 'Source of Truth' for the home infrastructure. Contains deployment guides, network maps, and disaster recovery procedures for the entire node.", stack: ["Wiki.js", "Markdown"], visibility: "tailscale", image: "/lab/wikijs.jpg", uptimeId: 5, }, { id: "dashboard", name: "System Dashboard", description: "The central entry point for the GeorgeW ecosystem, used as my personal home page. A high-level overview providing unified access to all public and VPN-secured services.", stack: ["Homepage", "Docker", "Reverse Proxy"], visibility: "tailscale", image: "/lab/dashboard.jpg", }, ];