Add Project Developer Guide
@@ -0,0 +1,192 @@
|
||||
# Battl Builder – Next.js Developer Guide
|
||||
|
||||
## 1. Project Overview
|
||||
This project is the front-end for **Battl Builder**, a PCPartPicker-style firearm builder.
|
||||
It is built with:
|
||||
- Next.js 14 (App Router)
|
||||
- TypeScript
|
||||
- TailwindCSS + DaisyUI
|
||||
- Server & Client Components
|
||||
- API integration with the Spring Boot backend
|
||||
|
||||
---
|
||||
|
||||
## 2. Folder Structure
|
||||
|
||||
```
|
||||
/app
|
||||
/builder
|
||||
/builds
|
||||
/category/[categoryId]/[pageId]
|
||||
layout.tsx
|
||||
globals.css
|
||||
|
||||
/components
|
||||
/builder
|
||||
/cards
|
||||
/nav
|
||||
/ui
|
||||
|
||||
/lib
|
||||
api.ts
|
||||
utils.ts
|
||||
types.ts
|
||||
|
||||
/context
|
||||
BuildContext.tsx
|
||||
```
|
||||
|
||||
### Key Pages
|
||||
| Page | Purpose |
|
||||
|------|----------|
|
||||
| `/builder` | Main rifle builder UI |
|
||||
| `/builds` | Social builds feed (placeholder) |
|
||||
| `/category/[categoryId]/[pageId]` | Single category product listing |
|
||||
|
||||
---
|
||||
|
||||
## 3. Data Fetching
|
||||
|
||||
### Loading products for builder UI
|
||||
Frontend calls:
|
||||
|
||||
```ts
|
||||
GET /api/gunbuilder/products?platform=AR-15&partRoles=optic
|
||||
```
|
||||
|
||||
Backend returns:
|
||||
- Product details
|
||||
- Offer data
|
||||
- Price ranges
|
||||
- Images
|
||||
- Part role
|
||||
- Slug
|
||||
|
||||
Mapped into UI-facing structures via:
|
||||
|
||||
```ts
|
||||
import { ProductSummary } from "@/lib/types";
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Category Mapping
|
||||
|
||||
The builder UI groups parts by category slug (e.g., `"optic"`).
|
||||
|
||||
Categories come from:
|
||||
- Hardcoded temporary map OR
|
||||
- API endpoint `/api/part-role-mappings/AR-15/map`
|
||||
|
||||
Example:
|
||||
|
||||
```ts
|
||||
{
|
||||
partRole: "OPTIC_LPVO",
|
||||
categorySlug: "optic"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. Build State Management
|
||||
|
||||
Stored in:
|
||||
|
||||
```
|
||||
/context/BuildContext.tsx
|
||||
```
|
||||
|
||||
Handles:
|
||||
- Selected parts
|
||||
- Total price calculation
|
||||
- Swapping parts
|
||||
- Clearing build
|
||||
|
||||
---
|
||||
|
||||
## 6. Styling
|
||||
|
||||
### TailwindCSS utilities
|
||||
- `uppercase`
|
||||
- `tracking-wide`
|
||||
- `font-bold`
|
||||
- `text-primary`
|
||||
|
||||
### DaisyUI components
|
||||
- Cards
|
||||
- Buttons
|
||||
- Badges
|
||||
- Alerts
|
||||
- Inputs
|
||||
|
||||
---
|
||||
|
||||
## 7. Running Locally
|
||||
|
||||
### Install dependencies
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
### Run Dev Server
|
||||
```
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### Environment Variables
|
||||
```
|
||||
NEXT_PUBLIC_API_BASE_URL=http://localhost:8080
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Adding New Builder Categories
|
||||
|
||||
1. Add category slug to the backend (`part_categories` table)
|
||||
2. Add mapping in `part_role_mappings`
|
||||
3. Add frontend label in:
|
||||
```
|
||||
/lib/categories.ts
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. Adding New Pages
|
||||
|
||||
```
|
||||
/app/new-page/page.tsx
|
||||
```
|
||||
|
||||
Use:
|
||||
|
||||
```tsx
|
||||
export default function Page() {
|
||||
return <div>My New Page</div>;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. Recommended Improvements (Future)
|
||||
|
||||
- SSR caching with `fetch({ next: { revalidate: 60 } })`
|
||||
- Replace hardcoded PART_ROLE → category mappings
|
||||
- Add OptimizedImage component wrapper
|
||||
- Client-side build validation (compatibility engine)
|
||||
|
||||
---
|
||||
|
||||
## 11. Deployment
|
||||
|
||||
Recommended:
|
||||
- Vercel (first-class support)
|
||||
- Cloudflare Pages (optional)
|
||||
|
||||
Environment variables must match backend deployment.
|
||||
|
||||
---
|
||||
|
||||
## 12. Summary
|
||||
|
||||
This guide should allow a developer to quickly onboard, understand structure, modify categories, extend the builder, and integrate with the backend services powering Battl Builder.
|
||||
Reference in New Issue
Block a user