diff --git a/README.md b/README.md index 14f8066..3405c6a 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,17 @@ A self-hosted project tracking web app. Dark-themed, minimal, fast. -**Live:** https://projects.ledrew.me +Built with Node.js, Express, SQLite, and vanilla JS/CSS. No database server, no framework, no build step. --- -## Stack +## Tech Stack - **Backend:** Node.js + Express + better-sqlite3 - **Frontend:** Vanilla JS + CSS (no framework, no build step) - **Web Server:** nginx (reverse proxy + static files) - **Database:** SQLite (single file, no server process) +- **Deploy:** Docker Compose (2 containers: backend + nginx) --- @@ -30,7 +31,7 @@ A self-hosted project tracking web app. Dark-themed, minimal, fast. ## API | Method | Endpoint | Description | -|--------|----------|-------------| +|---|---|---| | GET | `/api/projects` | List all projects | | GET | `/api/projects/:id` | Get single project | | POST | `/api/projects` | Create project | @@ -46,7 +47,7 @@ A self-hosted project tracking web app. Dark-themed, minimal, fast. "url": "https://...", "notes": "Description...", "status": "Active|Backlog|On Hold|Completed", - "owner": "Ada", + "owner": "Admin", "tags": "tag1,tag2" } ``` @@ -55,32 +56,19 @@ A self-hosted project tracking web app. Dark-themed, minimal, fast. ## Deploy +See [deploy/README.md](deploy/README.md) for full deployment instructions. + +**Quick start (one command on fresh Debian/Ubuntu):** ```bash -# 1. Install Node.js 20 -wget -q https://nodejs.org/dist/v20.18.0/node-v20.18.0-linux-x64.tar.gz -tar -xzf node-v20.18.0-linux-x64.tar.gz -mv node-v20.18.0-linux-x64 /usr/local/node -ln -sf /usr/local/node/bin/{node,npm} /usr/bin/ - -# 2. Install nginx -apt-get update && apt-get install -y nginx - -# 3. Copy files -mkdir -p /opt/project-tracker/{backend,data,frontend} -cp backend/* /opt/project-tracker/backend/ -cp frontend/* /opt/project-tracker/frontend/ -cp nginx.conf /etc/nginx/sites-available/project-tracker - -# 4. Install deps -cd /opt/project-tracker/backend && npm install - -# 5. Start services -systemctl daemon-reload -systemctl enable project-tracker nginx -systemctl start project-tracker nginx +curl -sL https://gitea.ledrew.me/ledadmin/project-tracker/raw/branch/master/deploy/setup.sh -o setup.sh && bash setup.sh ``` -Or run `deploy.sh` on a fresh Debian system. +**Manual Docker install:** +```bash +git clone https://gitea.ledrew.me/ledadmin/project-tracker.git +cd project-tracker/deploy +docker compose up -d --build +``` --- @@ -88,21 +76,15 @@ Or run `deploy.sh` on a fresh Debian system. ``` project-tracker/ -├── backend/ -│ ├── server.js # Express API + SQLite -│ └── package.json -├── frontend/ -│ ├── index.html # SPA (dark theme) -│ └── favicon.png -├── nginx.conf # Reverse proxy -└── deploy.sh # One-shot deploy script +├── deploy/ +│ ├── docker-compose.yml # Services (backend + nginx) +│ ├── Dockerfile # Node.js backend image +│ ├── Dockerfile.nginx # nginx + frontend image +│ ├── nginx.conf # Reverse proxy config +│ ├── setup.sh # One-shot deploy script +│ ├── www/ # Frontend (baked into nginx image) +│ └── README.md # Full deployment guide +└── backend/ + ├── server.js # Express API + └── package.json ``` - ---- - -## Notes - -- API runs on port 3000, nginx proxies `/api/` and serves static files on port 80 -- Database file: `/opt/project-tracker/data/projects.db` -- No authentication on the API — intended for internal use behind a reverse proxy -- CORS is open for development; restrict in production if needed