fixed the name change from gunbuilder to builder and added the TM for trademark

This commit is contained in:
2025-12-05 23:32:23 -05:00
parent fa710d35a1
commit be03424e26
13 changed files with 40 additions and 133 deletions
-93
View File
@@ -1,93 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="261566a2-3672-4898-b754-916bbdb2063b" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/next-env.d.ts" beforeDir="false" afterPath="$PROJECT_DIR$/next-env.d.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/tsconfig.json" beforeDir="false" afterPath="$PROJECT_DIR$/tsconfig.json" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 1
}</component>
<component name="ProjectId" id="361l08WqyxLtDro87xvcOWn3FhH" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;ModuleVcsDetector.initialDetectionPerformed&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252&quot;: &quot;true&quot;,
&quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;,
&quot;git-widget-placeholder&quot;: &quot;main&quot;,
&quot;ignore.virus.scanning.warn.message&quot;: &quot;true&quot;,
&quot;js.debugger.nextJs.config.created.client&quot;: &quot;true&quot;,
&quot;js.debugger.nextJs.config.created.server&quot;: &quot;true&quot;,
&quot;kotlin-language-version-configured&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;//wsl.localhost/Arch/home/don/code/shadow-gunbuilder-ai-proto&quot;,
&quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
&quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
&quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
&quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
&quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
}
}</component>
<component name="RunManager" selected="npm.Next.js: server-side">
<configuration name="Next.js: debug client-side" type="JavascriptDebugType" uri="http://localhost:3000/">
<method v="2" />
</configuration>
<configuration name="Next.js: server-side" type="js.build_tools.npm">
<package-json value="$PROJECT_DIR$/package.json" />
<command value="run" />
<scripts>
<script value="dev" />
</scripts>
<node-interpreter value="project" />
<envs />
<method v="2" />
</configuration>
</component>
<component name="SharedIndexes">
<attachedChunks>
<set>
<option value="bundled-jdk-9823dce3aa75-bf35d07a577b-intellij.indexing.shared.core-IU-252.27397.103" />
<option value="bundled-js-predefined-d6986cc7102b-3aa1da707db6-JavaScript-IU-252.27397.103" />
</set>
</attachedChunks>
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="261566a2-3672-4898-b754-916bbdb2063b" name="Changes" comment="" />
<created>1764181733358</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1764181733358</updated>
<workItem from="1764181734592" duration="78000" />
<workItem from="1764181824336" duration="9367000" />
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="github-copilot-workspace">
<instructionFileLocations>
<option value=".github/instructions" />
</instructionFileLocations>
<promptFileLocations>
<option value=".github/prompts" />
</promptFileLocations>
</component>
</project>
+6 -6
View File
@@ -11,7 +11,7 @@ This is an internal tool built for speed, clarity, and capability.
# 🚀 What This Admin UI Does
## Merchant Feeds
Path: `/gunbuilder/admin/merchants`
Path: `//admin/merchants`
A clean dashboard for all merchants feeding the system.
@@ -26,7 +26,7 @@ Purpose: keep the catalog alive, current, and trustworthy.
---
## Category Mapping
Path: `/gunbuilder/admin/category-mapping`
Path: `/builder/admin/category-mapping`
This is where raw merchant chaos gets cleaned up.
@@ -42,7 +42,7 @@ Once mapped, future imports classify parts automatically.
## Builder Integration
The admin UI powers the consumer-facing Builder at `/gunbuilder`.
The admin UI powers the consumer-facing Builder at `/builder`.
Today:
- Load compatible parts
@@ -80,13 +80,13 @@ pnpm install
Create `.env.local`:
NEXT_PUBLIC_API_BASE_URL=http://localhost:8080
NEXT_PUBLIC_ADMIN_BASE_PATH=/gunbuilder/admin
NEXT_PUBLIC_ADMIN_BASE_PATH=/builder/admin
## Start Dev Server
npm run dev
Then visit:
http://localhost:3000/gunbuilder/admin
http://localhost:3000/builder/admin
---
@@ -103,7 +103,7 @@ If CORS fails, the admin cannot communicate with the API.
# 🧭 Project Structure
app/
gunbuilder/
builder/
admin/
merchants/
category-mapping/
+1 -1
View File
@@ -1,4 +1,4 @@
// app/gunbuilder/[categoryId]/[partId]/data.ts
// app/builder/[categoryId]/[partId]/data.ts
// Simulated data functions - Replace these with API calls when ready
// Example: export async function getPricingHistory(partId: string) { ... }
+7 -7
View File
@@ -131,10 +131,10 @@ export default function PartDetailPage() {
<div className="mx-auto max-w-6xl px-4 py-6 lg:py-10">
<h1 className="text-2xl font-semibold mb-4">Category Not Found</h1>
<Link
href="/gunbuilder"
href="/builder"
className="text-amber-300 hover:text-amber-200 underline"
>
Return to Gunbuilder
Return to Builder
</Link>
</div>
</main>
@@ -147,14 +147,14 @@ export default function PartDetailPage() {
{/* Breadcrumbs */}
<nav className="mb-4 text-xs text-zinc-500">
<Link
href="/gunbuilder"
href="/builder"
className="hover:text-zinc-300 transition-colors"
>
Gunbuilder
Builder
</Link>
<span className="mx-1">/</span>
<Link
href={`/gunbuilder/${categoryId}`}
href={`/builder/${categoryId}`}
className="hover:text-zinc-300 transition-colors"
>
{category.name}
@@ -176,7 +176,7 @@ export default function PartDetailPage() {
{error ?? "We couldnt find this product."}
</p>
<Link
href={`/gunbuilder/${categoryId}`}
href={`/builder/${categoryId}`}
className="text-amber-300 hover:text-amber-200 underline text-sm"
>
Back to {category.name} parts
@@ -352,7 +352,7 @@ export default function PartDetailPage() {
<div className="space-y-2">
<Link
href={`/gunbuilder?select=${categoryId}:${product.id}`}
href={`/builder?select=${categoryId}:${product.id}`}
className="block w-full rounded-md bg-amber-400 text-black text-sm font-semibold text-center py-2.5 hover:bg-amber-300 transition-colors"
>
Add to Build
+6 -6
View File
@@ -163,7 +163,7 @@ export default function CategoryPage() {
...prev,
[categoryId]: partId,
}));
router.push("/gunbuilder");
router.push("/builder");
}
};
@@ -309,10 +309,10 @@ export default function CategoryPage() {
Category Not Found
</h1>
<Link
href="/gunbuilder"
href="/builder"
className="text-amber-300 hover:text-amber-200 underline"
>
Return to Gunbuilder
Return to Builder
</Link>
</div>
</div>
@@ -326,7 +326,7 @@ export default function CategoryPage() {
{/* Header */}
<header className="mb-6">
<Link
href="/gunbuilder"
href="/builder"
className="text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block"
>
Back to The Armory
@@ -670,7 +670,7 @@ export default function CategoryPage() {
</div>
<div className="mt-2 flex gap-2">
<Link
href={`/gunbuilder/${categoryId}/${part.id}`}
href={`/builder/${categoryId}/${part.id}`}
className="flex-1 rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-2 text-center text-xs font-medium text-zinc-300 transition-colors hover:border-zinc-600 hover:bg-zinc-700"
>
View Details
@@ -733,7 +733,7 @@ export default function CategoryPage() {
</div>
<div className="flex justify-end gap-2">
<Link
href={`/gunbuilder/${categoryId}/${part.id}`}
href={`/builder/${categoryId}/${part.id}`}
className="whitespace-nowrap rounded-md border border-zinc-700 bg-zinc-800/50 px-3 py-1.5 text-xs font-medium text-zinc-300 transition-colors hover:border-zinc-600 hover:bg-zinc-700"
>
View Details
+7 -7
View File
@@ -150,7 +150,7 @@ export default function BuildDetailsPage() {
useEffect(() => {
if (typeof window !== "undefined" && Object.keys(build).length > 0) {
const encoded = encodeBuildState(build);
const url = `${window.location.origin}/gunbuilder/build?build=${encoded}`;
const url = `${window.location.origin}/builder/build?build=${encoded}`;
setShareUrl(url);
}
}, [build]);
@@ -212,10 +212,10 @@ export default function BuildDetailsPage() {
You need to select at least one part to view your build.
</p>
<Link
href="/gunbuilder"
href="/builder"
className="inline-block rounded-md border border-amber-400/60 bg-amber-400/10 px-4 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 transition-colors"
>
Go to Gunbuilder
Go to Builder
</Link>
</div>
</div>
@@ -229,7 +229,7 @@ export default function BuildDetailsPage() {
{/* Header */}
<header className="mb-6">
<Link
href="/gunbuilder"
href="/builder"
className="text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block"
>
Back to The Armory
@@ -368,7 +368,7 @@ export default function BuildDetailsPage() {
</a>
)}
<Link
href={`/gunbuilder/${category.id}/${part.id}`}
href={`/builder/${category.id}/${part.id}`}
className="inline-flex items-center rounded-md border border-zinc-700 bg-zinc-900/50 px-4 py-2 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors"
>
View Details
@@ -398,7 +398,7 @@ export default function BuildDetailsPage() {
{/* Actions */}
<div className="mt-6 flex flex-col gap-3 sm:flex-row sm:justify-between">
<Link
href="/gunbuilder"
href="/builder"
className="rounded-md border border-zinc-700 bg-zinc-900/50 px-6 py-3 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors text-center"
>
Edit Build
@@ -408,7 +408,7 @@ export default function BuildDetailsPage() {
type="button"
onClick={() => {
localStorage.removeItem(STORAGE_KEY);
router.push("/gunbuilder");
router.push("/builder");
}}
className="rounded-md border border-zinc-700 bg-zinc-900/50 px-6 py-3 text-sm font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors"
>
+5 -5
View File
@@ -175,7 +175,7 @@ export default function GunbuilderPage() {
return updated;
});
router.replace("/gunbuilder", { scroll: false });
router.replace("/builder", { scroll: false });
}
}
}, [searchParams, router]);
@@ -223,7 +223,7 @@ export default function GunbuilderPage() {
const payload = JSON.stringify(build);
const encoded = window.btoa(payload);
const origin = window.location?.origin ?? "";
const url = `${origin}/gunbuilder/build?build=${encodeURIComponent(
const url = `${origin}/builder/build?build=${encodeURIComponent(
encoded,
)}`;
setShareUrl(url);
@@ -372,7 +372,7 @@ export default function GunbuilderPage() {
{/* Primary actions now live under the total */}
<div className="mt-2 flex flex-col items-stretch gap-2 sm:flex-row sm:flex-wrap">
<Link
href="/gunbuilder/build"
href="/builder/build"
className={`w-full sm:w-auto rounded-md border border-amber-400/60 bg-amber-400/10 px-3 py-2 text-sm font-medium text-amber-200 hover:bg-amber-400/15 text-center transition-colors ${
selectedParts.length === 0
? "opacity-40 cursor-not-allowed pointer-events-none"
@@ -598,7 +598,7 @@ export default function GunbuilderPage() {
{selectedPart && selectedPart.url ? (
<>
<Link
href={`/gunbuilder/${category.id}`}
href={`/builder/${category.id}`}
className="hidden md:inline-flex items-center justify-center rounded-md border border-zinc-700 bg-zinc-900/70 px-2 py-1 hover:bg-zinc-800 hover:border-zinc-600 transition-colors"
aria-label="Change part"
title="Change part"
@@ -618,7 +618,7 @@ export default function GunbuilderPage() {
</>
) : hasParts ? (
<Link
href={`/gunbuilder/${category.id}`}
href={`/builder/${category.id}`}
className="inline-flex rounded-md border border-zinc-700 bg-zinc-900/70 px-2.5 py-1 text-[0.7rem] font-medium text-zinc-200 hover:bg-zinc-800 hover:border-zinc-600 transition-colors"
onClick={() => {
// If you want to pre-select something later, you can handle here.
+1 -1
View File
@@ -15,7 +15,7 @@ export default function LoginPage() {
const [password, setPassword] = useState("");
const [error, setError] = useState<string | null>(null);
const next = searchParams.get("next") || "/gunbuilder";
const next = searchParams.get("next") || "/builder";
async function handleSubmit(e: FormEvent) {
e.preventDefault();
+2 -2
View File
@@ -12,10 +12,10 @@ export default function HomePage() {
bg-gradient-to-r from-amber-400 via-amber-200 to-amber-400
text-transparent uppercase bg-clip-text drop-shadow-[0_2px_6px_rgba(255,193,7,0.25)]"
>
Battl Builder
Battl Builder&trade;
</h1>
<p className="mt-3 text-sm md:text-base text-zinc-400">
Battl Builder is your command center for rifle builds. We surface live
Battl Builder&trade; is your command center for rifle builds. We surface live
parts and hard-use brands, giving you a mission-ready workbench to
design smarter, track cost, swap components, and save setups. No
fluff. Just clean, trustworthy data.
+1 -1
View File
@@ -16,7 +16,7 @@ export default function RegisterPage() {
const [password, setPassword] = useState("");
const [error, setError] = useState<string | null>(null);
const next = searchParams.get("next") || "/gunbuilder";
const next = searchParams.get("next") || "/builder";
async function handleSubmit(e: FormEvent) {
e.preventDefault();
+1 -1
View File
@@ -24,7 +24,7 @@ export function BuilderNav({ activeCategoryId }: BuilderNavProps) {
const currentCategory =
activeCategoryId ?? searchParams.get("category") ?? undefined;
const baseHref = "/gunbuilder";
const baseHref = "/builder";
const renderDropdown = (label: string, items: Category[]) => {
if (!items.length) return null;
+2 -2
View File
@@ -37,7 +37,7 @@ export function CategoryColumn({
<div className="w-full border border-zinc-700 rounded-md p-3 mb-2 flex items-center justify-between gap-3">
<p className="text-sm text-zinc-500">No part selected</p>
<Link
href={`/gunbuilder/${category.id}`}
href={`/builder/${category.id}`}
className="inline-flex items-center gap-2 rounded-md border border-zinc-700 bg-zinc-900/60 px-3 py-1.5 text-xs font-medium text-zinc-200 hover:bg-zinc-800 hover:border-zinc-500 transition-colors"
>
<svg
@@ -68,7 +68,7 @@ export function CategoryColumn({
</div>
{parts.length >= 1 && (
<Link
href={`/gunbuilder/${category.id}`}
href={`/builder/${category.id}`}
className="mt-2 w-full rounded-md border border-zinc-700 bg-zinc-900/50 px-3 py-2 text-xs font-medium text-zinc-300 hover:bg-zinc-800 hover:border-zinc-600 transition-colors text-center"
>
View All ({parts.length})
+1 -1
View File
@@ -42,7 +42,7 @@ export function TopNav() {
{/* Center: main nav (Builder / Admin) */}
<nav className="hidden items-center gap-4 md:flex">
<Link
href="/gunbuilder"
href="/builder"
className="text-xs font-medium text-zinc-300 hover:text-zinc-50 transition-colors"
>
Builder