-
📁
+
+
+
{project.name}
{currentRepo && (
@@ -29,14 +32,14 @@ export const WorkspaceHeader = ({ project, currentRepo }: WorkspaceHeaderProps)
className="workspace-header-action-btn"
to={`/projects/${project.id}/repositories/${currentRepo?.id || ""}/history`}
>
- 🕐
+
History
- ⚙️
+
Settings
diff --git a/apps/web/src/pages/dashboard.tsx b/apps/web/src/pages/dashboard.tsx
index d7f7146..e786a90 100644
--- a/apps/web/src/pages/dashboard.tsx
+++ b/apps/web/src/pages/dashboard.tsx
@@ -1,6 +1,7 @@
import { useCallback, useEffect, useMemo, useState } from "react";
import { getDashboardSummary, type DashboardSummary } from "../api/dashboard";
+import { Icon } from "../components/icon";
const CARDS = [
{ label: "Projects", key: "projects" },
@@ -50,6 +51,7 @@ export const DashboardPage = () => {
Dashboard is unavailable
@@ -68,9 +70,11 @@ export const DashboardPage = () => {
diff --git a/apps/web/src/pages/git-history.tsx b/apps/web/src/pages/git-history.tsx
index 0e0b769..777d142 100644
--- a/apps/web/src/pages/git-history.tsx
+++ b/apps/web/src/pages/git-history.tsx
@@ -2,6 +2,7 @@ import { useCallback, useEffect, useState } from "react";
import { useNavigate, useParams } from "react-router-dom";
import { getCommitDetail, getRepositoryHistory, type CommitDetail, type CommitHistoryEntry } from "../api/git_repositories";
+import { Icon } from "../components/icon";
export const GitHistoryPage = () => {
const { projectId, repoId } = useParams<{ projectId: string; repoId: string }>();
@@ -70,6 +71,7 @@ export const GitHistoryPage = () => {
Failed to load commit history
@@ -155,7 +157,7 @@ export const GitHistoryPage = () => {
Commit Details
diff --git a/apps/web/src/pages/git-repositories.tsx b/apps/web/src/pages/git-repositories.tsx
index 16720c4..45ddc80 100644
--- a/apps/web/src/pages/git-repositories.tsx
+++ b/apps/web/src/pages/git-repositories.tsx
@@ -10,6 +10,7 @@ import {
type URLParseResult,
} from "../api/git_repositories";
import type { GitRepository } from "../api/git_repositories";
+import { Icon } from "../components/icon";
type RepoStatus = "loading" | "ready" | "error";
type UrlValidationStatus = "idle" | "validating" | "valid" | "needs-parsing" | "invalid";
@@ -160,6 +161,7 @@ export const GitRepositoriesPage = () => {
Repositories
@@ -170,6 +172,7 @@ export const GitRepositoriesPage = () => {
Failed to load repositories
@@ -256,12 +259,14 @@ export const GitRepositoriesPage = () => {
Validating...
)}
{urlValidation.status === "valid" && (
-
✓ Valid git URL
+
+ Valid git URL
+
)}
{urlValidation.status === "needs-parsing" && urlValidation.result && (
- ⚠ This looks like a browser URL
+ This looks like a browser URL
@@ -279,7 +284,7 @@ export const GitRepositoriesPage = () => {
)}
{urlValidation.status === "invalid" && (
- ✗ Invalid URL
+ Invalid URL
)}
@@ -292,9 +297,11 @@ export const GitRepositoriesPage = () => {
)}
diff --git a/apps/web/src/pages/placeholder.tsx b/apps/web/src/pages/placeholder.tsx
index 6c55291..322fc26 100644
--- a/apps/web/src/pages/placeholder.tsx
+++ b/apps/web/src/pages/placeholder.tsx
@@ -18,6 +18,8 @@ export const NotFoundPage = () => {
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL ?? "http://localhost:8000";
+import { Icon } from "../components/icon";
+
export const LoginRedirectPage = () => {
const nextPath = new URLSearchParams(window.location.search).get("next") ?? "/";
const encodedNext = encodeURIComponent(nextPath);
@@ -27,6 +29,7 @@ export const LoginRedirectPage = () => {
Sign in required
You need to authenticate to access this section.
+
Continue to login
diff --git a/apps/web/src/pages/profile.tsx b/apps/web/src/pages/profile.tsx
index 183dc14..45d8718 100644
--- a/apps/web/src/pages/profile.tsx
+++ b/apps/web/src/pages/profile.tsx
@@ -1,6 +1,7 @@
import { useCallback, useEffect, useRef, useState } from "react";
import { getProfile, updateProfile, uploadAvatar } from "../api/profile";
+import { Icon } from "../components/icon";
import { useAuth } from "../state/auth";
import type { UserProfile } from "../api/profile";
@@ -99,6 +100,7 @@ export const ProfilePage = () => {
Failed to load profile
@@ -120,7 +122,17 @@ export const ProfilePage = () => {
onClick={() => fileInputRef.current?.click()}
type="button"
>
- {status === "saving" ? "Uploading..." : "Change Avatar"}
+ {status === "saving" ? (
+ <>
+
+ Uploading...
+ >
+ ) : (
+ <>
+
+ Change Avatar
+ >
+ )}
{
onClick={() => void handleSave()}
type="button"
>
- {status === "saving" ? "Saving..." : "Save Changes"}
+ {status === "saving" ? (
+ <>
+
+ Saving...
+ >
+ ) : (
+ <>
+
+ Save Changes
+ >
+ )}
diff --git a/apps/web/src/pages/projects.tsx b/apps/web/src/pages/projects.tsx
index 29c2ba2..91f278c 100644
--- a/apps/web/src/pages/projects.tsx
+++ b/apps/web/src/pages/projects.tsx
@@ -10,6 +10,7 @@ import {
type ProjectCreateInput,
type ProjectUpdateInput,
} from "../api/projects";
+import { Icon } from "../components/icon";
import type { Project } from "../types";
type ProjectsStatus = "loading" | "ready" | "error";
@@ -110,6 +111,7 @@ export const ProjectsPage = () => {
Projects
@@ -120,6 +122,7 @@ export const ProjectsPage = () => {
Failed to load projects
@@ -144,6 +147,7 @@ export const ProjectsPage = () => {
onClick={() => openEdit(project)}
type="button"
>
+
Edit
{deleteConfirmId === project.id ? (
@@ -154,6 +158,7 @@ export const ProjectsPage = () => {
onClick={() => void handleDelete(project.id)}
type="button"
>
+
Delete
@@ -170,6 +176,7 @@ export const ProjectsPage = () => {
onClick={() => setDeleteConfirmId(project.id)}
type="button"
>
+
Delete
)}
@@ -205,10 +212,21 @@ export const ProjectsPage = () => {
{formError &&
diff --git a/apps/web/src/pages/repo-workspace.tsx b/apps/web/src/pages/repo-workspace.tsx
index 898c1be..0e2f259 100644
--- a/apps/web/src/pages/repo-workspace.tsx
+++ b/apps/web/src/pages/repo-workspace.tsx
@@ -1,4 +1,5 @@
import { useCallback, useEffect, useState } from "react";
+import { Icon } from "../components/icon";
import { Link, useParams, useSearchParams } from "react-router-dom";
@@ -155,6 +156,7 @@ export const RepoWorkspace = () => {
onClick={() => void loadRepositories()}
type="button"
>
+