diff --git a/frontend/src/components/Dashboard/ContributionHeatmap.jsx b/frontend/src/components/Dashboard/ContributionHeatmap.jsx index d6f23ffb..f46bd094 100644 --- a/frontend/src/components/Dashboard/ContributionHeatmap.jsx +++ b/frontend/src/components/Dashboard/ContributionHeatmap.jsx @@ -135,24 +135,24 @@ export default function ContributionHeatmap({ tasks = [], routineTasks = [] }) {
-
+
Tasks Done: {hoveredDay.tasksCompleted} / {hoveredDay.tasksTotal}
-
+
Routines Completed: {hoveredDay.routinesCompleted}
-
+
Productivity: {getProductivityColorDetails(hoveredDay.score).label.split(" (")[0]} @@ -169,7 +169,7 @@ export default function ContributionHeatmap({ tasks = [], routineTasks = [] }) { โšก Keep it going! ) : ( - No active completions + No active completions )}
@@ -198,7 +198,7 @@ export default function ContributionHeatmap({ tasks = [], routineTasks = [] }) { Live Tracker
-

+

Tracking real routines & task completions from your live daily workflow.

@@ -217,7 +217,7 @@ export default function ContributionHeatmap({ tasks = [], routineTasks = [] }) {

{stats.currentStreak} days

-

Keep the fire burning!

+

Keep the fire burning!

@@ -231,7 +231,7 @@ export default function ContributionHeatmap({ tasks = [], routineTasks = [] }) {

{stats.longestStreak} days

-

Your peak productivity

+

Your peak productivity

@@ -245,7 +245,7 @@ export default function ContributionHeatmap({ tasks = [], routineTasks = [] }) {

{stats.totalProductiveDays} days

-

Days with active completions

+

Days with active completions

@@ -259,7 +259,7 @@ export default function ContributionHeatmap({ tasks = [], routineTasks = [] }) {

{stats.yearlyPercentage}%

-

Average daily task completion rate

+

Average daily task completion rate

diff --git a/frontend/src/components/Dashboard/DashboardTasks.jsx b/frontend/src/components/Dashboard/DashboardTasks.jsx index 358cb994..480498f1 100644 --- a/frontend/src/components/Dashboard/DashboardTasks.jsx +++ b/frontend/src/components/Dashboard/DashboardTasks.jsx @@ -171,7 +171,7 @@ export default function DashboardTasks({ tasks, updateTask }) { min="1" value={actualDuration} onChange={(e) => setActualDuration(e.target.value)} - className="w-full p-2 border border-soft rounded-lg text-black" + className="w-full p-2 border border-soft rounded-lg text-black dark:placeholder-slate-500" placeholder="Actual duration in minutes" />
diff --git a/frontend/src/components/Dashboard/ReflectionSummary.jsx b/frontend/src/components/Dashboard/ReflectionSummary.jsx index 1c9e38d7..2377b40c 100644 --- a/frontend/src/components/Dashboard/ReflectionSummary.jsx +++ b/frontend/src/components/Dashboard/ReflectionSummary.jsx @@ -22,23 +22,23 @@ export default function ReflectionSummary({
{/* Daily Completion */}
-

Daily Completion

+

Daily Completion

{completedToday} / {totalToday}

-

Tasks done today{totalToday > 0 ? ` โ€” ${completionRate}%` : ""}

+

Tasks done today{totalToday > 0 ? ` โ€” ${completionRate}%` : ""}

{/* Weekly Momentum */}
-

Weekly Momentum

+

Weekly Momentum

{weeklyCompletionPercent}%

-

{weeklyText}

+

{weeklyText}

{/* Productivity Insight */}
-

Productivity Insight

+

Productivity Insight

{insightText}

-

+

{upcomingCount > 0 ? `Next: ${upcomingCount} upcoming task${upcomingCount > 1 ? "s" : ""}` : "No upcoming tasks"} {" ยท "} {tasks?.length ? `${tasks.length} total` : "0 total"} diff --git a/frontend/src/components/Dashboard/StatCard.jsx b/frontend/src/components/Dashboard/StatCard.jsx index fa8a6982..74458a82 100644 --- a/frontend/src/components/Dashboard/StatCard.jsx +++ b/frontend/src/components/Dashboard/StatCard.jsx @@ -4,9 +4,9 @@ export default function StatCard({ label, value, subtitle, icon }) {

{icon}
-

{label}

+

{label}

{value}

- {subtitle &&

{subtitle}

} + {subtitle &&

{subtitle}

}
); diff --git a/frontend/src/components/Dashboard/TaskPreview.jsx b/frontend/src/components/Dashboard/TaskPreview.jsx index d6fff092..95801e25 100644 --- a/frontend/src/components/Dashboard/TaskPreview.jsx +++ b/frontend/src/components/Dashboard/TaskPreview.jsx @@ -180,7 +180,7 @@ export default function TaskPreview({ tasks , updateTask}) { min="1" value={actualDuration} onChange={(e) => setActualDuration(e.target.value)} - className="w-full p-2 border border-soft rounded-lg text-black" + className="w-full p-2 border border-soft rounded-lg text-black dark:placeholder-slate-500" placeholder="Actual duration in minutes" />
diff --git a/frontend/src/components/ErrorBoundary.jsx b/frontend/src/components/ErrorBoundary.jsx index f1e09644..cdbeb512 100644 --- a/frontend/src/components/ErrorBoundary.jsx +++ b/frontend/src/components/ErrorBoundary.jsx @@ -41,7 +41,7 @@ class ErrorBoundary extends React.Component {

Oops! Something went wrong

-

+

We're sorry, but an unexpected error occurred. The application has recovered from a crash, but you might need to refresh or return to the dashboard.

{this.state.error && ( diff --git a/frontend/src/components/Navbar.jsx b/frontend/src/components/Navbar.jsx index f9b10ecd..6f36daef 100644 --- a/frontend/src/components/Navbar.jsx +++ b/frontend/src/components/Navbar.jsx @@ -62,7 +62,7 @@ const LogoutModal = ({ isOpen, onConfirm, onCancel }) => (

Log out of DailyForge?

-

+

You'll need to log back in to access your dashboard, tasks, and routines.

diff --git a/frontend/src/components/Routine/TaskLibrary.jsx b/frontend/src/components/Routine/TaskLibrary.jsx index 2fd0a669..3705b666 100644 --- a/frontend/src/components/Routine/TaskLibrary.jsx +++ b/frontend/src/components/Routine/TaskLibrary.jsx @@ -113,7 +113,7 @@ export default function TaskLibrary({ tasks, onAddTask }) { placeholder="Search tasks..." value={query} onChange={(e) => setQuery(e.target.value)} - className="mb-4 rounded-xl border border-soft/80 px-3 py-2 text-sm bg-transparent text-main placeholder:text-muted dark:bg-slate-800 dark:text-white dark:border-gray-700 dark:placeholder:text-gray-400 focus:outline-none focus:ring-2 focus:ring-[#4eb7b3]" + className="mb-4 rounded-xl border border-soft/80 px-3 py-2 text-sm bg-transparent text-main placeholder:text-muted dark:bg-slate-800 dark:text-white dark:border-gray-700 dark:placeholder-slate-500 focus:outline-none focus:ring-2 focus:ring-[#4eb7b3]" /> {/* Task List */} @@ -132,7 +132,7 @@ export default function TaskLibrary({ tasks, onAddTask }) { ) : (

No tasks found

-

We couldn't find anything matching "{query}"

+

We couldn't find anything matching "{query}"

)} diff --git a/frontend/src/components/Task/NotesWidget.jsx b/frontend/src/components/Task/NotesWidget.jsx index c29f35e1..031045cb 100644 --- a/frontend/src/components/Task/NotesWidget.jsx +++ b/frontend/src/components/Task/NotesWidget.jsx @@ -106,7 +106,7 @@ export default function NotesWidget() { }} rows={1} placeholder="Write a note..." - className="w-full bg-transparent outline-none text-base resize-none overflow-hidden" + className="w-full bg-transparent outline-none text-base resize-none overflow-hidden dark:placeholder-slate-500" style={{ color: note.completed ? "var(--text-muted)" : "var(--text-main)", textDecoration: note.completed ? "line-through" : "none", diff --git a/frontend/src/components/Task/TaskFormModal.jsx b/frontend/src/components/Task/TaskFormModal.jsx index e5364ac6..777b6758 100644 --- a/frontend/src/components/Task/TaskFormModal.jsx +++ b/frontend/src/components/Task/TaskFormModal.jsx @@ -278,7 +278,7 @@ import FormError from "../common/FormError"; disabled={isSubmitting} className="w-full mt-1 p-2 border border-soft rounded-lg focus:ring-(--primary) focus:border-(--primary) - bg-transparent text-main dark:bg-slate-800" + bg-transparent text-main dark:bg-slate-800 dark:placeholder-slate-500" placeholder="Task title" maxLength={TITLE_MAX_LENGTH} required @@ -307,7 +307,7 @@ import FormError from "../common/FormError"; disabled={isSubmitting} className="w-full mt-1 p-2 border border-soft rounded-lg focus:ring-(--primary) focus:border-(--primary) - bg-transparent text-main dark:bg-slate-800" + bg-transparent text-main dark:bg-slate-800 dark:placeholder-slate-500" placeholder="Optional task description" rows={3} maxLength={DESCRIPTION_MAX_LENGTH} @@ -357,7 +357,7 @@ import FormError from "../common/FormError"; value={customTagInput} onChange={(e) => setCustomTagInput(e.target.value)} disabled={isSubmitting} - className="flex-1 p-2 border border-soft rounded-lg bg-transparent text-main dark:bg-slate-800" + className="flex-1 p-2 border border-soft rounded-lg bg-transparent text-main dark:bg-slate-800 dark:placeholder-slate-500" placeholder="Enter custom tag (e.g., 'Essay')" /> diff --git a/frontend/src/pages/LandingPage.jsx b/frontend/src/pages/LandingPage.jsx index 48663456..4fe26731 100644 --- a/frontend/src/pages/LandingPage.jsx +++ b/frontend/src/pages/LandingPage.jsx @@ -45,7 +45,7 @@ const LandingPage = () => { Why DailyForge? -

+

Everything you need to organize your tasks, build routines and stay productive every single week.

@@ -74,7 +74,7 @@ const LandingPage = () => { Smart Task Management -

+

Create tasks with categories, priorities and durations. Keep your workflow organized without clutter.

@@ -103,7 +103,7 @@ const LandingPage = () => { Visual Routine Builder -

+

Drag and drop tasks into a weekly planner and build routines that fit your lifestyle and goals.

@@ -132,7 +132,7 @@ const LandingPage = () => { Productivity Insights -

+

Track streaks, completion rates and consistency with beautiful analytics and contribution heatmaps.

diff --git a/frontend/src/pages/Profile.jsx b/frontend/src/pages/Profile.jsx index 838804ce..3752b2dc 100644 --- a/frontend/src/pages/Profile.jsx +++ b/frontend/src/pages/Profile.jsx @@ -97,7 +97,7 @@ function ChangePasswordCard({ onUpdatePassword, onClearError, apiError }) { return (

Change Password

-

Update your password to keep your account secure

+

Update your password to keep your account secure

@@ -107,7 +107,7 @@ function ChangePasswordCard({ onUpdatePassword, onClearError, apiError }) { onChange={(e) => handleCurrentPasswordChange(e.target.value)} onBlur={() => handleBlur(setShowCurrent, timerCurrent)} placeholder="Enter current password" - className={`w-full pr-10 input-focus border rounded-lg px-3 py-2.5 text-sm text-main bg-transparent + className={`w-full pr-10 input-focus border rounded-lg px-3 py-2.5 text-sm text-main bg-transparent dark:placeholder-slate-400 ${apiError ? "border-red-500" : "border-soft"}`} /> @@ -125,7 +125,7 @@ function ChangePasswordCard({ onUpdatePassword, onClearError, apiError }) { onChange={(e) => setNewPassword(e.target.value)} onBlur={() => handleBlur(setShowNew, timerNew)} placeholder="Enter new password" - className="w-full pr-10 input-focus border border-soft rounded-lg px-3 py-2.5 text-sm text-main bg-transparent" + className="w-full pr-10 input-focus border border-soft rounded-lg px-3 py-2.5 text-sm text-main bg-transparent dark:placeholder-slate-400" />
@@ -141,7 +141,7 @@ function ChangePasswordCard({ onUpdatePassword, onClearError, apiError }) { handleBlur(setShowConfirm, timerConfirm); }} placeholder="Re-enter new password" - className={`w-full pr-10 input-focus border rounded-lg px-3 py-2.5 text-sm text-main bg-transparent + className={`w-full pr-10 input-focus border rounded-lg px-3 py-2.5 text-sm text-main bg-transparent dark:placeholder-slate-400 ${showMatchError ? "border-red-500" : "border-soft"}`} /> @@ -307,13 +307,13 @@ export default function Profile() { {/* name card */}
-

Change how your name appears across DailyForge

+

Change how your name appears across DailyForge

setName(e.target.value)} - className="w-full input-focus border border-soft rounded-lg px-3 py-2.5 text-sm text-main bg-transparent mb-4" + className="w-full input-focus border border-soft rounded-lg px-3 py-2.5 text-sm text-main bg-transparent mb-4 dark:placeholder-slate-400" />