7f903ce17284d5d982d9b41faafec4106342ba9e
Project Tracker
A self-hosted project tracking web app. Dark-themed, minimal, fast.
Live: https://projects.ledrew.me
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)
Features
- List all projects with priority badges
- Filter by status: All / Active / Backlog / On Hold / Completed
- Drill-down detail panel — click any project to view/edit
- Create new projects via modal form
- Fields: Name, Priority, URL, Notes, Status, Owner, Tags
- Fully responsive sidebar layout
- Dark GitHub-inspired theme
API
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/projects |
List all projects |
| GET | /api/projects/:id |
Get single project |
| POST | /api/projects |
Create project |
| PUT | /api/projects/:id |
Update project |
| DELETE | /api/projects/:id |
Delete project |
Body (POST/PUT)
{
"name": "Project Name",
"priority": "High|Med-High|Medium|Low",
"url": "https://...",
"notes": "Description...",
"status": "Active|Backlog|On Hold|Completed",
"owner": "Ada",
"tags": "tag1,tag2"
}
Deploy
# 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
Or run deploy.sh on a fresh Debian system.
File Structure
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
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
Description
Languages
HTML
71.9%
Shell
14%
JavaScript
13.7%
Dockerfile
0.4%