fixed the name change from gunbuilder to builder and added the TM for trademark
This commit is contained in:
Generated
-93
@@ -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">{
|
|
||||||
"associatedIndex": 1
|
|
||||||
}</component>
|
|
||||||
<component name="ProjectId" id="361l08WqyxLtDro87xvcOWn3FhH" />
|
|
||||||
<component name="ProjectViewState">
|
|
||||||
<option name="hideEmptyMiddlePackages" value="true" />
|
|
||||||
<option name="showLibraryContents" value="true" />
|
|
||||||
</component>
|
|
||||||
<component name="PropertiesComponent">{
|
|
||||||
"keyToString": {
|
|
||||||
"ModuleVcsDetector.initialDetectionPerformed": "true",
|
|
||||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
|
||||||
"RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
|
|
||||||
"RunOnceActivity.git.unshallow": "true",
|
|
||||||
"git-widget-placeholder": "main",
|
|
||||||
"ignore.virus.scanning.warn.message": "true",
|
|
||||||
"js.debugger.nextJs.config.created.client": "true",
|
|
||||||
"js.debugger.nextJs.config.created.server": "true",
|
|
||||||
"kotlin-language-version-configured": "true",
|
|
||||||
"last_opened_file_path": "//wsl.localhost/Arch/home/don/code/shadow-gunbuilder-ai-proto",
|
|
||||||
"node.js.detected.package.eslint": "true",
|
|
||||||
"node.js.detected.package.tslint": "true",
|
|
||||||
"node.js.selected.package.eslint": "(autodetect)",
|
|
||||||
"node.js.selected.package.tslint": "(autodetect)",
|
|
||||||
"nodejs_package_manager_path": "npm",
|
|
||||||
"vue.rearranger.settings.migration": "true"
|
|
||||||
}
|
|
||||||
}</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>
|
|
||||||
@@ -11,7 +11,7 @@ This is an internal tool built for speed, clarity, and capability.
|
|||||||
# 🚀 What This Admin UI Does
|
# 🚀 What This Admin UI Does
|
||||||
|
|
||||||
## Merchant Feeds
|
## Merchant Feeds
|
||||||
Path: `/gunbuilder/admin/merchants`
|
Path: `//admin/merchants`
|
||||||
|
|
||||||
A clean dashboard for all merchants feeding the system.
|
A clean dashboard for all merchants feeding the system.
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ Purpose: keep the catalog alive, current, and trustworthy.
|
|||||||
---
|
---
|
||||||
|
|
||||||
## Category Mapping
|
## Category Mapping
|
||||||
Path: `/gunbuilder/admin/category-mapping`
|
Path: `/builder/admin/category-mapping`
|
||||||
|
|
||||||
This is where raw merchant chaos gets cleaned up.
|
This is where raw merchant chaos gets cleaned up.
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ Once mapped, future imports classify parts automatically.
|
|||||||
|
|
||||||
## Builder Integration
|
## Builder Integration
|
||||||
|
|
||||||
The admin UI powers the consumer-facing Builder at `/gunbuilder`.
|
The admin UI powers the consumer-facing Builder at `/builder`.
|
||||||
|
|
||||||
Today:
|
Today:
|
||||||
- Load compatible parts
|
- Load compatible parts
|
||||||
@@ -80,13 +80,13 @@ pnpm install
|
|||||||
Create `.env.local`:
|
Create `.env.local`:
|
||||||
|
|
||||||
NEXT_PUBLIC_API_BASE_URL=http://localhost:8080
|
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
|
## Start Dev Server
|
||||||
npm run dev
|
npm run dev
|
||||||
|
|
||||||
Then visit:
|
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
|
# 🧭 Project Structure
|
||||||
|
|
||||||
app/
|
app/
|
||||||
gunbuilder/
|
builder/
|
||||||
admin/
|
admin/
|
||||||
merchants/
|
merchants/
|
||||||
category-mapping/
|
category-mapping/
|
||||||
|
|||||||
@@ -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
|
// Simulated data functions - Replace these with API calls when ready
|
||||||
// Example: export async function getPricingHistory(partId: string) { ... }
|
// Example: export async function getPricingHistory(partId: string) { ... }
|
||||||
|
|||||||
@@ -131,10 +131,10 @@ export default function PartDetailPage() {
|
|||||||
<div className="mx-auto max-w-6xl px-4 py-6 lg:py-10">
|
<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>
|
<h1 className="text-2xl font-semibold mb-4">Category Not Found</h1>
|
||||||
<Link
|
<Link
|
||||||
href="/gunbuilder"
|
href="/builder"
|
||||||
className="text-amber-300 hover:text-amber-200 underline"
|
className="text-amber-300 hover:text-amber-200 underline"
|
||||||
>
|
>
|
||||||
Return to Gunbuilder
|
Return to Builder
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
@@ -147,14 +147,14 @@ export default function PartDetailPage() {
|
|||||||
{/* Breadcrumbs */}
|
{/* Breadcrumbs */}
|
||||||
<nav className="mb-4 text-xs text-zinc-500">
|
<nav className="mb-4 text-xs text-zinc-500">
|
||||||
<Link
|
<Link
|
||||||
href="/gunbuilder"
|
href="/builder"
|
||||||
className="hover:text-zinc-300 transition-colors"
|
className="hover:text-zinc-300 transition-colors"
|
||||||
>
|
>
|
||||||
Gunbuilder
|
Builder
|
||||||
</Link>
|
</Link>
|
||||||
<span className="mx-1">/</span>
|
<span className="mx-1">/</span>
|
||||||
<Link
|
<Link
|
||||||
href={`/gunbuilder/${categoryId}`}
|
href={`/builder/${categoryId}`}
|
||||||
className="hover:text-zinc-300 transition-colors"
|
className="hover:text-zinc-300 transition-colors"
|
||||||
>
|
>
|
||||||
{category.name}
|
{category.name}
|
||||||
@@ -176,7 +176,7 @@ export default function PartDetailPage() {
|
|||||||
{error ?? "We couldn’t find this product."}
|
{error ?? "We couldn’t find this product."}
|
||||||
</p>
|
</p>
|
||||||
<Link
|
<Link
|
||||||
href={`/gunbuilder/${categoryId}`}
|
href={`/builder/${categoryId}`}
|
||||||
className="text-amber-300 hover:text-amber-200 underline text-sm"
|
className="text-amber-300 hover:text-amber-200 underline text-sm"
|
||||||
>
|
>
|
||||||
Back to {category.name} parts
|
Back to {category.name} parts
|
||||||
@@ -352,7 +352,7 @@ export default function PartDetailPage() {
|
|||||||
|
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<Link
|
<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"
|
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
|
Add to Build
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ export default function CategoryPage() {
|
|||||||
...prev,
|
...prev,
|
||||||
[categoryId]: partId,
|
[categoryId]: partId,
|
||||||
}));
|
}));
|
||||||
router.push("/gunbuilder");
|
router.push("/builder");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -309,10 +309,10 @@ export default function CategoryPage() {
|
|||||||
Category Not Found
|
Category Not Found
|
||||||
</h1>
|
</h1>
|
||||||
<Link
|
<Link
|
||||||
href="/gunbuilder"
|
href="/builder"
|
||||||
className="text-amber-300 hover:text-amber-200 underline"
|
className="text-amber-300 hover:text-amber-200 underline"
|
||||||
>
|
>
|
||||||
Return to Gunbuilder
|
Return to Builder
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -326,7 +326,7 @@ export default function CategoryPage() {
|
|||||||
{/* Header */}
|
{/* Header */}
|
||||||
<header className="mb-6">
|
<header className="mb-6">
|
||||||
<Link
|
<Link
|
||||||
href="/gunbuilder"
|
href="/builder"
|
||||||
className="text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block"
|
className="text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block"
|
||||||
>
|
>
|
||||||
← Back to The Armory
|
← Back to The Armory
|
||||||
@@ -670,7 +670,7 @@ export default function CategoryPage() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="mt-2 flex gap-2">
|
<div className="mt-2 flex gap-2">
|
||||||
<Link
|
<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"
|
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
|
View Details
|
||||||
@@ -733,7 +733,7 @@ export default function CategoryPage() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="flex justify-end gap-2">
|
<div className="flex justify-end gap-2">
|
||||||
<Link
|
<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"
|
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
|
View Details
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ export default function BuildDetailsPage() {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (typeof window !== "undefined" && Object.keys(build).length > 0) {
|
if (typeof window !== "undefined" && Object.keys(build).length > 0) {
|
||||||
const encoded = encodeBuildState(build);
|
const encoded = encodeBuildState(build);
|
||||||
const url = `${window.location.origin}/gunbuilder/build?build=${encoded}`;
|
const url = `${window.location.origin}/builder/build?build=${encoded}`;
|
||||||
setShareUrl(url);
|
setShareUrl(url);
|
||||||
}
|
}
|
||||||
}, [build]);
|
}, [build]);
|
||||||
@@ -212,10 +212,10 @@ export default function BuildDetailsPage() {
|
|||||||
You need to select at least one part to view your build.
|
You need to select at least one part to view your build.
|
||||||
</p>
|
</p>
|
||||||
<Link
|
<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"
|
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>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -229,7 +229,7 @@ export default function BuildDetailsPage() {
|
|||||||
{/* Header */}
|
{/* Header */}
|
||||||
<header className="mb-6">
|
<header className="mb-6">
|
||||||
<Link
|
<Link
|
||||||
href="/gunbuilder"
|
href="/builder"
|
||||||
className="text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block"
|
className="text-xs text-zinc-400 hover:text-zinc-300 mb-4 inline-block"
|
||||||
>
|
>
|
||||||
← Back to The Armory
|
← Back to The Armory
|
||||||
@@ -368,7 +368,7 @@ export default function BuildDetailsPage() {
|
|||||||
</a>
|
</a>
|
||||||
)}
|
)}
|
||||||
<Link
|
<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"
|
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
|
View Details
|
||||||
@@ -398,7 +398,7 @@ export default function BuildDetailsPage() {
|
|||||||
{/* Actions */}
|
{/* Actions */}
|
||||||
<div className="mt-6 flex flex-col gap-3 sm:flex-row sm:justify-between">
|
<div className="mt-6 flex flex-col gap-3 sm:flex-row sm:justify-between">
|
||||||
<Link
|
<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"
|
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
|
Edit Build
|
||||||
@@ -408,7 +408,7 @@ export default function BuildDetailsPage() {
|
|||||||
type="button"
|
type="button"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
localStorage.removeItem(STORAGE_KEY);
|
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"
|
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"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ export default function GunbuilderPage() {
|
|||||||
return updated;
|
return updated;
|
||||||
});
|
});
|
||||||
|
|
||||||
router.replace("/gunbuilder", { scroll: false });
|
router.replace("/builder", { scroll: false });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [searchParams, router]);
|
}, [searchParams, router]);
|
||||||
@@ -223,7 +223,7 @@ export default function GunbuilderPage() {
|
|||||||
const payload = JSON.stringify(build);
|
const payload = JSON.stringify(build);
|
||||||
const encoded = window.btoa(payload);
|
const encoded = window.btoa(payload);
|
||||||
const origin = window.location?.origin ?? "";
|
const origin = window.location?.origin ?? "";
|
||||||
const url = `${origin}/gunbuilder/build?build=${encodeURIComponent(
|
const url = `${origin}/builder/build?build=${encodeURIComponent(
|
||||||
encoded,
|
encoded,
|
||||||
)}`;
|
)}`;
|
||||||
setShareUrl(url);
|
setShareUrl(url);
|
||||||
@@ -372,7 +372,7 @@ export default function GunbuilderPage() {
|
|||||||
{/* Primary actions now live under the total */}
|
{/* Primary actions now live under the total */}
|
||||||
<div className="mt-2 flex flex-col items-stretch gap-2 sm:flex-row sm:flex-wrap">
|
<div className="mt-2 flex flex-col items-stretch gap-2 sm:flex-row sm:flex-wrap">
|
||||||
<Link
|
<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 ${
|
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
|
selectedParts.length === 0
|
||||||
? "opacity-40 cursor-not-allowed pointer-events-none"
|
? "opacity-40 cursor-not-allowed pointer-events-none"
|
||||||
@@ -598,7 +598,7 @@ export default function GunbuilderPage() {
|
|||||||
{selectedPart && selectedPart.url ? (
|
{selectedPart && selectedPart.url ? (
|
||||||
<>
|
<>
|
||||||
<Link
|
<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"
|
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"
|
aria-label="Change part"
|
||||||
title="Change part"
|
title="Change part"
|
||||||
@@ -618,7 +618,7 @@ export default function GunbuilderPage() {
|
|||||||
</>
|
</>
|
||||||
) : hasParts ? (
|
) : hasParts ? (
|
||||||
<Link
|
<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"
|
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={() => {
|
onClick={() => {
|
||||||
// If you want to pre-select something later, you can handle here.
|
// If you want to pre-select something later, you can handle here.
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ export default function LoginPage() {
|
|||||||
const [password, setPassword] = useState("");
|
const [password, setPassword] = useState("");
|
||||||
const [error, setError] = useState<string | null>(null);
|
const [error, setError] = useState<string | null>(null);
|
||||||
|
|
||||||
const next = searchParams.get("next") || "/gunbuilder";
|
const next = searchParams.get("next") || "/builder";
|
||||||
|
|
||||||
async function handleSubmit(e: FormEvent) {
|
async function handleSubmit(e: FormEvent) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|||||||
+2
-2
@@ -12,10 +12,10 @@ export default function HomePage() {
|
|||||||
bg-gradient-to-r from-amber-400 via-amber-200 to-amber-400
|
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)]"
|
text-transparent uppercase bg-clip-text drop-shadow-[0_2px_6px_rgba(255,193,7,0.25)]"
|
||||||
>
|
>
|
||||||
Battl Builder
|
Battl Builder™
|
||||||
</h1>
|
</h1>
|
||||||
<p className="mt-3 text-sm md:text-base text-zinc-400">
|
<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™ is your command center for rifle builds. We surface live
|
||||||
parts and hard-use brands, giving you a mission-ready workbench to
|
parts and hard-use brands, giving you a mission-ready workbench to
|
||||||
design smarter, track cost, swap components, and save setups. No
|
design smarter, track cost, swap components, and save setups. No
|
||||||
fluff. Just clean, trustworthy data.
|
fluff. Just clean, trustworthy data.
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export default function RegisterPage() {
|
|||||||
const [password, setPassword] = useState("");
|
const [password, setPassword] = useState("");
|
||||||
const [error, setError] = useState<string | null>(null);
|
const [error, setError] = useState<string | null>(null);
|
||||||
|
|
||||||
const next = searchParams.get("next") || "/gunbuilder";
|
const next = searchParams.get("next") || "/builder";
|
||||||
|
|
||||||
async function handleSubmit(e: FormEvent) {
|
async function handleSubmit(e: FormEvent) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ export function BuilderNav({ activeCategoryId }: BuilderNavProps) {
|
|||||||
const currentCategory =
|
const currentCategory =
|
||||||
activeCategoryId ?? searchParams.get("category") ?? undefined;
|
activeCategoryId ?? searchParams.get("category") ?? undefined;
|
||||||
|
|
||||||
const baseHref = "/gunbuilder";
|
const baseHref = "/builder";
|
||||||
|
|
||||||
const renderDropdown = (label: string, items: Category[]) => {
|
const renderDropdown = (label: string, items: Category[]) => {
|
||||||
if (!items.length) return null;
|
if (!items.length) return null;
|
||||||
|
|||||||
@@ -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">
|
<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>
|
<p className="text-sm text-zinc-500">No part selected</p>
|
||||||
<Link
|
<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"
|
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
|
<svg
|
||||||
@@ -68,7 +68,7 @@ export function CategoryColumn({
|
|||||||
</div>
|
</div>
|
||||||
{parts.length >= 1 && (
|
{parts.length >= 1 && (
|
||||||
<Link
|
<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"
|
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})
|
View All ({parts.length})
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ export function TopNav() {
|
|||||||
{/* Center: main nav (Builder / Admin) */}
|
{/* Center: main nav (Builder / Admin) */}
|
||||||
<nav className="hidden items-center gap-4 md:flex">
|
<nav className="hidden items-center gap-4 md:flex">
|
||||||
<Link
|
<Link
|
||||||
href="/gunbuilder"
|
href="/builder"
|
||||||
className="text-xs font-medium text-zinc-300 hover:text-zinc-50 transition-colors"
|
className="text-xs font-medium text-zinc-300 hover:text-zinc-50 transition-colors"
|
||||||
>
|
>
|
||||||
Builder
|
Builder
|
||||||
|
|||||||
Reference in New Issue
Block a user