blog.laforceit.com 192.168.1.50 80, 443 42s"
]
}
];
// Predefined terminal content blocks
export const TERMINAL_CONTENT = {
fileExplorer: `${TERMINAL_DEFAULTS.promptPrefix}
$ ls -la
total 42
drwxr-xr-x 6 laforceit users 4096 Nov 7 22:15 .
drwxr-xr-x 12 laforceit users 4096 Nov 7 20:32 ..
-rw-r--r-- 1 laforceit users 182 Nov 7 22:15 .astro
drwxr-xr-x 2 laforceit users 4096 Nov 7 21:03 components
drwxr-xr-x 3 laforceit users 4096 Nov 7 21:14 content
drwxr-xr-x 4 laforceit users 4096 Nov 7 21:42 layouts
drwxr-xr-x 5 laforceit users 4096 Nov 7 22:10 pages
-rw-r--r-- 1 laforceit users 1325 Nov 7 22:12 package.json`,
tags: `${TERMINAL_DEFAULTS.promptPrefix}
$ cat ./content/tags.txt
cloudflare
coding
containers
devops
digital-garden
docker
file-management
filebrowser
flux
git
gitea
gitops
grafana
homelab
infrastructure
k3s
knowledge-management
kubernetes
learning-in-public
monitoring
networking
observability
obsidian
prometheus
proxmox
quartz
rancher
remote-development
security
self-hosted
terraform
test
tunnels
tutorial
virtualization
vscode`,
blogDeployment: `${TERMINAL_DEFAULTS.promptPrefix}
$ git add src/content/posts/kubernetes-monitoring.md
${TERMINAL_DEFAULTS.promptPrefix}
$ git commit -m "feat: add new article on Kubernetes monitoring"
[main 8fd43a9] feat: add new article on Kubernetes monitoring
1 file changed, 147 insertions(+)
create mode 100644 src/content/posts/kubernetes-monitoring.md
${TERMINAL_DEFAULTS.promptPrefix}
$ git push origin main
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 8 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 2.12 KiB | 2.12 MiB/s, done.
Total 5 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
✓ Deployed to https://laforceit.com
✓ Article published successfully`,
k8sInstall: `${TERMINAL_DEFAULTS.promptPrefix}
$ curl -sfL https://get.k3s.io | sh -
[INFO] Finding release for channel stable
[INFO] Using v1.27.4+k3s1 as release
[INFO] Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.27.4+k3s1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.27.4+k3s1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating /usr/local/bin/ctr symlink to k3s
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s.service
[INFO] systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3s
✓ K3s has been installed successfully
${TERMINAL_DEFAULTS.promptPrefix}
$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system helm-install-traefik-crd-k7gxl 0/1 Completed 0 2m43s
kube-system helm-install-traefik-pvvhg 0/1 Completed 1 2m43s
kube-system metrics-server-67c658dc48-mxnxp 1/1 Running 0 2m43s
kube-system local-path-provisioner-7b7dc8d6f5-q99nl 1/1 Running 0 2m43s
kube-system coredns-b96499967-nkvnz 1/1 Running 0 2m43s
kube-system svclb-traefik-bd0bfb17-ht8gq 2/2 Running 0 96s
kube-system traefik-7d586bdc47-d6lzr 1/1 Running 0 96s`,
dockerCompose: `${TERMINAL_DEFAULTS.promptPrefix}
$ cat docker-compose.yaml
version: '3.8'
services:
blog:
image: node:18-alpine
restart: unless-stopped
volumes:
- ./:/app
working_dir: /app
command: sh -c "npm install && npm run dev"
ports:
- "3000:3000"
environment:
- NODE_ENV=development
db:
image: postgres:14-alpine
restart: unless-stopped
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=secure_password
- POSTGRES_USER=bloguser
- POSTGRES_DB=blogdb
ports:
- "5432:5432"
volumes:
postgres_data:
${TERMINAL_DEFAULTS.promptPrefix}
$ docker-compose up -d
Creating network "laforceit-blog_default" with the default driver
Creating volume "laforceit-blog_postgres_data" with default driver
Pulling blog (node:18-alpine)...
Pulling db (postgres:14-alpine)...
Creating laforceit-blog_db_1 ... done
Creating laforceit-blog_blog_1 ... done`
};
// Helper function to create terminal presets
export function createTerminalPreset(type) {
switch (type) {
case 'blog-search':
return BLOG_SEARCH_SEQUENCE[Math.floor(Math.random() * BLOG_SEARCH_SEQUENCE.length)];
case 'system-monitor':
return SYSTEM_MONITOR_SEQUENCE[Math.floor(Math.random() * SYSTEM_MONITOR_SEQUENCE.length)];
case 'blog-deploy':
return BLOG_DEPLOYMENT_SEQUENCE[Math.floor(Math.random() * BLOG_DEPLOYMENT_SEQUENCE.length)];
case 'k8s-ops':
return K8S_OPERATION_SEQUENCE[Math.floor(Math.random() * K8S_OPERATION_SEQUENCE.length)];
case 'k8s':
return {
title: "argobox:~/kubernetes",
command: "kubectl get pods -A",
output: `NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-66bff467f8-8p7z2 1/1 Running 0 15d
kube-system coredns-66bff467f8-v68vr 1/1 Running 0 15d
kube-system etcd-control-plane 1/1 Running 0 15d
kube-system kube-apiserver-control-plane 1/1 Running 0 15d
kube-system kube-controller-manager-control-plane 1/1 Running 0 15d
kube-system kube-proxy-c84qf 1/1 Running 0 15d
kube-system kube-scheduler-control-plane 1/1 Running 0 15d`
};
case 'docker':
return {
title: "argobox:~/docker",
command: "docker ps",
output: `CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES
d834f0efcf2f nginx:latest "/docker-entrypoint.…" Up 2 days 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp web
0b292940b4c0 postgres:13 "docker-entrypoint.s…" Up 2 days 0.0.0.0:5432->5432/tcp db
a834fa3ede06 redis:6 "docker-entrypoint.s…" Up 2 days 0.0.0.0:6379->6379/tcp cache`
};
case 'search':
return {
title: "argobox:~/blog",
command: "grep -r \"kubernetes\" --include=\"*.md\" ./posts | wc -l",
output: "7 matches found"
};
case 'random-cool':
// Pick a random sequence for a cool effect
const sequences = [
TERMINAL_CONTENT.k8sInstall,
TERMINAL_CONTENT.blogDeployment,
TERMINAL_CONTENT.dockerCompose,
...BLOG_SEARCH_SEQUENCE.map(item => `${item.prompt}
$ ${item.command}\n${item.output.join('\n')}`),
...SYSTEM_MONITOR_SEQUENCE.map(item => `${item.prompt}
$ ${item.command}\n${item.output.join('\n')}`),
...BLOG_DEPLOYMENT_SEQUENCE.map(item => `${item.prompt}
$ ${item.command}\n${item.output.join('\n')}`),
...K8S_OPERATION_SEQUENCE.map(item => `${item.prompt}
$ ${item.command}\n${item.output.join('\n')}`)
];
return {
title: "argobox:~/cool-stuff",
content: sequences[Math.floor(Math.random() * sequences.length)]
};
default:
return {
title: TERMINAL_DEFAULTS.title,
command: "echo 'Hello from LaForceIT Terminal'",
output: "Hello from LaForceIT Terminal"
};
}
}