2026-03-17 15:22:16 -04:00

Siteforge

This project is a React + TypeScript portfolio app built with Vite.

It is designed to showcase two categories of work:

  • Websites
  • Apps

The app now supports:

  • Dynamic cards generated from a project data source
  • Built vs Hosted filters
  • A dedicated About page route for each project
  • An admin editor route to update cards and About pages
  • A per-project README summary block on each project page

Run locally

npm install
npm run dev:full

dev:full starts both:

  • Vite frontend (http://localhost:5173)
  • Admin content API (http://localhost:4173)

Build for production

npm run build

Run in container

Pull image directly:

docker pull ghcr.io/nmemmert/siteforge:latest
docker run -d --name siteforge-app -p 4173:4173 -v ./data:/app/data ghcr.io/nmemmert/siteforge:latest

Run with Docker Compose:

docker compose pull
docker compose up -d

The app will be available at http://localhost:4173.

Persistent admin saves:

  • Admin updates are written to data/admin-content.json.
  • docker-compose.yml mounts ./data into the container at /app/data.
  • This keeps your edits after container restarts/rebuilds.

Where to edit content

  • Project domain data and ownership: src/data/projects.ts
  • Portfolio rendering logic: src/App.tsx
  • Portfolio UI styles: src/App.css
  • Global theme variables: src/index.css

Routes

  • Portfolio home: /
  • Project details: /projects/:slug
  • Admin editor: /admin

Admin editing

  • Open /admin to edit project card and featured-page content.
  • Use Global Settings to update theme, home headers, and quick tips.
  • Use Project Settings to update project-specific fields and README URL.
  • Use Create new entry to add a new project directly from Admin.
  • Enter a URL and click Scan URL metadata to auto-fill title, summary, domain, category, and icon when available.
  • Click Save project to apply updates instantly.
  • Saved edits are written to data/admin-content.json through the API server.
  • Use the Theme dropdown to switch between Sandstone, Ocean, Midnight, Forest, and Sunset.
  • Use Remove project to delete the selected project from your local Admin data.
  • Use Reset project or Reset all to restore defaults from src/data/projects.ts.

Scan notes:

  • URL scanning is best-effort and depends on site accessibility.
  • Some sites block direct scanning; Admin falls back to a proxy scan path when possible.
  • Always review scanned fields before saving.

Deployment note:

  • To keep Admin saves working on the internet, deploy with the Node API (server.js) and writable server storage for data/admin-content.json.

Useful container commands:

docker compose logs -f
docker compose down

Update to latest image:

docker compose pull
docker compose up -d

Notes

  • The current project cards are sample placeholders.
  • Most metadata was scanned from live pages.
  • Skywatch currently uses a manual fallback description due to a 401 response during automated scan.
S
Description
No description provided
Readme 31 MiB
Languages
TypeScript 47%
JavaScript 26.6%
CSS 15%
HTML 10.9%
Shell 0.4%