# 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 - Embedded Spotify podcast player on the home section ## Run locally ```bash npm install npm run dev:full ``` `dev:full` starts both: - Vite frontend (`http://localhost:5173`) - Admin content API (`http://localhost:4173`) ## Build for production ```bash npm run build ``` ## Run in container Pull image directly: ```bash 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: ```bash 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: ```bash docker compose logs -f docker compose down ``` Update to latest image: ```bash 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.