Atlas — Project Management
A full-stack Jira clone with Kanban boards, sprint management, role-based access control, and real-time dashboards.
Option A: Self-contained (no server needed)
Open atlas.html directly in your browser. All data is in-memory and resets on refresh.
Option B: Full-stack with database
cd backend
npm install
node server.js
# Open http://localhost:3001
All accounts use password: password123
atlas/
├── atlas.html # Self-contained single-file version
├── backend/
│ ├── server.js # Express server (modular route imports)
│ ├── database.js # SQLite schema + seed data
│ ├── package.json
│ ├── middleware/
│ │ └── auth.js # Auth middleware (session token + legacy headers)
│ └── routes/
│ ├── auth.js # POST /login, /logout, GET /me
│ ├── users.js # CRUD user management (admin)
│ ├── profile.js # GET/PUT profile, password, email
│ ├── settings.js # GET/PUT user preferences
│ ├── projects.js # CRUD projects + members + stats
│ ├── sprints.js # CRUD sprints with issue stats
│ ├── issues.js # CRUD issues + move (drag & drop)
│ ├── comments.js # CRUD comments (author/admin permissions)
│ └── admin.js # Admin dashboard stats
└── frontend/
└── build/
└── index.html # React SPA (served by backend)
Method
Endpoint
Description
POST
/api/auth/login
Login with email/password
POST
/api/auth/logout
Logout (invalidate session)
GET
/api/auth/me
Get current user from session
Method
Endpoint
Description
GET
/api/users
List all users
POST
/api/users
Create user
GET
/api/users/:id
Get user by ID
PUT
/api/users/:id
Update user
DELETE
/api/users/:id
Deactivate user
Method
Endpoint
Description
GET
/api/profile
Get profile with stats & projects
PUT
/api/profile
Update profile fields
PUT
/api/profile/password
Change password
PUT
/api/profile/email
Change email
Method
Endpoint
Description
GET
/api/settings
Get user preferences
PUT
/api/settings
Update preferences
Method
Endpoint
Description
GET
/api/projects
List projects with counts
POST
/api/projects
Create project
PUT
/api/projects/:id
Update project
DELETE
/api/projects/:id
Delete project (cascade)
GET
/api/projects/:id/stats
Dashboard statistics
GET
/api/projects/:id/members
List members
POST
/api/projects/:id/members
Add member
PUT
/api/projects/:id/members/:userId
Update member role
DELETE
/api/projects/:id/members/:userId
Remove member
Method
Endpoint
Description
GET
/api/projects/:id/sprints
List sprints with stats
POST
/api/projects/:id/sprints
Create sprint
GET
/api/sprints/:id
Get sprint
PUT
/api/sprints/:id
Update sprint
DELETE
/api/sprints/:id
Delete sprint (issues → backlog)
Method
Endpoint
Description
GET
/api/projects/:id/issues
List issues (?sprint_id= filter)
POST
/api/projects/:id/issues
Create issue
GET
/api/issues/:id
Get issue with enriched data
PUT
/api/issues/:id
Update issue fields
DELETE
/api/issues/:id
Delete issue (cascade comments)
PUT
/api/issues/:id/move
Move issue (drag & drop)
Comments Module
Method
Endpoint
Description
GET
/api/issues/:id/comments
List comments
POST
/api/issues/:id/comments
Add comment
PUT
/api/comments/:id
Edit comment (author/admin)
DELETE
/api/comments/:id
Delete comment (author/admin)
Method
Endpoint
Description
GET
/api/admin/stats
User counts, project counts, role breakdown
Frontend : React 18 + Babel (single HTML, no build step)
Backend : Node.js + Express 5
Database : sql.js (SQLite in-memory with file persistence)
Auth : Session-based with token headers
Permission
Admin
Board Admin
User
Client
Manage users
✅
❌
❌
❌
Create projects
✅
❌
❌
❌
Manage sprints
✅
✅
❌
❌
Create issues
✅
✅
✅
❌
Drag & drop issues
✅
✅
✅
❌
View board
✅
✅
✅
✅