| title | Forge | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| slug | forge | ||||||||
| year | 2025 | ||||||||
| tags |
|
||||||||
| status | IN PROGRESS | ||||||||
| tech |
|
||||||||
| summary | Forge - an all-in-one freelancer management dashboard for time tracking, project scoping, finances, invoicing, and client portals. | ||||||||
| sort_order | 4 |
A freelancer management dashboard built with React, TypeScript, and Vite.
FORGE is an all-in-one business tool for freelancers and solo consultants. It covers time tracking, project management, client relationships, finances, proposals, and invoicing - all in a single local-first app with optional Supabase cloud sync.
- Dashboard - overview of revenue, active projects, and weekly stats with Recharts visualizations
- Time Tracker - start/stop timer with per-project and per-task tracking
- Projects - manage projects with scope, profitability analysis, and task checklists
- Clients - client directory with contact info and project history
- Client Portal - shareable read-only view for clients to see project status
- Finances - income/expense tracking, charts, and invoice generation (PDF export)
- Proposals - create and manage project proposals
- Weekly Review - reflect on the week with logged hours, completed tasks, and notes
- Design Review - upload screens and pin review comments
- Notes - freeform notes attached to projects or standalone
- Settings - configure hourly rates, project types, automations, and appearance
| Layer | Tool |
|---|---|
| Framework | React 18 + TypeScript |
| Build | Vite 6 |
| Styling | Tailwind CSS 3 + shadcn/ui (Nova theme) |
| Icons | Lucide React |
| Charts | Recharts |
| State | Zustand (persisted to localStorage or Supabase) |
| Auth | Supabase Auth (email/password) |
| Routing | React Router 6 |
| Font | Manrope + JetBrains Mono |
src/
├── components/ # Shared UI (Layout, CommandPalette, shadcn primitives)
│ └── ui/ # shadcn/ui components (Button, Card, Badge, Input, etc.)
├── pages/ # Route-level pages (Dashboard, Projects, Finances, …)
├── store.ts # Zustand store - all app state and actions
├── types.ts # TypeScript interfaces and enums
├── storage.ts # Storage adapter (localStorage / Supabase)
├── utils/ # Helpers (PDF invoice generation, etc.)
└── index.css # Theme tokens (CSS custom properties, dark/light mode)
npm install
npm run devThe app runs at http://localhost:5173 by default. No backend is required for local-only mode - all data persists in the browser's localStorage.
For cloud sync, copy .env.example to .env and add your Supabase project credentials.