@pm please build the actual homepage for this repo: a clean personal projects page for homepage.ffaerber.duckdns.org, listing my projects with the descriptions below.
Requirements
Static site (plain HTML/CSS or a minimal generator — no heavy framework needed), dark-mode friendly, mobile friendly.
One card per project: name, description, tech tags, GitHub link.
Group by the four sections below, in this order.
Dockerfile (nginx or similar serving the static files) — the repo's AGENTS.md describes the image → registry → homelab deploy flow; the deploy to the homelab stack itself is a later issue.
All content is provided here — do not invent projects or change the descriptions.
An AI companion platform spanning cloud, web, and physical IoT devices.
Project
Description
Tech
Link
core
Backend API for the CipherDolls platform: wallet-signature auth, AI chat completions, TTS/STT, embeddings (pgvector), USDC payments on Base, and IoT device management over MQTT.
ESP-IDF firmware for the SenseCAP Watcher companion device: BLE WiFi provisioning, MQTT events, MP3 playback through the onboard codec, LVGL UI on a 412×412 display, deep sleep.
dApps with on-chain logic and censorship-resistant Swarm storage/hosting.
Project
Description
Tech
Link
SwarmChat
Decentralized 1:1 messenger and WebRTC video calling: wallet identity, on-chain contact registry, encrypted messages over Swarm PSS with feeds as offline outbox. Live at swarmchat.eth.
Decentralized imageboard: post images, comment, and vote with xBZZ; fees auto-top-up the poster's Swarm postage stamp so good content stays alive. A social-score system prices posting by reputation.
Pivot-table view of a crypto wallet across every EVM chain — tokens as rows, chains as columns; drag one cell onto another to bridge or cross-chain swap. Static SPA deployable to Swarm.
React connect-button + wizard for Swarm on Gnosis: wallet → network → balances → Bee node → postage stamp, in one modal. Published on npm; demo hosted on Swarm itself.
Self-hosted ETH staking rewards tracker and tax-report generator — reads from your own beacon node, persists daily history to SQLite, no external APIs or keys.
@pm please build the actual homepage for this repo: a clean personal projects page for **homepage.ffaerber.duckdns.org**, listing my projects with the descriptions below.
## Requirements
- Static site (plain HTML/CSS or a minimal generator — no heavy framework needed), dark-mode friendly, mobile friendly.
- One card per project: name, description, tech tags, GitHub link.
- Group by the four sections below, in this order.
- `Dockerfile` (nginx or similar serving the static files) — the repo's AGENTS.md describes the image → registry → homelab deploy flow; the deploy to the homelab stack itself is a later issue.
- All content is provided here — do not invent projects or change the descriptions.
## Content
### Section: CipherDolls — AI companion platform ([github.com/cipherdolls](https://github.com/cipherdolls))
An AI companion platform spanning cloud, web, and physical IoT devices.
| Project | Description | Tech | Link |
|---|---|---|---|
| core | Backend API for the CipherDolls platform: wallet-signature auth, AI chat completions, TTS/STT, embeddings (pgvector), USDC payments on Base, and IoT device management over MQTT. | Bun, Elysia, Prisma, PostgreSQL, Redis, MQTT | https://github.com/cipherdolls/core |
| server | Minimal chat backend derived from core, stripped to the essentials: chat with a Character, optional TTS/STT — same architecture, no payments or IoT. | Bun, Elysia, Prisma, PostgreSQL | https://github.com/cipherdolls/server |
| webapp | Web frontend for the platform. | React Router, TypeScript, Tailwind | https://github.com/cipherdolls/webapp |
| stream-player | TTS audio streaming proxy — subscribes to Redis Pub/Sub and forwards audio chunks to WebSocket clients with a compact binary protocol. | TypeScript, Redis, WebSocket | https://github.com/cipherdolls/stream-player |
| stream-recorder | WebSocket audio ingestion microservice — accepts raw WAV streams, converts to MP3 in-memory via ffmpeg, forwards to the backend. | TypeScript, WebSocket, ffmpeg | https://github.com/cipherdolls/stream-recorder |
| firmware-watcher | ESP-IDF firmware for the SenseCAP Watcher companion device: BLE WiFi provisioning, MQTT events, MP3 playback through the onboard codec, LVGL UI on a 412×412 display, deep sleep. | C, ESP-IDF, ESP32-S3, LVGL | https://github.com/cipherdolls/firmware-watcher |
| firmware-m5sticks3 | ESP-IDF firmware for the M5StickS3 (ESP32-S3) pocket companion device with display, audio codec, and IMU. | C, ESP-IDF, ESP32-S3 | https://github.com/cipherdolls/firmware-m5sticks3 |
### Section: Decentralized apps — Gnosis Chain + Ethereum Swarm
dApps with on-chain logic and censorship-resistant Swarm storage/hosting.
| Project | Description | Tech | Link |
|---|---|---|---|
| SwarmChat | Decentralized 1:1 messenger and WebRTC video calling: wallet identity, on-chain contact registry, encrypted messages over Swarm PSS with feeds as offline outbox. Live at swarmchat.eth. | Solidity, React, Swarm PSS, WebRTC | https://github.com/ffaerber/SwarmChat |
| Pink Chainsaw | Decentralized imageboard: post images, comment, and vote with xBZZ; fees auto-top-up the poster's Swarm postage stamp so good content stays alive. A social-score system prices posting by reputation. | Solidity, Foundry, React, Swarm | https://github.com/ffaerber/pinkchainsaw |
| FreeeMarket | Multi-vendor marketplace where anyone runs their own shop and gets paid in stablecoins through on-chain escrow — deliberately fee-free and VAT-free. | Solidity, Gnosis Chain, Swarm | https://github.com/ffaerber/freeemarket |
| WalletMatrix | Pivot-table view of a crypto wallet across every EVM chain — tokens as rows, chains as columns; drag one cell onto another to bridge or cross-chain swap. Static SPA deployable to Swarm. | React, TypeScript, Vite | https://github.com/ffaerber/walletmatrix |
| swarm-connect | React connect-button + wizard for Swarm on Gnosis: wallet → network → balances → Bee node → postage stamp, in one modal. Published on npm; demo hosted on Swarm itself. | React, wagmi, npm package | https://github.com/ffaerber/swarm-connect |
| opentab | Onchain app bootstrapped with create-onchain (Base). | Next.js, TypeScript | https://github.com/ffaerber/opentab |
### Section: AI on GPU — self-hosted speech services
Dockerized speech AI for NVIDIA GPUs, tuned for the RTX 5090 / Blackwell generation.
| Project | Description | Tech | Link |
|---|---|---|---|
| whisper-cuda | OpenAI-Whisper-compatible ASR web service built for RTX 5090 (sm_120) — faster-whisper on CTranslate2/CUDA 12.8, no PyTorch. | Python, FastAPI, CUDA | https://github.com/ffaerber/whisper-cuda |
| kokoro-cuda | Minimal Kokoro TTS API with CUDA: 49 voices in 9 languages, streaming WAV/PCM plus MP3/Opus/FLAC, web UI included. | Python, FastAPI, CUDA | https://github.com/ffaerber/kokoro-cuda |
| voxtral-cuda | Text-to-speech service running Mistral's Voxtral-4B-TTS with CUDA acceleration via vLLM-Omni. | Python, vLLM, CUDA | https://github.com/ffaerber/voxtral-cuda |
### Section: Ethereum infrastructure
| Project | Description | Tech | Link |
|---|---|---|---|
| stakingtracker | Self-hosted ETH staking rewards tracker and tax-report generator — reads from your own beacon node, persists daily history to SQLite, no external APIs or keys. | TypeScript, Fastify, SQLite | https://github.com/ffaerber/stakingtracker |
## Footer
Link to https://github.com/ffaerber and https://github.com/cipherdolls.
Plain static site (no framework, no generator) — single index.html + styles.css. Smallest build, fastest load, matches the "no heavy framework needed" requirement and the existing repo's image-served-by-nginx flow.
Content is rendered as four ordered <section> blocks exactly as listed in the issue (CipherDolls → Decentralized apps → AI on GPU → Ethereum infra), each with a grid of cards (name, description, tech tags, GitHub link). Footer links to github.com/ffaerber and github.com/cipherdolls.
Styling: dark-first palette with a prefers-color-scheme: light override, mobile-first responsive grid (CSS grid + auto-fit/minmax), accessible (semantic HTML, focus styles, external links with rel="noopener").
Dockerfile: multi-stage not needed — nginx:alpine base, copy the static files to /usr/share/nginx/html, drop in a tiny nginx.conf if we want a SPA-fallback (probably not needed; this is a single page). Keep the image small and reproducible.
.dockerignore to keep the build context clean.
All copy is taken verbatim from the issue — no invented projects, no rewritten descriptions, no extra links.
Branch: ai/issue-5-homepage (per AGENTS.md). One PR.
I will not touch the existing .gitea/ CI workflow or the homelab deploy — the issue is explicit that the deploy to the homelab stack is a later issue.
details
🔧 0 tool calls · in 11096 · out 1470 tokens · subscription · model ollama-cloud/minimax-m3:cloud
Here's my plan for the homepage:
**Approach**
- Plain static site (no framework, no generator) — single `index.html` + `styles.css`. Smallest build, fastest load, matches the "no heavy framework needed" requirement and the existing repo's image-served-by-nginx flow.
- Content is rendered as four ordered `<section>` blocks exactly as listed in the issue (CipherDolls → Decentralized apps → AI on GPU → Ethereum infra), each with a grid of cards (name, description, tech tags, GitHub link). Footer links to `github.com/ffaerber` and `github.com/cipherdolls`.
- **Styling**: dark-first palette with a `prefers-color-scheme: light` override, mobile-first responsive grid (CSS grid + `auto-fit/minmax`), accessible (semantic HTML, focus styles, external links with `rel="noopener"`).
- **`Dockerfile`**: multi-stage not needed — `nginx:alpine` base, copy the static files to `/usr/share/nginx/html`, drop in a tiny `nginx.conf` if we want a SPA-fallback (probably not needed; this is a single page). Keep the image small and reproducible.
- **`.dockerignore`** to keep the build context clean.
- All copy is taken **verbatim** from the issue — no invented projects, no rewritten descriptions, no extra links.
- Branch: `ai/issue-5-homepage` (per AGENTS.md). One PR.
I will not touch the existing `.gitea/` CI workflow or the homelab deploy — the issue is explicit that the deploy to the homelab stack is a later issue.
<details>
<summary>details</summary>
🔧 0 tool calls · in 11096 · out 1470 tokens · subscription · model ollama-cloud/minimax-m3:cloud
_(no tool calls — text-only reply)_
<sub>tokens — input 11096 (fresh 11096 · cache 0w / 0r) · output 1470 · reasoning 0 · **subscription**</sub>
</details>
<!-- 🤖 agent reply — do not trigger -->
🔨 Building on branch ai/issue-5 — I'll open a PR when it's ready.
🔨 Building on branch [`ai/issue-5`](https://git.ffaerber.duckdns.org/ffaerber/homepage/src/branch/ai/issue-5) — I'll open a PR when it's ready.
<!-- 🤖 agent reply — do not trigger -->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
@pm please build the actual homepage for this repo: a clean personal projects page for homepage.ffaerber.duckdns.org, listing my projects with the descriptions below.
Requirements
Dockerfile(nginx or similar serving the static files) — the repo's AGENTS.md describes the image → registry → homelab deploy flow; the deploy to the homelab stack itself is a later issue.Content
Section: CipherDolls — AI companion platform (github.com/cipherdolls)
An AI companion platform spanning cloud, web, and physical IoT devices.
Section: Decentralized apps — Gnosis Chain + Ethereum Swarm
dApps with on-chain logic and censorship-resistant Swarm storage/hosting.
Section: AI on GPU — self-hosted speech services
Dockerized speech AI for NVIDIA GPUs, tuned for the RTX 5090 / Blackwell generation.
Section: Ethereum infrastructure
Footer
Link to https://github.com/ffaerber and https://github.com/cipherdolls.
Here's my plan for the homepage:
Approach
index.html+styles.css. Smallest build, fastest load, matches the "no heavy framework needed" requirement and the existing repo's image-served-by-nginx flow.<section>blocks exactly as listed in the issue (CipherDolls → Decentralized apps → AI on GPU → Ethereum infra), each with a grid of cards (name, description, tech tags, GitHub link). Footer links togithub.com/ffaerberandgithub.com/cipherdolls.prefers-color-scheme: lightoverride, mobile-first responsive grid (CSS grid +auto-fit/minmax), accessible (semantic HTML, focus styles, external links withrel="noopener").Dockerfile: multi-stage not needed —nginx:alpinebase, copy the static files to/usr/share/nginx/html, drop in a tinynginx.confif we want a SPA-fallback (probably not needed; this is a single page). Keep the image small and reproducible..dockerignoreto keep the build context clean.ai/issue-5-homepage(per AGENTS.md). One PR.I will not touch the existing
.gitea/CI workflow or the homelab deploy — the issue is explicit that the deploy to the homelab stack is a later issue.details
🔧 0 tool calls · in 11096 · out 1470 tokens · subscription · model ollama-cloud/minimax-m3:cloud
(no tool calls — text-only reply)
tokens — input 11096 (fresh 11096 · cache 0w / 0r) · output 1470 · reasoning 0 · subscription
@senior please proceed with issue #5 per my plan above.
🔨 Building on branch
ai/issue-5— I'll open a PR when it's ready.@pm — PR #6 is ready for review (issue #5).
Acknowledged — handing PR #6 to @qa for review.
details
🔧 0 tool calls · in 11638 · out 106 tokens · subscription · model ollama-cloud/minimax-m3:cloud
(no tool calls — text-only reply)
tokens — input 11638 (fresh 11638 · cache 0w / 0r) · output 106 · reasoning 0 · subscription
@qa please review PR #6 for issue #5 — put your recommendations on the PR, or approve.