README: rewrite as clean overview — tech stack, features, API reference, link to deploy/README for install

This commit is contained in:
Ada
2026-04-06 10:50:38 -04:00
parent 0cd9e4ddf1
commit 8c2eb26d9d

View File

@@ -2,16 +2,17 @@
A self-hosted project tracking web app. Dark-themed, minimal, fast. 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 - **Backend:** Node.js + Express + better-sqlite3
- **Frontend:** Vanilla JS + CSS (no framework, no build step) - **Frontend:** Vanilla JS + CSS (no framework, no build step)
- **Web Server:** nginx (reverse proxy + static files) - **Web Server:** nginx (reverse proxy + static files)
- **Database:** SQLite (single file, no server process) - **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 ## API
| Method | Endpoint | Description | | Method | Endpoint | Description |
|--------|----------|-------------| |---|---|---|
| GET | `/api/projects` | List all projects | | GET | `/api/projects` | List all projects |
| GET | `/api/projects/:id` | Get single project | | GET | `/api/projects/:id` | Get single project |
| POST | `/api/projects` | Create project | | POST | `/api/projects` | Create project |
@@ -46,7 +47,7 @@ A self-hosted project tracking web app. Dark-themed, minimal, fast.
"url": "https://...", "url": "https://...",
"notes": "Description...", "notes": "Description...",
"status": "Active|Backlog|On Hold|Completed", "status": "Active|Backlog|On Hold|Completed",
"owner": "Ada", "owner": "Admin",
"tags": "tag1,tag2" "tags": "tag1,tag2"
} }
``` ```
@@ -55,32 +56,19 @@ A self-hosted project tracking web app. Dark-themed, minimal, fast.
## Deploy ## Deploy
See [deploy/README.md](deploy/README.md) for full deployment instructions.
**Quick start (one command on fresh Debian/Ubuntu):**
```bash ```bash
# 1. Install Node.js 20 curl -sL https://gitea.ledrew.me/ledadmin/project-tracker/raw/branch/master/deploy/setup.sh -o setup.sh && bash setup.sh
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
``` ```
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/ project-tracker/
├── backend/ ├── deploy/
│ ├── server.js # Express API + SQLite │ ├── docker-compose.yml # Services (backend + nginx)
── package.json ── Dockerfile # Node.js backend image
├── frontend/ │ ├── Dockerfile.nginx # nginx + frontend image
│ ├── index.html # SPA (dark theme) │ ├── nginx.conf # Reverse proxy config
── favicon.png ── setup.sh # One-shot deploy script
├── nginx.conf # Reverse proxy │ ├── www/ # Frontend (baked into nginx image)
└── deploy.sh # One-shot deploy script │ └── 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