A personal web dashboard for tracking freelance work hours and income through Everhour integration. Built with Next.js, TypeScript, and SQLite.
- Real-time Everhour Integration: Automatically fetches time entries from Everhour API
- Income Tracking: Calculate earnings based on configurable hourly rates per project
- Visual Analytics:
- Daily hours bar chart
- Project distribution pie chart
- Income breakdown by project
- Project Management: Set and manage hourly rates for each project
- Monthly Goals: Track progress toward your monthly hours goal
- Auto-refresh: Dashboard data refreshes every 5 minutes
- Framework: Next.js 14+ with App Router
- Language: TypeScript
- Database: SQLite (better-sqlite3)
- Charts: Recharts
- Styling: Tailwind CSS
- Validation: Zod
- Node.js 18+ and npm
- Everhour account with API access
-
Clone the repository and navigate to the project directory:
cd Codex-Rave -
Install dependencies:
npm install
-
Create your environment configuration:
cp env.example .env.local
-
Configure your environment variables in
.env.local:EVERHOUR_API_TOKEN=your_everhour_api_token_here DATABASE_PATH=./data/dashboard.db MONTHLY_HOURS_GOAL=160 DEFAULT_HOURLY_RATE=50
Configuration options:
EVERHOUR_API_TOKEN: Your Everhour API token (required)- Get it from https://everhour.com/developers
DATABASE_PATH: Where to store the SQLite database (default is fine)MONTHLY_HOURS_GOAL: Your target hours per month (default: 160)DEFAULT_HOURLY_RATE: Default rate for all projects without specific rates (in USD)
-
Run the development server:
npm run dev
-
Open http://localhost:3000 in your browser
-
Set your default hourly rate via the Settings button (⚙️ icon)
- Click the Settings button in the top right
- Enter your default hourly rate (in PLN)
- This rate applies to ALL projects automatically
- You can also change the currency if needed (PLN, USD, EUR, GBP)
-
(Optional) Override rates for specific projects:
- Click "Manage Project Rates"
- Select projects from the dropdown (auto-populated from Everhour)
- Set custom hourly rates for specific projects
- Save the rates
How it works:
- Projects WITH custom rates → use the custom rate
- Projects WITHOUT custom rates → use the default rate from Settings
- Currency formatting adapts based on your selected currency
- This means you can start tracking income immediately without setting up each project individually
- Summary Cards: Quick overview of total hours, income, active projects, and goal progress
- Daily Hours Chart: Visual representation of hours logged each day
- Project Distribution: Pie chart showing time allocation across projects
- Income by Project: Bar chart displaying earnings per project
- Project Breakdown Table: Detailed table with hours, rates, income, and percentages
- Click "Manage Project Rates" to open the modal
- Select a project from Everhour
- Enter or update the hourly rate
- Save to calculate income automatically
- Delete rates that are no longer needed
The app uses SQLite for local data persistence. The database file is created automatically at the path specified in DATABASE_PATH (default: ./data/dashboard.db).
CREATE TABLE project_rates (
id INTEGER PRIMARY KEY AUTOINCREMENT,
everhour_project_id TEXT UNIQUE NOT NULL,
project_name TEXT NOT NULL,
hourly_rate REAL NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);GET /api/stats- Fetch dashboard statisticsGET /api/project-rates- List all project ratesPOST /api/project-rates- Create or update project rateDELETE /api/project-rates?id={id}- Delete project rateGET /api/everhour-projects- Fetch projects from Everhour
npm run build
npm startPotential features to add:
- Invoice generation
- CRM-style client tracking
- Multiple time tracking service integrations
- Export reports (PDF, CSV)
- Historical data comparison
- Dark mode
- Notification system for goals
- Multi-currency support
Codex-Rave/
├── app/
│ ├── api/
│ │ ├── everhour-projects/
│ │ ├── project-rates/
│ │ └── stats/
│ ├── layout.tsx
│ └── page.tsx
├── components/
│ ├── Charts.tsx
│ ├── ProjectRateForm.tsx
│ ├── ProjectTable.tsx
│ └── StatCard.tsx
├── lib/
│ ├── db.ts
│ ├── everhour.ts
│ └── stats.ts
├── types/
│ └── index.ts
└── data/
└── dashboard.db (auto-generated)
Personal use project.
For Everhour API documentation, visit: https://everhour.com/developers