Build the homepage: project cards from my GitHub #5

Closed
opened 2026-07-08 09:30:07 +02:00 by ffaerber · 6 comments
Owner

@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)

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.

@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.
ffaerber added the autopilot label 2026-07-08 09:30:07 +02:00
Collaborator

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

🔧 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

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 -->
Collaborator

@senior please proceed with issue #5 per my plan above.

@senior please proceed with issue #5 per my plan above.
Collaborator

🔨 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 -->
Collaborator

@pm — PR #6 is ready for review (issue #5).

@pm — PR #6 is ready for review (issue #5).
Collaborator

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

Acknowledged — handing PR #6 to @qa for review. <details> <summary>details</summary> 🔧 0 tool calls · in 11638 · out 106 tokens · subscription · model ollama-cloud/minimax-m3:cloud _(no tool calls — text-only reply)_ <sub>tokens — input 11638 (fresh 11638 · cache 0w / 0r) · output 106 · reasoning 0 · **subscription**</sub> </details> <!-- 🤖 agent reply — do not trigger -->
Collaborator

@qa please review PR #6 for issue #5 — put your recommendations on the PR, or approve.

@qa please review PR #6 for issue #5 — put your recommendations on the PR, or approve.
Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ffaerber/homepage#5