creates application
This commit is contained in:
153
README.md
Normal file
153
README.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# TimeTracker
|
||||
|
||||
A multi-user web application for tracking time spent working on projects. Users authenticate via an external OIDC provider and manage their own clients, projects, and time entries.
|
||||
|
||||
## Features
|
||||
|
||||
- **OIDC Authentication** - Secure login via external OpenID Connect provider with PKCE flow
|
||||
- **Client Management** - Create and manage clients/customers
|
||||
- **Project Management** - Organize work into projects with color coding
|
||||
- **Time Tracking** - Start/stop timer with live elapsed time display
|
||||
- **Manual Entry** - Add time entries manually for past work
|
||||
- **Validation** - Overlap prevention and end-time validation
|
||||
- **Responsive UI** - Works on desktop and mobile
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||||
│ React │────▶│ Express │────▶│ PostgreSQL │
|
||||
│ Frontend │ │ Backend │ │ Database │
|
||||
└─────────────┘ └─────────────┘ └─────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────┐
|
||||
│ OIDC │
|
||||
│ Provider │
|
||||
└─────────────┘
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Node.js 18+
|
||||
- PostgreSQL 14+
|
||||
- An OIDC provider (e.g., Keycloak, Auth0, Okta)
|
||||
|
||||
### 1. Database Setup
|
||||
|
||||
```bash
|
||||
# Create PostgreSQL database
|
||||
createdb timetracker
|
||||
```
|
||||
|
||||
### 2. Backend Setup
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
npm install
|
||||
|
||||
# Copy and configure environment
|
||||
cp ../.env.example .env
|
||||
# Edit .env with your database and OIDC settings
|
||||
|
||||
# Run migrations
|
||||
npx prisma migrate dev
|
||||
|
||||
# Start server
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### 3. Frontend Setup
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### 4. Environment Variables
|
||||
|
||||
Create `.env` in the backend directory:
|
||||
|
||||
```env
|
||||
# Database
|
||||
DATABASE_URL="postgresql://user:password@localhost:5432/timetracker"
|
||||
|
||||
# OIDC Configuration
|
||||
OIDC_ISSUER_URL="https://your-oidc-provider.com"
|
||||
OIDC_CLIENT_ID="your-client-id"
|
||||
OIDC_REDIRECT_URI="http://localhost:3001/auth/callback"
|
||||
|
||||
# Session
|
||||
SESSION_SECRET="your-secure-session-secret-min-32-chars"
|
||||
|
||||
# Server
|
||||
PORT=3001
|
||||
NODE_ENV=development
|
||||
FRONTEND_URL="http://localhost:5173"
|
||||
```
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### Authentication
|
||||
- `GET /auth/login` - Initiate OIDC login
|
||||
- `GET /auth/callback` - OIDC callback
|
||||
- `POST /auth/logout` - End session
|
||||
- `GET /auth/me` - Get current user
|
||||
|
||||
### Clients
|
||||
- `GET /api/clients` - List clients
|
||||
- `POST /api/clients` - Create client
|
||||
- `PUT /api/clients/:id` - Update client
|
||||
- `DELETE /api/clients/:id` - Delete client
|
||||
|
||||
### Projects
|
||||
- `GET /api/projects` - List projects
|
||||
- `POST /api/projects` - Create project
|
||||
- `PUT /api/projects/:id` - Update project
|
||||
- `DELETE /api/projects/:id` - Delete project
|
||||
|
||||
### Time Entries
|
||||
- `GET /api/time-entries` - List entries (with filters/pagination)
|
||||
- `POST /api/time-entries` - Create entry
|
||||
- `PUT /api/time-entries/:id` - Update entry
|
||||
- `DELETE /api/time-entries/:id` - Delete entry
|
||||
|
||||
### Timer
|
||||
- `GET /api/timer` - Get ongoing timer
|
||||
- `POST /api/timer/start` - Start timer
|
||||
- `PUT /api/timer` - Update timer (set project)
|
||||
- `POST /api/timer/stop` - Stop timer (creates entry)
|
||||
|
||||
## Data Model
|
||||
|
||||
```
|
||||
User (oidc sub)
|
||||
├── Client[]
|
||||
│ └── Project[]
|
||||
│ └── TimeEntry[]
|
||||
└── OngoingTimer (optional)
|
||||
```
|
||||
|
||||
## Technology Stack
|
||||
|
||||
**Backend:**
|
||||
- Node.js + Express
|
||||
- TypeScript
|
||||
- Prisma ORM
|
||||
- PostgreSQL
|
||||
- OpenID Client
|
||||
|
||||
**Frontend:**
|
||||
- React 18
|
||||
- TypeScript
|
||||
- TanStack Query
|
||||
- React Router
|
||||
- Tailwind CSS
|
||||
- date-fns
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user