Files
Krow-workspace/frontend-web/src/pages/WorkforceEarnings.jsx
bwnyasse 554dc9f9e3 feat: Initialize monorepo structure and comprehensive documentation
This commit establishes the new monorepo architecture for the KROW Workforce platform.

Key changes include:
- Reorganized project into `frontend-web`, `mobile-apps`, `firebase`, `scripts`, and `secrets` directories.
- Updated `Makefile` to support the new monorepo layout and automate Base44 export integration.
- Fixed `scripts/prepare-export.js` for ES module compatibility and global component import resolution.
- Created and updated `CONTRIBUTING.md` for developer onboarding.
- Restructured, renamed, and translated all `docs/` files for clarity and consistency.
- Implemented an interactive internal launchpad with diagram viewing capabilities.
- Configured base Firebase project files (`firebase.json`, security rules).
- Updated `README.md` to reflect the new project structure and documentation overview.
2025-11-12 12:50:55 -05:00

111 lines
4.6 KiB
JavaScript

import React from "react";
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card";
import { DollarSign, TrendingUp, Calendar, Award } from "lucide-react";
import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts';
export default function WorkforceEarnings() {
const earningsData = [
{ month: 'Jan', earnings: 2400, hours: 96 },
{ month: 'Feb', earnings: 2800, hours: 112 },
{ month: 'Mar', earnings: 3200, hours: 128 },
{ month: 'Apr', earnings: 2600, hours: 104 },
{ month: 'May', earnings: 3400, hours: 136 },
];
const stats = {
totalEarnings: 14400,
thisMonth: 3400,
totalHours: 576,
avgHourly: 25,
};
return (
<div className="p-4 md:p-8 bg-slate-50 min-h-screen">
<div className="max-w-7xl mx-auto">
<div className="mb-6">
<h1 className="text-3xl font-bold text-[#1C323E]">My Earnings</h1>
<p className="text-slate-500 mt-1">Track your income and hours worked</p>
</div>
{/* Stats */}
<div className="grid grid-cols-1 md:grid-cols-4 gap-6 mb-8">
<Card className="border-slate-200">
<CardContent className="p-6">
<DollarSign className="w-8 h-8 text-[#0A39DF] mb-2" />
<p className="text-sm text-slate-500">Total Earnings (YTD)</p>
<p className="text-3xl font-bold text-[#1C323E]">${stats.totalEarnings.toLocaleString()}</p>
</CardContent>
</Card>
<Card className="border-slate-200">
<CardContent className="p-6">
<TrendingUp className="w-8 h-8 text-green-600 mb-2" />
<p className="text-sm text-slate-500">This Month</p>
<p className="text-3xl font-bold text-green-600">${stats.thisMonth.toLocaleString()}</p>
</CardContent>
</Card>
<Card className="border-slate-200">
<CardContent className="p-6">
<Calendar className="w-8 h-8 text-blue-600 mb-2" />
<p className="text-sm text-slate-500">Total Hours</p>
<p className="text-3xl font-bold text-blue-600">{stats.totalHours}</p>
</CardContent>
</Card>
<Card className="border-slate-200">
<CardContent className="p-6">
<Award className="w-8 h-8 text-purple-600 mb-2" />
<p className="text-sm text-slate-500">Avg Hourly</p>
<p className="text-3xl font-bold text-purple-600">${stats.avgHourly}</p>
</CardContent>
</Card>
</div>
{/* Earnings Chart */}
<Card className="mb-8 border-slate-200">
<CardHeader className="bg-gradient-to-br from-slate-50 to-white border-b">
<CardTitle>Monthly Earnings</CardTitle>
</CardHeader>
<CardContent className="p-6">
<ResponsiveContainer width="100%" height={300}>
<BarChart data={earningsData}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="month" />
<YAxis />
<Tooltip />
<Legend />
<Bar dataKey="earnings" fill="#0A39DF" name="Earnings ($)" />
<Bar dataKey="hours" fill="#10b981" name="Hours Worked" />
</BarChart>
</ResponsiveContainer>
</CardContent>
</Card>
{/* Payment History */}
<Card className="border-slate-200">
<CardHeader className="bg-gradient-to-br from-slate-50 to-white border-b">
<CardTitle>Recent Payments</CardTitle>
</CardHeader>
<CardContent className="p-6">
<div className="space-y-4">
{[
{ date: "May 15, 2025", event: "Tech Conference 2025", hours: 32, amount: 800 },
{ date: "May 8, 2025", event: "Product Launch", hours: 24, amount: 600 },
{ date: "May 1, 2025", event: "Corporate Event", hours: 40, amount: 1000 },
].map((payment, index) => (
<div key={index} className="flex items-center justify-between p-4 bg-slate-50 rounded-lg border border-slate-200">
<div className="flex-1">
<h4 className="font-semibold text-[#1C323E]">{payment.event}</h4>
<p className="text-sm text-slate-500 mt-1">{payment.date} {payment.hours} hours</p>
</div>
<p className="text-2xl font-bold text-[#0A39DF]">${payment.amount}</p>
</div>
))}
</div>
</CardContent>
</Card>
</div>
</div>
);
}