SPEC_APPS.md

apps.siao.ai — nav homepage spec

What this covers: the apps.siao.ai navigation homepage — its scope, stack and testing. Lives in the apps-siao-ai repo, which also holds AnswerHub under /answerhub (a separate spec).

For what is built or deployed, see ClaudeDocs/HANDOFF.md — status deliberately does not live here. No issue tracker exists yet for this project — this file is the spec until one does; move it there once one exists. Full decision trail: NOTES_APPS.md ch.1.

This spec covers only the navigation homepage slice. Migrating the actual ~/Lwopan/learning-platform application logic into /lwopan is explicitly out of scope — see Out of Scope below.

Problem Statement

apps.siao.ai is already listed as a live exit on the siao.ai homepage, but the apps-siao-ai repo behind it has no code — visiting it today resolves to nothing. The owner is building a family of small web apps (starting with a Next.js learning platform currently living at ~/Lwopan/learning-platform, plus future ones) and needs a single place that lists what exists and links to it, rather than each app needing to explain itself or the owner needing to remember raw paths/ports.

Solution

Build a Next.js (TypeScript) site at apps-siao-ai whose homepage renders a list of app cards from a hardcoded, in-repo config array — no database, since this is single-user and not offered to the public for self-service. Each app is mounted as an internal route under the same Next.js app (e.g. apps.siao.ai/lwopan), not a separate subdomain or separate deployment — this keeps future migrated apps under one deploy and one auth/session boundary rather than fragmenting across subdomains. Deployed self-hosted on the same Ubuntu box already running git.siao.ai, reusing its existing Docker Compose + cloudflared + systemd path-watcher auto-deploy chain (see NOTES_GIT_SERVER.md §7–9) rather than Cloudflare Pages, because apps mounted here later (starting with the Lwopan migration) will need a real long-running Node process and a database, not an edge/static runtime.

User Stories

  1. As the owner, I want to visit apps.siao.ai and see a list of the apps that exist, so that I have one entry point instead of needing to remember individual URLs.
  2. As the owner, I want each app shown as a card with at least a name and short description, so that I can tell apps apart at a glance.
  3. As the owner, I want to click an app's card and be taken to that app's route (e.g. /lwopan), so that navigation is a single click.
  4. As the owner, I want the app list defined in one place in the codebase (a config array), so that adding or removing an app is a one-line code change with no database or admin UI involved.
  5. As the owner, I want the lwopan card to link to /lwopan even before that route has real content, so that the nav layer and the app-migration work can proceed independently — a 404 there today is acceptable and expected, not a bug to fix in this slice.
  6. As the owner, I want liquid-glass-toolkit permanently excluded from the list, so that a tool that was explicitly decided against (buggy, over-engineered, "not going to use it") doesn't linger as a visible option that looks live.
  7. As the owner, I want the homepage to have its own visual identity distinct from the siao.ai personal homepage (closer to, but simpler than, the planned SiaoHub direction), so that this reads as a functional tools index rather than an extension of the personal page.
  8. As the owner, I want the site deployed on the same self-hosted infrastructure as git.siao.ai, using the same push-to-deploy mechanism, so that I don't need to learn or maintain a second deploy pipeline for a second small project.
  9. As the owner, I want an automated (Playwright) test suite in place from the very first version of this site, so that regressions in the nav layer are caught even though this code is expected to be substantially rewritten later.
  10. As a future session picking up the Lwopan migration, I want the nav homepage and its route structure already in place, so that migrating learning-platform's logic is a matter of filling in /lwopan, not redesigning navigation at the same time.

Implementation Decisions

Testing Decisions

Out of Scope

Further Notes