Generated: 2026-01-20 Context: Terminal OS Portfolio (Jekyll + Vanilla JS)
A hacker-themed terminal operating system portfolio built with Jekyll (static site) and vanilla JavaScript (client-side OS). Simulates a full boot sequence, window management, and filesystem interaction without a backend.
.
├── _config.yml # Site configuration
├── _data/ # Content database (YAML/JSON)
├── _plugins/ # Ruby build extensions (Gems)
├── assets/
│ ├── js/
│ │ ├── terminal/ # Core OS Kernel (Boot, FS, WindowManager)
│ │ │ └── apps/ # Individual Command Applications (exe)
│ │ └── features/ # Standalone page interactions
│ └── css/ # CRT effects and theming
└── openspec/ # Specifications and Change Management
| Task | Location | Notes |
|---|---|---|
| Add Command | assets/js/terminal/apps/ |
Create Class, register in core.js |
| Modify Kernel | assets/js/terminal/ |
Core logic (filesystem.js, core.js) |
| Update Data | _data/ |
terminal.yml, projects.json |
| Build Logic | _plugins/ |
Ruby generators and filters |
| Content | _pages/, _posts/ |
Markdown with Front Matter |
| Component | Path | Role | Key Pattern |
|---|---|---|---|
| Kernel | assets/js/terminal/core.js |
Main Entry | window.TerminalOS |
| Filesystem | assets/js/terminal/filesystem.js |
Virtual FS | In-memory, mimics *nix |
| Apps | assets/js/terminal/apps/*.js |
Commands | class XApp { run(args) } |
| Loader | assets/js/terminal/filesystem-loader.js |
Bridge | Injects Jekyll data to JS |
<script> tags in _layouts/terminal.html.window (e.g., window.WhoAmIApp = WhoAmIApp).run() methods must be async.this.terminal provides xterm.js instance._data/._plugins/ handle complex data fetching/generation.--term-color, --term-bg) in terminal.css.import/require in terminal JS (no module system)._data/ and inject via window.JEKYLL_DATA.vendor/ files directly.# Development
bundle exec jekyll serve # Start local server (localhost:4000)
# Content
openspec list # Check active specs/changes