A comprehensive client-side React application for analyzing and visualizing time tracking data from Harvest CSV exports. Built with modern web technologies and designed for AWS serverless deployment.
- 100% Client-Side Processing: All data processing happens in the browser for maximum privacy and security
- CSV Upload & Parsing: Direct upload of Harvest time entry exports with robust parsing
- Real-Time Filtering: Dynamic filtering by employee, client, project, task, and date range
- Automatic Name Combination: Merges First Name and Last Name columns into Full Name
- Weekly Utilization Tracking: Monday-Sunday calculations with automatic alerts
- Low utilization: < 30 hours/week (yellow alerts)
- High utilization: > 45 hours/week (red alerts)
- Internal vs External Time Separation: Automatic identification of internal clients (Onica, Rackspace Innovation In Action)
- Recognition System: Automatic shoutouts for high performers (35+ billable hours, 90%+ utilization)
- Task Word Cloud
- Client Hours Distribution
- Project Analytics with billability rates
- Internal vs External Pie Chart
- Monthly Trend Charts
- Hierarchical navigation: Client β Project β Task β Entry
- Cascading filters with automatic reset
- Expandable/collapsible detail views
- Date-sorted entries (newest first)
- Node.js 18+
- npm or yarn
- Clone the repository:
git clone https://github.com/jon-the-dev/harvest-csv-analysis.git
cd harvest-csv-analysis/web-app
- Install dependencies:
npm install
- Start the development server:
npm run dev
- Open your browser to http://localhost:3000
npm run build
The built files will be in the dist
directory, ready for deployment.
- Upload CSV: Click "Upload CSV" and select your Harvest time entries export
- Filter Data: Use the dropdown filters to narrow your view
- Explore Tabs:
- Overview: High-level statistics and visualizations
- Utilization: Weekly breakdowns and alerts
- Internal: Detailed drill-down for internal time attribution
- Insights: Client and project analytics
- Details: Raw data table
The application expects standard Harvest CSV exports with these columns:
- Date
- Client
- Project
- Task
- Hours
- Billable?
- First Name
- Last Name
- (Additional columns are preserved but not required)
- Build the application:
npm run build
-
Create an S3 bucket with static website hosting enabled
-
Upload the contents of the
dist
directory to your S3 bucket:
aws s3 sync dist/ s3://your-bucket-name --delete
- Configure bucket policy for public access:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
For better performance and HTTPS support:
- Create a CloudFront distribution
- Set your S3 bucket as the origin
- Configure caching behaviors
- Use AWS Certificate Manager for SSL
- React 18: Modern UI framework
- Vite: Fast build tool
- Tailwind CSS: Utility-first styling
- Recharts: Data visualization
- PapaParse: CSV parsing
- All data processing happens client-side
- No data is sent to external servers
- No persistent storage of sensitive data
- Files are processed in browser memory only
harvest-csv-analysis/
βββ web-app/
β βββ src/
β β βββ App.jsx # Main application component
β β βββ main.jsx # Application entry point
β β βββ index.css # Tailwind CSS imports
β βββ package.json # Dependencies and scripts
β βββ vite.config.js # Vite configuration
β βββ tailwind.config.js # Tailwind configuration
β βββ index.html # HTML template
βββ docs/ # Documentation
βββ README.md # This file
npm run lint
- ESLint configuration included
- Tailwind CSS for styling
- React best practices
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built for Tier One Solutions
- Designed to work with Harvest time tracking exports
- Optimized for AWS serverless deployment
For issues or questions, please create an issue in the GitHub repository.
Documentation: Full documentation available in Confluence