refactor: rename Planarchy to CapaKraken (branding only)
User-facing rename across 20 files: - Layout title/meta: "CapaKraken — Resource & Capacity Planning" - Sidebar logo: "CapaKraken" with "RESOURCE & CAPACITY PLANNING" - Sign-in page: "CapaKraken Control Center", "Sign in to CapaKraken" - PWA manifest: name + short_name - PDF reports: footer text - Install prompt: "Install CapaKraken" - AI assistant system prompt - Webhooks test payload - Email subject lines - Tooltips, descriptions, empty states NOT changed (technical identifiers): - Package names (@planarchy/*) - Import paths - Database names - Docker container names - localStorage keys - Domain URLs - CLAUDE.md Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Planarchy — Resource Planning",
|
||||
"short_name": "Planarchy",
|
||||
"name": "CapaKraken — Resource & Capacity Planning",
|
||||
"short_name": "CapaKraken",
|
||||
"description": "Resource planning and project staffing for 3D production",
|
||||
"start_url": "/dashboard",
|
||||
"display": "standalone",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { PublicHolidayBatch } from "~/components/vacations/PublicHolidayBatch.js";
|
||||
import { EntitlementManager } from "~/components/vacations/EntitlementManager.js";
|
||||
|
||||
export const metadata = { title: "Vacation Management — plANARCHY" };
|
||||
export const metadata = { title: "Vacation Management — CapaKraken" };
|
||||
|
||||
export default function AdminVacationsPage() {
|
||||
return (
|
||||
|
||||
@@ -466,7 +466,7 @@ export function EstimatesClient() {
|
||||
No estimates yet
|
||||
</p>
|
||||
<p className="mt-2 text-sm text-gray-400 dark:text-gray-500">
|
||||
Start with the wizard to create a connected estimate from plANARCHY data.
|
||||
Start with the wizard to create a connected estimate from CapaKraken data.
|
||||
</p>
|
||||
</div>
|
||||
) : (
|
||||
|
||||
@@ -1001,7 +1001,7 @@ export function ResourcesClient() {
|
||||
sortField={sortField}
|
||||
sortDir={sortDir}
|
||||
onSort={toggle}
|
||||
tooltip="Unique employee identifier used across all plANARCHY records."
|
||||
tooltip="Unique employee identifier used across all CapaKraken records."
|
||||
/>
|
||||
);
|
||||
case "displayName":
|
||||
|
||||
@@ -9,9 +9,9 @@ export async function generateMetadata(
|
||||
try {
|
||||
const trpc = await createCaller();
|
||||
const resource = await trpc.resource.getById({ id });
|
||||
return { title: `${resource.displayName} — Resources | plANARCHY` };
|
||||
return { title: `${resource.displayName} — Resources | CapaKraken` };
|
||||
} catch {
|
||||
return { title: "Resource — plANARCHY" };
|
||||
return { title: "Resource — CapaKraken" };
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { MyVacationsClient } from "~/components/vacations/MyVacationsClient.js";
|
||||
|
||||
export const metadata = { title: "My Vacations — plANARCHY" };
|
||||
export const metadata = { title: "My Vacations — CapaKraken" };
|
||||
|
||||
export default function MyVacationsPage() {
|
||||
return <MyVacationsClient />;
|
||||
|
||||
@@ -37,7 +37,7 @@ export default function SignInPage() {
|
||||
<div className="hidden rounded-[2rem] border border-white/70 bg-white/75 p-10 shadow-2xl backdrop-blur lg:flex lg:flex-col lg:justify-between dark:border-slate-800 dark:bg-slate-950/60">
|
||||
<div>
|
||||
<span className="inline-flex rounded-full border border-brand-200 bg-brand-50 px-3 py-1 text-[11px] font-semibold uppercase tracking-[0.18em] text-brand-700 dark:border-brand-900/50 dark:bg-brand-900/20 dark:text-brand-300">
|
||||
plANARCHY Control Center
|
||||
CapaKraken Control Center
|
||||
</span>
|
||||
<h1 className="mt-6 font-display text-5xl font-semibold leading-tight text-gray-900 dark:text-gray-50">
|
||||
Resource planning that stays readable under pressure.
|
||||
@@ -66,7 +66,7 @@ export default function SignInPage() {
|
||||
<div className="app-surface-strong p-8">
|
||||
<div className="mb-8">
|
||||
<p className="text-xs font-semibold uppercase tracking-[0.18em] text-brand-600">Welcome Back</p>
|
||||
<h2 className="mt-3 font-display text-4xl font-semibold text-gray-900 dark:text-gray-50">Sign in to plANARCHY</h2>
|
||||
<h2 className="mt-3 font-display text-4xl font-semibold text-gray-900 dark:text-gray-50">Sign in to CapaKraken</h2>
|
||||
<p className="mt-2 text-sm text-gray-500">Resource Planning, staffing, and forecasting.</p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -19,23 +19,23 @@ const displayFont = Manrope({
|
||||
|
||||
export const metadata: Metadata = {
|
||||
metadataBase: new URL("https://planarchy.hartmut-noerenberg.com"),
|
||||
title: "plANARCHY — Resource Planning",
|
||||
title: "CapaKraken — Resource & Capacity Planning",
|
||||
description: "Interactive resource planning and project staffing tool",
|
||||
manifest: "/manifest.json",
|
||||
appleWebApp: {
|
||||
capable: true,
|
||||
statusBarStyle: "default",
|
||||
title: "Planarchy",
|
||||
title: "CapaKraken",
|
||||
},
|
||||
openGraph: {
|
||||
title: "plANARCHY — Resource Planning",
|
||||
title: "CapaKraken — Resource & Capacity Planning",
|
||||
description: "Estimates, staffing, chargeability, and timelines in one workspace.",
|
||||
images: [{ url: "/og-image.png", width: 1024, height: 1024, alt: "plANARCHY Logo" }],
|
||||
images: [{ url: "/og-image.png", width: 1024, height: 1024, alt: "CapaKraken Logo" }],
|
||||
type: "website",
|
||||
},
|
||||
twitter: {
|
||||
card: "summary_large_image",
|
||||
title: "plANARCHY — Resource Planning",
|
||||
title: "CapaKraken — Resource & Capacity Planning",
|
||||
description: "Estimates, staffing, chargeability, and timelines in one workspace.",
|
||||
images: ["/og-image.png"],
|
||||
},
|
||||
|
||||
@@ -176,7 +176,7 @@ export function WebhooksClient() {
|
||||
<div>
|
||||
<h1 className="text-2xl font-bold text-gray-900 dark:text-white">Webhooks</h1>
|
||||
<p className="mt-1 text-sm text-gray-500 dark:text-gray-400">
|
||||
Configure outbound webhooks to notify external services about events in Planarchy.
|
||||
Configure outbound webhooks to notify external services about events in CapaKraken.
|
||||
</p>
|
||||
</div>
|
||||
<button className={PRIMARY_BUTTON} onClick={openCreateModal}>
|
||||
|
||||
@@ -441,7 +441,7 @@ export function EstimateWizard({ onClose }: { onClose: () => void }) {
|
||||
<p className="text-xs font-semibold uppercase tracking-[0.24em] text-brand-600">Estimate Wizard</p>
|
||||
<h2 className="mt-2 text-2xl font-semibold text-gray-900">Create a connected estimate</h2>
|
||||
<p className="mt-1 text-sm text-gray-500">
|
||||
Rates, resource snapshots, and project linkage are pulled from existing plANARCHY data.
|
||||
Rates, resource snapshots, and project linkage are pulled from existing CapaKraken data.
|
||||
</p>
|
||||
</div>
|
||||
<button
|
||||
@@ -490,7 +490,7 @@ export function EstimateWizard({ onClose }: { onClose: () => void }) {
|
||||
<input value={name} onChange={(event) => setName(event.target.value)} className={INPUT_CLS} placeholder="CGI Breakdown Q2 2026" />
|
||||
</div>
|
||||
<div>
|
||||
<label className={LABEL_CLS}>Linked Project <InfoTooltip content="Link to an existing plANARCHY project. This enables automatic date-based phasing and planning handoff." /></label>
|
||||
<label className={LABEL_CLS}>Linked Project <InfoTooltip content="Link to an existing CapaKraken project. This enables automatic date-based phasing and planning handoff." /></label>
|
||||
<ProjectCombobox value={projectId} onChange={setProjectId} placeholder="Link to project" />
|
||||
</div>
|
||||
<div>
|
||||
@@ -640,7 +640,7 @@ export function EstimateWizard({ onClose }: { onClose: () => void }) {
|
||||
<div key={line.id} className="rounded-3xl border border-gray-100 p-4">
|
||||
<div className="grid gap-4 lg:grid-cols-2">
|
||||
<div>
|
||||
<label className={LABEL_CLS}>Resource <InfoTooltip content="Link to a live plANARCHY resource. Auto-fills rates, chapter, and role." /></label>
|
||||
<label className={LABEL_CLS}>Resource <InfoTooltip content="Link to a live CapaKraken resource. Auto-fills rates, chapter, and role." /></label>
|
||||
<ResourceCombobox value={line.resourceId} onChange={(resourceId) => applyResource(resourceId, line.id)} placeholder="Search resource" />
|
||||
</div>
|
||||
<div>
|
||||
|
||||
@@ -336,7 +336,7 @@ export function DemandLineEditor({
|
||||
|
||||
<div className="mb-4 grid gap-4 md:grid-cols-2">
|
||||
<label>
|
||||
<span className={LABEL_CLS}>Linked resource <InfoTooltip content="Link to a plANARCHY resource. Live-linked rates refresh automatically; manual overrides are persisted." /></span>
|
||||
<span className={LABEL_CLS}>Linked resource <InfoTooltip content="Link to a CapaKraken resource. Live-linked rates refresh automatically; manual overrides are persisted." /></span>
|
||||
<select
|
||||
className={INPUT_CLS}
|
||||
value={line.resourceId ?? ""}
|
||||
@@ -353,7 +353,7 @@ export function DemandLineEditor({
|
||||
<div className="rounded-2xl bg-gray-50 px-4 py-3">
|
||||
<p className="text-xs uppercase tracking-wide text-gray-400">Snapshot behavior</p>
|
||||
<p className="mt-1 text-sm text-gray-700">
|
||||
Linked resources refresh from live plANARCHY rates when a rate is set to live mode. Manual overrides are persisted on the demand line.
|
||||
Linked resources refresh from live CapaKraken rates when a rate is set to live mode. Manual overrides are persisted on the demand line.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -381,9 +381,9 @@ function SidebarContent({
|
||||
{!sidebarCollapsed && (
|
||||
<div className="overflow-hidden">
|
||||
<h1 className="font-display text-xl font-semibold text-gray-900 dark:text-gray-50">
|
||||
Pl<span className="text-brand-600">anarchy</span>
|
||||
Capa<span className="text-brand-600">Kraken</span>
|
||||
</h1>
|
||||
<p className="text-xs uppercase tracking-[0.18em] text-gray-500 dark:text-gray-400">Resource Planning</p>
|
||||
<p className="text-xs uppercase tracking-[0.18em] text-gray-500 dark:text-gray-400">Resource & Capacity Planning</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
@@ -852,7 +852,7 @@ export function AppShell({ children, userRole = "USER" }: { children: React.Reac
|
||||
<HamburgerIcon />
|
||||
</button>
|
||||
<span className="ml-3 font-display text-sm font-semibold text-gray-900 dark:text-gray-50">
|
||||
Pl<span className="text-brand-600">anarchy</span>
|
||||
Capa<span className="text-brand-600">Kraken</span>
|
||||
</span>
|
||||
</div>
|
||||
<PageTransition>{children}</PageTransition>
|
||||
|
||||
@@ -74,7 +74,7 @@ export function InstallPrompt() {
|
||||
</div>
|
||||
<div className="min-w-0 flex-1">
|
||||
<p className="text-sm font-medium text-gray-900 dark:text-gray-50">
|
||||
Install Planarchy
|
||||
Install CapaKraken
|
||||
</p>
|
||||
<p className="text-xs text-gray-500 dark:text-gray-400">
|
||||
Add to home screen for quick access
|
||||
|
||||
@@ -63,7 +63,7 @@ export function AllocationReport({ title, generatedAt, rows }: AllocationReportP
|
||||
))}
|
||||
</View>
|
||||
|
||||
<Text style={styles.footer}>plANARCHY · Confidential · {rows.length} allocations</Text>
|
||||
<Text style={styles.footer}>CapaKraken · Confidential · {rows.length} allocations</Text>
|
||||
</Page>
|
||||
</Document>
|
||||
);
|
||||
|
||||
@@ -169,7 +169,7 @@ export function SkillMatrixUpload({ resourceId, isOwner, onClose, onSuccess }: P
|
||||
|
||||
{preview.matchedRoleName && (
|
||||
<p className="text-xs text-gray-600">
|
||||
<span className="font-medium">Area of expertise</span> matched to plANARCHY role:{" "}
|
||||
<span className="font-medium">Area of expertise</span> matched to CapaKraken role:{" "}
|
||||
<span className="font-semibold text-brand-700">{preview.matchedRoleName}</span>
|
||||
</p>
|
||||
)}
|
||||
|
||||
@@ -75,7 +75,7 @@ export function StaffingPanel() {
|
||||
<div className="app-surface max-w-xl p-4">
|
||||
<p className="text-sm font-medium text-gray-900 dark:text-gray-100">How scoring works</p>
|
||||
<p className="mt-1 text-sm text-gray-500">
|
||||
plANARCHY blends skill fit, free capacity, cost, and current utilization. Add the must-have skills first, then narrow the date window to get cleaner results.
|
||||
CapaKraken blends skill fit, free capacity, cost, and current utilization. Add the must-have skills first, then narrow the date window to get cleaner results.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user