Homepage: tab layout, RSS proxy, and deploy docs

- Reorganize services into OPS/DATA/FEEDS/LINKS tabs with compact DB grid
- Add rss-proxy service (29 FDE feeds) and Intel feed groups
- Update Palantir theme CSS/JS; Dell wordmark SVG; Proxmox API token auth
- Add deploy/docker-compose.homepage.yml and config/homepage/README.md
- Stop tracking runtime logs; add .gitignore
This commit is contained in:
Lakehouse Admin
2026-05-19 22:14:32 +02:00
parent a896699c0c
commit c63181abac
16 changed files with 1430 additions and 405 deletions
+7
View File
@@ -0,0 +1,7 @@
# Runtime logs (not config)
config/homepage/logs/
*.log
# OS / editor
.DS_Store
*~
+38
View File
@@ -0,0 +1,38 @@
# ATC Lakehouse Homepage
Palantir-style ops dashboard for Forward Deployed Engineering (Dell ATC).
## Tabs
| Tab | Content |
|-----|---------|
| OPS | Data pipeline, analytics, infrastructure, Docker |
| DATA | Database connection tiles (db01 + db02) |
| FEEDS | Live RSS widgets via `rss-proxy` |
| LINKS | Static docs & bookmarks (no RSS) |
## Key files
- `settings.yaml` — layout, tabs, theme
- `services.yaml` — service tiles, widgets, DB URIs
- `widgets.yaml` — header logo, Proxmox widget
- `proxmox.yaml` — Proxmox API token (keep private)
- `docker.yaml` — Docker socket integration
- `custom.css` / `custom.js` — Palantir theme, scanlines
## RSS proxy
Feeds are defined in `../../rss-proxy/server.py`. Rebuild after changes:
```bash
cd /root/lakehouse/rss-proxy && docker build -t rss-proxy:latest .
docker restart rss-proxy
docker exec homepage wget -qO- http://127.0.0.1:3000/api/revalidate
```
## Deploy
```bash
cd /root/lakehouse
docker compose -f deploy/docker-compose.homepage.yml up -d --build
```
+788 -203
View File
File diff suppressed because it is too large Load Diff
+37
View File
@@ -0,0 +1,37 @@
/* ATC Lakehouse — scanlines + noise only (tabs via settings.yaml) */
(function () {
function injectOverlays() {
if (!document.querySelector('.palantir-scanline')) {
const scan = document.createElement('div');
scan.className = 'palantir-scanline';
document.body.appendChild(scan);
}
if (!document.querySelector('.palantir-noise')) {
const noise = document.createElement('div');
noise.className = 'palantir-noise';
document.body.appendChild(noise);
}
}
function applyServiceColors() {
document.querySelectorAll('li.service').forEach(function (card) {
const desc = card.querySelector('.service-description');
const text = desc ? desc.textContent : '';
const link = card.querySelector('a[href^="http"]');
if (text.indexOf('Host:') >= 0 || text.indexOf('Port:') >= 0 || !link) {
card.classList.add('atc-db-tile');
}
});
}
function init() {
injectOverlays();
applyServiceColors();
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();
-18
View File
@@ -1,18 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 56" role="img" aria-label="Dell Technologies">
<defs>
<linearGradient id="dellRing" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#007DB8"/>
<stop offset="100%" style="stop-color:#00a3e0"/>
</linearGradient>
<linearGradient id="dellText" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#ffffff"/>
<stop offset="70%" style="stop-color:#ffffff"/>
<stop offset="100%" style="stop-color:#E8752A"/>
</linearGradient>
</defs>
<circle cx="28" cy="28" r="24" fill="url(#dellRing)"/>
<circle cx="28" cy="28" r="20" fill="#0a0e14"/>
<text x="28" y="35" text-anchor="middle" fill="#ffffff" font-family="Arial,Helvetica,sans-serif" font-size="26" font-weight="700">D</text>
<text x="62" y="36" fill="url(#dellText)" font-family="Arial,Helvetica,sans-serif" font-size="24" font-weight="700" letter-spacing="1">DELL</text>
<text x="138" y="36" fill="#E8752A" font-family="Arial,Helvetica,sans-serif" font-size="20" font-weight="600">Technologies</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 0 B

+1 -2
View File
@@ -1,4 +1,3 @@
---
# Docker integration — socket on atc-docker01
local:
my-docker:
socket: /var/run/docker.sock
+1
View File
@@ -0,0 +1 @@
<svg fill="#E02014" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Apache Kafka</title><path d="M9.71 2.136a1.43 1.43 0 0 0-2.047 0h-.007a1.48 1.48 0 0 0-.421 1.042c0 .41.161.777.422 1.039l.007.007c.257.264.616.426 1.019.426.404 0 .766-.162 1.027-.426l.003-.007c.261-.262.421-.629.421-1.039 0-.408-.159-.777-.421-1.042H9.71zM8.683 22.295c.404 0 .766-.167 1.027-.429l.003-.008c.261-.261.421-.631.421-1.036 0-.41-.159-.778-.421-1.044H9.71a1.42 1.42 0 0 0-1.027-.432 1.4 1.4 0 0 0-1.02.432h-.007c-.26.266-.422.634-.422 1.044 0 .406.161.775.422 1.036l.007.008c.258.262.617.429 1.02.429zm7.89-4.462c.359-.096.683-.33.882-.684l.027-.052a1.47 1.47 0 0 0 .114-1.067 1.454 1.454 0 0 0-.675-.896l-.021-.014a1.425 1.425 0 0 0-1.078-.132c-.36.091-.684.335-.881.686-.2.349-.241.75-.146 1.119.099.363.33.691.675.896h.002c.346.203.737.239 1.101.144zm-6.405-7.342a2.083 2.083 0 0 0-1.485-.627c-.58 0-1.103.242-1.482.627-.378.385-.612.916-.612 1.507s.233 1.124.612 1.514a2.08 2.08 0 0 0 2.967 0c.379-.39.612-.923.612-1.514s-.233-1.122-.612-1.507zm-.835-2.51c.843.141 1.6.552 2.178 1.144h.004c.092.093.182.196.265.299l1.446-.851a3.176 3.176 0 0 1-.047-1.808 3.149 3.149 0 0 1 1.456-1.926l.025-.016a3.062 3.062 0 0 1 2.345-.306c.77.21 1.465.721 1.898 1.482v.002c.431.757.518 1.626.313 2.408a3.145 3.145 0 0 1-1.456 1.928l-.198.118h-.02a3.095 3.095 0 0 1-2.154.201 3.127 3.127 0 0 1-1.514-.944l-1.444.848a4.162 4.162 0 0 1 0 2.879l1.444.846c.413-.47.939-.789 1.514-.944a3.041 3.041 0 0 1 2.371.319l.048.023v.002a3.17 3.17 0 0 1 1.408 1.906 3.215 3.215 0 0 1-.313 2.405l-.026.053-.003-.005a3.147 3.147 0 0 1-1.867 1.436 3.096 3.096 0 0 1-2.371-.318v-.006a3.156 3.156 0 0 1-1.456-1.927 3.175 3.175 0 0 1 .047-1.805l-1.446-.848a3.905 3.905 0 0 1-.265.294l-.004.005a3.938 3.938 0 0 1-2.178 1.138v1.699a3.09 3.09 0 0 1 1.56.862l.002.004c.565.572.914 1.368.914 2.243 0 .873-.35 1.664-.914 2.239l-.002.009a3.1 3.1 0 0 1-2.21.931 3.1 3.1 0 0 1-2.206-.93h-.002v-.009a3.186 3.186 0 0 1-.916-2.239c0-.875.35-1.672.916-2.243v-.004h.002a3.1 3.1 0 0 1 1.558-.862v-1.699a3.926 3.926 0 0 1-2.176-1.138l-.006-.005a4.098 4.098 0 0 1-1.173-2.874c0-1.122.452-2.136 1.173-2.872h.006a3.947 3.947 0 0 1 2.176-1.144V6.289a3.137 3.137 0 0 1-1.558-.864h-.002v-.004a3.192 3.192 0 0 1-.916-2.243c0-.871.35-1.669.916-2.243l.002-.002A3.084 3.084 0 0 1 8.683 0c.861 0 1.641.355 2.21.932v.002h.002c.565.574.914 1.372.914 2.243 0 .876-.35 1.667-.914 2.243l-.002.005a3.142 3.142 0 0 1-1.56.864v1.692zm8.121-1.129l-.012-.019a1.452 1.452 0 0 0-.87-.668 1.43 1.43 0 0 0-1.103.146h.002c-.347.2-.58.529-.677.896-.095.365-.054.768.146 1.119l.007.009c.2.347.519.579.874.673.357.103.755.059 1.098-.144l.019-.009a1.47 1.47 0 0 0 .657-.885 1.493 1.493 0 0 0-.141-1.118"/></svg>

Before

Width:  |  Height:  |  Size: 0 B

After

Width:  |  Height:  |  Size: 2.7 KiB

+3 -17
View File
@@ -1,18 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 56" role="img" aria-label="Dell Technologies">
<defs>
<linearGradient id="dellRing" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#007DB8"/>
<stop offset="100%" style="stop-color:#00a3e0"/>
</linearGradient>
<linearGradient id="dellText" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#ffffff"/>
<stop offset="70%" style="stop-color:#ffffff"/>
<stop offset="100%" style="stop-color:#E8752A"/>
</linearGradient>
</defs>
<circle cx="28" cy="28" r="24" fill="url(#dellRing)"/>
<circle cx="28" cy="28" r="20" fill="#0a0e14"/>
<text x="28" y="35" text-anchor="middle" fill="#ffffff" font-family="Arial,Helvetica,sans-serif" font-size="26" font-weight="700">D</text>
<text x="62" y="36" fill="url(#dellText)" font-family="Arial,Helvetica,sans-serif" font-size="24" font-weight="700" letter-spacing="1">DELL</text>
<text x="138" y="36" fill="#E8752A" font-family="Arial,Helvetica,sans-serif" font-size="20" font-weight="600">Technologies</text>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 40" role="img" aria-label="Dell Technologies">
<text x="0" y="29" fill="#FFFFFF" font-family="Arial, Helvetica, sans-serif" font-size="24" font-weight="700" letter-spacing="0.5">DELL</text>
<text x="78" y="29" fill="#8FA3B8" font-family="Arial, Helvetica, sans-serif" font-size="20" font-weight="400">Technologies</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 389 B

-7
View File
@@ -1,7 +0,0 @@
[2026-05-19T15:50:52.333Z] info: kubernetes.yaml was copied to the config folder
[2026-05-19T15:51:22.251Z] error: Host validation failed for: atc-docker01.dell-atc.lan. Hint: Set the HOMEPAGE_ALLOWED_HOSTS environment variable to allow requests from this host / port.
[2026-05-19T15:52:02.580Z] info: docker.yaml was copied to the config folder
[2026-05-19T15:52:22.162Z] info: bookmarks.yaml was copied to the config folder
[2026-05-19T15:52:22.162Z] info: widgets.yaml was copied to the config folder
[2026-05-19T15:52:22.164Z] info: custom.js was copied to the config folder
[2026-05-19T16:55:57.843Z] error: <credentialedProxyHandler> HTTP Error 401 calling https://10.0.10.65:8006/api2/json/cluster/resources
+3 -3
View File
@@ -1,5 +1,5 @@
---
pve:
pve01:
url: https://10.0.10.65:8006
username: root@pam
password: Dell2026!
token: "root@pam!homepage"
secret: "8890185b-0850-42b7-bab2-a690ea4dc3f1"
+413 -141
View File
@@ -5,290 +5,562 @@
- Kafka UI:
icon: http://atc-docker01.dell-atc.lan:8080/apachekafka.svg
href: http://atc-kafka01.dell-atc.lan:9000/
description: Kafka cluster UI
description: atc-kafka01.dell-atc.lan:9000
siteMonitor: http://atc-kafka01.dell-atc.lan:9000/
color: "#E02014"
- Debezium:
icon: http://atc-docker01.dell-atc.lan:8080/debezium.png
href: http://atc-lake01.dell-atc.lan:8083/
description: CDC connectors
description: atc-lake01.dell-atc.lan:8083
siteMonitor: http://atc-lake01.dell-atc.lan:8083/
color: "#4ECDC4"
- Spark:
icon: http://atc-docker01.dell-atc.lan:8080/apachespark.svg
href: http://atc-lake01.dell-atc.lan:8080/
description: Spark master UI
description: atc-lake01.dell-atc.lan:8080
siteMonitor: http://atc-lake01.dell-atc.lan:8080/
color: "#E25A1C"
- Trino:
icon: http://atc-docker01.dell-atc.lan:8080/trino.svg
href: http://atc-lake01.dell-atc.lan:8089/
description: Distributed SQL
href: http://atc-lake01.dell-atc.lan:8089/ui/
description: atc-lake01.dell-atc.lan:8089/ui/
siteMonitor: http://atc-lake01.dell-atc.lan:8089/ui/
color: "#DD00A1"
- Airflow:
icon: http://atc-docker01.dell-atc.lan:8080/apacheairflow.svg
href: http://10.0.21.55:8080/
description: Workflow orchestration
siteMonitor: http://10.0.21.55:8080/
description: 10.0.21.55:8080
siteMonitor: http://10.0.21.55:8080/health
color: "#017CEE"
- Analytics:
- Superset:
icon: http://atc-docker01.dell-atc.lan:8080/apachesuperset.svg
href: http://atc-docker01.dell-atc.lan:8088/
description: BI dashboards
description: atc-docker01.dell-atc.lan:8088
siteMonitor: http://atc-docker01.dell-atc.lan:8088/health
color: "#6c5ce7"
- Kibana:
icon: http://atc-docker01.dell-atc.lan:8080/kibana.svg
href: http://atc-elastic01.dell-atc.lan:5601/
description: Elasticsearch UI
description: atc-elastic01.dell-atc.lan:5601
siteMonitor: http://atc-elastic01.dell-atc.lan:5601/
color: "#F04E98"
- Elasticsearch API:
- Elasticsearch:
icon: http://atc-docker01.dell-atc.lan:8080/elasticsearch.svg
ping: atc-elastic01.dell-atc.lan
description: |
Host: atc-elastic01.dell-atc.lan
Port: 9200 (internal/VLAN)
Port: 9200 (no public HTTP)
curl: curl http://atc-elastic01.dell-atc.lan:9200
Note: use Kibana for browser access
Use Kibana for browser UI
color: "#005571"
- Grafana:
icon: http://atc-docker01.dell-atc.lan:8080/grafana.svg
href: http://atc-grafana.dell-atc.lan:3000/
ping: atc-grafana.dell-atc.lan
description: |
Host: atc-grafana.dell-atc.lan (10.0.20.103)
Host: atc-grafana.dell-atc.lan
IP: 10.0.20.103
Port: 3000
Status: service stopped
Start: systemctl start grafana-server
Note: start with systemctl start grafana-server
siteMonitor: http://atc-grafana.dell-atc.lan:3000/
color: "#F46800"
- Infrastructure:
- ObjectScale:
icon: http://atc-docker01.dell-atc.lan:8080/dell.svg
href: https://10.0.20.111/
description: Dell ObjectScale S3
description: 10.0.20.111
siteMonitor: https://10.0.20.111/
color: "#007DB8"
- iDRAC:
icon: http://atc-docker01.dell-atc.lan:8080/dell.svg
href: https://10.0.41.102/
description: Dell iDRAC · 10.0.41.102
siteMonitor: https://10.0.41.102/
color: "#007DB8"
- Proxmox:
icon: http://atc-docker01.dell-atc.lan:8080/proxmox.svg
href: https://10.0.10.65:8006/
description: pve01 virtualization
description: 10.0.10.65:8006
siteMonitor: https://10.0.10.65:8006/
color: "#E57000"
widget:
type: proxmox
url: https://10.0.10.65:8006
username: "root@pam!homepage"
password: "8890185b-0850-42b7-bab2-a690ea4dc3f1"
node: pve01
fields: ["vms", "lxc", "resources.cpu", "resources.mem"]
- Forgejo:
icon: http://atc-docker01.dell-atc.lan:8080/git.svg
href: http://atc-mgt01.dell-atc.lan:3001/
description: Git — Lakehouse repo
description: atc-mgt01.dell-atc.lan:3001
siteMonitor: http://atc-mgt01.dell-atc.lan:3001/
color: "#F05032"
- LDAP Admin:
icon: http://atc-docker01.dell-atc.lan:8080/ldap.png
href: http://atc-mgt01.dell-atc.lan/lam/
description: LDAP Account Manager
description: atc-mgt01.dell-atc.lan/lam/
siteMonitor: http://atc-mgt01.dell-atc.lan/lam/
color: "#0984e3"
- Databases (atc-db01 — 10.0.20.112):
- PostgreSQL:
- Databases:
- PostgreSQL · db01:
icon: http://atc-docker01.dell-atc.lan:8080/postgresql.svg
ping: atc-db01.dell-atc.lan
description: |
Host: atc-db01.dell-atc.lan
Port: 5432
URI: postgresql://USER:PASS@atc-db01.dell-atc.lan:5432/DBNAME
psql: psql -h atc-db01.dell-atc.lan -U USER -d DBNAME
description: atc-db01:5432 · postgresql://USER@atc-db01.dell-atc.lan:5432/DB · psql -h atc-db01
color: "#4169E1"
- MySQL:
- MySQL · db01:
icon: http://atc-docker01.dell-atc.lan:8080/mysql.svg
ping: atc-db01.dell-atc.lan
description: |
Host: atc-db01.dell-atc.lan
Port: 3306
URI: mysql://USER:PASS@atc-db01.dell-atc.lan:3306/DBNAME
CLI: mysql -h atc-db01.dell-atc.lan -u USER -p
description: atc-db01:3306 · mysql://USER@atc-db01.dell-atc.lan:3306/DB · mysql -h atc-db01
color: "#4479A1"
- Databases (atc-db02 — 10.0.21.51):
- MongoDB:
- MongoDB · db02:
icon: http://atc-docker01.dell-atc.lan:8080/mongodb.svg
ping: atc-db02.dell-atc.lan
description: |
Host: atc-db02.dell-atc.lan
Port: 27017
URI: mongodb://USER:PASS@atc-db02.dell-atc.lan:27017/DBNAME
CLI: mongosh "mongodb://atc-db02.dell-atc.lan:27017"
description: atc-db02:27017 · mongodb://USER@atc-db02.dell-atc.lan:27017/DB · mongosh
color: "#47A248"
- PostgreSQL:
- PostgreSQL · db02:
icon: http://atc-docker01.dell-atc.lan:8080/postgresql.svg
ping: atc-db02.dell-atc.lan
description: |
Host: atc-db02.dell-atc.lan
Port: 5432
URI: postgresql://USER:PASS@atc-db02.dell-atc.lan:5432/DBNAME
psql: psql -h atc-db02.dell-atc.lan -U USER -d DBNAME
description: atc-db02:5432 · postgresql://USER@atc-db02.dell-atc.lan:5432/DB · psql -h atc-db02
color: "#336791"
- MySQL:
- MySQL · db02:
icon: http://atc-docker01.dell-atc.lan:8080/mysql.svg
ping: atc-db02.dell-atc.lan
description: |
Host: atc-db02.dell-atc.lan
Port: 3306
URI: mysql://USER:PASS@atc-db02.dell-atc.lan:3306/DBNAME
CLI: mysql -h atc-db02.dell-atc.lan -u USER -p
description: atc-db02:3306 · mysql://USER@atc-db02.dell-atc.lan:3306/DB · mysql -h atc-db02
color: "#00758F"
- Cassandra:
- Cassandra · db02:
icon: http://atc-docker01.dell-atc.lan:8080/apachecassandra.svg
ping: atc-db02.dell-atc.lan
description: |
Host: atc-db02.dell-atc.lan
Port: 9042
cqlsh: cqlsh atc-db02.dell-atc.lan 9042
URI: cassandra://atc-db02.dell-atc.lan:9042
description: atc-db02:9042 · cqlsh atc-db02.dell-atc.lan 9042 · cassandra://atc-db02:9042
color: "#1287B1"
- Neo4j:
- Neo4j · db02:
icon: http://atc-docker01.dell-atc.lan:8080/neo4j.svg
href: http://atc-db02.dell-atc.lan:7474/
description: |
Browser: http://atc-db02.dell-atc.lan:7474
Bolt: bolt://atc-db02.dell-atc.lan:7687
URI: neo4j://atc-db02.dell-atc.lan:7687
ping: atc-db02.dell-atc.lan
description: HTTP :7474 · bolt://atc-db02:7687 · neo4j://atc-db02.dell-atc.lan:7687
siteMonitor: http://atc-db02.dell-atc.lan:7474/
color: "#008CC1"
- Live Feeds:
- Hacker News DE:
icon: mdi-newspaper-variant-outline
href: https://hn.algolia.com/?q=data%20engineering
description: Data engineering on HN
- Intel · Hacker News:
- HN Front Page:
icon: mdi-newspaper
href: https://news.ycombinator.com/
description: Hacker News — front page
color: "#E8752A"
widget:
type: customapi
url: https://hn.algolia.com/api/v1/search?query=data+engineering&tags=story&hitsPerPage=8
url: http://atc-docker01.dell-atc.lan:8090/feed/hn-front
refreshInterval: 300000
display: dynamic-list
mappings:
items: hits
items: items
name: title
label: points
href: url
target: url
- Hacker News Kafka:
icon: mdi-lightning-bolt
href: link
target: _blank
- HN Data Engineering:
icon: mdi-database-search
href: https://hn.algolia.com/?q=data%20engineering
description: Hacker News — data engineering
color: "#3b82f6"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/hn-de
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- HN Kafka:
icon: http://atc-docker01.dell-atc.lan:8080/apachekafka.svg
href: https://hn.algolia.com/?q=kafka
description: Kafka & streaming
description: Hacker News — Kafka & streaming
color: "#E02014"
widget:
type: customapi
url: https://hn.algolia.com/api/v1/search?query=apache+kafka&tags=story&hitsPerPage=8
url: http://atc-docker01.dell-atc.lan:8090/feed/hn-kafka
refreshInterval: 300000
display: dynamic-list
mappings:
items: hits
items: items
name: title
label: points
href: url
target: url
href: link
target: _blank
- HN Spark:
icon: http://atc-docker01.dell-atc.lan:8080/apachespark.svg
href: https://hn.algolia.com/?q=apache+spark
description: Hacker News — Apache Spark
color: "#E25A1C"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/hn-spark
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- Lobsters:
icon: mdi-lobster
href: https://lobste.rs/
description: Computing & infra — curated links
color: "#ef4444"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/lobsters
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- Intel · Data Architecture:
- Data Eng Weekly:
icon: mdi-calendar-week
href: https://www.dataengineeringweekly.com/
description: Weekly newsletter — pipelines & platforms
color: "#22d3ee"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/de-weekly
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- Pragmatic Engineer:
icon: mdi-account-tie
href: https://blog.pragmaticengineer.com/
description: Big tech engineering & architecture
color: "#a855f7"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/pragmatic
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- Martin Fowler:
icon: mdi-arch
href: https://martinfowler.com/
description: Software architecture & design
color: "#64748b"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/martinfowler
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- InfoQ:
icon: mdi-information-outline
href: https://www.infoq.com/
description: Architecture, data & dev practices
color: "#94a3b8"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/infoq
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- ByteByteGo:
icon: mdi-school
href: https://blog.bytebytego.com/
description: System design — scalable architectures
color: "#f59e0b"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/bytebytego
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- TLDR Data Eng:
icon: mdi-lightning-bolt
href: https://tldr.tech/dataengineering/
description: Daily data engineering digest
color: "#E8752A"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/tldr-de
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- Seattle Data Guy:
icon: mdi-chart-bar
href: https://www.seattledataguy.com/
description: Practical data engineering tutorials
color: "#0ea5e9"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/seattle-de
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- RedMonk:
icon: mdi-chart-line
href: https://redmonk.com/
description: Developer-focused industry analysis
color: "#dc2626"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/redmonk
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- Intel · Platforms & Blogs:
- Confluent Blog:
icon: http://atc-docker01.dell-atc.lan:8080/apachekafka.svg
href: https://www.confluent.io/blog/
description: Confluent RSS
color: "#E02014"
description: Kafka & event streaming
color: "#007DB8"
widget:
type: rss
url: https://www.confluent.io/blog/rss.xml
limit: 8
format: rss
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/confluent
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- Databricks Blog:
icon: mdi-layers-triple
href: https://www.databricks.com/blog
description: Lakehouse & Spark platform
color: "#fb923c"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/databricks
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- Debezium CDC:
icon: http://atc-docker01.dell-atc.lan:8080/debezium.png
href: https://debezium.io/blog/
description: Change data capture patterns
color: "#4ECDC4"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/debezium
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- AWS Big Data:
icon: mdi-aws
href: https://aws.amazon.com/blogs/big-data/
description: AWS analytics & data lakes
color: "#FF9900"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/aws-bigdata
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- Google Cloud Blog:
icon: mdi-google-cloud
href: https://cloud.google.com/blog
description: GCP data & analytics
color: "#4285F4"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/google-cloud
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- Cloudflare Eng:
icon: mdi-cloud
href: https://blog.cloudflare.com/
description: Edge, networking & scale
color: "#F38020"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/cloudflare
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- Meta Engineering:
icon: mdi-facebook
href: https://engineering.fb.com/
description: Large-scale infra & data
color: "#1877F2"
widget:
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/fb-engineering
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- Airflow Blog:
icon: http://atc-docker01.dell-atc.lan:8080/apacheairflow.svg
href: https://airflow.apache.org/blog/
description: Apache Airflow news
description: Workflow orchestration & DAGs
color: "#017CEE"
widget:
type: rss
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/airflow
limit: 8
format: rss
- KDnuggets:
icon: mdi-chart-timeline-variant
href: https://www.kdnuggets.com/
description: Data science news
color: "#f59e0b"
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- Elastic Blog:
icon: http://atc-docker01.dell-atc.lan:8080/elasticsearch.svg
href: https://www.elastic.co/blog/
description: Search, observability & security
color: "#005571"
widget:
type: rss
url: http://atc-docker01.dell-atc.lan:8090/feed/kdnuggets
limit: 8
format: rss
- Towards Data Science:
icon: mdi-brain
href: https://towardsdatascience.com/
description: ML & data articles
color: "#007DB8"
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/elastic
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- The New Stack:
icon: mdi-newspaper-variant-multiple
href: https://thenewstack.io/
description: Cloud native & platform engineering
color: "#22c55e"
widget:
type: rss
url: http://atc-docker01.dell-atc.lan:8090/feed/towardsds
limit: 8
format: rss
- Debezium Blog:
icon: http://atc-docker01.dell-atc.lan:8080/debezium.png
href: https://debezium.io/blog/
description: CDC & streaming blog
color: "#4ECDC4"
widget:
type: rss
url: https://debezium.io/blog.atom
limit: 8
format: atom
type: customapi
url: http://atc-docker01.dell-atc.lan:8090/feed/thenewstack
refreshInterval: 300000
display: dynamic-list
mappings:
items: items
name: title
href: link
target: _blank
- News & Resources:
- TLDR Data Eng:
icon: mdi-rss
href: https://tldr.tech/dataengineering/
description: Daily DE digest
color: "#E8752A"
- TLDR AI:
icon: mdi-robot
href: https://tldr.tech/ai/
description: Daily AI digest
color: "#ff8c2a"
- Dell Newsroom:
icon: http://atc-docker01.dell-atc.lan:8080/dell.svg
href: https://www.dell.com/en-us/dt/corporate/newsroom.htm
description: Dell Technologies news
- Dell Technologies:
icon: http://atc-docker01.dell-atc.lan:8080/dell-technologies.svg
href: https://www.delltechnologies.com/
description: Corporate site & solutions
color: "#007DB8"
- Dell Blog · Data:
icon: mdi-post-outline
href: https://www.dell.com/en-us/blog/categories/products-solutions-analytics
description: Analytics & data solutions
color: "#007DB8"
- Apache Spark:
icon: http://atc-docker01.dell-atc.lan:8080/apachespark.svg
href: https://spark.apache.org/docs/latest/
description: Spark documentation
color: "#E25A1C"
- Trino:
icon: http://atc-docker01.dell-atc.lan:8080/trino.svg
href: https://trino.io/docs/current/
description: Distributed SQL engine docs
color: "#DD00A1"
- Apache Iceberg:
icon: mdi-snowflake
href: https://iceberg.apache.org/docs/latest/
description: Open table format for lakes
color: "#38bdf8"
- Real Python:
icon: mdi-language-python
href: https://realpython.com/
description: Python tutorials
description: Python tutorials & patterns
color: "#3776AB"
- MinIO Docs:
icon: http://atc-docker01.dell-atc.lan:8080/minio.svg
href: https://min.io/docs/minio/linux/index.html
description: S3-compatible object storage
color: "#C72C48"
- TLDR Tech:
icon: mdi-lightning-bolt-outline
href: https://tldr.tech/
description: Daily tech newsletter (web)
color: "#E8752A"
- Docker (atc-docker01):
- Docker · atc-docker01:
- Homepage:
icon: mdi-view-dashboard
href: http://atc-docker01.dell-atc.lan/
description: This dashboard
server: local
description: atc-docker01.dell-atc.lan
server: my-docker
container: homepage
color: "#E8752A"
- Superset:
icon: http://atc-docker01.dell-atc.lan:8080/apachesuperset.svg
href: http://atc-docker01.dell-atc.lan:8088/
description: BI platform
server: local
description: atc-docker01.dell-atc.lan:8088
server: my-docker
container: superset
color: "#6c5ce7"
- Forgejo Local:
icon: http://atc-docker01.dell-atc.lan:8080/git.svg
href: http://atc-docker01.dell-atc.lan:4002/
description: Local Git :4002
description: atc-docker01.dell-atc.lan:4002
siteMonitor: http://atc-docker01.dell-atc.lan:4002/
server: local
server: my-docker
container: forgejo
color: "#F05032"
+29 -10
View File
@@ -2,33 +2,52 @@
title: ATC Lakehouse
description: Forward Deployed Engineering — Dell Technologies · Bart & Mo
theme: dark
color: slate
color: zinc
iconStyle: gradient
headerStyle: underlined
useEqualHeights: true
statusStyle: dot
fullWidth: true
target: _blank
showStats: true
background:
opacity: 0
brightness: 0
saturate: 0
layout:
Data Pipeline:
tab: OPS
style: row
columns: 5
Analytics:
tab: OPS
style: row
columns: 4
Infrastructure:
tab: OPS
style: row
columns: 4
Databases (atc-db01 — 10.0.20.112):
style: row
columns: 2
Databases (atc-db02 — 10.0.21.51):
columns: 5
Docker · atc-docker01:
tab: OPS
style: row
columns: 3
Live Feeds:
Databases:
tab: DATA
style: row
columns: 4
Intel · Hacker News:
tab: FEEDS
style: row
columns: 5
Intel · Data Architecture:
tab: FEEDS
style: row
columns: 7
Intel · Platforms & Blogs:
tab: FEEDS
style: row
columns: 6
News & Resources:
tab: LINKS
style: row
columns: 4
Docker (atc-docker01):
style: row
columns: 3
+4 -4
View File
@@ -4,11 +4,11 @@
href: https://www.delltechnologies.com
target: _blank
- greeting:
text_size: xl
text: "Forward Deployed Engineering"
subtext: "Bart & Mo · Dell Technologies · ATC Lakehouse"
- datetime:
text_size: lg
text: ATC Lakehouse
subtext: "Forward Deployed Engineering · Bart & Mo"
- datetime:
text_size: md
format:
timeStyle: short
dateStyle: medium
+32
View File
@@ -0,0 +1,32 @@
# ATC Lakehouse dashboard stack (atc-docker01)
# Usage: docker compose -f deploy/docker-compose.homepage.yml up -d --build
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
restart: unless-stopped
ports:
- "80:3000"
volumes:
- ../config/homepage:/app/config
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
HOMEPAGE_ALLOWED_HOSTS: "*"
rss-proxy:
build: ../rss-proxy
image: rss-proxy:latest
container_name: rss-proxy
restart: unless-stopped
ports:
- "8090:8090"
icons-server:
image: nginx:alpine
container_name: icons-server
restart: unless-stopped
ports:
- "8080:80"
volumes:
- ../config/homepage/icons:/usr/share/nginx/html:ro
+6
View File
@@ -0,0 +1,6 @@
FROM python:3.12-slim
WORKDIR /app
RUN pip install --no-cache-dir flask gunicorn feedparser
COPY server.py .
EXPOSE 8090
CMD ["gunicorn", "-b", "0.0.0.0:8090", "-w", "1", "server:app"]
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/env python3
"""RSS proxy for ATC Lakehouse — normalized JSON for homepage widgets."""
from flask import Flask, jsonify
import feedparser
app = Flask(__name__)
FEEDS = {
# Hacker News & community
"hn-front": "https://hnrss.org/frontpage",
"hn-de": "https://hnrss.org/newest?q=data+engineering",
"hn-kafka": "https://hnrss.org/newest?q=kafka",
"hn-spark": "https://hnrss.org/newest?q=apache+spark",
"hn-lakehouse": "https://hnrss.org/newest?q=lakehouse",
"lobsters": "https://lobste.rs/rss",
# Data architecture & FDE reading
"de-weekly": "https://www.dataengineeringweekly.com/feed",
"de-central": "https://dataengineeringcentral.substack.com/feed",
"pragmatic": "https://blog.pragmaticengineer.com/rss/",
"martinfowler": "https://martinfowler.com/feed.atom",
"infoq": "https://www.infoq.com/feed/",
"oreilly-radar": "https://feeds.feedburner.com/oreilly/radar/atom",
"bytebytego": "https://blog.bytebytego.com/feed",
"seattle-de": "https://www.seattledataguy.com/feed/",
# Platforms & lakehouse stack
"confluent": "https://www.confluent.io/rss.xml",
"databricks": "https://www.databricks.com/blog/feed.xml",
"airflow": "https://airflow.apache.org/blog/index.xml",
"debezium": "https://debezium.io/blog.atom",
"elastic": "https://www.elastic.co/blog/feed",
"minio": "https://blog.min.io/rss.xml",
"aws-bigdata": "https://aws.amazon.com/blogs/big-data/feed/",
"google-cloud": "https://cloudblog.withgoogle.com/rss/",
"cloudflare": "https://blog.cloudflare.com/rss/",
"fb-engineering": "https://engineering.fb.com/feed/",
# Newsletters
"tldr-de": "https://tldr.tech/rss/dataengineering",
"thenewstack": "https://thenewstack.io/feed/",
"kdnuggets": "https://www.kdnuggets.com/feed",
"towardsds": "https://medium.com/feed/towards-data-science",
"redmonk": "https://redmonk.com/feed/",
}
@app.get("/health")
def health():
return jsonify({"status": "ok", "count": len(FEEDS), "feeds": sorted(FEEDS.keys())})
@app.get("/feed/<name>")
def feed(name):
url = FEEDS.get(name)
if not url:
return jsonify({"error": f"unknown feed: {name}", "feeds": sorted(FEEDS.keys())}), 404
parsed = feedparser.parse(url)
items = [
{
"title": e.get("title", "Untitled"),
"link": e.get("link", ""),
"published": e.get("published", e.get("updated", "")),
}
for e in parsed.entries[:10]
]
return jsonify({"title": parsed.feed.get("title", name), "items": items})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8090)