Welcome to the Facilities Committee onboarding project.
This repo is a Nuxt 4 sandbox where each onboardee builds a display page under their own alias, so work can be reviewed and merged without collisions.
- Node.js 22 or newer
- npm 10 or newer
- Docker 24 or newer (for container testing)
You can install these with the install.bat (windows) or install.sh
(macOS/Linux) scripts in the docs folder. See the docs for more details:
- Windows Dependencies Installation Guide
- MacOS Dependencies Installation Guide
- Linux Dependencies Installation Guide
- Vue (Official) by Vue.js // gives syntax highlighting and intellisense for Vue files
- Copilot by GitHub // optional, but recommended for code suggestions and autocompletion
- Docker by Microsoft // optional, but recommended for building and running the container
- ESLint by Microsoft // integrates ESLint into VS Code for linting and formatting
git clone https://github.com/HKN-Beta/HKN-display.git
cd HKN-displaynpm installnpm run devDefault local URL: http://localhost:3000
Each onboardee must use their alias folder in all relevant locations:
app/pages/<alias>/index.vueapp/components/<alias>/...app/composables/<alias>/...server/api/<alias>/...
Example:
app/
pages/
jorgenel/
index.vue
components/
jorgenel/
TimeWidget.vue
WeatherWidget.vue
composables/
jorgenel/
useWeather.ts
server/
api/
jorgenel/
display/
weather.get.ts
- Routing is file-system based:
app/pages/<alias>/index.vuemaps to/<alias>. - Composables in nested alias folders are auto-imported via project config.
- Components in alias subfolders are auto-registered with directory prefix
naming.
- Example:
app/components/jorgenel/TimeWidget.vueis used as<JorgenelTimeWidget />.
- Example:
Each alias display should include at least:
- A reactive clock (updates every second).
- At least one required alias-scoped server API endpoint under
server/api/<alias>/..., consumed by your page. - Asynchronous data from at least one external/public API (directly or via your alias server API).
- At least two user-configurable settings.
- Modular component architecture (not a monolith).
- Lifecycle cleanup (
onUnmounted) for intervals/listeners.
For pull requests targeting main, CI runs:
format:checklinttypecheck
Before opening a PR, run the same checks locally:
npm run format
npm run lint
npm run typecheckOpen a PR with your changes. You should only be modifying/adding files under your alias folders and any shared components/composables if necessary. Any changes to shared code must be justified and reviewed carefully.
In the PR description, summarize:
- Which APIs you integrated.
- How you satisfy each requirement above.
- Confirmation that format/lint/typecheck passed.
- Any special run/test steps.
Use this before submitting your PR.
docker build -t hkn-display .docker run --rm -p 3000:3000 hkn-displayAs an onboardee, you must verify your display works in the container:
- Base app:
http://localhost:3000/ - Default page:
http://localhost:3000/default - Your display page:
http://localhost:3000/<your-alias>
Also verify your alias APIs respond:
http://localhost:3000/api/<your-alias>/...
Optional quick check with curl:
curl -I http://localhost:3000/<your-alias>If your display fails in container but works locally, check:
- Hardcoded
localhostAPI calls in client code. - Missing runtime env vars.
- External API/network restrictions from container environment.